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