From: Jakub Morvay Date: Thu, 14 Jan 2016 16:02:42 +0000 (+0100) Subject: Bug 4455 - Inconsistent COMMIT operation handling when no transactions are present X-Git-Tag: release/lithium-sr4~3 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f8983075abac0aef8ce4840cc1ed978f53f072ee;p=controller.git Bug 4455 - Inconsistent COMMIT operation handling when no transactions are present Return positive response for commit operation in config subsystem netconf northbound even if no candidate transaction is open for session. Port of: https://git.opendaylight.org/gerrit/#/c/32940/ Change-Id: Ia6ce2aa6ffdfafc47f69ae7315669f64b653c514 Signed-off-by: Jakub Morvay --- diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NoTransactionFoundException.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NoTransactionFoundException.java index 2724757eb9..e69de29bb2 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NoTransactionFoundException.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NoTransactionFoundException.java @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.netconf.confignetconfconnector.exception; - -import java.util.Collections; -import java.util.Map; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException; - -public class NoTransactionFoundException extends NetconfDocumentedException { - private static final long serialVersionUID = 1L; - - public NoTransactionFoundException(final String message, final ErrorType errorType, final ErrorTag errorTag, - final ErrorSeverity errorSeverity) { - this(message, errorType, errorTag, errorSeverity, Collections. emptyMap()); - } - - public NoTransactionFoundException(final String message, final ErrorType errorType, final ErrorTag errorTag, - final ErrorSeverity errorSeverity, final Map errorInfo){ - super(message,errorType,errorTag,errorSeverity,errorInfo); - } - -} diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java index 7655cb300d..b8290f6ef7 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -11,6 +11,7 @@ package org.opendaylight.controller.netconf.confignetconfconnector.transactions; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; import javax.management.InstanceNotFoundException; @@ -20,8 +21,6 @@ import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.api.jmx.CommitStatus; import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.util.ConfigTransactionClient; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException; -import org.opendaylight.controller.netconf.confignetconfconnector.exception.NoTransactionFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -125,12 +124,19 @@ public class TransactionProvider implements AutoCloseable { /** * Commit and notification send must be atomic */ - public synchronized CommitStatus commitTransaction() throws ValidationException, ConflictingVersionException, NoTransactionFoundException { + public CommitStatus commitTransaction() throws ValidationException, ConflictingVersionException { + return commitTransaction(configRegistryClient); + } + + /** + * Commit and notification send must be atomic + * @param configRegistryClient + */ + public synchronized CommitStatus commitTransaction(final ConfigRegistryClient configRegistryClient) throws ValidationException, ConflictingVersionException { if (!getTransaction().isPresent()){ - throw new NoTransactionFoundException("No transaction found for session " + netconfSessionIdForReporting, - NetconfDocumentedException.ErrorType.application, - NetconfDocumentedException.ErrorTag.operation_failed, - NetconfDocumentedException.ErrorSeverity.error); + //making empty commit without prior opened transaction, just return commit status with empty lists + LOG.debug("Making commit without open candidate transaction for session {}", netconfSessionIdForReporting); + return new CommitStatus(Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST); } final Optional maybeTaON = getTransaction(); ObjectName taON = maybeTaON.get();