1

既存のライブラリを 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 ブランチをブラウジングしたい場合は、ここで見つけることができます:

http://github.com/managedfusion/fluentcassandra/tree/0.7

4

2 に答える 2

1

0.7 の新しい場所を指すように Windows の環境変数を更新しませんでした。そのため、基本的にはベータ版ではなく安定版を実行していました。新しい場所を指すように環境変数を更新した後、すべてが再び機能し始めました。

于 2010-09-05T20:08:29.303 に答える
0

おそらく、C# thrift framed-mode コードにはバグがあります。サーバー側で変更されたのは、フレーム化されていないモードではなく、フレーム化されたモードを既定のモードにすることだけだったからです。回避策として、cassandra.yaml で元に戻すことができます。

(接続の内側/外側で異なるプロトコルを指定するのは少し正気ではありません。私が知っている他の Thrift 言語でそれを行うことはありません。コード生成を掘り下げると、修正する可能性のある別のことになります。)

于 2010-09-05T18:20:34.937 に答える