scylla nodetool是否有API?

时间:2019-12-06 22:32:11

标签: scylla

是否有nodetool的API?特别是nodetool tablestats

我看到有https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找API的合适地方吗?

2 个答案:

答案 0 :(得分:10)

Scylla服务器确实具有REST API,并且其文档位于您指向的URL上。您也可以在启动Scylla服务器时找到Swagger UI:https://docs.scylladb.com/operating-scylla/rest/

但是,请注意,例如nodetool并不直接使用API​​。相反,它与Scylla JMX代理进行通信,该代理是一个Java进程,实现了与Cassandra兼容的JMX API。您仍然可以直接使用REST API,但是您必须自己弄清楚JMX操作和REST API之间的映射。

对于nodetool tablestats之类的东西,第一步是检查nodetool使用的JMX API:

https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/TableStats.java

命令委托给TableStatsHolder类:

https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java#L117

使用ColumnFamilyStoreMBean JMX API查询表统计信息。

您可以通过找到ColumnFamilyStore类(不带MBean后缀)在scylla-jmx项目中找到JMX API的实现:

https://github.com/scylladb/scylla-jmx/blob/master/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java

从该类中,您可以看到例如ColumnFamilyStore.getSSTableCountPerLevel()方法委托给column_family/sstables/per_level/<table name> REST API URL。

答案 1 :(得分:3)

嗯,第一次我在这里通过直接访问API重新实现了nodetool: https://github.com/scylladb/scylla-tools-java/pull/121

它可以工作,但是在代码方面,我将进行一些重构以避免重复,否则它完全可以在REST API上使用(跳过JMX的“ tablestats”)。

hth L