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]

Reply via email to