2010-08-11 4 views
2

J'ai écrit un programme de test pour tester Cassandra, et j'ai eu des problèmes pour lire les données. On dirait que Cassandra prend parfois une clé pour une autre.Pourquoi Cassandra agit-il de manière étrange avec les touches d'octets (avec Lazyboy)?

Voici mon programme de test:

from lazyboy import * 
from lazyboy.key import Key 
import uuid 
import random 

class TestItemKey(Key): 
    def __init__(self, key=None): 
    Key.__init__(self, "TestMX", "TestCF", key) 

class TestItem(record.Record): 
    def __init__(self, *args, **kwargs): 
     record.Record.__init__(self, *args, **kwargs) 
     self.key = TestItemKey(uuid.uuid1().bytes) 

connection.add_pool('TestMX', ['localhost:9160']) 

t1 = TestItem({'test':'foo'}) 
t1.key = TestItemKey(uuid.UUID('3cead15a-a54e-11df-87a2-000c298d2724').bytes) 
t2 = TestItem({'test':'bar'}) 
t2.key = TestItemKey(uuid.UUID('3cebc15a-a54e-11df-87a2-000c298d2724').bytes) 
t1.save() 
t2.save() 

print TestItem().load(t1.key.clone()) 
print TestItem().load(t2.key.clone()) 

(Les UUID choisis sont un exemple de ceux qui causent des problèmes)

Voici la sortie de ce script:

[email protected]:/mnt/hgfs/TestMX# python test.py 
TestItem: {'test': 'foo'} 
TestItem: {'test': 'foo'} 

lieu du résultat attendu:

[email protected]:/mnt/hgfs/TestMX# python test.py 
TestItem: {'test': 'foo'} 
TestItem: {'test': 'bar'} 

Notez que le script fonctionne généralement très bien avec d'autres UUID randomely choisis, mais parfois pas ...

+0

J'ajouterai que j'ai essayé avec Pycassa au lieu de Lazyboy, avec exactement le même résultat. – Pierre

+0

t1.key et t2.key sont les mêmes, ou im je manque quelque chose de fondamental? – Schildmeijer

+0

Ils sont très proches, mais pas la même chose. '3cead ...' pour le premier, '3cebc ...' pour le second. – Pierre

Répondre

2

Cela ressemble beaucoup à vous frapper https://issues.apache.org/jira/browse/CASSANDRA-1235 qui est fixé dans la branche 0.6 et sera en 0.6.5, la prochaine version stable.

+0

Tkanks. Il a résolu le problème pour ces deux clés en particulier. Mais il est encore possible de trouver ceux qui ne fonctionnent pas, comme '936a87e2-a5fc-11df-82c1-000c29f73b23' et' 936ae9e4-a5fc-11df-82c1-000c29f73b23'. Avec le même résultat ... – Pierre

+0

ok, alors vous avez probablement frappé un autre bug (commentaire ajouté après discussion sur irC#cassandra) – Schildmeijer

+0

Yep. Je vous remercie :) – Pierre

Questions connexes