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