我想知道是否可以从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);
有可能吗?
答案 0 :(得分:2)
这是一个不寻常的请求,主要是因为Cassandra被设计为分布式的,因此如果您正在执行查询,则需要在每个(可能很多)副本上执行阻塞刷新。我没有说服你确实不需要这个,而是试图回答你的问题 - 但是,你可能并不真的需要这个。
Nodetool正在使用JMX接口(在tcp / 7199上)强制刷新 - 您的c / c ++驱动程序通过本机协议进行通信(在tcp / 9042上)。目前,无法通过the native protocol刷新。
解决这个限制,你需要执行一个支持jmx的命令行实用程序(nodetool或其他),用c ++实现一个JMX客户端(它已经完成),或者扩展本机协议。这些都不是特别令人愉快的选择,但我认为执行jmx CLI实用程序要比其他两个实用程序容易得多。