Подключение к Cassandra 0.7 в .NET - PullRequest
1 голос
/ 05 сентября 2010

У меня много проблем при попытке обновить мою существующую библиотеку с 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

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Я не обновлял переменные среды в Windows, чтобы они указывали на новое расположение 0,7.Так что, по сути, это была стабильная версия, а не бета-версия.После того, как я обновил переменную среды, чтобы она указала на новое местоположение, все снова заработало.

0 голосов
/ 05 сентября 2010

Вероятно, код C-thrift в рамочном режиме содержит ошибки, потому что все, что изменилось на стороне сервера, делало рамку режимом по умолчанию, а не рамкой.Вы можете переключить его обратно в cassandra.yaml в качестве обходного пути.

(Слегка ненормально указывать разные протоколы на входных / выходных сторонах соединения. Никакие другие языки Thrift, которые я знаю, не делают этого.генерация кода, это еще одна вещь, которую можно исправить.)

...