我想知道是否可以从 Cassandra 的 C/C++ 驱动程序复制在 nodetool 实用程序中找到的 forceKeyspaceFlush()
函数。
nodetool 函数如下所示:
public class Flush extends NodeToolCmd
{
@Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables")
private List<String> args = new ArrayList<>();
@Override
public void execute(NodeProbe probe)
{
List<String> keyspaces = parseOptionalKeyspace(args, probe);
String[] tableNames = parseOptionalTables(args);
for (String keyspace : keyspaces)
{
try
{
probe.forceKeyspaceFlush(keyspace, tableNames);
} catch (Exception e)
{
throw new RuntimeException("Error occurred during flushing", e);
}
}
}
}
我想在我的 C++ 软件中复制的是这一行:
probe.forceKeyspaceFlush(keyspace, tableNames);
可能吗?
最佳答案
这是一个不寻常的请求,主要是因为 Cassandra 被设计为分布式,因此如果您正在执行查询,则需要对每个(可能有很多)拷贝执行阻塞刷新。我不会让您相信您并不真正需要这个,而是尝试回答您的问题 - 但是,您可能并不真正需要这个。
Nodetool 正在使用 JMX 接口(interface)(在 tcp/7199 上)强制刷新 - 您的 c/c++ 驱动程序通过 native 协议(protocol)(在 tcp/9042 上)进行对话。此时,无法通过 the native protocol 进行刷新.
要解决这个限制,您需要执行一个支持 jmx 的命令行实用程序(nodetool 或其他),用 c++ 实现 JMX 客户端(已经完成),或者扩展 native 协议(protocol)。这些都不是特别令人愉快的选择,但我认为执行 jmx CLI 实用程序比其他两个实用程序要容易得多。
关于c++ - 我可以像 nodetool 那样强制从 C/C++ 驱动程序刷新 Cassandra 表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730101/