我在尝试将我现有的库从 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_keyspaceall socket
:抛出无效的方法名称:set_keyspace 上的“set_keyspace”in: framed out: socket
: 锁定 set_keyspacein: socket out: framed
: 锁定 set_keyspace
我 99% 确信这与我在 Cassandra 的 Thrift 层所做的事情有关,因为我无法让这个简单的应用程序工作。但是如果你想浏览我的 0.7 分支,你可以在这里找到它: