cassandra-unitいじった
仕事でCassandraを使うアプリを書いているが、
UTにDBUnit的なものが欲しくなりググッたらあったので
導入に1日格闘した内容を書こうと思う。
先にCassandra使用環境を書いておくと、
Cassandraサーバ:1.0.8
Cassandra Client:hector-core-1.0.2
最新版どころか1つ前ですらないという冒頭から残念な展開。
サーバのバージョンは仕事先の環境に依存しているため変更できない。
更に、共通で使われているClient部品のバージョンも古く、
気に食わなかったのでhectorを導入してみたが、
こちらもサーバに引きずられて古いので色々と苦労している。
なお、1.0系のhectorの最新版は1.0.5であることに今日気づいた。
1.0.2なのは適当にググッたレポジトリの最新だったのがソレだったので、、
(http://www.jarvana.com/jarvana/browse/me/prettyprint/hector-core/)
んで、やっと本題。
使ってみることにしたのは、「cassandra-unit」
(https://github.com/jsevellec/cassandra-unit)
サンプルもあったのでまずそれを触ってみる。
(https://github.com/jsevellec/cassandra-unit-examples)
サンプルのpomでmvnしたらcassandra-unit-1.1.1.3-SNAPSHOT.jarがこけた。
cassandra-unitの最新を見たら1.1.2.2-SNAPSHOTだったので
書き換えて再度実行したがコレもダメで、pomのURLから直接覗いてみると、
(https://oss.sonatype.org/content/repositories/snapshots/org/cassandraunit/cassandra-unit/)
1.0.1.5-SNAPSHOT/
1.0.3.2-SNAPSHOT/
1.0.5.1-SNAPSHOT/
1.1.0.2-SNAPSHOT/
の4つしかなかったので1.1.0.2-SNAPSHOTに書き換えて無事DL。
更に、自分の環境のcassandraバージョンが低いためエラーになりまくり、
最終的に1.0.3.2-SNAPSHOTを使うことにしてようやく動作する。
次にはまったのはYaml。
cassandra-unitでは、データ入力の形式としてXML、JSON、Yaml
の3種類が用意されており、当然、examplesにも各形式ある。
XMLやJSONよりもスッキリ書けそうだったのでYamlを当初選んだのだが、
どうも上手く動いていない。
そもそもexamplesにはクラスはYamlなのにファイルにJsonって書いてあるし、
動かしてない感が漂ってくるのでひとまずJsonにしたら動いたので、
Jsonでやることにした。
後で時間があったらデバッグしてもいいけど最新バージョンじゃないしどうかな、、、
更に次にはまったのはSecondaryIndex用のmetaDataの書き方。
Index貼るカラムだけcolumnsMetaDataに書けばいいのかと思ったけど、
columnsMetaDataを明に書く場合は全column書かないとCF壊れるかも?
でも冷静に考えるとcolumnはすごい数になる場合もありえるので、
そうなるとどうなんだろう・・・
Index貼らない場合はcolumnsMetaData書かなくても良かったので、
この辺はまだ検証が必要かもしれない。
そんな感じでひとまずやりたい事は何とかできた。
他にも大量にjar落ちてきたのを削って最小限にしたり、
column名を誤字ってるのにずっと気づかずハマったり、
思った以上に捗らなくて疲れた。
動作検証にWindowsのcassandra.exeとcassandra-cli.exe使ってたのだけど、
Indexのデータ投入でハマってた時にCF壊れてたのか?
再起動したら正しく動作していたってことがあったので注意が必要かも。
追い込まれてる時になったらgkbr
あと、sliceQuery.setRowCountするところでInteger.MAX渡してたら
cassandra.exeのVMがOutOfMemory発症した。
デフォルトは100らしいし良い設定方法あるのだろうか。
余裕が出来たらこの辺も調査したい所。