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

我 99% 确信这与我在 Cassandra 的 Thrift 层所做的事情有关,因为我无法让这个简单的应用程序工作。但是如果你想浏览我的 0.7 分支,你可以在这里找到它:

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

4

2 回答 2

1

我没有更新 Windows 中的环境变量以指向 0.7 的新位置。所以它本质上是运行稳定版而不是测试版。在我更新你的环境变量以指向新位置之后,一切又开始工作了。

于 2010-09-05T20:08:29.303 回答
0

可能 C# thrift 框架模式代码有问题,因为在服务器端所做的所有更改都是使框架成为默认模式而不是非框架模式。您可以在 cassandra.yaml 中将其切换回作为解决方法。

(在连接的输入/输出端指定不同的协议有点疯狂。我知道没有其他 Thrift 语言这样做。如果你深入研究代码生成,那是另一件可能修复的事情。)

于 2010-09-05T18:20:34.937 回答