From: Balaji Varadaraju Date: Thu, 30 Aug 2018 23:23:35 +0000 (-0500) Subject: NETCONF-553 : Stack traces need to suppressed and error messages should X-Git-Tag: release/neon~131^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a68e1b7f48a47e710a82d3e0309d312090795b88;p=netconf.git NETCONF-553 : Stack traces need to suppressed and error messages should be propagated for mounted devices Traversed entire error info to capture all error messages returned by the NETCONF device. Also suppressed the stack traces in the RESTCONF output. Change-Id: I9afc5948a9b48c12e649b9960d011870a4d9ee73 Signed-off-by: Balaji Varadaraju Signed-off-by: Jakub Morvay --- diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java index eb48fdbd96..835b0506ba 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java @@ -230,7 +230,7 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { public void onFailure(final Throwable throwable) { final NetconfDocumentedException exception = new NetconfDocumentedException( - id + ":RPC during tx returned an exception", + id + ":RPC during tx returned an exception" + throwable.getMessage(), new Exception(throwable), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, @@ -244,56 +244,59 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { private void extractResult(final List domRpcResults, final SettableFuture> transformed) { + DocumentedException.ErrorType errType = DocumentedException.ErrorType.APPLICATION; + DocumentedException.ErrorSeverity errSeverity = DocumentedException.ErrorSeverity.ERROR; + StringBuilder msgBuilder = new StringBuilder(); + boolean errorsEncouneterd = false; + String errorTag = "operation-failed"; + for (final DOMRpcResult domRpcResult : domRpcResults) { if (!domRpcResult.getErrors().isEmpty()) { + errorsEncouneterd = true; final RpcError error = domRpcResult.getErrors().iterator().next(); final RpcError.ErrorType errorType = error.getErrorType(); - final DocumentedException.ErrorType eType; switch (errorType) { case RPC: - eType = DocumentedException.ErrorType.RPC; + errType = DocumentedException.ErrorType.RPC; break; case PROTOCOL: - eType = DocumentedException.ErrorType.PROTOCOL; + errType = DocumentedException.ErrorType.PROTOCOL; break; case TRANSPORT: - eType = DocumentedException.ErrorType.TRANSPORT; + errType = DocumentedException.ErrorType.TRANSPORT; break; case APPLICATION: - eType = DocumentedException.ErrorType.APPLICATION; + errType = DocumentedException.ErrorType.APPLICATION; break; default: - eType = DocumentedException.ErrorType.APPLICATION; + errType = DocumentedException.ErrorType.APPLICATION; break; } final RpcError.ErrorSeverity severity = error.getSeverity(); - final DocumentedException.ErrorSeverity eSeverity; switch (severity) { case ERROR: - eSeverity = DocumentedException.ErrorSeverity.ERROR; + errSeverity = DocumentedException.ErrorSeverity.ERROR; break; case WARNING: - eSeverity = DocumentedException.ErrorSeverity.WARNING; + errSeverity = DocumentedException.ErrorSeverity.WARNING; break; default: - eSeverity = DocumentedException.ErrorSeverity.ERROR; + errSeverity = DocumentedException.ErrorSeverity.ERROR; break; } - final String message; - if (error.getMessage() == null || error.getMessage().isEmpty()) { - message = id + ":RPC during tx failed"; - } else { - message = error.getMessage(); - } - final NetconfDocumentedException exception = new NetconfDocumentedException(message, - eType, - DocumentedException.ErrorTag.from(error.getTag()), - eSeverity); - transformed.setException(exception); - return; + msgBuilder.append(error.getMessage()); + errorTag = error.getTag(); } } - + if (errorsEncouneterd) { + final NetconfDocumentedException exception = new NetconfDocumentedException(id + + ":RPC during tx failed. " + msgBuilder.toString(), + errType, + DocumentedException.ErrorTag.from(errorTag), + errSeverity); + transformed.setException(exception); + return; + } transformed.set(RpcResultBuilder.success().build()); } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfError.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfError.java index 590ddf3b5a..fcf350f0d8 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfError.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfError.java @@ -9,7 +9,6 @@ package org.opendaylight.restconf.common.errors; import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; import java.io.Serializable; import java.util.Locale; import org.opendaylight.yangtools.yang.common.RpcError; @@ -226,7 +225,7 @@ public class RestconfError implements Serializable { String localErrorInfo = null; if (rpcError.getInfo() == null) { if (rpcError.getCause() != null) { - localErrorInfo = Throwables.getStackTraceAsString(rpcError.getCause()); + localErrorInfo = rpcError.getCause().getMessage(); } else if (rpcError.getSeverity() != null) { localErrorInfo = "" + rpcError.getSeverity().toString().toLowerCase(Locale.ROOT) + "";