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,这是发布候选版本。