import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import java.util.AbstractMap.SimpleEntry;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.concurrent.NotThreadSafe;
+import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
+import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener;
import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
public class ShardDataTree extends ShardDataTreeTransactionParent {
private static final Logger LOG = LoggerFactory.getLogger(ShardDataTree.class);
- private final Map<String, ShardDataTreeTransactionChain> transactionChains = new HashMap<>();
+ private final Map<LocalHistoryIdentifier, ShardDataTreeTransactionChain> transactionChains = new HashMap<>();
private final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher;
private final ShardDataChangeListenerPublisher dataChangeListenerPublisher;
private final TipProducingDataTree dataTree;
final ShardDataChangeListenerPublisher dataChangeListenerPublisher, final String logContext) {
dataTree = InMemoryDataTreeFactory.getInstance().create(treeType);
updateSchemaContext(schemaContext);
- this.treeChangeListenerPublisher = treeChangeListenerPublisher;
- this.dataChangeListenerPublisher = dataChangeListenerPublisher;
- this.logContext = logContext;
+
+ this.treeChangeListenerPublisher = Preconditions.checkNotNull(treeChangeListenerPublisher);
+ this.dataChangeListenerPublisher = Preconditions.checkNotNull(dataChangeListenerPublisher);
+ this.logContext = Preconditions.checkNotNull(logContext);
}
public ShardDataTree(final SchemaContext schemaContext, final TreeType treeType) {
}
void updateSchemaContext(final SchemaContext schemaContext) {
- Preconditions.checkNotNull(schemaContext);
- this.schemaContext = schemaContext;
dataTree.setSchemaContext(schemaContext);
+ this.schemaContext = Preconditions.checkNotNull(schemaContext);
}
- private ShardDataTreeTransactionChain ensureTransactionChain(final String chainId) {
- ShardDataTreeTransactionChain chain = transactionChains.get(chainId);
+ private ShardDataTreeTransactionChain ensureTransactionChain(final LocalHistoryIdentifier localHistoryIdentifier) {
+ ShardDataTreeTransactionChain chain = transactionChains.get(localHistoryIdentifier);
if (chain == null) {
- chain = new ShardDataTreeTransactionChain(chainId, this);
- transactionChains.put(chainId, chain);
+ chain = new ShardDataTreeTransactionChain(localHistoryIdentifier, this);
+ transactionChains.put(localHistoryIdentifier, chain);
}
return chain;
}
- ReadOnlyShardDataTreeTransaction newReadOnlyTransaction(final String txId, final String chainId) {
- if (Strings.isNullOrEmpty(chainId)) {
+ ReadOnlyShardDataTreeTransaction newReadOnlyTransaction(final TransactionIdentifier txId) {
+ if (txId.getHistoryId().getHistoryId() == 0) {
return new ReadOnlyShardDataTreeTransaction(txId, dataTree.takeSnapshot());
}
- return ensureTransactionChain(chainId).newReadOnlyTransaction(txId);
+ return ensureTransactionChain(txId.getHistoryId()).newReadOnlyTransaction(txId);
}
- ReadWriteShardDataTreeTransaction newReadWriteTransaction(final String txId, final String chainId) {
- if (Strings.isNullOrEmpty(chainId)) {
+ ReadWriteShardDataTreeTransaction newReadWriteTransaction(final TransactionIdentifier txId) {
+ if (txId.getHistoryId().getHistoryId() == 0) {
return new ReadWriteShardDataTreeTransaction(ShardDataTree.this, txId, dataTree.takeSnapshot()
.newModification());
}
- return ensureTransactionChain(chainId).newReadWriteTransaction(txId);
+ return ensureTransactionChain(txId.getHistoryId()).newReadWriteTransaction(txId);
}
public void notifyListeners(final DataTreeCandidate candidate) {
dataChangeListenerPublisher.publishChanges(candidate, logContext);
}
- void notifyOfInitialData(DataChangeListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier,
- NormalizedNode<?, ?>>> listenerReg, Optional<DataTreeCandidate> currentState) {
-
- if(currentState.isPresent()) {
+ void notifyOfInitialData(final DataChangeListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier,
+ NormalizedNode<?, ?>>> listenerReg, final Optional<DataTreeCandidate> currentState) {
+ if (currentState.isPresent()) {
ShardDataChangeListenerPublisher localPublisher = dataChangeListenerPublisher.newInstance();
localPublisher.registerDataChangeListener(listenerReg.getPath(), listenerReg.getInstance(),
listenerReg.getScope());
void notifyOfInitialData(final YangInstanceIdentifier path, final DOMDataTreeChangeListener listener,
final Optional<DataTreeCandidate> currentState) {
- if(currentState.isPresent()) {
+ if (currentState.isPresent()) {
ShardDataTreeChangeListenerPublisher localPublisher = treeChangeListenerPublisher.newInstance();
localPublisher.registerTreeChangeListener(path, listener);
localPublisher.publishChanges(currentState.get(), logContext);
transactionChains.clear();
}
- void closeTransactionChain(final String transactionChainId) {
+ void closeTransactionChain(final LocalHistoryIdentifier transactionChainId) {
final ShardDataTreeTransactionChain chain = transactionChains.remove(transactionChainId);
if (chain != null) {
chain.close();
return new SimpleShardDataTreeCohort(this, snapshot, transaction.getId());
}
- public Optional<NormalizedNode<?, ?>> readNode(YangInstanceIdentifier path) {
+ public Optional<NormalizedNode<?, ?>> readNode(final YangInstanceIdentifier path) {
return dataTree.takeSnapshot().readNode(path);
}
}
// FIXME: This should be removed, it violates encapsulation
- public DataTreeCandidate commit(DataTreeModification modification) throws DataValidationFailedException {
+ public DataTreeCandidate commit(final DataTreeModification modification) throws DataValidationFailedException {
modification.ready();
dataTree.validate(modification);
DataTreeCandidateTip candidate = dataTree.prepare(modification);