zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andor Molnar <an...@apache.org>
Subject Re: create or setData in transaction?
Date Wed, 14 Aug 2019 15:12:52 GMT
Hi Zili,

There’s no such functionality in ZooKeeper as far as I’m concerned. I think your multi
example (zk.multi(Op.check(path), Op.setData(path, data))) is already a usage pattern which
multi is not designed to support.

Why do you need to do this in “transactions” (there’s no transaction in ZK)?

In Java you can do:

try {
  zk.create();
} catch (NodeExistsException e) {
  // swallow exception
}
zk.setData();
…

Regards,
Andor




> On 2019. Aug 6., at 14:44, Zili Chen <wander4096@gmail.com> wrote:
> 
> Hi Enrico,
> 
> Thanks for your reply.
> 
>> In this case usually you use conditional setData, using the 'version' of
>> thr znode
> 
> 
> what if the caller has no idea on whether the node exist?(see also
> my if-else pseudo-code above.)
> 
> IIRC if we call `setData` on a non-exist path a NoNodeException
> will be thrown.
> Best,
> tison.
> 
> 
> Enrico Olivelli <eolivelli@gmail.com> 于2019年8月6日周二 下午8:27写道:
> 
>> Il mar 6 ago 2019, 13:47 Zili Chen <wander4096@gmail.com> ha scritto:
>> 
>>> Any ideas?
>>> 
>>> 
>>> Zili Chen <wander4096@gmail.com> 于2019年7月29日周一 上午11:12写道:
>>> 
>>>> Hi ZooKeepers,
>>>> 
>>>> Currently our transaction mechanism supports doing
>>>> create/setData/checkExist/delete in transaction. However, taking this
>>>> scenario into consideration, we want to put data in path "/path" but
>>>> don't know whether the znode exists or not. Let's say we program as
>>>> below
>>>> 
>>>> if (zk.exist(path)) {
>>>>  zk.setData(path, data);
>>>> } else {
>>>>  zk.create(path, data);
>>>> }
>>> 
>> 
>> Do you need to perform other ops in the same transaction?
>> In this case usually you use conditional setData, using the 'version' of
>> thr znode
>> 
>> 
>> Enrico
>> 
>>> 
>>>> if we want to do the check and "put" in transaction, it would be like
>>>> 
>>>> zk.multi(Op.check(path), Op.setData(path, data));
>>>> 
>>>> but we cannot add a "else" branch. ZooKeeper's transaction would all
>>>> success or fail.
>>>> 
>>>> Is there any way to do an "if-else" transaction?
>>>> 
>>>> Best,
>>>> tison.
>>>> 
>>> 
>> 


Mime
View raw message