1人、Stormソースコードを読んでみよう(No.3
こんにちは。
なんか1年以上忘れ去っていましたが、
最近StormのClojureコードを読むことが増えてきましたので、とりあえずゆるゆると再開してみます。
1.まず重要なのはClojureのコードです
これはStormを扱う上でいうまでもない内容になりますね。
・・・なんですが、私Clojureについて別に詳しいわけでもないんですよね(汗
なので、このソースコードリーディングは一部Clojureの勉強も兼ねて進んでいく形になります。
そのため、そのあたりはご了承ください。
2.Clojureファイル一覧
とりあえずClojureのファイル一覧を挙げてみると下記のようになりました。
全44ファイル。単にファイルだけ見てみると案外少ないような気もします。
名前を見ると実際何を示しているファイルか大体わかりますが、まぁそれは読んだ結果マッピングしていくということで。
storm-0.8.2/src/clj ├─backtype │ └─storm │ │ bootstrap.clj │ │ clojure.clj │ │ cluster.clj │ │ config.clj │ │ disruptor.clj │ │ event.clj │ │ LocalCluster.clj │ │ LocalDRPC.clj │ │ log.clj │ │ process_simulator.clj │ │ stats.clj │ │ testing.clj │ │ testing4j.clj │ │ thrift.clj │ │ timer.clj │ │ tuple.clj │ │ util.clj │ │ zookeeper.clj │ │ │ ├─command // Stormに対してコマンドを実行する際のクラス群 │ │ activate.clj // activateコマンドの処理 │ │ config_value.clj │ │ deactivate.clj │ │ dev_zookeeper.clj │ │ kill_topology.clj │ │ list.clj │ │ rebalance.clj │ │ shell_submission.clj │ │ │ ├─daemon │ │ acker.clj │ │ common.clj │ │ drpc.clj │ │ executor.clj │ │ nimbus.clj │ │ supervisor.clj │ │ task.clj │ │ worker.clj │ │ │ ├─messaging │ │ loader.clj │ │ local.clj │ │ protocol.clj │ │ zmq.clj │ │ │ ├─scheduler │ │ DefaultScheduler.clj │ │ EvenScheduler.clj │ │ IsolationScheduler.clj │ │ │ └─ui │ core.clj │ helpers.clj │ ├─storm │ └─trident │ testing.clj │ └─zilch mq.clj
3.コマンドを確認します
上記の中で一番わかりやすいのがcommandディレクトリの配下にあるソース群ですね。
見るからに1ソース1コマンドに対応しています。
なので、全部似たような構造だろう・・・ということで、activate.cljを見てみます。
- activate.clj
(ns backtype.storm.command.activate (:use [backtype.storm thrift log]) (:gen-class)) (defn -main [name] (with-configured-nimbus-connection nimbus (.activate nimbus name) (log-message "Activated topology: " name) ))
・・・これなら何とかなる気がしますね!
とりあえず読んで、コメントを追記した版を。
- activate.clj(コメント追記版)
(ns backtype.storm.command.activate // ネームスペース定義 (:use [backtype.storm thrift log]) // ネームスペース「backtype.storm」の「thrift」「log」を使用する宣言 (:gen-class)) // Javaクラス「backtype.storm.command.activate」を生成 (defn -main [name] // mainメソッド定義、nameを引数として受け取る (with-configured-nimbus-connection nimbus // thriftのマクロを呼び出し、「nimbus」に設定ファイルを読み込んでNimbusに接続したコネクション(Nimbus$Client)を設定 (.activate nimbus name) // nimbusのactivateメソッドをnameを引数として実行 (log-message "Activated topology: " name) // logのマクロを呼び出し、ログを出力 ))
とまぁ、こんな感じで動きを把握することができました。
これくらいだとClojureであっても特に苦労することなく読むことができますね。
4.この辺の情報をまとめ始めています
このあたりの毎回の投稿に埋もれてしまいそうな情報は下記のページにまとめ始めています。
まだ作成中ですが、興味がある方はどうぞ。
なお、トップページにもありますが、全体的な情報は書いていません。
とりあえず呟いた内容と、後はソースコードを読んでわかったことだけ。