ひとりZooKeeperコードリーディング(0) 準備

特に頑張ろうとかではないのですが、ZooKeeperのソースを読み始めようかなと。ソースを落としてこようとしてEclipseを久しぶりに起動したらEGitだかのインストールでEclipseがだんまりを決め込んだのでうろうろしていたらConfluenceにそれっぽいドキュメントをみつけた。基本的には

  • 頑張らない
  • 僕が知っている暗黙の知識は特に説明しない
  • 不定期
  • Javaは素人です

くらいの適当な感じで。

ドキュメントは公式サイトの記述が割といい感じになっているがInternalsのページもちょっと物足りない。Confluenceのこの辺りのドキュメントは開発の初期に使い始めてメンテナンスに挫折した形跡があるので、思考や歴史を追うのにいいかもしれない。MLは一応購読していて、気になるSubjectが来たら見るくらいにしているが、新機能や新しい情報をウォッチしたい場合はMLが一番よいと思う。もっと細かく開発の流れを追いたい場合はJIRAをウォッチするのがよい。Apacheプロジェクトでは、基本的に全てのタスクがJIRAで管理されている。新機能もバグもロゴも…まあ著名な情報源といったらその辺りだろうか。事例を知りたい場合は…疲れたので以下略。
Zabの論文は以前読んでいたので基本的な知識は持っているつもりだがObserverMultiops辺りから詳細がもはや分からなくなってしまった。あと噂によるとOSGi使ってノンストップアップグレードができたりするらしい[要出典]。
あとはZooKeeperを使ったモノとしては最近だとNetflixのCuratorとかTwitterのSnowflakeとか。

そういういってるうちにEclipseのgitプラグインの準備ができたので適当にEclipse ProjectとしてImportする。EclipseGUIは割と苦手だけどJava使いには必須スキルだと思うので我慢して使う。ivyも使えるらしいよ。mavenは分かりやすくて好きなんだけどなあ。やっぱりちょっと苦戦だけどこのページでなんか分かった気がする。
基本的には

  1. 適当なディレクトリ(/tmp辺りかな?)にgit cloneで持ってくる。import...でやっても持ってこれる。
  2. New Project from File Systemでふつうにファイルを取り込む。
  3. Team...からShare Projectで適当にGitレポジトリだとEclipseに教えてあげる
  4. build.xmlを右クリックしてbuild as an Ant project...とかってやる。

とやると、ivyで依存ライブラリを解決してくれる。…と思ったら、もろもろ解決してくれる前にEclipseでデフォルトになってるjarタスクを先に実行してしまうのでエラー。jarだけ外してもういっかいbuild...と思ったらもう夜も遅いのでHowToContributeにある通り

zookeeper/ $ ant -Djavac.args="-Xlint -Xmaxwarns 1000" clean test tar

を実行してみたらあっさりテストまでスムーズに進んでいる。warningを1000以下に抑えるとか、いいのだろうか。ブラウザなどのアプリケーションはいいのだが、開発環境がGUIである必要はあるのだろうか。人によってはIntelliJとかNetBeansがよいみたいだが。いやあしかしテスト長い。junitでずーっとシリアルに流しているようだ。そりゃあTCP挟んだテストが沢山あるだろうから簡単には並列化できないだろうけど。JUnitの制約かなあと思っていたらJUnit4からは並列クラスとかいうのになっているらしい。ivyがとってきたのはJUnit4.9となっているから後方互換性を気にしているのかな。どっちだろうというのはテストの中身を見ないとちょっとわかりませんね。
と思ったらcppunitがないとかでBUILD FAILED。入れなおす。install-shとかがないって言われる。どうせCクライアントのところだからスキップでいい。そんなこんなでとりあえずJavaのところは大丈夫そう。だけどEclipseは相変わらず赤いバッテンだらけでソース読むだけなら影響ないのだけどこの先が思いやられる。

追伸

そういえば規模を調べるの忘れていた。

$ find . -name "*.java" | grep -v test | xargs wc
59233 208484 2040114 total
$ find . -name "*.java" | grep test | xargs wc
22863 76632 839826 total

ざっくりいって本体60KLOC, テストコード30KLOC…でかい… と思ったが

$ cd src/java/main
$ find . -name "*.java" | xargs wc
37380 133202 1336852 total

やった!ちょっと減ったぞ!まあ…それでも…でかい…