我已经安装在单台机器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)));
....
....
}