2010-09-05 23 views
1

連接到卡桑德拉0.7我有很多的麻煩試圖升級我existing library從卡桑德拉0.6至0.7β1的。我原本以爲這是一個操作問題的順序,所以我決定把它分解成基本的東西。在.NET

這裏是我將被起訴

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 

然後我執行下面的程序,它使用來自from the download的默認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個不同設置中的每一個都無法執行。他們中的一些只是鎖定,另一些則拋出異常。所以基本上我被卡住了,試圖獲得一個與.NET框架一起使用新Cassandra 0.7的連接。

下面是我發現的每個問題類型:

  • all framed:上set_keyspace
  • all socket鎖定了:拋出無效的方法名: 'set_keyspace' 上set_keyspace
  • in: framed out: socket:鎖起來的set_keyspace
  • in: socket out: framed:鎖定set_keyspace

我99%肯定它與我在Cassandra的Thrift層做的事情有關,因爲我無法獲得這個簡單的應用程序的工作。但是,如果你想瀏覽我的0.7分支,你可以在這裏找到:

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

回答

1

我沒有更新Windows中的環境變量以指向0.7的新位置。所以它本質上是運行穩定版本而不是測試版本。在我更新環境變量以指向新位置後,所有事情都再次開始工作。

+0

所以這是你的故障運行cassandra,你已經投了-1爲jbellis答案,而他提到最常見的情況時,連接到0.7? – 2010-09-17 05:38:34

+0

順便說一句,不要使用環境變量。 – 2010-09-17 05:44:05

+2

除了使用環境變量之外,沒有其他輕鬆啓動Cassandra批處理文件的方法。而傑貝利斯被拒絕了,因爲他所說的一切都是個人意見,而事實上根本不是事實。 C#Thrift代碼沒有錯誤,它是Thrift中沒有經歷0.2到0.4之間任何更改的庫中的一個。其次,爲進出指定不同的協議並不是瘋狂的行爲,特別是如果你想使用不同的服務器進行讀寫。它被拒絕了,因爲它實際上都不是基於它的。順便說一句,你不應該使用投票系統進行惡意行爲。 – 2010-09-18 12:45:38

0

也許是C#節儉成幀模式代碼是越野車,因爲一切都改變了在服務器端被製作框架的默認模式,而不是無框的。您可以將其切換回cassandra.yaml作爲解決方法。

(這是稍微瘋狂對連接的進/出雙方指定不同的協議。沒有其他的節儉語言,我知道做到這一點。如果你深入到代碼生成是另一件事可能修復。)

+0

大多數情況下,節約客戶端代碼從0.2開始沒有變化。此外,輸入和輸出是0.7的新增加,允許您使用不同的服務器進行書寫和閱讀。所以我只是利用它來測試我的代碼,看看是否有區別。 **但是不管怎樣,我發現了這個問題。**因爲我嘗試了0.7,我把它放在一個不同的路徑上,但是我沒有做的是將環境變量註冊到我正在使用的新路徑中。所以一切工作完成之後。我猜想,無法想象。 – 2010-09-05 20:04:58