首页 文章

Cassandra键空间创建与cassandra驱动程序2.2.0-rc3无限循环

提问于
浏览
0

我在单机(Ubantu)中设置了3节点cassandra集群,我做了以下 -

  • 所有三个节点和应用程序都能够创建密钥空间 .

  • 关闭3个正在运行的节点中的一个,应用程序仍然可以创建密钥空间 .

  • 从现在的2个运行节点中关闭另外一个节点并立即启动它,现在应用程序无法创建密钥空间,它继续报告(如无限循环) -

2017-09-25 14:42:40 INFO RequestHandler:561 - 查询CREATE KEYSPACE如果没有复制MYKEYSPACE with replication = {'class':'NetworkTopologyStrategy','datacenter1':'2'};未在/127.0.0.1:9042上准备,在重试执行前做好准备 . 看几次这个消息很好,但是看到它很多可能是性能问题的根源

我的应用程序日志充斥着这些消息,导致java heap out错误 .

Note- I have Replication factor as 2, and the version of cassandra using is 2.2.6 with cassandra driver is 2.2.0-rc3. When I revert back to cassandra driver 2.1.3 everything is working fine, so just wondering if some issues at driver level side

还有更多要添加的内容我甚至在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个节点在3个节点中运行)之后,RequestHandler继续报告未准备好的查询,因此在进行此调用之前重试之前准备 -

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

1 回答

  • 1

    将cassandra驱动程序版本升级到3.3.0后,没有遇到问题 . 我相信2.2.0-rc3中有一些错误,这是发布候选版本 .

相关问题