You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by eolivelli <gi...@git.apache.org> on 2018/09/13 22:00:54 UTC
[GitHub] zookeeper pull request #622: [ZOOKEEPER-3145] Fix potential watch missing is...
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?
---