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%2FAbstractFrontendHistory.java;h=7c2ddb05b22ba07fba5503615c723b90d38681c4;hp=7ddad749d26552676a8057b40ca7526677bac130;hb=5cb0787412ab63a3aa5dcc044511e1ce569662cf;hpb=cd2a6fa0d8fa6281be28d3c7b9828ecf4e932811 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractFrontendHistory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractFrontendHistory.java index 7ddad749d2..7c2ddb05b2 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractFrontendHistory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractFrontendHistory.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; +import org.opendaylight.controller.cluster.access.commands.AbstractReadTransactionRequest; import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.OutOfOrderRequestException; import org.opendaylight.controller.cluster.access.commands.TransactionRequest; @@ -67,25 +68,39 @@ abstract class AbstractFrontendHistory implements Identifiable> replay = tx.replaySequence(request.getSequence()); - if (replay.isPresent()) { - return replay.get(); + final Optional> maybeReplay = tx.replaySequence(request.getSequence()); + if (maybeReplay.isPresent()) { + final TransactionSuccess replay = maybeReplay.get(); + LOG.debug("{}: envelope {} replaying response {}", persistenceId(), envelope, replay); + return replay; } } return tx.handleRequest(request, envelope, now); } + private FrontendTransaction createTransaction(final TransactionRequest request, final TransactionIdentifier id) + throws RequestException { + if (request instanceof CommitLocalTransactionRequest) { + LOG.debug("{}: allocating new ready transaction {}", persistenceId(), id); + return createReadyTransaction(id, ((CommitLocalTransactionRequest) request).getModification()); + } + if (request instanceof AbstractReadTransactionRequest) { + if (((AbstractReadTransactionRequest) request).isSnapshotOnly()) { + LOG.debug("{}: allocatint new open snapshot {}", persistenceId(), id); + return createOpenSnapshot(id); + } + } + + LOG.debug("{}: allocating new open transaction {}", persistenceId(), id); + return createOpenTransaction(id); + } + + abstract FrontendTransaction createOpenSnapshot(TransactionIdentifier id) throws RequestException; + abstract FrontendTransaction createOpenTransaction(TransactionIdentifier id) throws RequestException; abstract FrontendTransaction createReadyTransaction(TransactionIdentifier id, DataTreeModification mod)