У меня много проблем при попытке обновить мою существующую библиотеку с 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 различных настроек, которые я предоставил выше, не выполняется.Несколько из них просто запираются, а другие выдают исключение.В общем, я застрял, пытаясь установить соединение для работы с новой Cassandra 0.7 с платформой .NET.
Вот типы проблем, с которыми я столкнулся:
all framed
: блокируется на set_keyspace all socket
: выбрасывает неверное имя метода: 'set_keyspace 'на set_keyspace in: framed out: socket
: блокировка на set_keyspace in: socket out: framed
: блокировка на set_keyspace
Я на 99% уверен, что это нужно сделатьс чем-то, что я делаю на уровне Thrift Кассандры, так как я не могу заставить работать это простое приложение.Но если вы хотите просмотреть мою 0,7 ветку, вы можете найти ее здесь:
http://github.com/managedfusion/fluentcassandra/tree/0.7