Github user eolivelli commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/622#discussion_r217545459 --- Diff: src/java/main/org/apache/zookeeper/server/DataTree.java --- @@ -1057,22 +1065,49 @@ void killSession(long session, long zxid) { // so there is no need for synchronization. The list is not // changed here. Only create and delete change the list which // are again called from FinalRequestProcessor in sequence. - Set<String> list = ephemerals.remove(session); - if (list != null) { - for (String path : list) { - try { - deleteNode(path, zxid); - if (LOG.isDebugEnabled()) { - LOG - .debug("Deleting ephemeral node " + path - + " for session 0x" - + Long.toHexString(session)); - } - } catch (NoNodeException e) { - LOG.warn("Ignoring NoNodeException for path " + path - + " while removing ephemeral for dead session 0x" + killSession(session, zxid, ephemerals.remove(session), null); + } + + void killSession(long session, long zxid, Set<String> paths2DeleteLocal, + List<String> paths2DeleteInTxn) { + if (paths2DeleteInTxn != null) { + deleteNodes(session, zxid, paths2DeleteInTxn); + } + + if (paths2DeleteLocal == null) { + return; + } + + if (paths2DeleteInTxn != null) { --- End diff -- In case that paths2DeleteLocal is null we won't execute this block. Is it expected?
---