HDFS-15416. Improve DataStorage#addStorageLocations() for empty locations. Contibuted by jianghua zhu.

This commit is contained in:
He Xiaoqiao 2020-07-01 12:30:10 +08:00
parent e8dc862d38
commit 9ac498e300
2 changed files with 33 additions and 0 deletions

View File

@ -388,6 +388,11 @@ public class DataStorage extends Storage {
try {
final List<StorageLocation> successLocations = loadDataStorage(
datanode, nsInfo, dataDirs, startOpt, executor);
if (successLocations.isEmpty()) {
return Lists.newArrayList();
}
return loadBlockPoolSliceStorage(
datanode, nsInfo, successLocations, startOpt, executor);
} finally {

View File

@ -44,6 +44,7 @@ import static org.junit.Assert.fail;
public class TestDataStorage {
private final static String DEFAULT_BPID = "bp-0";
private final static String CLUSTER_ID = "cluster0";
private final static String CLUSTER_ID2 = "cluster1";
private final static String BUILD_VERSION = "2.0";
private final static String SOFTWARE_VERSION = "2.0";
private final static long CTIME = 1;
@ -165,6 +166,33 @@ public class TestDataStorage {
assertEquals(6, storage.getNumStorageDirs());
}
@Test
public void testAddStorageDirectoriesFailure() throws IOException {
final int numLocations = 1;
List<StorageLocation> locations = createStorageLocations(numLocations);
assertEquals(numLocations, locations.size());
NamespaceInfo namespaceInfo = new NamespaceInfo(0, CLUSTER_ID,
DEFAULT_BPID, CTIME, BUILD_VERSION, SOFTWARE_VERSION);
List<StorageDirectory> successLocations = storage.addStorageLocations(
mockDN, namespaceInfo, locations, START_OPT);
assertEquals(1, successLocations.size());
// After the DataNode restarts, the value of the clusterId is different
// from the value before the restart.
storage.unlockAll();
DataNode newMockDN = Mockito.mock(DataNode.class);
Mockito.when(newMockDN.getConf()).thenReturn(new HdfsConfiguration());
DataStorage newStorage = new DataStorage();
NamespaceInfo newNamespaceInfo = new NamespaceInfo(0, CLUSTER_ID2,
DEFAULT_BPID, CTIME, BUILD_VERSION, SOFTWARE_VERSION);
successLocations = newStorage.addStorageLocations(
newMockDN, newNamespaceInfo, locations, START_OPT);
assertEquals(0, successLocations.size());
newStorage.unlockAll();
newMockDN.shutdown();
}
@Test
public void testMissingVersion() throws IOException,
URISyntaxException {