*/
package org.opendaylight.netconf.mdsal.connector;
-import static com.google.common.base.Preconditions.checkState;
-
import com.google.common.util.concurrent.FluentFuture;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class TransactionProvider implements AutoCloseable {
+public final class TransactionProvider implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(TransactionProvider.class);
- private final DOMDataBroker dataBroker;
-
- private DOMDataTreeReadWriteTransaction candidateTransaction = null;
- private DOMDataTreeReadWriteTransaction runningTransaction = null;
private final List<DOMDataTreeReadWriteTransaction> allOpenReadWriteTransactions = new ArrayList<>();
private final DOMDataTransactionValidator transactionValidator;
-
+ private final DOMDataBroker dataBroker;
private final String netconfSessionIdForReporting;
- private static final String NO_TRANSACTION_FOUND_FOR_SESSION = "No candidateTransaction found for session ";
+ private DOMDataTreeReadWriteTransaction candidateTransaction = null;
+ private DOMDataTreeReadWriteTransaction runningTransaction = null;
public TransactionProvider(final DOMDataBroker dataBroker, final String netconfSessionIdForReporting) {
this.dataBroker = dataBroker;
@Override
public synchronized void close() {
- for (final DOMDataTreeReadWriteTransaction rwt : allOpenReadWriteTransactions) {
+ for (var rwt : allOpenReadWriteTransactions) {
rwt.cancel();
}
}
public synchronized DOMDataTreeReadWriteTransaction getOrCreateTransaction() {
- // FIXME: getCandidateTransaction() should be final in which case we will just talk to the field
- final var currentTransaction = getCandidateTransaction();
- if (currentTransaction.isPresent()) {
- return currentTransaction.orElseThrow();
+ if (candidateTransaction == null) {
+ candidateTransaction = dataBroker.newReadWriteTransaction();
+ allOpenReadWriteTransactions.add(candidateTransaction);
}
-
- candidateTransaction = dataBroker.newReadWriteTransaction();
- allOpenReadWriteTransactions.add(candidateTransaction);
return candidateTransaction;
}
ErrorType.PROTOCOL, ErrorTag.OPERATION_NOT_SUPPORTED, ErrorSeverity.ERROR);
}
- if (getCandidateTransaction().isEmpty()) {
+ if (candidateTransaction == null) {
// Validating empty transaction, just return true
LOG.debug("Validating empty candidate transaction for session {}", netconfSessionIdForReporting);
return;
}
public synchronized boolean commitTransaction() throws DocumentedException {
- if (getCandidateTransaction().isEmpty()) {
+ if (candidateTransaction == null) {
//making empty commit without prior opened transaction, just return true
LOG.debug("Making commit without open candidate transaction for session {}", netconfSessionIdForReporting);
return true;
public synchronized void abortTransaction() {
LOG.debug("Aborting current candidateTransaction");
- final Optional<DOMDataTreeReadWriteTransaction> otx = getCandidateTransaction();
- if (otx.isEmpty()) {
+ if (candidateTransaction == null) {
LOG.warn("discard-changes triggerd on an empty transaction for session: {}", netconfSessionIdForReporting);
return;
}
+
candidateTransaction.cancel();
allOpenReadWriteTransactions.remove(candidateTransaction);
candidateTransaction = null;
public synchronized void abortRunningTransaction(final DOMDataTreeReadWriteTransaction tx) {
LOG.debug("Aborting current running Transaction");
- checkState(runningTransaction != null, NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
+ if (runningTransaction == null) {
+ throw new IllegalStateException("No candidateTransaction found for session "
+ + netconfSessionIdForReporting);
+ }
tx.cancel();
allOpenReadWriteTransactions.remove(tx);
}