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);
}