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 2021/04/06 12:25:47 UTC
[ozone] branch master updated: HDDS-5032. DN stopped to load
containers on volume after a container load exception. (#2109)
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 c0b40f7 HDDS-5032. DN stopped to load containers on volume after a container load exception. (#2109)
c0b40f7 is described below
commit c0b40f7d2c78310fb0fe34163fd276e1afeb79a9
Author: Sammi Chen <sa...@apache.org>
AuthorDate: Tue Apr 6 20:25:22 2021 +0800
HDDS-5032. DN stopped to load containers on volume after a container load exception. (#2109)
---
.../ozone/container/ozoneimpl/ContainerReader.java | 22 +++++++----
.../container/ozoneimpl/TestContainerReader.java | 43 ++++++++++++++++++++++
2 files changed, 57 insertions(+), 8 deletions(-)
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerReader.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerReader.java
index 1ab4c3b..99ed9a0 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerReader.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerReader.java
@@ -150,14 +150,20 @@ public class ContainerReader implements Runnable {
File[] containerDirs = containerTopDir.listFiles();
if (containerDirs != null) {
for (File containerDir : containerDirs) {
- File containerFile = ContainerUtils.getContainerFile(
- containerDir);
- long containerID = ContainerUtils.getContainerID(containerDir);
- if (containerFile.exists()) {
- verifyContainerFile(storageLoc, containerID, containerFile);
- } else {
- LOG.error("Missing .container file for ContainerID: {}",
- containerDir.getName());
+ try {
+ File containerFile = ContainerUtils.getContainerFile(
+ containerDir);
+ long containerID =
+ ContainerUtils.getContainerID(containerDir);
+ if (containerFile.exists()) {
+ verifyContainerFile(storageLoc, containerID, containerFile);
+ } else {
+ LOG.error("Missing .container file for ContainerID: {}",
+ containerDir.getName());
+ }
+ } catch (Throwable e) {
+ LOG.error("Failed to load container from {}",
+ containerDir.getAbsolutePath(), e);
}
}
}
diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestContainerReader.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestContainerReader.java
index be261d0..849c56a 100644
--- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestContainerReader.java
+++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestContainerReader.java
@@ -214,6 +214,49 @@ public class TestContainerReader {
}
@Test
+ public void testContainerReaderWithLoadException() throws Exception {
+ MutableVolumeSet volumeSet1;
+ HddsVolume hddsVolume1;
+ ContainerSet containerSet1 = new ContainerSet();
+ File volumeDir1 = tempDir.newFolder();
+ RoundRobinVolumeChoosingPolicy volumeChoosingPolicy1;
+
+ volumeSet1 = Mockito.mock(MutableVolumeSet.class);
+ UUID datanode = UUID.randomUUID();
+ hddsVolume1 = new HddsVolume.Builder(volumeDir1
+ .getAbsolutePath()).conf(conf).datanodeUuid(datanode
+ .toString()).clusterID(clusterId).build();
+ volumeChoosingPolicy1 = mock(RoundRobinVolumeChoosingPolicy.class);
+ Mockito.when(volumeChoosingPolicy1.chooseVolume(anyList(), anyLong()))
+ .thenReturn(hddsVolume1);
+
+ int containerCount = 3;
+ for (int i = 0; i < containerCount; i++) {
+ KeyValueContainerData keyValueContainerData = new KeyValueContainerData(i,
+ ChunkLayOutVersion.FILE_PER_BLOCK,
+ (long) StorageUnit.GB.toBytes(5), UUID.randomUUID().toString(),
+ datanodeId.toString());
+ KeyValueContainer keyValueContainer =
+ new KeyValueContainer(keyValueContainerData, conf);
+ keyValueContainer.create(volumeSet1, volumeChoosingPolicy1, clusterId);
+ BlockUtils.removeDB(keyValueContainerData, conf);
+
+ if (i == 0) {
+ // rename first container directory name
+ String containerPathStr =
+ keyValueContainer.getContainerData().getContainerPath();
+ File containerPath = new File(containerPathStr);
+ String renamePath = containerPathStr + "-aa";
+ containerPath.renameTo(new File(renamePath));
+ }
+ }
+
+ ContainerReader containerReader = new ContainerReader(volumeSet1,
+ hddsVolume1, containerSet1, conf);
+ containerReader.readVolume(hddsVolume1.getHddsRootDir());
+ Assert.assertEquals(containerCount - 1, containerSet1.containerCount());
+ }
+ @Test
public void testMultipleContainerReader() throws Exception {
final int volumeNum = 10;
StringBuffer datanodeDirs = new StringBuffer();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org