You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Hadriel Kaplan (JIRA)" <ji...@apache.org> on 2016/12/18 18:05:58 UTC

[jira] [Created] (ZOOKEEPER-2648) Container node never gets deleted if it never had children

Hadriel Kaplan created ZOOKEEPER-2648:
-----------------------------------------

             Summary: Container node never gets deleted if it never had children
                 Key: ZOOKEEPER-2648
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2648
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.5.0
            Reporter: Hadriel Kaplan


If a client creates a Container node, but does not also create a child within that Container, the Container will never be deleted. This may seem like a bug in the client for not subsequently creating a child, but we can't assume the client remains connected, or that the client didn't just change its mind (due to some recipe being canceled, for example).

The bug is in ContainerManager.getCandidates(), which only considers a node a candidate if its Cversion > 0. The comments indicate this was done intentionally, to avoid a race condition whereby the Container was created right before a cleaning period, and would get cleaned up before the child could be created - so to avoid that the check is performed to verify the Cversion > 0.

Instead, I propose that if the Cversion is 0 but the Ctime is more than a checkIntervalMs old, then it be deleted. In other words, if the Container node has been around for a whole cleaning round already and no child has been  created since, then go ahead and clean it up.

I can provide a patch if others agree with such a change.







--
This message was sent by Atlassian JIRA
(v6.3.4#6332)