2010-09-05 29 views
1

J'ai beaucoup de mal à essayer de mettre à niveau mon existing library de Cassandra 0.6 à 0.7 beta1. Au départ, j'avais pensé que c'était un problème lié à l'ordre des opérations, alors j'ai décidé de faire la part des choses.Connexion à Cassandra 0.7 in .NET

Voici la configuration de base que je vais poursuis

TTransport framedTransport = new TFramedTransport(new TSocket("localhost", 9160)); 
TTransport socketTransport = new TSocket("localhost", 9160); 
TProtocol framedProtocol = new TBinaryProtocol(framedTransport); 
TProtocol socketProtocol = new TBinaryProtocol(socketTransport); 

J'ai essayé de modifier la configuration du client de la manière suivante commutation d'entrée et de protocoles de sortie:

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 

Ensuite, j'exécute le programme suivant qui utilise la configuration par défaut de Cassandra qui vient from the download et je fais une requête simple telle qu'un compte dont je m'attends à ce qu'il retourne zéro car aucune donnée n'a été insérée.

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(); 

Chacune des 4 configurations que j'ai fournies ci-dessus échoue à s'exécuter. Un couple d'entre eux se bloque et d'autres lèvent une exception. Donc, fondamentalement, je suis coincé en essayant d'obtenir une connexion pour travailler avec le nouveau Cassandra 0.7 avec le framework .NET.

Voici les types de problèmes que je retrouvais avec chacun:

  • all framed: se bloque sur set_keyspace
  • all socket: jette Nom de la méthode non valide: 'set_keyspace' sur set_keyspace
  • in: framed out: socket: serrures sur set_keyspace
  • in: socket out: framed: verrouille sur set_keyspace

Je suis sûr à 99% qu'il s'agit de quelque chose que je fais à la couche Thrift de Cassandra puisque je ne peux pas faire fonctionner cette simple application. Mais si vous voulez navigateur mon 0,7 branche vous pouvez le trouver ici:

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

Répondre

1

Je n'ai pas mis à jour les variables d'environnement dans Windows pour pointer vers le nouvel emplacement de 0.7. Donc, il fonctionnait essentiellement la version stable au lieu de la version bêta. Après avoir mis à jour la variable d'environnement thee pour pointer vers le nouvel emplacement, tout a recommencé à fonctionner.

+0

donc c'était votre faute en cours d'exécution cassandra et vous avez voté -1 pour réponse jbellis, alors qu'il a mentionné la situation la plus courante lors de la connexion à 0,7? –

+0

BTW, n'utilisez pas de variables d'environnement. –

+2

Aucune autre façon de lancer facilement le fichier batch Cassandra autrement que d'utiliser les variables d'environnement. Et jbellis a été rejeté parce que tout ce qu'il a dit était une opinion personnelle qui ne reposait pas du tout sur des faits. Le code C# Thrift n'est pas buggé, c'est l'une des librairies de Thrift qui n'a pas connu de changements de 0.2 à 0.4. Deuxièmement, il n'est pas fou de spécifier des protocoles différents pour l'entrée et la sortie, surtout si vous voulez utiliser un serveur différent pour lire et écrire. Il a été rejeté parce que rien n'était fondé en fait. BTW vous ne devriez pas utiliser le système de vote pour les actions malveillantes. –

0

Probablement le code Thrift C#-mode tramé est bogué, parce que tout ce qui a changé sur le côté serveur faisait encadré le mode par défaut à la place de non encadré. Vous pouvez le changer dans cassandra.yaml comme une solution de contournement.

(Il est un peu fou de spécifier différents protocoles sur les dans/sur les côtés de la connexion. Aucune autre langue Thrift je sais faire. Si vous creusez dans la génération de code qui est une autre chose potentiellement fixer.)

+0

Le code du client de friandise n'a pas changé depuis 0,2 pour la plupart. En outre, l'entrée et la sortie sont un nouvel ajout à 0.7 qui vous permet d'utiliser différents serveurs pour votre écriture et votre lecture. Je profitais donc de ça pour tester mon code pour voir s'il y avait une différence. ** Mais peu importe, j'ai trouvé le problème. ** Puisque j'essayais 0.7, je l'ai mis dans un chemin différent, mais ce que je n'ai pas fait était d'enregistrer les variables d'environnement dans le nouveau chemin que j'utilisais. Donc, après que cela a été fait, tout a fonctionné. Hors de la vue loin du cœur, je suppose. –