2

我想知道是否可以forceKeyspaceFlush()从 Cassandra 的 C/C++ 驱动程序复制 nodetool 实用程序中的函数。

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);

可能吗?

4

1 回答 1

3

这是一个不寻常的请求,主要是因为 Cassandra 设计为分布式,因此如果您正在执行查询,则需要在每个(可能很多)副本上执行阻塞刷新。我不会说服你你并不真的需要这个,而是尝试回答你的问题 - 但是,你可能并不真的需要这个。

Nodetool 正在使用 JMX 接口(在 tcp/7199 上)来强制刷新 - 您的 c/c++ 驱动程序通过本机协议(在 tcp/9042 上)进行通信。目前,无法通过本机协议刷新。

解决这个限制,您需要执行一个支持 jmx 的命令行实用程序(nodetool 或其他),在 c++ 中实现一个 JMX 客户端(已经完成),或者扩展本机协议。这些都不是特别令人愉快的选择,但我想执行 jmx CLI 实用程序比其他两个要容易得多。

于 2016-04-20T00:06:15.453 回答