2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.cluster.datastore;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.primitives.UnsignedLong;
13 import com.google.common.util.concurrent.FutureCallback;
14 import java.util.Optional;
15 import java.util.SortedSet;
16 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
17 import org.opendaylight.yangtools.yang.common.Empty;
18 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
19 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateTip;
20 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 final class ChainedCommitCohort extends ShardDataTreeCohort {
25 private static final Logger LOG = LoggerFactory.getLogger(ChainedCommitCohort.class);
26 private final ReadWriteShardDataTreeTransaction transaction;
27 private final ShardDataTreeTransactionChain chain;
28 private final ShardDataTreeCohort delegate;
30 ChainedCommitCohort(final ShardDataTreeTransactionChain chain, final ReadWriteShardDataTreeTransaction transaction,
31 final ShardDataTreeCohort delegate) {
32 this.transaction = requireNonNull(transaction);
33 this.delegate = requireNonNull(delegate);
34 this.chain = requireNonNull(chain);
38 public void commit(final FutureCallback<UnsignedLong> callback) {
39 delegate.commit(new FutureCallback<UnsignedLong>() {
41 public void onSuccess(final UnsignedLong result) {
42 chain.clearTransaction(transaction);
43 LOG.debug("Committed transaction {}", transaction);
44 callback.onSuccess(result);
48 public void onFailure(final Throwable failure) {
49 LOG.error("Transaction {} commit failed, cannot recover", transaction, failure);
50 callback.onFailure(failure);
56 TransactionIdentifier transactionId() {
57 return delegate.transactionId();
61 public void canCommit(final FutureCallback<Empty> callback) {
62 delegate.canCommit(callback);
66 public void preCommit(final FutureCallback<DataTreeCandidate> callback) {
67 delegate.preCommit(callback);
71 public void abort(final FutureCallback<Empty> callback) {
72 delegate.abort(callback);
76 DataTreeCandidateTip getCandidate() {
77 return delegate.getCandidate();
81 DataTreeModification getDataTreeModification() {
82 return delegate.getDataTreeModification();
86 public boolean isFailed() {
87 return delegate.isFailed();
91 public State getState() {
92 return delegate.getState();
96 Optional<SortedSet<String>> getParticipatingShardNames() {
97 return delegate.getParticipatingShardNames();