From: Tomas Cere Date: Thu, 12 Oct 2017 10:17:48 +0000 (+0000) Subject: Merge "BUG-9048 Fix actor crash when writing incorrect data" X-Git-Tag: release/oxygen~55 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=1cf7c291c406d759c55c5ed0b15d28b32926e312;p=netconf.git Merge "BUG-9048 Fix actor crash when writing incorrect data" --- 1cf7c291c406d759c55c5ed0b15d28b32926e312 diff --cc netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java index 08ca01bb96,ef5df778d6..a214dd4fc7 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java @@@ -49,27 -54,35 +55,35 @@@ class WriteAdapter @Override public void onFailure(@Nonnull final Throwable throwable) { - requester.tell(throwable, self); + requester.tell(new SubmitFailedReply(throwable), self); } - }); + }, MoreExecutors.directExecutor()); } + @SuppressWarnings("checkstyle:IllegalCatch") public void handle(final Object message, final ActorRef sender, final ActorContext context, final ActorRef self) { - if (message instanceof MergeRequest) { - final MergeRequest mergeRequest = (MergeRequest) message; - final NormalizedNodeMessage data = mergeRequest.getNormalizedNodeMessage(); - tx.merge(mergeRequest.getStore(), data.getIdentifier(), data.getNode()); - } else if (message instanceof PutRequest) { - final PutRequest putRequest = (PutRequest) message; - final NormalizedNodeMessage data = putRequest.getNormalizedNodeMessage(); - tx.put(putRequest.getStore(), data.getIdentifier(), data.getNode()); - } else if (message instanceof DeleteRequest) { - final DeleteRequest deleteRequest = (DeleteRequest) message; - tx.delete(deleteRequest.getStore(), deleteRequest.getPath()); - } else if (message instanceof CancelRequest) { - cancel(context, sender, self); - } else if (message instanceof SubmitRequest) { - submit(sender, self, context); + // we need to catch everything, since an unchecked exception can be thrown from the underlying parse. + // TODO Maybe we should store it and fail the submit immediately?. + try { + if (message instanceof MergeRequest) { + final MergeRequest mergeRequest = (MergeRequest) message; + final NormalizedNodeMessage data = mergeRequest.getNormalizedNodeMessage(); + tx.merge(mergeRequest.getStore(), data.getIdentifier(), data.getNode()); + } else if (message instanceof PutRequest) { + final PutRequest putRequest = (PutRequest) message; + final NormalizedNodeMessage data = putRequest.getNormalizedNodeMessage(); + tx.put(putRequest.getStore(), data.getIdentifier(), data.getNode()); + } else if (message instanceof DeleteRequest) { + final DeleteRequest deleteRequest = (DeleteRequest) message; + tx.delete(deleteRequest.getStore(), deleteRequest.getPath()); + } else if (message instanceof CancelRequest) { + cancel(context, sender, self); + } else if (message instanceof SubmitRequest) { + submit(sender, self, context); + } + + } catch (final RuntimeException exception) { + LOG.error("Write command has failed.", exception); } } }