gpt4 book ai didi

java - Cassandra drop keyspace 在给executeAsync指定的超时之前抛出超时异常

转载 作者:行者123 更新时间:2023-12-02 11:07:33 25 4
gpt4 key购买 nike

我在删除键空间时遇到 cassandra OperationTimedOutException 。尽管我已经给出了 60000 毫秒(1 分钟) timeOut 来阻止,直到我从 cassandra executeAsync 获取 Future 对象。但它立即抛出 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 drop keyspace 在给executeAsync指定的超时之前抛出超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50851300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com