/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.cluster.databroker.actors.dds; import com.google.common.base.Preconditions; import com.google.common.base.Verify; import com.google.common.util.concurrent.AbstractFuture; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import javax.annotation.concurrent.GuardedBy; /** * An {@link AbstractFuture} implementation which requires a certain number of votes before it completes. If all votes * are 'yes', then it completes with a pre-determined value. If any of the votes are 'no', the future completes with * an exception. This exception corresponds to the cause reported by the first 'no' vote, with all subsequent votes * added as suppressed exceptions. * *
* Implementation is geared toward positive votes. Negative votes have to synchronize and therefore are more likely
* to see contention.
*
* @author Robert Varga
*
* @param