読者です 読者をやめる 読者になる 読者になる

matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

CassandraをEclipseからデバッグ実行する

cassandra

これからCassandraをいじり倒すぞー!!
というわけで、何はともあれソースが追っかけられる状態にしようと思って、Eclipseからデバッグ実行できる環境を作ってみた。以下、その手順です。
あ、環境はMac OS X Snow Leopardですんで、それ以外の環境の方はいろいろ置き換えて下さい。Cassandraはgitから取得できる最新の0.7を想定。


2010.06.13 追記
antを実行する必要があったみたい。自分がやったとき必要だったかな?antの実行を追記しました。
あとここではgitからチェックアウトしてますが、svnの方が最新の状態がチェックアウトできるので、svnを利用した方がいいかもです。

Eclipse準備

普通にインストールしておきます。ここではEclipse 3.5を利用。
CassandraのWeb版の管理ツール(Cassandra Web Console)がすごいオススメなので、これを利用するためにTomcatも入れてサーバーに登録しておきましょ。

cassandraプロジェクトを作成

cassandraという名前のJavaプロジェクトを作っておきます。

gitからチェックアウト

以下のコマンドでgitからソースをチェックアウト。workspaceの下だと、上記で作成したプロジェクト名とかぶるのでそこ以外で。

git clone git://git.apache.org/cassandra.git

ソースの配置

gitでチェックアウトしたソースを、上記で作成したcassandraプロジェクト配下にコピー。

cp -R cassandra/* workspace/cassandra/

Eclipseのプロジェクトを更新してコンパイルエラーが出ればOK。

antを実行

build.xmlを利用してantを実行します。もろもろのソースが生成されるはず。

ant

ソース・フォルダの整理とライブラリの読み込み

まずはsrcフォルダをソース・フォルダから削除。実際のソースはいくつかのディレクトリに点在しているので、それぞれソース・フォルダとして登録します。登録するソース・フォルダは以下の通り。

  • src/java
  • src/gen-java
  • interface/thrift/gen-java
  • interfece/avro/gen-java
  • test/unit
  • conf

最後に以下のディレクトリ配下のjarファイルをすべてライブラリとして登録。

  • lib

2010.06.13 追記
あとbuild/lib/jars/junit-4.6.jarも登録する必要がありました。

これでコンパイルエラーがすべて消えるはず。

起動設定

環境に合わせて以下の箇所を修正。

  • cassandra.yaml
    • commitlog_directory
    • data_file_directories
  • log4j-server.properties

あとはJavaアプリケーションの実行でメインクラスに

org.apache.cassandra.thrift.CassandraDaemon

を指定、プログラム引数に

-Dcassandra -Dcassandra-foreground=yes

を指定して、最後にVM引数にcassandra.in.shを参考にパラメータを渡すだけ。

-ea
 -Xms128m
 -Xmx1G
 -XX:TargetSurvivorRatio=90
 -XX:+AggressiveOpts
 -XX:+UseParNewGC
 -XX:+UseConcMarkSweepGC
 -XX:+CMSParallelRemarkEnabled
 -XX:+HeapDumpOnOutOfMemoryError
 -XX:SurvivorRatio=128
 -XX:MaxTenuringThreshold=0
 -Dcom.sun.management.jmxremote.port=9081
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false

ここのポイントは、jmxのポート指定を8080から別に変えること。Tomcatのポートとかぶるので。

これで実行してみて起動できれば完了です!