X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FLocalFrontendHistory.java;h=d7c30121bf8a9323a362814ee7449870900acb84;hp=cd0cc30a09738e49915939cd967a0dc04df472c4;hb=8f18717f60e58eebf726fe0611859311fa83df44;hpb=5cb0787412ab63a3aa5dcc044511e1ce569662cf diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalFrontendHistory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalFrontendHistory.java index cd0cc30a09..d7c30121bf 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalFrontendHistory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalFrontendHistory.java @@ -8,15 +8,16 @@ package org.opendaylight.controller.cluster.datastore; import com.google.common.base.Preconditions; -import com.google.common.base.Ticker; -import org.opendaylight.controller.cluster.access.commands.DeadTransactionException; -import org.opendaylight.controller.cluster.access.commands.LocalHistorySuccess; +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 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; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** @@ -25,23 +26,27 @@ import org.slf4j.LoggerFactory; * @author Robert Varga */ final class LocalFrontendHistory extends AbstractFrontendHistory { - private enum State { - OPEN, - CLOSED, - } - - private static final Logger LOG = LoggerFactory.getLogger(LocalFrontendHistory.class); - private final ShardDataTreeTransactionChain chain; - private Long lastSeenTransaction; - private State state = State.OPEN; - - LocalFrontendHistory(final String persistenceId, final Ticker ticker, final ShardDataTreeTransactionChain chain) { - super(persistenceId, ticker); + private LocalFrontendHistory(final String persistenceId, final ShardDataTree tree, + final ShardDataTreeTransactionChain chain, final Map closedTransactions, + final RangeSet purgedTransactions) { + super(persistenceId, tree, closedTransactions, purgedTransactions); this.chain = Preconditions.checkNotNull(chain); } + static LocalFrontendHistory create(final String persistenceId, final ShardDataTree tree, + final ShardDataTreeTransactionChain chain) { + return new LocalFrontendHistory(persistenceId, tree, chain, ImmutableMap.of(), TreeRangeSet.create()); + } + + static LocalFrontendHistory recreate(final String persistenceId, final ShardDataTree tree, + final ShardDataTreeTransactionChain chain, final Map closedTransactions, + final RangeSet purgedTransactions) { + return new LocalFrontendHistory(persistenceId, tree, chain, new HashMap<>(closedTransactions), + TreeRangeSet.create(purgedTransactions)); + } + @Override public LocalHistoryIdentifier getIdentifier() { return chain.getIdentifier(); @@ -49,54 +54,28 @@ final class LocalFrontendHistory extends AbstractFrontendHistory { @Override FrontendTransaction createOpenSnapshot(final TransactionIdentifier id) throws RequestException { - checkDeadTransaction(id); - lastSeenTransaction = id.getTransactionId(); return FrontendReadOnlyTransaction.create(this, chain.newReadOnlyTransaction(id)); } @Override FrontendTransaction createOpenTransaction(final TransactionIdentifier id) throws RequestException { - checkDeadTransaction(id); - lastSeenTransaction = id.getTransactionId(); return FrontendReadWriteTransaction.createOpen(this, chain.newReadWriteTransaction(id)); } @Override FrontendTransaction createReadyTransaction(final TransactionIdentifier id, final DataTreeModification mod) throws RequestException { - checkDeadTransaction(id); - lastSeenTransaction = id.getTransactionId(); return FrontendReadWriteTransaction.createReady(this, id, mod); } @Override - ShardDataTreeCohort createReadyCohort(final TransactionIdentifier id, final DataTreeModification mod) { - return chain.createReadyCohort(id, mod); + ShardDataTreeCohort createFailedCohort(final TransactionIdentifier id, final DataTreeModification mod, + final Exception failure) { + return chain.createFailedCohort(id, mod, failure); } - LocalHistorySuccess destroy(final long sequence, final long now) throws RequestException { - if (state != State.CLOSED) { - LOG.debug("{}: closing history {}", persistenceId(), getIdentifier()); - - // FIXME: add any finalization as needed - state = State.CLOSED; - } - - // FIXME: record a DESTROY tombstone in the journal - return new LocalHistorySuccess(getIdentifier(), sequence); - } - - boolean isDestroyed() { - return state == State.CLOSED; - } - - private void checkDeadTransaction(final TransactionIdentifier id) throws RequestException { - // FIXME: check if this history is still open - // FIXME: check if the last transaction has been submitted - - // Transaction identifiers within a local history have to have increasing IDs - if (lastSeenTransaction != null && Long.compareUnsigned(lastSeenTransaction, id.getTransactionId()) >= 0) { - throw new DeadTransactionException(lastSeenTransaction); - } + @Override + ShardDataTreeCohort createReadyCohort(final TransactionIdentifier id, final DataTreeModification mod) { + return chain.createReadyCohort(id, mod); } }