删除键空间时出现cassandra OperationTimedOutException的问题。尽管我给了60000毫秒(1分钟)timeOut进行阻止,直到我从cassandra Future获得executeAsync对象。但是,它立即抛出timeoutexception,而没有等待完整的1分钟。

这就是我使用java删除键空间的方式-

List<KeyspaceMetadata> keyspaceMetadataList = cluster.getMetadata().getKeyspaces();
    for(KeyspaceMetadata ks: keyspaceMetadataList)
    {
         if (ks.getName().startsWith("system"))
         {
             continue;
         }
         try
        {
            session.executeAsync("drop keyspace " + ks.getName()).get(1000 * 60, TimeUnit.MILLISECONDS);
            log.info("Dropped Keyspace: " + ks.getName());
        }
        catch( InterruptedException | ExecutionException | TimeoutException e )
        {
            log.error("Something went wrong: " + e);
        }

    }


您可以看到下面给出的行,在该行中我强制告诉呼叫至少等待60秒,但在此之前,我得到了TimeOutException

session.executeAsync("drop keyspace " + ks.getName()).get(1000 * 60, TimeUnit.MILLISECONDS);


我不确定这是否是通过编程增加超时的正确方法。请让我知道是否还有其他好的方法。

最佳答案

最好不要同时进行多个修改(例如通过executeAsync进行修改)。在分布式系统中修改架构时,架构变更应得到解决,并且所有节点之间应达成协议。

我建议修改您的代码以通过session.execute而不是异步版本执行命令。完成所有操作后,检查架构协议-Metadata类中有一个相应的方法。

关于java - Cassandra放置键空间在将指定超时赋给executeAsync之前引发timeoutexception,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50851300/

10-09 03:01