Hi Erik,

Thanks a lot for the detailed reply. The links were really helpful.

Thanks,
Anirudh

On Sun, Jan 31, 2016 at 4:07 PM, Erik Weathers <
[email protected]> wrote:

> hey Anirudh,
>
> To decipher this code we need to first realize that the the `zk` in that
> code refers to CuratorFramework:
>
>    -
>
> https://github.com/apache/storm/blob/v0.10.0/storm-core/src/clj/backtype/storm/zookeeper.clj#L125
>
> Next we need to figure out the funny (.. ) syntax.  I happen to have tribal
> knowledge that this syntax is part of Clojure's java interop stuff, as
> documented here:
>
> http://clojure.org/reference/java_interop
> ------------------------------------------------
> *Clojure's docs on java interop:*
>
> (.. instance-expr member+)
> (.. Classname-symbol member+)
>
> member ⇒ fieldName-symbol or (instanceMethodName-symbol args*)
>
> Macro. Expands into a member access (.) of the first member on the first
> argument, followed by the next member on the result, etc. For instance:
>
> (.. System (getProperties) (get "os.name"))
>
> expands to:
>
> (. (. System (getProperties)) (get "os.name"))
>
> but is easier to write, read, and understand. See also the -> macro which
> can be used similarly:
>
> (→ (System/getProperties) (.get "os.name"))
> ------------------------------------------------
>
> Hence:
>
>    - (.. zk (getData) (forPath path))
>
> Expands to:
>
>    - (. (. zk (getData)) (forPath path))
>
> Which is basically (in Java syntax):
>
>    - zk.getData().forPath(path)
>
> And the other line:
>
>    -  (.. zk (getData) (watched) (forPath path))
>
> Basically means:
>
>    - zk.getData().watched().forPath(path)
>
> Here are those docs for these Apache Curator methods:
>
>    -
>
> https://curator.apache.org/apidocs/org/apache/curator/framework/CuratorFramework.html#getData--
>    -
>
> https://curator.apache.org/apidocs/org/apache/curator/framework/api/Watchable.html#watched--
>    -
>
> https://curator.apache.org/apidocs/org/apache/curator/framework/api/Pathable.html#forPath-java.lang.String-
>
> So when you call "watched" you are setting a "watcher" for the obtained
> data.  As for what the "watcher" *is*, it seems that it comes from the
> cluster.clj's wrapper code having created the CuratorFramework instance:
>
>    -
>
> https://github.com/apache/storm/blob/v0.10.0/storm-core/src/clj/backtype/storm/cluster.clj#L59-L70
>    -
>
> https://github.com/apache/storm/blob/v0.10.0/storm-core/src/clj/backtype/storm/zookeeper.clj#L48-L80
>    -
>
> https://github.com/apache/storm/blob/v0.10.0/storm-core/src/clj/backtype/storm/cluster.clj#L112-L114
>
> Note that there are callbacks registered via that initialization code, so
> the callbacks are invoked when a watch fires.
>
> - Erik
>
>
> On Sun, Jan 31, 2016 at 8:57 AM, Anirudh Jayakumar <
> [email protected]> wrote:
>
> > Hi,
> >
> > Could someone help me understand the difference between the below zk
> method
> > invocations?
> >
> > a. (.. zk (getData) (watched) (forPath path))
> > b. (.. zk (getData) (forPath path))))
> >
> > I want to understand the significance of "watched" method here.
> >
> > Thanks,
> > Anirudh
> >
>

Reply via email to