[1/2] activemq-artemis git commit: This closes #2372

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[1/2] activemq-artemis git commit: This closes #2372

nigrofranz
Repository: activemq-artemis
Updated Branches:
  refs/heads/master 10b661a5c -> a2705ae91


This closes #2372


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

Branch: refs/heads/master
Commit: a2705ae91df859ba11376499af31fc677cc30cc3
Parents: 10b661a 647998c
Author: Francesco Nigro <[hidden email]>
Authored: Thu Dec 6 16:00:53 2018 +0100
Committer: Francesco Nigro <[hidden email]>
Committed: Thu Dec 6 16:00:53 2018 +0100

----------------------------------------------------------------------
 .../core/server/impl/ActiveMQServerImpl.java    |   4 +-
 artemis-web/pom.xml                             |   6 +
 .../activemq/cli/test/WebServerCLITest.java     | 112 +++++++++++++++++++
 3 files changed, 120 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


Reply | Threaded
Open this post in threaded view
|

[2/2] activemq-artemis git commit: ARTEMIS-2126 web server can leak

nigrofranz
ARTEMIS-2126 web server can leak


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

Branch: refs/heads/master
Commit: 647998c4e1345bf04c9cdaf611fa5b33915202b6
Parents: 10b661a
Author: Justin Bertram <[hidden email]>
Authored: Mon Oct 15 11:06:24 2018 -0500
Committer: Francesco Nigro <[hidden email]>
Committed: Thu Dec 6 16:00:53 2018 +0100

----------------------------------------------------------------------
 .../core/server/impl/ActiveMQServerImpl.java    |   4 +-
 artemis-web/pom.xml                             |   6 +
 .../activemq/cli/test/WebServerCLITest.java     | 112 +++++++++++++++++++
 3 files changed, 120 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/647998c4/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 aad9cec..637b21a 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
@@ -985,7 +985,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       }
    }
 
-   void stop(boolean failoverOnServerShutdown, final boolean criticalIOError, boolean restarting) {
+   public void stop(boolean failoverOnServerShutdown, final boolean criticalIOError, boolean restarting) {
       this.stop(failoverOnServerShutdown, criticalIOError, restarting, false);
    }
 
@@ -1186,7 +1186,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       for (ActiveMQComponent externalComponent : externalComponents) {
          try {
             if (externalComponent instanceof ServiceComponent) {
-               ((ServiceComponent)externalComponent).stop(isShutdown);
+               ((ServiceComponent)externalComponent).stop(isShutdown || criticalIOError);
             } else {
                externalComponent.stop();
             }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/647998c4/artemis-web/pom.xml
----------------------------------------------------------------------
diff --git a/artemis-web/pom.xml b/artemis-web/pom.xml
index dbace47..21c9a1b 100644
--- a/artemis-web/pom.xml
+++ b/artemis-web/pom.xml
@@ -76,6 +76,12 @@
          <scope>test</scope>
       </dependency>
       <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-junit</artifactId>
+         <version>${project.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
          <groupId>io.netty</groupId>
          <artifactId>netty-buffer</artifactId>
       </dependency>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/647998c4/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerCLITest.java
----------------------------------------------------------------------
diff --git a/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerCLITest.java b/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerCLITest.java
new file mode 100644
index 0000000..e624e6f
--- /dev/null
+++ b/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerCLITest.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.cli.test;
+
+import java.io.File;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.activemq.artemis.api.core.Pair;
+import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
+import org.apache.activemq.artemis.cli.Artemis;
+import org.apache.activemq.artemis.cli.commands.Run;
+import org.apache.activemq.artemis.cli.commands.tools.LockAbstract;
+import org.apache.activemq.artemis.core.server.ActiveMQComponent;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
+import org.apache.activemq.artemis.core.server.management.ManagementContext;
+import org.apache.activemq.artemis.jlibaio.LibaioContext;
+import org.apache.activemq.artemis.junit.Wait;
+import org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoader;
+import org.apache.activemq.artemis.utils.ThreadLeakCheckRule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class WebServerCLITest {
+
+   @Rule
+   public TemporaryFolder temporaryFolder;
+
+   @Rule
+   public ThreadLeakCheckRule leakCheckRule = new ThreadLeakCheckRule();
+
+   private String original = System.getProperty("java.security.auth.login.config");
+
+   public WebServerCLITest() {
+      File parent = new File("./target/tmp");
+      parent.mkdirs();
+      temporaryFolder = new TemporaryFolder(parent);
+   }
+
+   @Before
+   public void setup() throws Exception {
+      System.setProperty("java.security.auth.login.config", temporaryFolder.getRoot().getAbsolutePath() + "/etc/login.config");
+      Run.setEmbedded(true);
+      PropertiesLoader.resetUsersAndGroupsCache();
+   }
+
+   @After
+   public void tearDown() throws Exception {
+      ActiveMQClient.clearThreadPools();
+      System.clearProperty("artemis.instance");
+      System.clearProperty("artemis.instance.etc");
+      Run.setEmbedded(false);
+
+      if (original == null) {
+         System.clearProperty("java.security.auth.login.config");
+      } else {
+         System.setProperty("java.security.auth.login.config", original);
+      }
+
+      LockAbstract.unlock();
+   }
+
+   @Test
+   public void testStopEmbeddedWebServerOnCriticalIOError() throws Exception {
+      Run.setEmbedded(true);
+      File instance1 = new File(temporaryFolder.getRoot(), "instance_user");
+      System.setProperty("java.security.auth.login.config", instance1.getAbsolutePath() + "/etc/login.config");
+      Artemis.main("create", instance1.getAbsolutePath(), "--silent", "--no-autotune", "--no-amqp-acceptor", "--no-mqtt-acceptor", "--no-stomp-acceptor", "--no-hornetq-acceptor");
+      System.setProperty("artemis.instance", instance1.getAbsolutePath());
+      Object result = Artemis.internalExecute("run");
+      ActiveMQServer activeMQServer = ((Pair<ManagementContext, ActiveMQServer>) result).getB();
+      List<ActiveMQComponent> externalComponents = activeMQServer.getExternalComponents();
+
+      /**
+       * simulate critical IO error as this is what is eventually called by org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.ShutdownOnCriticalErrorListener
+       */
+      ((ActiveMQServerImpl) activeMQServer).stop(false, true, false);
+
+      for (ActiveMQComponent externalComponent : externalComponents) {
+         assertTrue(Wait.waitFor(() -> externalComponent.isStarted() == false, 3000, 100));
+      }
+      stopServer();
+   }
+
+   private void stopServer() throws Exception {
+      Artemis.internalExecute("stop");
+      assertTrue(Run.latchRunning.await(5, TimeUnit.SECONDS));
+      assertEquals(0, LibaioContext.getTotalMaxIO());
+   }
+}