Your patches have been merged to master branch and they will be
shipped with 3.9.0.

Thank you
Enrico

Il giorno sab 10 giu 2023 alle ore 18:13 Kezhu Wang <kez...@gmail.com>
ha scritto:
>
> Hi all and committers,
>
> [ZOOKEEPER-4471][1] reported that `AddWatchMode.PERSISTENT` could be
> partially removed by `WatcherType.Data` or `WatcherType.Children`.
>
> [ZOOKEEPER-4472][2] proposed to add `WatcherType.Persistent` and
> `WatcherType.PersistentRecursive` to remove `AddWatchMode.PERSISTENT`
> and `AddWatchMode.PERSISTENT_RECURSIVE` respectively.
>
> [ZOOKEEPER-4466][3] rescues us from conflict among different watch
> types on the same path. So, clients can watch whatever paths in
> whatever modes. They will not ruin each other.
>
> On the other hand, [ZOOKEEPER-4472][2] complements the removing part
> of [ZOOKEEPER-4466][3]. If a client wants to remove a persistent
> watch, it will issue a `removeWatches` `WatcherType.Persistent`. This
> will not affect any other watcher types. Currently, clients have to
> resort to `WatcherType.Any` to remove them. This could potentially
> affect other ongoing watcher types.
>
> Ideally, ZOOKEEPER-4472 is independent of ZOOKEEPER-4471, but it would
> be hard to ship only ZOOKEEPER-4472 without a fix to ZOOKEEPER-4471.
> That will require particular attention to avoid trigger paths for
> ZOOKEEPER-4471. That is why I delayed it until now.
>
> I saw discussions about [cut release for 3.9][4]. I really hope we can
> merge [pr#1998][5] for ZOOKEEPER-4471 and [pr#2006][6] for
> ZOOKEEPER-4472 in 3.9.0. It would be impossible for us to merge
> ZOOKEEPER-4472 to patch versions of 3.9 series as it touches both
> server logic and api side while ZOOKEEPER-4466 is shipped into 3.9. It
> looks weird if we support different watcher types one same path in
> watching but not all of them in removing. That is why I hope we can
> ship them along with ZOOKEEPER-4466 in 3.9.0.
>
> I plan to reply with a short message about this possibility in the
> release discussion thread to ref back this mail. Hope it won't bore
> you in there or here.
>
> Anyway, please take your time to review pr#1998 and pr#2006 no matter
> whether they will be included in 3.9.0.
>
> Last, if you are curious how ZOOKEEPER-4472 could affect a real
> program. You can take a look at [try_remove_watcher][7] and
> [dispatch_path_event][8] in [zookeeper-rust-client][9]. The
> `try_remove_watcher` ignores dropping of persistent watches if there
> are other watches remaining. But this will leak persistent watches on
> the server side. `dispatch_path_event` handles this, it will issue
> `removeWatches` with `WatcherType.Any` if it receives events to a path
> with no watchers. For no persistent watches, the client will issue
> corresponding `WatcherType`s if there are more watchers with them. But
> it can't do the same for persistent watches due to leak of
> `WatcherType.Persistent` and `WatcherType.PersistentRecursive`. Hope
> this convinces you of  ZOOKEEPER-4472.
>
> [1]: https://issues.apache.org/jira/browse/ZOOKEEPER-4471
> [2]: https://issues.apache.org/jira/browse/ZOOKEEPER-4472
> [3]: https://issues.apache.org/jira/browse/ZOOKEEPER-4466
> [4]: https://lists.apache.org/thread/dgnt1xnlf5n9tzt7m4otbodg2qdx3fz4
> [5]: https://github.com/apache/zookeeper/pull/1998
> [6]: https://github.com/apache/zookeeper/pull/2006
> [7]: 
> https://github.com/kezhuw/zookeeper-client-rust/blob/7466e867fb1b229d6b6ffb230e2e682c49ff494e/src/session/watch.rs#L368-L388
> [8]: 
> https://github.com/kezhuw/zookeeper-client-rust/blob/7466e867fb1b229d6b6ffb230e2e682c49ff494e/src/session/watch.rs#L341-L366
> [9]: https://github.com/kezhuw/zookeeper-client-rust
>
> Best,
> Kezhu Wang

Reply via email to