Fix nodetool sjk dropping all arguments after the first one

Patch by Maxim Muzafarov; reviewed by Dmitry Konstantinov for CASSANDRA-21009
This commit is contained in:
Maxim Muzafarov 2026-02-18 14:58:49 +01:00
parent 0be5ffa8c8
commit b7eb323c5a
No known key found for this signature in database
GPG Key ID: 7FEC714D84388C16
2 changed files with 34 additions and 4 deletions

View File

@ -86,10 +86,11 @@ public class Sjk extends AbstractCommand
{
// Consume all arguments and pass them to SJK.
assert commandSpec.userObject() instanceof Sjk;
if (args.isEmpty())
return true;
Sjk sjk = (Sjk) commandSpec.userObject();
while (!args.isEmpty())
sjk.args.add(args.pop());
((Sjk) commandSpec.userObject()).args.add(args.pop());
return true;
}
}

View File

@ -48,9 +48,38 @@ public class SjkMockTest extends AbstractNodetoolMock
@Test
public void testSjkTtop()
{
ToolRunner.ToolResult result = invokeNodetool("sjk", "hh", "--top-number", "10", "--live");
ToolRunner.ToolResult result = invokeNodetool("sjk", "hh", "--top-number", "10000", "--live");
result.assertOnCleanExit();
assertThat(result.getStdout()).contains(" # Instances Bytes Type");
assertThat(result.getStdout()).containsPattern(" +\\d+ +\\d+ +org\\.apache\\.cassandra\\.config\\.DatabaseDescriptor\\$1");
}
@Test
public void testSjkMxdumpQueryFiltersResults()
{
ToolRunner.ToolResult allBeans = invokeNodetool("sjk", "mxdump");
allBeans.assertOnCleanExit();
assertThat(allBeans.getStdout()).contains(STORAGE_SERVICE_MBEAN);
assertThat(allBeans.getStdout()).contains(FAILURE_DETECTOR_MBEAN);
ToolRunner.ToolResult filtered = invokeNodetool("sjk", "mxdump", "-q",
STORAGE_SERVICE_MBEAN);
filtered.assertOnCleanExit();
assertThat(filtered.getStdout()).contains(STORAGE_SERVICE_MBEAN);
assertThat(filtered.getStdout()).doesNotContain(FAILURE_DETECTOR_MBEAN);
assertThat(filtered.getStdout()).doesNotContain(GOSSIPER_MBEAN);
}
@Test
public void testSjkMxdumpQueryWildcard()
{
ToolRunner.ToolResult filtered = invokeNodetool("sjk", "mxdump", "-q",
"org.apache.cassandra.net:*");
filtered.assertOnCleanExit();
assertThat(filtered.getStdout()).contains(FAILURE_DETECTOR_MBEAN);
assertThat(filtered.getStdout()).contains(GOSSIPER_MBEAN);
assertThat(filtered.getStdout()).contains(MESSAGING_SERVICE_MBEAN);
assertThat(filtered.getStdout()).doesNotContain(STORAGE_SERVICE_MBEAN);
assertThat(filtered.getStdout()).doesNotContain(CACHE_SERVICE_MBEAN);
}
}