From 4a7c8ffcea75b77c53e2bbb65e8557702552a31d Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 11:59:12 -0800 Subject: [PATCH 01/10] HDDS-3066. SCM crash during loading containers to DB. --- .../scm/container/SCMContainerManager.java | 25 ++++++++++++++++--- .../scm/server/StorageContainerManager.java | 3 ++- .../TestCloseContainerEventHandler.java | 3 ++- .../container/TestSCMContainerManager.java | 6 +++-- .../hdds/scm/node/TestContainerPlacement.java | 2 +- .../recon/scm/ReconContainerManager.java | 7 ++++-- .../ReconStorageContainerManagerFacade.java | 3 ++- .../AbstractReconContainerManagerTest.java | 3 ++- 8 files changed, 39 insertions(+), 13 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index 9624ce0f6c20..dc8101716c6b 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -24,13 +24,17 @@ import org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState; import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.hadoop.hdds.scm.container.metrics.SCMContainerManagerMetrics; +import org.apache.hadoop.hdds.scm.events.SCMEvents; import org.apache.hadoop.hdds.scm.exceptions.SCMException; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; import org.apache.hadoop.hdds.scm.pipeline.PipelineManager; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType; +import org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException; import org.apache.hadoop.hdds.server.ServerUtils; +import org.apache.hadoop.hdds.server.events.EventPublisher; +import org.apache.hadoop.hdds.server.events.EventQueue; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.hdds.utils.BatchOperation; import org.apache.hadoop.hdds.utils.MetadataStore; @@ -73,6 +77,8 @@ public class SCMContainerManager implements ContainerManager { private final SCMContainerManagerMetrics scmContainerManagerMetrics; + private final EventPublisher eventPublisher; + /** * Constructs a mapping class that creates mapping between container names * and pipelines. @@ -82,10 +88,12 @@ public class SCMContainerManager implements ContainerManager { * in MB. * @param conf - {@link Configuration} * @param pipelineManager - {@link PipelineManager} + * @param eventQueue * @throws IOException on Failure. */ public SCMContainerManager(final Configuration conf, - PipelineManager pipelineManager) throws IOException { + PipelineManager pipelineManager, EventQueue eventQueue) + throws IOException { final File containerDBPath = getContainerDBPath(conf); final int cacheSize = conf.getInt(OZONE_SCM_DB_CACHE_SIZE_MB, @@ -103,6 +111,7 @@ public SCMContainerManager(final Configuration conf, this.numContainerPerOwnerInPipeline = conf .getInt(ScmConfigKeys.OZONE_SCM_PIPELINE_OWNER_CONTAINER_COUNT, ScmConfigKeys.OZONE_SCM_PIPELINE_OWNER_CONTAINER_COUNT_DEFAULT); + this.eventPublisher = eventQueue; loadExistingContainers(); @@ -117,9 +126,17 @@ private void loadExistingContainers() throws IOException { ContainerInfoProto.PARSER.parseFrom(entry.getValue())); Preconditions.checkNotNull(container); containerStateManager.loadContainer(container); - if (container.getState() == LifeCycleState.OPEN) { - pipelineManager.addContainerToPipeline(container.getPipelineID(), - ContainerID.valueof(container.getContainerID())); + try { + if (container.getState() == LifeCycleState.OPEN) { + pipelineManager.addContainerToPipeline(container.getPipelineID(), + ContainerID.valueof(container.getContainerID())); + } + } catch (PipelineNotFoundException ex) { + LOG.warn("Found a Container {} which is in {} state with out a " + + "pipeline {}. Triggering Close Container.", container, + container.getState(), container.getPipelineID()); + eventPublisher.fireEvent(SCMEvents.CLOSE_CONTAINER, + container.containerID()); } } } 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 6063a6248da5..28dcf15e1e0b 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 @@ -409,7 +409,8 @@ private void initializeSystemManagers(OzoneConfiguration conf, if (configurator.getContainerManager() != null) { containerManager = configurator.getContainerManager(); } else { - containerManager = new SCMContainerManager(conf, pipelineManager); + containerManager = new SCMContainerManager(conf, pipelineManager, + eventQueue); } if (configurator.getScmBlockManager() != null) { 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 10c38a8fadcf..3c6af7606cc8 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 @@ -78,7 +78,8 @@ public static void setUp() throws Exception { pipelineManager.getStateManager(), configuration, eventQueue); pipelineManager.setPipelineProvider(HddsProtos.ReplicationType.RATIS, mockRatisProvider); - containerManager = new SCMContainerManager(configuration, pipelineManager); + containerManager = new SCMContainerManager(configuration, pipelineManager, + eventQueue); pipelineManager.triggerPipelineCreation(); eventQueue.addHandler(CLOSE_CONTAINER, new CloseContainerEventHandler(pipelineManager, containerManager)); diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java index 405c582d32bb..893bc65c7296 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java @@ -95,9 +95,11 @@ public static void setUp() throws Exception { throw new IOException("Unable to create test directory path"); } nodeManager = new MockNodeManager(true, 10); + EventQueue eventQueue = new EventQueue(); pipelineManager = - new SCMPipelineManager(conf, nodeManager, new EventQueue()); - containerManager = new SCMContainerManager(conf, pipelineManager); + new SCMPipelineManager(conf, nodeManager, eventQueue); + containerManager = new SCMContainerManager(conf, pipelineManager, + eventQueue); xceiverClientManager = new XceiverClientManager(conf); replicationFactor = SCMTestUtils.getReplicationFactor(conf); replicationType = SCMTestUtils.getReplicationType(conf); diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java index 88085467c5dd..4d9e664ab716 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java @@ -108,7 +108,7 @@ SCMContainerManager createContainerManager(Configuration config, OZONE_SCM_DB_CACHE_SIZE_DEFAULT); PipelineManager pipelineManager = new SCMPipelineManager(config, scmNodeManager, eventQueue); - return new SCMContainerManager(config, pipelineManager); + return new SCMContainerManager(config, pipelineManager, eventQueue); } diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java index 054eeab6155d..0149f83496a7 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hdds.scm.container.SCMContainerManager; import org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline; import org.apache.hadoop.hdds.scm.pipeline.PipelineManager; +import org.apache.hadoop.hdds.server.events.EventQueue; import org.apache.hadoop.ozone.recon.ReconUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,11 +52,13 @@ public class ReconContainerManager extends SCMContainerManager { * * @param conf - {@link Configuration} * @param pipelineManager - {@link PipelineManager} + * @param eventQueue * @throws IOException on Failure. */ public ReconContainerManager( - Configuration conf, PipelineManager pipelineManager) throws IOException { - super(conf, pipelineManager); + Configuration conf, PipelineManager pipelineManager, + EventQueue eventQueue) throws IOException { + super(conf, pipelineManager, eventQueue); } @Override diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java index 94ccfb278fca..d978a44bdee2 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java @@ -97,7 +97,8 @@ public ReconStorageContainerManagerFacade(OzoneConfiguration conf, conf, this, eventQueue); this.pipelineManager = new ReconPipelineManager(conf, nodeManager, eventQueue); - this.containerManager = new ReconContainerManager(conf, pipelineManager); + this.containerManager = new ReconContainerManager(conf, pipelineManager, + eventQueue); this.scmServiceProvider = scmServiceProvider; initializePipelinesFromScm(); diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java index d7745c4df113..309390b341b8 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java @@ -60,7 +60,8 @@ public void setUp() throws Exception { NodeManager nodeManager = new SCMNodeManager(conf, scmStorageConfig, eventQueue, clusterMap); pipelineManager = new ReconPipelineManager(conf, nodeManager, eventQueue); - containerManager = new ReconContainerManager(conf, pipelineManager); + containerManager = new ReconContainerManager(conf, pipelineManager, + eventQueue); } @After From 85ce437aa10fa0b42b179d4bfc362d85f4f375c5 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 14:46:02 -0800 Subject: [PATCH 02/10] more changes --- .../scm/container/SCMContainerManager.java | 45 ++++++++++++------- .../scm/server/StorageContainerManager.java | 3 +- .../TestCloseContainerEventHandler.java | 3 +- .../container/TestSCMContainerManager.java | 6 +-- .../hdds/scm/node/TestContainerPlacement.java | 2 +- .../recon/scm/ReconContainerManager.java | 2 +- 6 files changed, 36 insertions(+), 25 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index dc8101716c6b..8a6fda7ed47c 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -24,7 +24,6 @@ import org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState; import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.hadoop.hdds.scm.container.metrics.SCMContainerManagerMetrics; -import org.apache.hadoop.hdds.scm.events.SCMEvents; import org.apache.hadoop.hdds.scm.exceptions.SCMException; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; import org.apache.hadoop.hdds.scm.pipeline.PipelineManager; @@ -77,8 +76,6 @@ public class SCMContainerManager implements ContainerManager { private final SCMContainerManagerMetrics scmContainerManagerMetrics; - private final EventPublisher eventPublisher; - /** * Constructs a mapping class that creates mapping between container names * and pipelines. @@ -88,11 +85,10 @@ public class SCMContainerManager implements ContainerManager { * in MB. * @param conf - {@link Configuration} * @param pipelineManager - {@link PipelineManager} - * @param eventQueue * @throws IOException on Failure. */ public SCMContainerManager(final Configuration conf, - PipelineManager pipelineManager, EventQueue eventQueue) + PipelineManager pipelineManager) throws IOException { final File containerDBPath = getContainerDBPath(conf); @@ -111,7 +107,6 @@ public SCMContainerManager(final Configuration conf, this.numContainerPerOwnerInPipeline = conf .getInt(ScmConfigKeys.OZONE_SCM_PIPELINE_OWNER_CONTAINER_COUNT, ScmConfigKeys.OZONE_SCM_PIPELINE_OWNER_CONTAINER_COUNT_DEFAULT); - this.eventPublisher = eventQueue; loadExistingContainers(); @@ -133,10 +128,20 @@ private void loadExistingContainers() throws IOException { } } catch (PipelineNotFoundException ex) { LOG.warn("Found a Container {} which is in {} state with out a " + - "pipeline {}. Triggering Close Container.", container, - container.getState(), container.getPipelineID()); - eventPublisher.fireEvent(SCMEvents.CLOSE_CONTAINER, - container.containerID()); + "pipeline {}. Close Container.", container, container.getState(), + container.getPipelineID()); + + // Not firing CLOSE_CONTAINER event because CloseContainer Event + // event queue handler is not registered by the time when we come + // here. So, we are calling update Container state to CLOSING, and + // replication manager takes care of send close commands to datanode + // to close containers on the datanode. + + // Skipping pipeline to container removal because, we got a + // pipelineNotFoundException when adding container to + // pipeline. So, we can only update container state. + updateContainerState(container.containerID(), + HddsProtos.LifeCycleEvent.FINALIZE, true); } } } @@ -340,6 +345,15 @@ public HddsProtos.LifeCycleState updateContainerState( ContainerID containerID, HddsProtos.LifeCycleEvent event) throws IOException { // Should we return the updated ContainerInfo instead of LifeCycleState? + return updateContainerState(containerID, event, false); + } + + + private HddsProtos.LifeCycleState updateContainerState( + ContainerID containerID, HddsProtos.LifeCycleEvent event, + boolean skipPipelineToContainerRemove) + throws IOException { + // Should we return the updated ContainerInfo instead of LifeCycleState? lock.lock(); try { final ContainerInfo container = containerStateManager @@ -348,10 +362,12 @@ public HddsProtos.LifeCycleState updateContainerState( containerStateManager.updateContainerState(containerID, event); final LifeCycleState newState = container.getState(); - if (oldState == LifeCycleState.OPEN && newState != LifeCycleState.OPEN) { - pipelineManager - .removeContainerFromPipeline(container.getPipelineID(), - containerID); + if (skipPipelineToContainerRemove) { + if (oldState == LifeCycleState.OPEN && newState != LifeCycleState.OPEN) { + pipelineManager + .removeContainerFromPipeline(container.getPipelineID(), + containerID); + } } final byte[] dbKey = Longs.toByteArray(containerID.getId()); containerStore.put(dbKey, container.getProtobuf().toByteArray()); @@ -367,7 +383,6 @@ public HddsProtos.LifeCycleState updateContainerState( } } - /** * Update deleteTransactionId according to deleteTransactionMap. * 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 28dcf15e1e0b..6063a6248da5 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 @@ -409,8 +409,7 @@ private void initializeSystemManagers(OzoneConfiguration conf, if (configurator.getContainerManager() != null) { containerManager = configurator.getContainerManager(); } else { - containerManager = new SCMContainerManager(conf, pipelineManager, - eventQueue); + containerManager = new SCMContainerManager(conf, pipelineManager); } if (configurator.getScmBlockManager() != null) { 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 3c6af7606cc8..10c38a8fadcf 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 @@ -78,8 +78,7 @@ public static void setUp() throws Exception { pipelineManager.getStateManager(), configuration, eventQueue); pipelineManager.setPipelineProvider(HddsProtos.ReplicationType.RATIS, mockRatisProvider); - containerManager = new SCMContainerManager(configuration, pipelineManager, - eventQueue); + containerManager = new SCMContainerManager(configuration, pipelineManager); pipelineManager.triggerPipelineCreation(); eventQueue.addHandler(CLOSE_CONTAINER, new CloseContainerEventHandler(pipelineManager, containerManager)); diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java index 893bc65c7296..405c582d32bb 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestSCMContainerManager.java @@ -95,11 +95,9 @@ public static void setUp() throws Exception { throw new IOException("Unable to create test directory path"); } nodeManager = new MockNodeManager(true, 10); - EventQueue eventQueue = new EventQueue(); pipelineManager = - new SCMPipelineManager(conf, nodeManager, eventQueue); - containerManager = new SCMContainerManager(conf, pipelineManager, - eventQueue); + new SCMPipelineManager(conf, nodeManager, new EventQueue()); + containerManager = new SCMContainerManager(conf, pipelineManager); xceiverClientManager = new XceiverClientManager(conf); replicationFactor = SCMTestUtils.getReplicationFactor(conf); replicationType = SCMTestUtils.getReplicationType(conf); diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java index 4d9e664ab716..88085467c5dd 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java @@ -108,7 +108,7 @@ SCMContainerManager createContainerManager(Configuration config, OZONE_SCM_DB_CACHE_SIZE_DEFAULT); PipelineManager pipelineManager = new SCMPipelineManager(config, scmNodeManager, eventQueue); - return new SCMContainerManager(config, pipelineManager, eventQueue); + return new SCMContainerManager(config, pipelineManager); } diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java index 0149f83496a7..61a96db30694 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java @@ -58,7 +58,7 @@ public class ReconContainerManager extends SCMContainerManager { public ReconContainerManager( Configuration conf, PipelineManager pipelineManager, EventQueue eventQueue) throws IOException { - super(conf, pipelineManager, eventQueue); + super(conf, pipelineManager); } @Override From b499ab44b7defa587b0bb658581feb5a23940543 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 15:04:47 -0800 Subject: [PATCH 03/10] fix checkstyle. --- .../hadoop/hdds/scm/container/SCMContainerManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index 8a6fda7ed47c..6314c8ba23a5 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -32,8 +32,6 @@ import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType; import org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException; import org.apache.hadoop.hdds.server.ServerUtils; -import org.apache.hadoop.hdds.server.events.EventPublisher; -import org.apache.hadoop.hdds.server.events.EventQueue; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.hdds.utils.BatchOperation; import org.apache.hadoop.hdds.utils.MetadataStore; @@ -363,7 +361,8 @@ private HddsProtos.LifeCycleState updateContainerState( final LifeCycleState newState = container.getState(); if (skipPipelineToContainerRemove) { - if (oldState == LifeCycleState.OPEN && newState != LifeCycleState.OPEN) { + if (oldState == LifeCycleState.OPEN && + newState != LifeCycleState.OPEN) { pipelineManager .removeContainerFromPipeline(container.getPipelineID(), containerID); From 7571b84dc6fbab83385d8986e03ab05cde036017 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 15:08:17 -0800 Subject: [PATCH 04/10] fix test --- .../apache/hadoop/hdds/scm/container/SCMContainerManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index 6314c8ba23a5..76213916f6d0 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -360,7 +360,7 @@ private HddsProtos.LifeCycleState updateContainerState( containerStateManager.updateContainerState(containerID, event); final LifeCycleState newState = container.getState(); - if (skipPipelineToContainerRemove) { + if (!skipPipelineToContainerRemove) { if (oldState == LifeCycleState.OPEN && newState != LifeCycleState.OPEN) { pipelineManager From c4895bf73e6709da0d541a62f522a3ee9bfff9a8 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 15:11:11 -0800 Subject: [PATCH 05/10] remove not needed code --- .../apache/hadoop/ozone/recon/scm/ReconContainerManager.java | 4 +--- .../ozone/recon/scm/ReconStorageContainerManagerFacade.java | 3 +-- .../ozone/recon/scm/AbstractReconContainerManagerTest.java | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java index 61a96db30694..01e8f3b5c2b5 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java @@ -52,12 +52,10 @@ public class ReconContainerManager extends SCMContainerManager { * * @param conf - {@link Configuration} * @param pipelineManager - {@link PipelineManager} - * @param eventQueue * @throws IOException on Failure. */ public ReconContainerManager( - Configuration conf, PipelineManager pipelineManager, - EventQueue eventQueue) throws IOException { + Configuration conf, PipelineManager pipelineManager) throws IOException { super(conf, pipelineManager); } diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java index d978a44bdee2..94ccfb278fca 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java @@ -97,8 +97,7 @@ public ReconStorageContainerManagerFacade(OzoneConfiguration conf, conf, this, eventQueue); this.pipelineManager = new ReconPipelineManager(conf, nodeManager, eventQueue); - this.containerManager = new ReconContainerManager(conf, pipelineManager, - eventQueue); + this.containerManager = new ReconContainerManager(conf, pipelineManager); this.scmServiceProvider = scmServiceProvider; initializePipelinesFromScm(); diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java index 309390b341b8..d7745c4df113 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java @@ -60,8 +60,7 @@ public void setUp() throws Exception { NodeManager nodeManager = new SCMNodeManager(conf, scmStorageConfig, eventQueue, clusterMap); pipelineManager = new ReconPipelineManager(conf, nodeManager, eventQueue); - containerManager = new ReconContainerManager(conf, pipelineManager, - eventQueue); + containerManager = new ReconContainerManager(conf, pipelineManager); } @After From 591a129f6f5c7801be03b326d3d16d2acffce6d8 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 15:12:05 -0800 Subject: [PATCH 06/10] check style --- .../org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java index 01e8f3b5c2b5..054eeab6155d 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java @@ -29,7 +29,6 @@ import org.apache.hadoop.hdds.scm.container.SCMContainerManager; import org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline; import org.apache.hadoop.hdds.scm.pipeline.PipelineManager; -import org.apache.hadoop.hdds.server.events.EventQueue; import org.apache.hadoop.ozone.recon.ReconUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From cecc04cbc0eb7010089d985da0c2d0a9fd0bfce6 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Mon, 24 Feb 2020 15:15:30 -0800 Subject: [PATCH 07/10] reword --- .../hadoop/hdds/scm/container/SCMContainerManager.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index 76213916f6d0..8f468331eaf7 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -131,9 +131,10 @@ private void loadExistingContainers() throws IOException { // Not firing CLOSE_CONTAINER event because CloseContainer Event // event queue handler is not registered by the time when we come - // here. So, we are calling update Container state to CLOSING, and - // replication manager takes care of send close commands to datanode - // to close containers on the datanode. + // here. So, we are calling update Container state to set + // container state to CLOSING, and later replication manager takes care + // of send close commands to datanode to close containers on the + // datanode. // Skipping pipeline to container removal because, we got a // pipelineNotFoundException when adding container to From 34ee16ff8cd1ade8ff2be6ea8f5a6c6e45209043 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Tue, 25 Feb 2020 16:11:38 -0800 Subject: [PATCH 08/10] review comment --- .../hadoop/hdds/scm/container/SCMContainerManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index 8f468331eaf7..ae40642e69ba 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -125,12 +125,12 @@ private void loadExistingContainers() throws IOException { ContainerID.valueof(container.getContainerID())); } } catch (PipelineNotFoundException ex) { - LOG.warn("Found a Container {} which is in {} state with out a " + - "pipeline {}. Close Container.", container, container.getState(), - container.getPipelineID()); + LOG.warn("Found a Container {} which is in {} state with pipeline {} " + + "that does not exist. Closing Container.", container, + container.getState(), container.getPipelineID()); - // Not firing CLOSE_CONTAINER event because CloseContainer Event - // event queue handler is not registered by the time when we come + // Not firing CLOSE_CONTAINER event because CloseContainer event + // handler is not registered by the time when we come // here. So, we are calling update Container state to set // container state to CLOSING, and later replication manager takes care // of send close commands to datanode to close containers on the From c5ee13ae4f77de79a224b305fd943809267fa696 Mon Sep 17 00:00:00 2001 From: Bharat Viswanadham Date: Thu, 27 Feb 2020 14:10:28 -0800 Subject: [PATCH 09/10] review comment --- .../hdds/scm/container/SCMContainerManager.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java index ae40642e69ba..3838b9df21be 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/SCMContainerManager.java @@ -128,17 +128,6 @@ private void loadExistingContainers() throws IOException { LOG.warn("Found a Container {} which is in {} state with pipeline {} " + "that does not exist. Closing Container.", container, container.getState(), container.getPipelineID()); - - // Not firing CLOSE_CONTAINER event because CloseContainer event - // handler is not registered by the time when we come - // here. So, we are calling update Container state to set - // container state to CLOSING, and later replication manager takes care - // of send close commands to datanode to close containers on the - // datanode. - - // Skipping pipeline to container removal because, we got a - // pipelineNotFoundException when adding container to - // pipeline. So, we can only update container state. updateContainerState(container.containerID(), HddsProtos.LifeCycleEvent.FINALIZE, true); } From f8d64d225fafeeb5631df1eeab9fdbd4fcb5da19 Mon Sep 17 00:00:00 2001 From: GitHub actions Date: Fri, 28 Feb 2020 09:54:48 +0000 Subject: [PATCH 10/10] empty commit to retest build