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 xk...@apache.org on 2018/08/31 16:10:38 UTC
[12/47] hadoop git commit: HDSS-375. ContainerReportHandler should
not send replication events for open containers. Contributed by Ajay Kumar.
HDSS-375. ContainerReportHandler should not send replication events for open containers. Contributed by Ajay Kumar.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/c9b63956
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/c9b63956
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/c9b63956
Branch: refs/heads/HDFS-12943
Commit: c9b63956d97521ec21a051bfcbbf4b79262ea16f
Parents: f152582
Author: Xiaoyu Yao <xy...@apache.org>
Authored: Mon Aug 27 10:39:30 2018 -0700
Committer: Xiaoyu Yao <xy...@apache.org>
Committed: Mon Aug 27 10:40:33 2018 -0700
----------------------------------------------------------------------
.../scm/container/ContainerReportHandler.java | 4 ++
.../container/TestContainerReportHandler.java | 40 +++++++++++++++-----
2 files changed, 34 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c9b63956/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReportHandler.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReportHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReportHandler.java
index 5a9e726..5ca2bcb 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReportHandler.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReportHandler.java
@@ -129,6 +129,10 @@ public class ContainerReportHandler implements
"Container is missing from containerStateManager. Can't request "
+ "replication. {}",
containerID);
+ return;
+ }
+ if (container.isContainerOpen()) {
+ return;
}
if (replicationStatus.isReplicationEnabled()) {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c9b63956/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
----------------------------------------------------------------------
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 e7b6cd9..443b4b2 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
@@ -84,6 +84,7 @@ public class TestContainerReportHandler implements EventPublisher {
new Builder()
.setReplicationFactor(ReplicationFactor.THREE)
.setContainerID((Long) invocation.getArguments()[0])
+ .setState(LifeCycleState.CLOSED)
.build()
);
@@ -116,26 +117,45 @@ public class TestContainerReportHandler implements EventPublisher {
when(pipelineSelector.getReplicationPipeline(ReplicationType.STAND_ALONE,
ReplicationFactor.THREE)).thenReturn(pipeline);
- long c1 = containerStateManager
+ ContainerInfo cont1 = containerStateManager
.allocateContainer(pipelineSelector, ReplicationType.STAND_ALONE,
- ReplicationFactor.THREE, "root").getContainerInfo()
- .getContainerID();
-
- long c2 = containerStateManager
+ ReplicationFactor.THREE, "root").getContainerInfo();
+ ContainerInfo cont2 = containerStateManager
.allocateContainer(pipelineSelector, ReplicationType.STAND_ALONE,
- ReplicationFactor.THREE, "root").getContainerInfo()
- .getContainerID();
-
+ ReplicationFactor.THREE, "root").getContainerInfo();
+ // Open Container
+ ContainerInfo cont3 = containerStateManager
+ .allocateContainer(pipelineSelector, ReplicationType.STAND_ALONE,
+ ReplicationFactor.THREE, "root").getContainerInfo();
+
+ long c1 = cont1.getContainerID();
+ long c2 = cont2.getContainerID();
+ long c3 = cont3.getContainerID();
+
+ // Close remaining containers
+ try {
+ containerStateManager.getContainerStateMap()
+ .updateState(cont1, cont1.getState(), LifeCycleState.CLOSING);
+ containerStateManager.getContainerStateMap()
+ .updateState(cont1, cont1.getState(), LifeCycleState.CLOSED);
+ containerStateManager.getContainerStateMap()
+ .updateState(cont2, cont2.getState(), LifeCycleState.CLOSING);
+ containerStateManager.getContainerStateMap()
+ .updateState(cont2, cont2.getState(), LifeCycleState.CLOSED);
+
+ } catch (IOException e) {
+ LOG.info("Failed to change state of open containers.", e);
+ }
//when
//initial reports before replication is enabled. 2 containers w 3 replicas.
reportHandler.onMessage(
new ContainerReportFromDatanode(dn1,
- createContainerReport(new long[] {c1, c2})), this);
+ createContainerReport(new long[] {c1, c2, c3})), this);
reportHandler.onMessage(
new ContainerReportFromDatanode(dn2,
- createContainerReport(new long[] {c1, c2})), this);
+ createContainerReport(new long[] {c1, c2, c3})), this);
reportHandler.onMessage(
new ContainerReportFromDatanode(dn3,
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org