2014-03-06 24 views
0

我的Accumulo 1.5與Thrift Proxy一起運行。我與Ruby共同努力,但我想如果我使用Python,也會出現同樣的情況。如何使用Ruby Thrift客戶端創建Accumulo Range對象

我已經能夠連接到Accumulo,創建更新,並按特定列掃描表。我試圖通過特定的行ID進行查詢。

querykey = Key.new('row'=>rowid) 
querykey_end = Key.new('row'=>"#{rowid}\0") 
queryrange = Range.new('start' => querykey, 'startInclusive' => true, 'stop' => querykey_end, 'stopInclusive' => false) 
queryscanoptions = ScanOptions.new({'range' => queryrange}) 

不幸的是,這會在我的Range構造函數中拋出一個錯誤。

`initialize': wrong number of arguments (1 for 2..3) (ArgumentError) 

在Ruby客戶端上沒有太多(任何)文檔,所以我一直主要關注節儉代碼。 Range類在proxy_types.rb中定義,但它的定義方式與我使用的其他Thrift類相同。

回答

2

這是一個命名空間問題。 Accumulo Thrift代碼都存在於根名稱空間中,但是Ruby有它自己的Range類沒有被覆蓋。這個問題存在於Accumulo 1.5.0中。爲了解決這個問題,我轉到github上,從1.5.2分支中抓取了生成的Thrift代碼,所有的Thrift對象都放在了Accumulo命名空間中。現在我可以撥打Accumulo::Range.new,它的功能就像一個魅力。該更新還爲Python節儉代碼添加了一個名稱空間。

Accumulo 1.5.2紅寶石節儉代碼是在這裏:https://github.com/apache/accumulo/tree/1.5.2-SNAPSHOT/proxy/src/main/ruby

這是承諾,修復一切:https://github.com/apache/accumulo/commit/27ee2367056e5ad0cb6175f91154cd13d49e2c95

+0

您應該使用最近發佈的1.5.1。 – elserj

+0

太棒了!今天看來1.5.1出來了。當我昨天發佈這個版本時,Apache網站上的'最新'版本仍然是1.5.0。 – mattwise

+0

是的,我今天完成了一切;) – elserj