You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2018/10/01 18:05:17 UTC

[4/4] activemq-artemis git commit: ARTEMIS-1951 Fix NPE on updateQueue with NULL user

ARTEMIS-1951 Fix NPE on updateQueue with NULL user

(cherry picked from commit 60c586a64c760414509c8990554e4bfbc5b0845f)


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/04938167
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/04938167
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/04938167

Branch: refs/heads/2.6.x
Commit: 049381679abd7f2075173a43f5687fc733fe6280
Parents: 20b746e
Author: Francesco Nigro <ni...@gmail.com>
Authored: Mon Jul 2 09:18:39 2018 +0200
Committer: Justin Bertram <jb...@apache.org>
Committed: Mon Oct 1 13:04:06 2018 -0500

----------------------------------------------------------------------
 .../core/postoffice/impl/PostOfficeImpl.java    |  5 ++
 .../core/server/impl/ActiveMQServerImpl.java    |  2 +-
 .../integration/client/UpdateQueueTest.java     | 71 +++++++++++++++++++-
 3 files changed, 76 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/04938167/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
index ee017dd..a80d930 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
@@ -512,6 +512,11 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
             changed = true;
             queue.setExclusive(exclusive);
          }
+         if (logger.isDebugEnabled()) {
+            if (user == null && queue.getUser() != null) {
+               logger.debug("Ignoring updating Queue to a NULL user");
+            }
+         }
          if (user != null && !user.equals(queue.getUser())) {
             changed = true;
             queue.setUser(user);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/04938167/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 5aca765..fb1fb67 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -2997,7 +2997,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
                             Boolean purgeOnNoConsumers,
                             Boolean exclusive,
                             String user) throws Exception {
-      final QueueBinding queueBinding = this.postOffice.updateQueue(new SimpleString(name), routingType, maxConsumers, purgeOnNoConsumers, exclusive, new SimpleString(user));
+      final QueueBinding queueBinding = this.postOffice.updateQueue(new SimpleString(name), routingType, maxConsumers, purgeOnNoConsumers, exclusive, SimpleString.toSimpleString(user));
       if (queueBinding != null) {
          final Queue queue = queueBinding.getQueue();
          return queue;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/04938167/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/UpdateQueueTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/UpdateQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/UpdateQueueTest.java
index 9c8da67..60a84a4 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/UpdateQueueTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/UpdateQueueTest.java
@@ -21,7 +21,6 @@ import javax.jms.Connection;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
-
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -40,6 +39,76 @@ import org.junit.Test;
 public class UpdateQueueTest extends ActiveMQTestBase {
 
    @Test
+   public void testUpdateQueueWithNullUser() throws Exception {
+      ActiveMQServer server = createServer(true, true);
+
+      ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
+
+      server.start();
+
+      SimpleString ADDRESS = SimpleString.toSimpleString("queue.0");
+
+      final SimpleString user = new SimpleString("newUser");
+
+      Queue queue = server.createQueue(ADDRESS, RoutingType.ANYCAST, ADDRESS, user, null, true, false);
+
+      long originalID = queue.getID();
+
+      Assert.assertEquals(user, queue.getUser());
+
+      Connection conn = factory.createConnection();
+      Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      MessageProducer prod = session.createProducer(session.createQueue(ADDRESS.toString()));
+
+      for (int i = 0; i < 100; i++) {
+         prod.send(session.createTextMessage("message " + i));
+      }
+
+      server.updateQueue(ADDRESS.toString(), RoutingType.ANYCAST, 1, false, false, null);
+
+      conn.close();
+      factory.close();
+
+      server.stop();
+      server.start();
+
+      validateBindingRecords(server, JournalRecordIds.QUEUE_BINDING_RECORD, 2);
+
+      queue = server.locateQueue(ADDRESS);
+
+      Assert.assertNotNull("queue not found", queue);
+
+      Assert.assertEquals("newUser", user, queue.getUser());
+
+      factory = new ActiveMQConnectionFactory();
+
+      conn = factory.createConnection();
+      session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+      MessageConsumer consumer = session.createConsumer(session.createQueue(ADDRESS.toString()));
+
+      conn.start();
+      for (int i = 0; i < 100; i++) {
+         Assert.assertNotNull(consumer.receive(5000));
+      }
+
+      Assert.assertNull(consumer.receiveNoWait());
+
+      Assert.assertEquals(1, queue.getMaxConsumers());
+
+      conn.close();
+
+      Assert.assertEquals(originalID, server.locateQueue(ADDRESS).getID());
+
+      // stopping, restarting to make sure the system will not create an extra record without an udpate
+      server.stop();
+      server.start();
+      validateBindingRecords(server, JournalRecordIds.QUEUE_BINDING_RECORD, 2);
+      server.stop();
+
+   }
+
+   @Test
    public void testUpdateQueue() throws Exception {
       ActiveMQServer server = createServer(true, true);