BUG-5280: add FrontendMetadata
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / AbstractShardDataTreeTransaction.java
1 /*
2  * Copyright (c) 2015 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.datastore;
9
10 import com.google.common.base.MoreObjects;
11 import com.google.common.base.Preconditions;
12 import javax.annotation.concurrent.NotThreadSafe;
13 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
14 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
15
16 /**
17  * Abstract base for transactions running on SharrdDataTree.
18  *
19  * @param <T> Backing transaction type.
20  */
21 @NotThreadSafe
22 abstract class AbstractShardDataTreeTransaction<T extends DataTreeSnapshot> {
23     private final T snapshot;
24     private final TransactionIdentifier id;
25     private boolean closed;
26
27     protected AbstractShardDataTreeTransaction(final TransactionIdentifier id, final T snapshot) {
28         this.snapshot = Preconditions.checkNotNull(snapshot);
29         this.id = Preconditions.checkNotNull(id);
30     }
31
32     final TransactionIdentifier getId() {
33         return id;
34     }
35
36     final T getSnapshot() {
37         return snapshot;
38     }
39
40     final boolean isClosed() {
41         return closed;
42     }
43
44     /**
45      * Close this transaction and mark it as closed, allowing idempotent invocations.
46      *
47      * @return True if the transaction got closed by this method invocation.
48      */
49     protected final boolean close() {
50         if (closed) {
51             return false;
52         }
53
54         closed = true;
55         return true;
56     }
57
58     @Override
59     public final String toString() {
60         return MoreObjects.toStringHelper(this).add("id", id).add("closed", closed).add("snapshot", snapshot).toString();
61     }
62
63     abstract void abort();
64 }