[ https://issues.apache.org/jira/browse/ZOOKEEPER-2496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15522321#comment-15522321 ]
Cyrille Artho commented on ZOOKEEPER-2496: ------------------------------------------ For a unit test, yes, the check on whether the path returned by the exception (or rather, the return code indicating there was one) has to be checked by the callback handler. Our path for ZOOKEEPER-2496 from 2016-08-01 does not include a test for asynchronous multi. Such a test would be welcome. In ZooKeeper itself, it is of course preferable if the missing path info can be fixed in one place (same fix for sync and async). I have not checked the source in detail, but I would only fix this in two places (separate fix for sync and async) if there is no other way. Otherwise we have partial code duplication that may lead to future changes not being applied consistently in both cases. > When inside a transaction, some exceptions do not have path information set. > ---------------------------------------------------------------------------- > > Key: ZOOKEEPER-2496 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2496 > Project: ZooKeeper > Issue Type: Bug > Affects Versions: 3.4.8, 3.5.1 > Reporter: Kazuaki Banzai > Attachments: transactionException.patch > > > If a client tries to execute some illegal operations inside a transaction, > ZooKeeper throws an exception. > Some exceptions such as NodeExistsException should have a path to indicate > where the exception occurred. > ZooKeeper clients can get the path by calling method getPath. > However, this method returns null if the exception occurs inside a > transaction. > For example, when a client calls create /a and create /a in a transaction, > ZooKeeper throws NodeExistsException but getPath returns null. > In normal operation (outside transactions), the path information is set > correctly. > The patch only shows this bug occurs with NoNode exception and NodeExists > exception, > but this bug seems to occur with any exception which needs a path information: > When an error occurred in a transaction, ZooKeeper creates an ErrorResult > instance to represent error result. > However, the ErrorResult class doesn't have a field for a path where an error > occurred(See src/java/main/org/apache/zookeeper/OpResult.java for more > details). -- This message was sent by Atlassian JIRA (v6.3.4#6332)