I see, so the container znode is a znode that gets deleted if it's empty and it ever had a child (cversion is greater than zero). It sounds good to me. Let's see what other people say.
Thanks Jordan! On Thu, Apr 9, 2015 at 10:20 AM, Jordan Zimmerman <jor...@jordanzimmerman.com> wrote: > This sounds great to me, but it sounds a lot like ZOOKEEPER-723. > > The problem with both ZOOKEEPER-723 and ZOOKEEPER-834 is that it overloads > the concept of EPHEMERAL. EPHEMERALs are tied to sessions. In the use cases > that I see, the parent node is always PERSISTENT - i.e. not tied to a > session. > > I haven't looked at the patch yet, but how do you handle the "first > child" problem? > > My solution applies only when a node is deleted. So, there is no need for a > first child check. When a node is deleted, iff it's parent has zero children > and is of type CONTAINER, then the parent is deleted and recursively up the > tree. > > -Jordan > > On April 9, 2015 at 12:15:33 PM, Michi Mutsuzaki (mi...@cs.stanford.edu) > wrote: > > Hi Jordan. > > This sounds great to me, but it sounds a lot like ZOOKEEPER-723. > Different people had different ideas there, but the original > description was: > > "rather than changing the semantics of ephemeral nodes, i propose > ephemeral parents: znodes that disappear when they have no more > children. this cleanup would happen automatically when the last child > is removed. an ephemeral parent is not tied to any particular session, > so even if the creator goes away, the ephemeral parent will remain as > long as there are children." > > I haven't looked at the patch yet, but how do you handle the "first > child" problem? Is the container znode created with a first child to > prevent getting deleted, or does the client rely on multi to create a > container and its children, or something else? > > > On Thu, Apr 9, 2015 at 8:00 AM, Jordan Zimmerman > <jor...@jordanzimmerman.com> wrote: >> BACKGROUND >> ============ >> A recurring problem for ZooKeeper users is garbage collection of parent >> nodes. Many recipes (e.g. locks, leaders, etc.) call for the creation of a >> parent node under which participants create sequential nodes. When the >> participant is done, it deletes its node. In practice, the ZooKeeper tree >> begins to fill up with orphaned parent nodes that are no longer needed. The >> ZooKeeper APIs don't provide a way to clean these. Over time, ZooKeeper can >> become unstable due to the number of these nodes. >> >> CURRENT SOLUTIONS >> =================== >> Apache Curator has a workaround solution for this by providing the Reaper >> class which runs in the background looking for orphaned parent nodes and >> deleting them. This isn't ideal and it would be better if ZooKeeper >> supported this directly. >> >> PROPOSAL >> ========= >> ZOOKEEPER-723 and ZOOKEEPER-834 have been proposed to allow EPHEMERAL >> nodes to contain child nodes. This is not optimum as EPHEMERALs are tied to >> a session and the general use case of parent nodes is for PERSISTENT nodes. >> This proposal adds a new node type, CONTAINER. A CONTAINER node is the same >> as a PERSISTENT node with the additional property that when its last child >> is deleted, it is deleted (and CONTAINER nodes recursively up the tree are >> deleted if empty). >> >> I have a first pass (untested) straw man proposal open for comment here: >> >> https://github.com/apache/zookeeper/pull/28 >> >> In order to have minimum impact on existing implementations, a container >> node is denoted by having an ephemeralOwner id of Long.MIN_VALUE. This is >> pretty hackish, but I think it's the most supportable without causing >> disruption. Also, a container behaves a "little bit" like an EPHEMERAL node >> so it isn't totally illogical. Alternatively, a new field could be added to >> STAT. >> >> I look forward to feedback on this. If people think it's worthwhile I'll >> open a Jira and work on a Production quality solution. If it's rejected, I'd >> appreciate discussion of an alternate as this is a real need in the ZK user >> community. >> >> -Jordan >> >>