LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier,
final DataTreeSnapshot snapshot) {
- super(parent, identifier);
+ super(parent, identifier, false);
this.snapshot = Preconditions.checkNotNull(snapshot);
}
+ LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) {
+ super(parent, identifier, true);
+ // It is an error to touch snapshot once we are DONE
+ this.snapshot = null;
+ }
+
@Override
boolean isSnapshotOnly() {
return true;
@Override
DataTreeSnapshot readOnlyView() {
- return snapshot;
+ return Preconditions.checkNotNull(snapshot, "Transaction %s is DONE", getIdentifier());
}
@Override
}
@Override
- void doSeal() {
+ void flushState(final AbstractProxyTransaction successor) {
// No-op
}
@Override
- void flushState(final AbstractProxyTransaction successor) {
- // No-op
+ void applyForwardedModifyTransactionRequest(final ModifyTransactionRequest request,
+ final Consumer<Response<?, ?>> callback) {
+ commonModifyTransactionRequest(request);
+ abort();
}
@Override
- void applyModifyTransactionRequest(final ModifyTransactionRequest request,
- final Consumer<Response<?, ?>> callback) {
+ void replayModifyTransactionRequest(final ModifyTransactionRequest request,
+ final Consumer<Response<?, ?>> callback, final long enqueuedTicks) {
+ commonModifyTransactionRequest(request);
+ enqueueAbort(callback, enqueuedTicks);
+ }
+
+ private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) {
Verify.verify(request.getModifications().isEmpty());
final PersistenceProtocol protocol = request.getPersistenceProtocol().get();
Verify.verify(protocol == PersistenceProtocol.ABORT);
- abort();
}
-
}