*/
package org.opendaylight.controller.cluster.datastore;
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.RangeSet;
+import com.google.common.collect.TreeRangeSet;
+import com.google.common.primitives.UnsignedLong;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.SortedSet;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
-import org.opendaylight.controller.cluster.access.concepts.RequestException;
import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
private final LocalHistoryIdentifier identifier;
private final ShardDataTree tree;
- StandaloneFrontendHistory(final String persistenceId, final ClientIdentifier clientId, final ShardDataTree tree) {
- super(persistenceId);
+ private StandaloneFrontendHistory(final String persistenceId, final ClientIdentifier clientId,
+ final ShardDataTree tree, final Map<UnsignedLong, Boolean> closedTransactions,
+ final RangeSet<UnsignedLong> purgedTransactions) {
+ super(persistenceId, tree, closedTransactions, purgedTransactions);
this.identifier = new LocalHistoryIdentifier(clientId, 0);
- this.tree = Preconditions.checkNotNull(tree);
+ this.tree = requireNonNull(tree);
+ }
+
+ static @NonNull StandaloneFrontendHistory create(final String persistenceId, final ClientIdentifier clientId,
+ final ShardDataTree tree) {
+ return new StandaloneFrontendHistory(persistenceId, clientId, tree, ImmutableMap.of(),
+ TreeRangeSet.create());
+ }
+
+ static @NonNull StandaloneFrontendHistory recreate(final String persistenceId, final ClientIdentifier clientId,
+ final ShardDataTree tree, final Map<UnsignedLong, Boolean> closedTransactions,
+ final RangeSet<UnsignedLong> purgedTransactions) {
+ return new StandaloneFrontendHistory(persistenceId, clientId, tree, new HashMap<>(closedTransactions),
+ purgedTransactions);
}
@Override
}
@Override
- FrontendTransaction createOpenTransaction(final TransactionIdentifier id) throws RequestException {
- return FrontendTransaction.createOpen(this, tree.newReadWriteTransaction(id));
+ FrontendTransaction createOpenSnapshot(final TransactionIdentifier id) {
+ return FrontendReadOnlyTransaction.create(this, tree.newReadOnlyTransaction(id));
+ }
+
+ @Override
+ FrontendTransaction createOpenTransaction(final TransactionIdentifier id) {
+ return FrontendReadWriteTransaction.createOpen(this, tree.newReadWriteTransaction(id));
+ }
+
+ @Override
+ FrontendTransaction createReadyTransaction(final TransactionIdentifier id, final DataTreeModification mod) {
+ return FrontendReadWriteTransaction.createReady(this, id, mod);
}
@Override
- FrontendTransaction createReadyTransaction(final TransactionIdentifier id, final DataTreeModification mod)
- throws RequestException {
- return FrontendTransaction.createReady(this, id, mod);
+ ShardDataTreeCohort createFailedCohort(final TransactionIdentifier id, final DataTreeModification mod,
+ final Exception failure) {
+ return tree.createFailedCohort(id, mod, failure);
}
@Override
- ShardDataTreeCohort createReadyCohort(final TransactionIdentifier id, final DataTreeModification mod) {
- return tree.createReadyCohort(id, mod);
+ ShardDataTreeCohort createReadyCohort(final TransactionIdentifier id, final DataTreeModification mod,
+ final Optional<SortedSet<String>> participatingShardNames) {
+ return tree.createReadyCohort(id, mod, participatingShardNames);
}
}