既存のライブラリを Cassandra 0.6 から 0.7 beta1にアップグレードするのに苦労しています。当初は運用上の問題だと思っていたので、基本に分解することにしました。
これが私が訴える基本的なセットアップです
TTransport framedTransport = new TFramedTransport(new TSocket("localhost", 9160));
TTransport socketTransport = new TSocket("localhost", 9160);
TProtocol framedProtocol = new TBinaryProtocol(framedTransport);
TProtocol socketProtocol = new TBinaryProtocol(socketTransport);
次に、入力プロトコルと出力プロトコルを切り替える次の方法で、クライアントのセットアップを変更しようとしました。
var client = new Cassandra.Client(framedProtocol, framedProtocol); // all framed
var client = new Cassandra.Client(socketProtocol, socketProtocol); // all socket
var client = new Cassandra.Client(framedProtocol, socketProtocol); // in: framed out: socket
var client = new Cassandra.Client(socketProtocol, framedProtocol); // in: socket out: framed
次に、ダウンロードから取得したデフォルトの Cassandra 構成を使用する次のプログラムを実行し、データが挿入されていないためゼロを返すと予想されるカウントなどの単純な要求を実行します。
framedTransport.Open();
socketTransport.Open();
Console.WriteLine("Start");
client.set_keyspace("Keyspace1");
var key = System.Text.Encoding.ASCII.GetBytes("MyKey");
var columns = new List<byte[]>(new[] { System.Text.Encoding.ASCII.GetBytes("MyColumn") });
var column_parent = new ColumnParent {
Column_family = "Standard1"
};
var predicate = new SlicePredicate {
Column_names = columns
};
client.get_count(key, column_parent, predicate, ConsistencyLevel.ALL);
Console.WriteLine("Done");
Console.Read();
上記で提供した 4 つの異なるセットアップのそれぞれが実行に失敗します。それらのいくつかはロックアップし、他のものは例外をスローします。したがって、基本的に、.NET フレームワークを使用して新しい Cassandra 0.7 で動作するように接続しようとしています。
それぞれで見つかった問題の種類は次のとおりです。
all framed
: set_keyspace でロックアップall socket
: 無効なメソッド名をスローします: set_keyspace の 'set_keyspace'in: framed out: socket
: set_keyspace でロックアップin: socket out: framed
: set_keyspace でロックアップ
この単純なアプリケーションを動作させることができないため、Cassandra の Thrift レイヤーで行っていることと関係があると 99% 確信しています。しかし、私の 0.7 ブランチをブラウジングしたい場合は、ここで見つけることができます: