import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
+import java.util.Optional;
import java.util.function.Consumer;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest;
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
void doDelete(final YangInstanceIdentifier path) {
- throw new UnsupportedOperationException("Read-only snapshot");
+ throw new UnsupportedOperationException("doDelete");
}
@Override
void doMerge(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- throw new UnsupportedOperationException("Read-only snapshot");
+ throw new UnsupportedOperationException("doMerge");
}
@Override
void doWrite(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- throw new UnsupportedOperationException("Read-only snapshot");
+ throw new UnsupportedOperationException("doWrite");
}
@Override
CommitLocalTransactionRequest commitRequest(final boolean coordinated) {
- throw new UnsupportedOperationException("Read-only snapshot");
- }
-
- @Override
- void doSeal() {
- // No-op
+ throw new UnsupportedOperationException("commitRequest");
}
@Override
- void flushState(final AbstractProxyTransaction successor) {
+ Optional<ModifyTransactionRequest> flushState() {
// No-op
+ return Optional.empty();
}
@Override
- void applyModifyTransactionRequest(final ModifyTransactionRequest request,
+ void applyForwardedModifyTransactionRequest(final ModifyTransactionRequest request,
final Consumer<Response<?, ?>> callback) {
- commonModifyTransactionRequest(request, callback);
+ commonModifyTransactionRequest(request);
abort();
}
@Override
void replayModifyTransactionRequest(final ModifyTransactionRequest request,
final Consumer<Response<?, ?>> callback, final long enqueuedTicks) {
- commonModifyTransactionRequest(request, callback);
- // FIXME: this should go through the enqueueRequest() path
- abort();
+ commonModifyTransactionRequest(request);
+ enqueueAbort(callback, enqueuedTicks);
}
- private static void commonModifyTransactionRequest(final ModifyTransactionRequest request,
- final Consumer<Response<?, ?>> callback) {
+ private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) {
Verify.verify(request.getModifications().isEmpty());
final PersistenceProtocol protocol = request.getPersistenceProtocol().get();