*/
package org.opendaylight.mdsal.dom.broker;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
+import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerBusyException;
import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
AtomicIntegerFieldUpdater.newUpdater(ShardedDOMDataTreeProducer.class, "closed");
private volatile int closed;
- private volatile ShardedDOMDataTreeListenerContext<?> attachedListener;
+ private volatile DOMDataTreeListener attachedListener;
private volatile ProducerLayout layout;
- private ShardedDOMDataTreeProducer(final ShardedDOMDataTree dataTree,
+ ShardedDOMDataTreeProducer(final ShardedDOMDataTree dataTree,
final Collection<DOMDataTreeIdentifier> subtrees,
final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
- this.dataTree = Preconditions.checkNotNull(dataTree);
+ this.dataTree = requireNonNull(dataTree);
this.subtrees = ImmutableSet.copyOf(subtrees);
this.layout = ProducerLayout.create(shardMap);
}
void subshardAdded(final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
checkIdle();
-
layout = layout.reshard(shardMap);
}
}
}
- @GuardedBy("this")
+ @Holding("this")
private void submitTransaction(final ShardedDOMDataTreeWriteTransaction tx) {
lastTx = tx;
tx.doSubmit(this::transactionSuccessful, this::transactionFailed);
}
@Override
+ @SuppressWarnings("checkstyle:hiddenField")
public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
checkNotClosed();
checkIdle();
if (CLOSED_UPDATER.compareAndSet(this, 0, 1)) {
synchronized (this) {
dataTree.destroyProducer(this);
+ layout.close();
}
}
}
private void transactionSuccessful(final ShardedDOMDataTreeWriteTransaction tx) {
LOG.debug("Transaction {} completed successfully", tx.getIdentifier());
- tx.onTransactionSuccess(null);
+ tx.onTransactionSuccess(CommitInfo.empty());
transactionCompleted(tx);
}
}
}
- void bindToListener(final ShardedDOMDataTreeListenerContext<?> listener) {
- Preconditions.checkNotNull(listener);
-
- final ShardedDOMDataTreeListenerContext<?> local = attachedListener;
- if (local != null) {
- throw new IllegalStateException(String.format("Producer %s is already attached to listener %s", this,
- local.getListener()));
- }
-
- this.attachedListener = listener;
+ void bindToListener(final DOMDataTreeListener listener) {
+ final DOMDataTreeListener local = attachedListener;
+ Preconditions.checkState(local == null, "Producer %s is already attached to listener %s", this, local);
+ this.attachedListener = requireNonNull(listener);
}
}