删除键空间时出现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/