0

我已經安裝在單臺機器3個節點集羣卡桑德拉(Ubantu),而且我下面 -卡桑德拉密鑰空間去創造無限循環與卡桑德拉驅動2.2.0-RC3

  1. 這三個節點,並應用程序能夠創建密鑰空間。
  2. 關閉3個正在運行的節點中的一個,應用程序仍然能夠使用 來創建密鑰空間。
  3. 關閉一個多節點出現2運行 節點,並立即啓動它,現在的應用程序是無法 創建密鑰空間,它不斷報告(如無限循環)約 -

    2017年9月25日14:42:40 INFO RequestHandler:561 - Query CREATE KEYSPACE if NOT EXISTS MYKEYSPACE WITH replication = {'class':'NetworkTopologyStrategy','datacenter1':'2'}; 未在/127.0.0.1:9042上準備,在重試執行前準備。見此 消息幾次是好的,但看到了很多可能的性能源 問題

我的應用程序日誌中充斥着這些消息,它導致Java堆出來的錯誤。

注 - 我有複製因子爲2,cassandra使用的版本是2.2.6,cassandra驅動程序是2.2.0-rc3。當我恢復到cassandra驅動程序2.1.3一切工作正常,所以只是想知道是否在驅動程序級的一些問題

進一步更多要添加到此我調試代碼甚至在cassandra驅動程序級別,發現這是因爲com.datastax.driver.core.Connection類的如下方法 -

private void flush(FlushItem item) { 
    EventLoop loop = item.channel.eventLoop(); 
    Flusher flusher = flusherLookup.get(loop); 
    if (flusher == null) { 
     Flusher alt = flusherLookup.putIfAbsent(loop, flusher = new Flusher(loop)); 
     if (alt != null) 
      flusher = alt; 
    } 

    flusher.queued.add(item); 
    flusher.start(); 
} 

所以帶回節點在線(現在運行的3 2個節點)之後,RequestHandler保持關於不備查詢報表,因此在撥打此電話之前準備再試 -

public ResponseHandler write(ResponseCallback callback, boolean startTimeout) 
{ 
.... 
.... 
.... 
flush(new FlushItem(channel, request, writeHandler(request, handler))); 
.... 
.... 
} 

回答

1

將cassandra驅動程序版本升級到3.3.0後,未遇到問題。我相信2.2.0-rc3中有一些bug,這是發佈候選版本。