Bump odlparent to 5.0.0
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / databroker / actors / dds / LocalReadOnlyProxyTransaction.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.cluster.databroker.actors.dds;
9
10 import static com.google.common.base.Preconditions.checkNotNull;
11 import static com.google.common.base.Verify.verify;
12 import static java.util.Objects.requireNonNull;
13
14 import java.util.Optional;
15 import java.util.function.Consumer;
16 import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest;
17 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
18 import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol;
19 import org.opendaylight.controller.cluster.access.concepts.Response;
20 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
24
25 /**
26  * A read-only specialization of {@link LocalProxyTransaction}. This class is NOT thread-safe.
27  *
28  * @author Robert Varga
29  */
30 final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction {
31
32     private final DataTreeSnapshot snapshot;
33
34     LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier,
35         final DataTreeSnapshot snapshot) {
36         super(parent, identifier, false);
37         this.snapshot = requireNonNull(snapshot);
38     }
39
40     LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) {
41         super(parent, identifier, true);
42         // It is an error to touch snapshot once we are DONE
43         this.snapshot = null;
44     }
45
46     @Override
47     boolean isSnapshotOnly() {
48         return true;
49     }
50
51     @Override
52     DataTreeSnapshot readOnlyView() {
53         return checkNotNull(snapshot, "Transaction %s is DONE", getIdentifier());
54     }
55
56     @Override
57     void doDelete(final YangInstanceIdentifier path) {
58         throw new UnsupportedOperationException("doDelete");
59     }
60
61     @Override
62     void doMerge(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
63         throw new UnsupportedOperationException("doMerge");
64     }
65
66     @Override
67     void doWrite(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
68         throw new UnsupportedOperationException("doWrite");
69     }
70
71     @Override
72     CommitLocalTransactionRequest commitRequest(final boolean coordinated) {
73         throw new UnsupportedOperationException("commitRequest");
74     }
75
76     @Override
77     Optional<ModifyTransactionRequest> flushState() {
78         // No-op
79         return Optional.empty();
80     }
81
82     @Override
83     void applyForwardedModifyTransactionRequest(final ModifyTransactionRequest request,
84             final Consumer<Response<?, ?>> callback) {
85         commonModifyTransactionRequest(request);
86         abort();
87     }
88
89     @Override
90     void replayModifyTransactionRequest(final ModifyTransactionRequest request,
91             final Consumer<Response<?, ?>> callback, final long enqueuedTicks) {
92         commonModifyTransactionRequest(request);
93         enqueueAbort(callback, enqueuedTicks);
94     }
95
96     private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) {
97         verify(request.getModifications().isEmpty());
98
99         final PersistenceProtocol protocol = request.getPersistenceProtocol().get();
100         verify(protocol == PersistenceProtocol.ABORT);
101     }
102 }