2010-08-11 42 views
2

我寫了一個測試Cassandra的測試程序,並且在讀取數據時遇到了問題。看起來像卡桑德拉有時會拿一把鑰匙換另一把鑰匙。爲什麼Cassandra對字節鍵(與Lazyboy)有點奇怪?

這是我的測試程序:

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

(所選擇的UUID是的那些造成問題的一例)

下面是該腳本的輸出:

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

相反的預期結果:

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

注意,腳本通常的偉大工程與其他randomely挑選的UUID,但有時不...

+0

我會補充一點,我嘗試用Pycassa而不是Lazyboy,結果完全相同。 – Pierre 2010-08-11 21:06:34

+0

t1.key和t2.key是一樣的,還是我缺少一些基本的東西? – Schildmeijer 2010-08-11 21:23:45

+0

他們非常接近,但不一樣。 '第一個'3cead',第二個'3cebc ...'。 – Pierre 2010-08-11 21:41:16

回答

2

聽起來很像你打https://issues.apache.org/jira/browse/CASSANDRA-1235其固定在0.6分支將在0​​.6.5,下一個穩定版本。

+0

Tkanks。它特別解決了這兩個鍵的問題。但是仍然有可能找到非工作的,例如'936a87e2-a5fc-11df-82c1-000c29f73b23'和'936ae9e4-a5fc-11df-82c1-000c29f73b23'。 同樣的結果... – Pierre 2010-08-12 10:38:00

+0

好吧,那麼你可能會碰到另一個錯誤(在討論irC#cassandra後添加註釋) – Schildmeijer 2010-08-12 19:20:56

+0

是的。謝謝 :) – Pierre 2010-08-12 21:29:25