我已經安裝在單臺機器3個節點集羣卡桑德拉(Ubantu),而且我下面 -卡桑德拉密鑰空間去創造無限循環與卡桑德拉驅動2.2.0-RC3
- 這三個節點,並應用程序能夠創建密鑰空間。
- 關閉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)));
....
....
}