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
>>
>>

Reply via email to