This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 0f200a4  ARTEMIS-2698 Expose queue group attributes
     new d13b802  This closes #3065
0f200a4 is described below

commit 0f200a479879bbda1e8aa04b6d8db4d94114ae92
Author: brusdev <[email protected]>
AuthorDate: Mon Apr 6 11:38:54 2020 +0200

    ARTEMIS-2698 Expose queue group attributes
---
 .../apache/activemq/artemis/logs/AuditLogger.java  | 24 +++++++++++
 .../artemis/api/core/management/QueueControl.java  | 17 ++++++++
 .../core/management/impl/QueueControlImpl.java     | 47 ++++++++++++++++++++++
 .../core/management/impl/view/QueueView.java       | 11 ++++-
 .../management/ActiveMQServerControlTest.java      | 13 ++++--
 .../integration/management/QueueControlTest.java   | 15 +++++++
 .../management/QueueControlUsingCoreTest.java      | 15 +++++++
 7 files changed, 137 insertions(+), 5 deletions(-)

diff --git 
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
 
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
index b934c9e..28ea864 100644
--- 
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
+++ 
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
@@ -2300,4 +2300,28 @@ public interface AuditLogger extends BasicLogger {
    @LogMessage(level = Logger.Level.INFO)
    @Message(id = 601505, value = "User {0} is getting disk store usage 
percentage on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
    void getDiskStoreUsagePercentage(String user, Object source, Object... 
args);
+
+   static void isGroupRebalance(Object source) {
+      LOGGER.isGroupRebalance(getCaller(), source);
+   }
+
+   @LogMessage(level = Logger.Level.INFO)
+   @Message(id = 601506, value = "User {0} is getting group rebalance property 
on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+   void isGroupRebalance(String user, Object source, Object... args);
+
+   static void getGroupBuckets(Object source) {
+      LOGGER.getGroupBuckets(getCaller(), source);
+   }
+
+   @LogMessage(level = Logger.Level.INFO)
+   @Message(id = 601507, value = "User {0} is getting group buckets on target 
resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+   void getGroupBuckets(String user, Object source, Object... args);
+
+   static void getGroupFirstKey(Object source) {
+      LOGGER.getGroupFirstKey(getCaller(), source);
+   }
+
+   @LogMessage(level = Logger.Level.INFO)
+   @Message(id = 601508, value = "User {0} is getting group first key on 
target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+   void getGroupFirstKey(String user, Object source, Object... args);
 }
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java
index 7942083..3c0e7f3 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java
@@ -676,4 +676,21 @@ public interface QueueControl {
    @Attribute(desc = "Get the ring size")
    long getRingSize();
 
+   /**
+    * Returns whether the groups of this queue are automatically rebalanced.
+    */
+   @Attribute(desc = "whether the groups of this queue are automatically 
rebalanced")
+   boolean isGroupRebalance();
+
+   /**
+    * Will return the group buckets.
+    */
+   @Attribute(desc = "Get the group buckets")
+   int getGroupBuckets();
+
+   /**
+    * Will return the header key to notify a consumer of a group change.
+    */
+   @Attribute(desc = "Get the header key to notify a consumer of a group 
change")
+   String getGroupFirstKey();
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
index d5a3796..584ea96 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
@@ -1687,6 +1687,53 @@ public class QueueControlImpl extends AbstractControl 
implements QueueControl {
 
    }
 
+   @Override
+   public boolean isGroupRebalance() {
+      if (AuditLogger.isEnabled()) {
+         AuditLogger.isGroupRebalance(queue);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         return queue.isGroupRebalance();
+      } finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
+   public int getGroupBuckets() {
+      if (AuditLogger.isEnabled()) {
+         AuditLogger.getGroupBuckets(queue);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         return queue.getMaxConsumers();
+      } finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
+   public String getGroupFirstKey() {
+      if (AuditLogger.isEnabled()) {
+         AuditLogger.getMaxConsumers(queue);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         SimpleString groupFirstKey = queue.getGroupFirstKey();
+
+         return groupFirstKey != null ? groupFirstKey.toString() : null;
+      } finally {
+         blockOnIO();
+      }
+   }
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
index 8775715..c84b09b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
@@ -63,7 +63,10 @@ public class QueueView extends 
ActiveMQAbstractView<QueueControl> {
          .add("deliverDeliver", toString(q.isDirectDeliver()))
          .add("exclusive", toString(queue.isExclusive()))
          .add("lastValue", toString(queue.isLastValue()))
-         .add("scheduledCount", toString(queue.getScheduledCount()));
+         .add("scheduledCount", toString(queue.getScheduledCount()))
+         .add("groupRebalance", toString(queue.isGroupRebalance()))
+         .add("groupBuckets", toString(queue.getGroupBuckets()))
+         .add("groupFirstKey", toString(queue.getGroupFirstKey()));
       return obj;
    }
 
@@ -117,6 +120,12 @@ public class QueueView extends 
ActiveMQAbstractView<QueueControl> {
             return q.isLastValue();
          case "scheduledCount":
             return q.getScheduledCount();
+         case "groupRebalance":
+            return queue.isGroupRebalance();
+         case "groupBuckets":
+            return queue.getGroupBuckets();
+         case "groupFirstKey":
+            return queue.getGroupFirstKey();
          default:
             throw new IllegalArgumentException("Unsupported field, " + 
fieldName);
       }
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 79f1305..2b5255d 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
@@ -372,9 +372,9 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
       Assert.assertEquals(purgeOnNoConsumers, 
queueControl.isPurgeOnNoConsumers());
       Assert.assertEquals(false, queueControl.isTemporary());
       Assert.assertEquals(exclusive, queueControl.isExclusive());
-//      Assert.assertEquals(groupRebalance, queueControl.getGroupRebalance());
-//      Assert.assertEquals(groupBuckets, queueControl.getGroupBuckets());
-//      Assert.assertEquals(groupFirstKey, queueControl.getGroupFirstKey());
+      Assert.assertEquals(groupRebalance, queueControl.isGroupRebalance());
+      Assert.assertEquals(groupBuckets, queueControl.getGroupBuckets());
+      Assert.assertEquals(groupFirstKey, queueControl.getGroupFirstKey());
       Assert.assertEquals(lastValue, queueControl.isLastValue());
 //      Assert.assertEquals(lastValueKey, queueControl.getLastValueKey());
 //      Assert.assertEquals(nonDestructive, queueControl.isNonDestructive());
@@ -2096,7 +2096,12 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
       // as for what we expect it's either true or false through management, 
we are not testing for directDeliver here, just
       // if management works.
       Assert.assertTrue(resultDirectDeliver.equals("true") || 
resultDirectDeliver.equals("false"));
-
+      Assert.assertEquals("exclusive", "false", 
array.getJsonObject(0).getString("exclusive"));
+      Assert.assertEquals("lastValue", "false", 
array.getJsonObject(0).getString("lastValue"));
+      Assert.assertEquals("scheduledCount", "0", 
array.getJsonObject(0).getString("scheduledCount"));
+      Assert.assertEquals("groupRebalance", "false", 
array.getJsonObject(0).getString("groupRebalance"));
+      Assert.assertEquals("groupBuckets", "-1", 
array.getJsonObject(0).getString("groupBuckets"));
+      Assert.assertEquals("groupFirstKey", "", 
array.getJsonObject(0).getString("groupFirstKey"));
    }
 
    @Test
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
index 49bb4bb..178ac58 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
@@ -123,6 +123,21 @@ public class QueueControlTest extends ManagementTestBase {
    }
 
    @Test
+   public void testGroupAttributes() throws Exception {
+      SimpleString address = RandomUtil.randomSimpleString();
+      SimpleString queue = RandomUtil.randomSimpleString();
+
+      session.createQueue(address, RoutingType.MULTICAST, queue);
+
+      QueueControl queueControl = createManagementControl(address, queue);
+      Assert.assertFalse(queueControl.isGroupRebalance());
+      Assert.assertEquals(-1, queueControl.getGroupBuckets());
+      Assert.assertEquals(null, queueControl.getGroupFirstKey());
+
+      session.deleteQueue(queue);
+   }
+
+   @Test
    public void testRetroactiveResourceAttribute() throws Exception {
       SimpleString baseAddress = RandomUtil.randomSimpleString();
       String internalNamingPrefix = server.getInternalNamingPrefix();
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java
index 2b4f418..824579f 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java
@@ -91,6 +91,21 @@ public class QueueControlUsingCoreTest extends 
QueueControlTest {
          }
 
          @Override
+         public boolean isGroupRebalance() {
+            return (Boolean) proxy.retrieveAttributeValue("groupRebalance");
+         }
+
+         @Override
+         public int getGroupBuckets() {
+            return (Integer) proxy.retrieveAttributeValue("groupBuckets", 
Integer.class);
+         }
+
+         @Override
+         public String getGroupFirstKey() {
+            return (String) proxy.retrieveAttributeValue("groupFirstKey");
+         }
+
+         @Override
          public boolean changeMessagePriority(final long messageID, final int 
newPriority) throws Exception {
             return (Boolean) proxy.invokeOperation("changeMessagePriority", 
messageID, newPriority);
          }

Reply via email to