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

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


The following commit(s) were added to refs/heads/main by this push:
     new 8d7608b4d6 ARTEMIS-4929 use correct details for expiration audit log
8d7608b4d6 is described below

commit 8d7608b4d64bf23bd6be923cb16b08426809112d
Author: Justin Bertram <[email protected]>
AuthorDate: Mon Nov 10 16:41:50 2025 -0600

    ARTEMIS-4929 use correct details for expiration audit log
---
 .../artemis/core/server/impl/QueueImpl.java        | 13 +++++++--
 .../tests/smoke/logging/AuditLoggerTest.java       | 31 ++++++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
index aefcba2564..5ff8f65021 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
@@ -107,6 +107,7 @@ import 
org.apache.activemq.artemis.core.transaction.impl.BindingsTransactionImpl
 import org.apache.activemq.artemis.core.transaction.impl.TransactionImpl;
 import org.apache.activemq.artemis.logs.AuditLogger;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
+import org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal;
 import org.apache.activemq.artemis.utils.ArtemisCloseable;
 import org.apache.activemq.artemis.utils.BooleanUtil;
 import org.apache.activemq.artemis.utils.Env;
@@ -1733,8 +1734,16 @@ public class QueueImpl extends CriticalComponentImpl 
implements Queue {
          if (AuditLogger.isMessageLoggingEnabled()) {
             // it's possible for the consumer to be null (e.g. acking the 
message administratively)
             final ServerSession session = consumer != null ? 
server.getSessionByID(consumer.getSessionID()) : null;
-            final Subject subject = session == null ? null : 
session.getRemotingConnection().getSubject();
-            final String remoteAddress = session == null ? null : 
session.getRemotingConnection().getRemoteAddress();
+            final Subject subject;
+            final String remoteAddress;
+            if (session == null) {
+               subject = new Subject();
+               subject.getPrincipals().add(new UserPrincipal("system"));
+               remoteAddress = "internal";
+            } else {
+               subject = session.getRemotingConnection().getSubject();
+               remoteAddress = 
session.getRemotingConnection().getRemoteAddress();
+            }
 
             if (transactional) {
                AuditLogger.addAckToTransaction(subject, remoteAddress, 
getName().toString(), ref.getMessage().toString(), tx.toString());
diff --git 
a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerTest.java
 
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerTest.java
index 85b95915cf..c03b43590a 100644
--- 
a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerTest.java
+++ 
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerTest.java
@@ -38,12 +38,15 @@ import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.QueueConfiguration;
 import org.apache.activemq.artemis.api.core.RoutingType;
 import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.client.ClientMessage;
 import org.apache.activemq.artemis.api.core.client.ClientProducer;
 import org.apache.activemq.artemis.api.core.client.ClientSession;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
+import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
 import org.apache.activemq.artemis.api.core.management.AddressControl;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.activemq.artemis.tests.util.CFUtil;
 import org.apache.activemq.artemis.utils.Base64;
 import org.apache.activemq.artemis.utils.RandomUtil;
@@ -199,4 +202,32 @@ public class AuditLoggerTest extends AuditLoggerTestBase {
       Wait.assertTrue(() -> findLogRecord(getAuditLog(), "is consuming a 
message from"), 5000);
       Wait.assertTrue(() -> findLogRecord(getAuditLog(), "acknowledged message 
from"), 5000);
    }
+
+   @Test
+   public void testExpiration() throws Exception {
+      final int EXPIRATION = 1000;
+      final SimpleString queue = RandomUtil.randomUUIDSimpleString();
+      final SimpleString expiryQueue = RandomUtil.randomUUIDSimpleString();
+
+      JMXConnector jmxConnector = getJmxConnector();
+      MBeanServerConnection mBeanServerConnection = 
jmxConnector.getMBeanServerConnection();
+      String brokerName = "0.0.0.0";  // configured e.g. in broker.xml 
<broker-name> element
+      ObjectNameBuilder objectNameBuilder = 
ObjectNameBuilder.create(ActiveMQDefaultConfiguration.getDefaultJmxDomain(), 
brokerName, true);
+
+      final ActiveMQServerControl serverControl = 
MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, 
objectNameBuilder.getActiveMQServerObjectName(), ActiveMQServerControl.class, 
false);
+
+      serverControl.addAddressSettings(queue.toString(), new 
AddressSettings().setExpiryAddress(expiryQueue).toJSON());
+
+      
session.createQueue(QueueConfiguration.of(queue).setAddress(queue).setDurable(false));
+      
session.createQueue(QueueConfiguration.of(expiryQueue).setAddress(expiryQueue).setDurable(false));
+
+      ClientProducer producer = session.createProducer(queue);
+      ClientMessage message = session.createMessage(false);
+      message.setExpiration(System.currentTimeMillis() + EXPIRATION);
+      producer.send(message);
+
+      Thread.sleep(EXPIRATION);
+
+      Wait.assertTrue(() -> findLogRecord(getAuditLog(), "User system@internal 
acknowledged message from"), EXPIRATION * 2, 100);
+   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to