java - Cassandra drop keyspace 在为 executeAsync 指定的超时之前抛出 timeoutexception
问题描述
我OperationTimedOutException
在删除键空间时得到了 cassandra。尽管我已经给了60000 毫秒(1 分钟) timeOut
的时间来阻止,直到我Future
从 cassandra 获得对象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);
我不确定这是否是以编程方式增加超时的正确方法。如果有其他好的方法,请告诉我。
解决方案
最好不要同时进行多项修改(就像你正在做的那样 via executeAsync
)。当您在分布式系统中修改模式时,模式更改应该解决,并且所有节点之间应该达成一致。
我建议修改您的代码以通过session.execute
而不是异步版本执行命令。并在所有操作完成后检查模式协议 -Metadata
类中有相应的方法。
推荐阅读
- react-native - 尝试在 react-native-modal 中组合 2 个或多个模态
- excel - Excel 根据单元格值定义范围(按列 - A 到 E )
- python - 无法访问另一个类 Tkinter - Python 3
- css - 在多个页面中使用相同的 CSS 类
- javascript - d3.js 扁平化嵌套数据
- java - 需要从 Spring MVC 中的预定方法返回值
- firebase - 在颤振中使用 initialRoute 标签
- xamarin - Xamarin bt 扫描回调和消息中心
- php - 如何保护主站点子域上的文件免于在wordpress中未经身份验证的情况下下载
- asp.net - ASP.Net Web API + AngularJS 项目中的捆绑和缩小