You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ms...@apache.org on 2019/03/20 11:46:00 UTC

[hadoop] branch trunk updated: HDDS-1306. TestContainerStateManagerIntegration fails in Ratis shutdown. Contributed by Lokesh Jain.

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

msingh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 072750c  HDDS-1306. TestContainerStateManagerIntegration fails in Ratis shutdown.  Contributed by Lokesh Jain.
072750c is described below

commit 072750c00a7dfa32048b043f39cb088ff97d0b17
Author: Mukul Kumar Singh <ms...@apache.org>
AuthorDate: Wed Mar 20 17:14:19 2019 +0530

    HDDS-1306. TestContainerStateManagerIntegration fails in Ratis shutdown.  Contributed by Lokesh Jain.
---
 .../replication/ReplicationActivityStatus.java     | 22 ++++++++---------
 .../hdds/scm/server/StorageContainerManager.java   | 12 +++++++++-
 .../hdds/scm/chillmode/TestChillModeHandler.java   |  5 ++--
 .../scm/container/TestContainerReportHandler.java  | 28 ++++++++++++++++------
 .../replication/TestReplicationActivityStatus.java |  4 +++-
 5 files changed, 49 insertions(+), 22 deletions(-)

diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
index 9de0670..2eca221 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
@@ -20,7 +20,7 @@ package org.apache.hadoop.hdds.scm.container.replication;
 import javax.management.ObjectName;
 import java.io.Closeable;
 import java.io.IOException;
-import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.hadoop.hdds.HddsConfigKeys;
@@ -28,6 +28,7 @@ import org.apache.hadoop.metrics2.util.MBeans;
 
 
 import com.google.common.annotations.VisibleForTesting;
+import org.apache.hadoop.utils.Scheduler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,9 +41,14 @@ public class ReplicationActivityStatus implements
   private static final Logger LOG =
       LoggerFactory.getLogger(ReplicationActivityStatus.class);
 
+  private Scheduler scheduler;
   private AtomicBoolean replicationEnabled = new AtomicBoolean();
   private ObjectName jmxObjectName;
 
+  public ReplicationActivityStatus(Scheduler scheduler) {
+    this.scheduler = scheduler;
+  }
+
   @Override
   public boolean isReplicationEnabled() {
     return replicationEnabled.get();
@@ -86,17 +92,11 @@ public class ReplicationActivityStatus implements
   public void fireReplicationStart(boolean chillModeStatus,
       long waitTime) {
     if (!chillModeStatus) {
-      CompletableFuture.runAsync(() -> {
-        try {
-          Thread.sleep(waitTime);
-        } catch (InterruptedException ex) {
-          LOG.error("Interrupted during wait, replication event is not fired",
-              ex);
-        }
+      scheduler.schedule(() -> {
         setReplicationEnabled(true);
-        LOG.info("Replication Timer sleep for {} ms completed. Enable " +
-            "Replication", waitTime);
-      });
+        LOG.info("Replication Timer sleep for {} ms completed. Enable "
+            + "Replication", waitTime);
+      }, waitTime, TimeUnit.MILLISECONDS);
     }
   }
 
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index 684b76f..a149199 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -99,6 +99,7 @@ import org.apache.hadoop.util.GenericOptionsParser;
 import org.apache.hadoop.util.JvmPauseMonitor;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.utils.HddsVersionInfo;
+import org.apache.hadoop.utils.Scheduler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -175,6 +176,7 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
   private SCMMetadataStore scmMetadataStore;
 
   private final EventQueue eventQueue;
+  private final Scheduler commonScheduler;
   /*
    * HTTP endpoint for JMX access.
    */
@@ -284,7 +286,8 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
     commandWatcherLeaseManager = new LeaseManager<>("CommandWatcher",
         watcherTimeout);
     initalizeSystemManagers(conf, configurator);
-    replicationStatus = new ReplicationActivityStatus();
+    commonScheduler = new Scheduler("SCMCommonScheduler", false, 1);
+    replicationStatus = new ReplicationActivityStatus(commonScheduler);
 
     CloseContainerEventHandler closeContainerHandler =
         new CloseContainerEventHandler(pipelineManager, containerManager);
@@ -1004,6 +1007,13 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
       LOG.error("SCM Event Queue stop failed", ex);
     }
 
+    try {
+      LOG.info("Stopping SCM Common Scheduler.");
+      commonScheduler.close();
+    } catch (Exception ex) {
+      LOG.error("SCM Common Scheduler close failed {}", ex);
+    }
+
     if (jvmPauseMonitor != null) {
       jvmPauseMonitor.stop();
     }
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
index 22a3907..efd69fd 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hdds.scm.events.SCMEvents;
 import org.apache.hadoop.hdds.scm.server.SCMClientProtocolServer;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.test.GenericTestUtils;
+import org.apache.hadoop.utils.Scheduler;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -53,8 +54,8 @@ public class TestChillModeHandler {
         "3s");
     scmClientProtocolServer =
         Mockito.mock(SCMClientProtocolServer.class);
-    replicationActivityStatus =
-        new ReplicationActivityStatus();
+    replicationActivityStatus = new ReplicationActivityStatus(
+        new Scheduler("SCMCommonScheduler", false, 1));
     blockManager = Mockito.mock(BlockManagerImpl.class);
     chillModeHandler =
         new ChillModeHandler(configuration, scmClientProtocolServer,
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
index 4981c4b..864a1a9 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
@@ -32,7 +32,10 @@ import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
 import org.apache.hadoop.hdds.scm.server
     .SCMDatanodeHeartbeatDispatcher.ContainerReportFromDatanode;
 import org.apache.hadoop.hdds.server.events.EventPublisher;
+import org.apache.hadoop.utils.Scheduler;
+import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.mockito.stubbing.Answer;
@@ -60,6 +63,17 @@ import static org.apache.hadoop.hdds.scm.container
  */
 public class TestContainerReportHandler {
 
+  private static Scheduler scheduler;
+
+  @BeforeClass
+  public static void setup() {
+    scheduler = new Scheduler("SCMCommonScheduler", false, 1);
+  }
+
+  @AfterClass
+  public static void tearDown() {
+    scheduler.close();
+  }
 
   @Test
   public void testUnderReplicatedContainer()
@@ -70,7 +84,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -152,7 +166,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -234,7 +248,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -329,7 +343,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -401,7 +415,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -475,7 +489,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
@@ -572,7 +586,7 @@ public class TestContainerReportHandler {
     final ContainerManager containerManager = Mockito.mock(
         ContainerManager.class);
     final ReplicationActivityStatus replicationActivityStatus =
-        new ReplicationActivityStatus();
+        new ReplicationActivityStatus(scheduler);
     replicationActivityStatus.enableReplication();
 
     final PipelineManager pipelineManager = Mockito.mock(PipelineManager.class);
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationActivityStatus.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationActivityStatus.java
index 9019792..c36ba75 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationActivityStatus.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationActivityStatus.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.hdds.scm.events.SCMEvents;
 import org.apache.hadoop.hdds.scm.server.SCMClientProtocolServer;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.test.GenericTestUtils;
+import org.apache.hadoop.utils.Scheduler;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -47,7 +48,8 @@ public class TestReplicationActivityStatus {
   @BeforeClass
   public static void setup() {
     eventQueue = new EventQueue();
-    replicationActivityStatus = new ReplicationActivityStatus();
+    replicationActivityStatus = new ReplicationActivityStatus(
+        new Scheduler("SCMCommonScheduler", false, 1));
 
     OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
     ozoneConfiguration.set(HddsConfigKeys.


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org