Hey Ben,

Perhaps you should open a JIRA for further discussion?

Thanks,
Jeff

On Mon, Mar 22, 2010 at 7:42 PM, Benjamin Reed <br...@yahoo-inc.com> wrote:

> let me put out an idea that we have kicked around for a while: ephemeral
> containers. the idea is that the znode disappears if it doesn't have
> children. you would create the znode with create("/path", data, acl,
> EPHEMERAL_CONTAINER) this would result in the creation two znodes: /path and
> /path/child. (we have to create it with a child otherwise it immediately
> disappears.)
>
> i think this mechanism would address your need in a way that is easy to
> implement and use. it would also allow you to do a cool barrier
> implementation!
>
> ben
>
>
> On 03/22/2010 10:37 AM, Patrick Hunt wrote:
>
>> Dominic Williams wrote:
>>
>>
>>> What I'd suggest might work:
>>> - when the session that created the parent ends, ownership of the parent
>>> could either be transferred to the owner/session that created the oldest
>>> child, or instead ownership could be transferred to some kind of nominal
>>> system session (which would delete the parent once the last ephemeral
>>> child
>>> disappeared)
>>>
>>>
>> There may be some issues with idempotency here, also it could require
>> extensive locking which drives up operation latencies (essentially
>> "recursive delete"). It sounds possible, but someone would have to take
>> a closer look as to the technical challenges involved.
>>
>>
>> Our general philosophy is to keep things as simple as possible wrt api,
>> semantics, implementation, etc... Distributed communication is hard and
>> while we handle a lot of the issues for you it's still complex.
>> Following our philosophy generally makes the easy things simple and the
>> hard things possible, additionally it reduces the number of bugs that we
>> have in the implementation itself (both user and service code).
>>
>> I don't wish to discourage you as much as provide insight/background
>> into some of our decisions.
>>
>> Regards,
>>
>> Patrick
>>
>>
>>
>>> On 22 March 2010 16:44, Patrick Hunt<ph...@apache.org>  wrote:
>>>
>>>
>>>
>>>> Dominic Williams wrote:
>>>>
>>>>
>>>>
>>>>> 1/ If a node crashes or something else goes wrong, you leave behind
>>>>> persistent nodes. Over time these will grow and grow, rather like the
>>>>> old
>>>>> tmp folders used to fill with files under Windows
>>>>>
>>>>>
>>>>>
>>>> That's true. One either needs to use ephemerals or use persistent and
>>>> have
>>>> a "garbage collector" (implicit or explicit gc). In most cases it's
>>>> preferable to use the ephemeral.
>>>>
>>>>
>>>>  2/ Persistent nodes = nasty scalability *bottleneck* because you're
>>>>
>>>>
>>>>> actually
>>>>> having to write to disk somewhere.
>>>>>
>>>>>
>>>>>
>>>> This is not actually how ZK works. All znodes regardless of
>>>> persistent/ephemeral are written to disk persistently. Ephemeral nodes
>>>> are
>>>> tied to the session that created them. As long as the session is alive
>>>> the
>>>> ephemeral node is alive. Sessions themselves are persistently/reliably
>>>> stored by the ZK cluster. This allows the shutdown of the entire cluster
>>>> and
>>>> restart it, all sessions/ephemerals will be maintained. Sessions can
>>>> move
>>>> from server to server (if say network connectivity to server A fails, or
>>>> server A itself fails then the client will move to server B). The
>>>> session
>>>> and all ephemerals are maintained (well, as long as the client moves
>>>> withing
>>>> the expiration timeout value).
>>>>
>>>>
>>>>  To avoid this I'm actually thinking of writing locking system where you
>>>>
>>>>
>>>>> work
>>>>> out the existing chain not by enumerating sequential children, but by
>>>>> looking at the contents of each temporary lock node to see what it is
>>>>> waiting on. But... that's quite horrible. Was wondering whether there
>>>>> is
>>>>> some technical reason why you ephemeral nodes can't have children??
>>>>>
>>>>>
>>>>>
>>>> There are a few cases to think about.
>>>>
>>>> 1) obviously ephemeral nodes can't have persistent children, this just
>>>> doesn't make sense
>>>>
>>>> 2) ephemeral nodes have an owner - the session that created them. so it
>>>> would also not make sense (in my mind at least) to have an ephemeral
>>>> /foo
>>>> with another ephemeral /foo/bar with a different owner.
>>>>
>>>> 3) so you are left with "ephemerals can be a child of an ephemeral with
>>>> the
>>>> same owner".
>>>>
>>>> 4) there are also issues of order. in particular what is the "deletion
>>>> order" depth first or breadth first, etc...
>>>>
>>>> I believe the answer so far has been "we don't do this because it's
>>>> fairly
>>>> complicated and we haven't seen any use cases that require it." In the
>>>> cases
>>>> I've seen so far there was either a misunderstanding of how zk worked,
>>>> or a
>>>> simpler way available.
>>>>
>>>> Does that make sense? Thoughts?
>>>>
>>>> Patrick
>>>>
>>>>
>>>>
>>>
>>>
>>
>

Reply via email to