You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by sa...@apache.org on 2023/02/28 07:48:04 UTC

[ozone] branch master updated: HDDS-6241. Follower SCM node repeatedly sending requests to Ratis server. (#4302)

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

sammichen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 628623d664 HDDS-6241. Follower SCM node repeatedly sending requests to Ratis server. (#4302)
628623d664 is described below

commit 628623d6644dfa8598c96f70bab41383b157fb56
Author: Tsz-Wo Nicholas Sze <sz...@apache.org>
AuthorDate: Mon Feb 27 23:47:57 2023 -0800

    HDDS-6241. Follower SCM node repeatedly sending requests to Ratis server. (#4302)
---
 .../hadoop/hdds/scm/container/CloseContainerEventHandler.java |  7 ++++++-
 .../hdds/scm/container/IncrementalContainerReportHandler.java | 11 ++++++-----
 .../hdds/scm/container/TestCloseContainerEventHandler.java    |  1 +
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/CloseContainerEventHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/CloseContainerEventHandler.java
index a2afb10c55..a158912996 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/CloseContainerEventHandler.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/CloseContainerEventHandler.java
@@ -68,6 +68,11 @@ public class CloseContainerEventHandler implements EventHandler<ContainerID> {
 
   @Override
   public void onMessage(ContainerID containerID, EventPublisher publisher) {
+    if (!scmContext.isLeader()) {
+      LOG.warn("Skip close container {} since current SCM is not leader.",
+          containerID);
+      return;
+    }
 
     try {
       LOG.info("Close container Event triggered for container : {}, " +
@@ -133,7 +138,7 @@ public class CloseContainerEventHandler implements EventHandler<ContainerID> {
    * @throws ContainerNotFoundException
    */
   private List<DatanodeDetails> getNodes(final ContainerInfo container)
-      throws ContainerNotFoundException, NotLeaderException {
+      throws ContainerNotFoundException {
     try {
       return pipelineManager.getPipeline(container.getPipelineID()).getNodes();
     } catch (PipelineNotFoundException ex) {
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/IncrementalContainerReportHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/IncrementalContainerReportHandler.java
index 21c94430c8..665f6a4b90 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/IncrementalContainerReportHandler.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/IncrementalContainerReportHandler.java
@@ -33,6 +33,7 @@ import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher
 import org.apache.hadoop.hdds.server.events.EventHandler;
 import org.apache.hadoop.hdds.server.events.EventPublisher;
 import org.apache.hadoop.ozone.common.statemachine.InvalidStateTransitionException;
+import org.apache.ratis.protocol.exceptions.NotLeaderException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,7 +73,7 @@ public class IncrementalContainerReportHandler extends
       return;
     }
 
-    boolean success = true;
+    boolean success = false;
     // HDDS-5249 - we must ensure that an ICR and FCR for the same datanode
     // do not run at the same time or it can result in a data consistency
     // issue between the container list in NodeManager and the replicas in
@@ -98,20 +99,20 @@ public class IncrementalContainerReportHandler extends
           if (ContainerReportValidator.validate(container, dd, replicaProto)) {
             processContainerReplica(dd, container, replicaProto, publisher);
           }
+          success = true;
         } catch (ContainerNotFoundException e) {
-          success = false;
           LOG.warn("Container {} not found!", replicaProto.getContainerID());
         } catch (NodeNotFoundException ex) {
-          success = false;
           LOG.error("Received ICR from unknown datanode {}",
               report.getDatanodeDetails(), ex);
         } catch (ContainerReplicaNotFoundException e) {
-          success = false;
           LOG.warn("Container {} replica not found!",
               replicaProto.getContainerID());
+        } catch (NotLeaderException nle) {
+          LOG.warn("Failed to process " + replicaProto.getState()
+              + " Container " + id + " due to " + nle);
         } catch (IOException | InvalidStateTransitionException |
                  TimeoutException e) {
-          success = false;
           LOG.error("Exception while processing ICR for container {}",
               replicaProto.getContainerID(), e);
         }
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestCloseContainerEventHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestCloseContainerEventHandler.java
index d802656968..2062e26580 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestCloseContainerEventHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestCloseContainerEventHandler.java
@@ -80,6 +80,7 @@ public class TestCloseContainerEventHandler {
     containerManager = Mockito.mock(ContainerManager.class);
     pipelineManager = Mockito.mock(PipelineManager.class);
     SCMContext scmContext = Mockito.mock(SCMContext.class);
+    Mockito.when(scmContext.isLeader()).thenReturn(true);
     eventPublisher = Mockito.mock(EventPublisher.class);
     eventHandler = new CloseContainerEventHandler(
         pipelineManager, containerManager, scmContext);


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