This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 3221dd7d3c ARTEMIS-6030 Simplifying output on CLI LockList command
3221dd7d3c is described below
commit 3221dd7d3cd4490717b0d1a8a9b330bd17fe3f3c
Author: Clebert Suconic <[email protected]>
AuthorDate: Fri Apr 24 11:53:20 2026 -0400
ARTEMIS-6030 Simplifying output on CLI LockList command
I also added the -sleep parameter similar to queue stat
---
.../artemis/cli/commands/lock/LockList.java | 30 ++++---
.../management/impl/ActiveMQServerControlImpl.java | 1 +
.../artemis/core/server/lock/LockCoordinator.java | 15 +++-
.../management/ActiveMQServerControlTest.java | 99 +++++++++++++++-------
4 files changed, 101 insertions(+), 44 deletions(-)
diff --git
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/lock/LockList.java
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/lock/LockList.java
index 7fe76655e1..9ae8152317 100644
---
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/lock/LockList.java
+++
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/lock/LockList.java
@@ -18,6 +18,7 @@
package org.apache.activemq.artemis.cli.commands.lock;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import org.apache.activemq.artemis.api.core.management.SimpleManagement;
@@ -32,14 +33,27 @@ import picocli.CommandLine;
@CommandLine.Command(name = "list", description = "List the lock coordinators
and their status on the server.")
public class LockList extends ConnectionAbstract {
+ @CommandLine.Option(names = "--sleep", description = "Monitor locks
continuously by repeating the command at the specified interval in
milliseconds. Use -1 to disable (default).", defaultValue = "-1")
+ private long sleep = -1;
+
@Override
public Object execute(ActionContext context) throws Exception {
super.execute(context);
- stat(context);
+
+ do {
+ context.out.println(new Date() + ">> Lock list results for " +
getBrokerInstance());
+ list(context);
+ if (sleep > 0) {
+ context.out.println("Waiting " + sleep + " before another lock
list iteration");
+ Thread.sleep(sleep);
+ }
+ }
+ while (sleep > 0);
+
return null;
}
- private void stat(final ActionContext context) throws Exception {
+ private void list(final ActionContext context) throws Exception {
try (SimpleManagement simpleManagement = new SimpleManagement(brokerURL,
user, password).open()) {
JsonArray lockList = simpleManagement.listLockCoordinators();
printStats(context, lockList);
@@ -53,7 +67,7 @@ public class LockList extends ConnectionAbstract {
return;
}
- String[] fieldNames = {"NAME", "CLASS_NAME", "LOCK_ID", "LOCKED",
"STARTED"};
+ String[] fieldNames = {"NAME", "ID", "STATUS"};
int[] columnSizes = new int[fieldNames.length];
boolean[] centralize = new boolean[fieldNames.length];
List<String>[] fieldTitles = new ArrayList[fieldNames.length];
@@ -75,10 +89,8 @@ public class LockList extends ConnectionAbstract {
for (int i = 0; i < array.size(); i++) {
JsonObject lock = array.getJsonObject(i);
columnSizes[0] = Math.max(columnSizes[0], lock.getString("name",
"").length());
- columnSizes[1] = Math.max(columnSizes[1],
lock.getString("simpleName", "").length());
- columnSizes[2] = Math.max(columnSizes[2], lock.getString("lockId",
"").length());
- columnSizes[3] = Math.max(columnSizes[3],
String.valueOf(lock.getBoolean("locked")).length());
- columnSizes[4] = Math.max(columnSizes[4],
String.valueOf(lock.getBoolean("started")).length());
+ columnSizes[1] = Math.max(columnSizes[1], lock.getString("lockId",
"").length());
+ columnSizes[2] = Math.max(columnSizes[2], lock.getString("status",
"").length());
}
TableOut tableOut = new TableOut("|", 2, columnSizes);
@@ -91,10 +103,8 @@ public class LockList extends ConnectionAbstract {
JsonObject lock = array.getJsonObject(i);
String[] columns = {
lock.getString("name", ""),
- lock.getString("simpleName", ""),
lock.getString("lockId", ""),
- String.valueOf(lock.getBoolean("locked")),
- String.valueOf(lock.getBoolean("started"))
+ lock.getString("status")
};
tableOut.print(context.out, columns, centralize);
}
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index 1f577b520c..57c3fe8272 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -4777,6 +4777,7 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
objectBuilder.add("simpleName",
l.getLockManager().getClass().getSimpleName());
objectBuilder.add("locked", l.isLocked());
objectBuilder.add("started", l.isStarted());
+ objectBuilder.add("status", l.getStatus());
array.add(objectBuilder);
});
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/lock/LockCoordinator.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/lock/LockCoordinator.java
index a186b34979..3850c23873 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/lock/LockCoordinator.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/lock/LockCoordinator.java
@@ -87,6 +87,19 @@ public class LockCoordinator extends
ActiveMQScheduledComponent {
return name;
}
+ // Returns a string representation of the current status of this Lock
Coordinator.
+ public String getStatus() {
+ if (!isStarted()) {
+ return "Stopped";
+ } else {
+ if (isLocked()) {
+ return "Locked";
+ } else {
+ return "Unlocked";
+ }
+ }
+ }
+
public String getLockId() {
return lockID;
}
@@ -170,7 +183,6 @@ public class LockCoordinator extends
ActiveMQScheduledComponent {
} catch (Exception e) {
logger.debug("Error closing lock during stop", e);
}
- distributedLock = null;
}
if (lockManager != null) {
try {
@@ -178,7 +190,6 @@ public class LockCoordinator extends
ActiveMQScheduledComponent {
} catch (Exception e) {
logger.debug("Error stopping lock manager during stop", e);
}
- lockManager = null;
}
simpleFuture.set(null);
});
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 6b21b758bb..533e58a100 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -6577,46 +6577,81 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
public void testListLockCoordinators() throws Exception {
server.stop();
- // Add two lock coordinator configurations using File implementation
- LockCoordinatorConfiguration lock1 = new LockCoordinatorConfiguration();
- lock1.setName("coordinator1");
- lock1.setLockId("lock-id-1");
- lock1.setClassName(MyFakeLockManager.class.getName());
- lock1.setCheckPeriod(5000);
-
- LockCoordinatorConfiguration lock2 = new LockCoordinatorConfiguration();
- lock2.setName("coordinator2");
- lock2.setLockId("lock-id-2");
- lock2.setClassName(MyFakeLockManager.class.getName());
- lock2.setCheckPeriod(10000);
-
- conf.addLockCoordinatorConfiguration(lock1);
- conf.addLockCoordinatorConfiguration(lock2);
+ {
+ // Add two lock coordinator configurations using File implementation
+ LockCoordinatorConfiguration lock = new
LockCoordinatorConfiguration();
+ lock.setName("coordinator1");
+ lock.setLockId("lock-id-1");
+ lock.setClassName(MyFakeLockManager.class.getName());
+ lock.setCheckPeriod(10);
+ conf.addLockCoordinatorConfiguration(lock);
+ }
+
+ {
+ LockCoordinatorConfiguration lock = new
LockCoordinatorConfiguration();
+ lock.setName("coordinator2");
+ lock.setLockId("lock-id-2");
+ lock.setClassName(MyFakeLockManager.class.getName());
+ lock.setCheckPeriod(10);
+ conf.addLockCoordinatorConfiguration(lock);
+ }
+
+ {
+ LockCoordinatorConfiguration lock = new
LockCoordinatorConfiguration();
+ lock.setName("coordinator3");
+ lock.setLockId("lock-id-3");
+ lock.setClassName(MyFakeLockManager.class.getName());
+ lock.setCheckPeriod(10);
+ conf.addLockCoordinatorConfiguration(lock);
+ }
+ ActiveMQServerControl serverControl = createManagementControl();
server.start();
- ActiveMQServerControl serverControl = createManagementControl();
+ Wait.assertTrue(server.getLockCoordinator("coordinator1")::isLocked);
+ LockCoordinator lockCoordinator3 =
server.getLockCoordinator("coordinator3");
+ lockCoordinator3.stop();
+
String jsonString = serverControl.listLockCoordinatorsAsJSON();
assertNotNull(jsonString);
JsonArray array = JsonUtil.readJsonArray(jsonString);
- assertEquals(2, array.size());
+ assertEquals(3, array.size());
+
+
+ {
+ // Check first coordinator
+ JsonObject coordinator = array.getJsonObject(0);
+ assertEquals("coordinator1", coordinator.getString("name"));
+ assertEquals(MyFakeLockManager.class.getName(),
coordinator.getString("className"));
+ assertEquals(MyFakeLockManager.class.getSimpleName(),
coordinator.getString("simpleName"));
+ assertTrue(coordinator.getBoolean("locked"));
+ assertTrue(coordinator.getBoolean("started"));
+ assertEquals("Locked", coordinator.getString("status"));
+ }
+
+ {
+ // Check second coordinator
+ JsonObject coordinator = array.getJsonObject(1);
+ assertEquals("coordinator2", coordinator.getString("name"));
+ assertEquals(MyFakeLockManager.class.getName(),
coordinator.getString("className"));
+ assertEquals(MyFakeLockManager.class.getSimpleName(),
coordinator.getString("simpleName"));
+ assertTrue(coordinator.getBoolean("locked"));
+ assertTrue(coordinator.getBoolean("started"));
+ assertEquals("Locked", coordinator.getString("status"));
+ }
+
+ {
+ // Check third coordinator
+ JsonObject coordinator = array.getJsonObject(2);
+ assertEquals("coordinator3", coordinator.getString("name"));
+ assertEquals(MyFakeLockManager.class.getName(),
coordinator.getString("className"));
+ assertEquals(MyFakeLockManager.class.getSimpleName(),
coordinator.getString("simpleName"));
+ assertFalse(coordinator.getBoolean("locked"));
+ assertFalse(coordinator.getBoolean("started"));
+ assertEquals("Stopped", coordinator.getString("status"));
+ }
- // Check first coordinator
- JsonObject coord1 = array.getJsonObject(0);
- assertEquals("coordinator1", coord1.getString("name"));
- assertEquals(MyFakeLockManager.class.getName(),
coord1.getString("className"));
- assertEquals(MyFakeLockManager.class.getSimpleName(),
coord1.getString("simpleName"));
- assertTrue(coord1.containsKey("locked"));
- assertTrue(coord1.containsKey("started"));
-
- // Check second coordinator
- JsonObject coord2 = array.getJsonObject(1);
- assertEquals("coordinator2", coord2.getString("name"));
- assertEquals(MyFakeLockManager.class.getName(),
coord2.getString("className"));
- assertEquals(MyFakeLockManager.class.getSimpleName(),
coord2.getString("simpleName"));
- assertTrue(coord2.containsKey("locked"));
- assertTrue(coord2.containsKey("started"));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]