HDFS-8807. dfs.datanode.data.dir does not handle spaces between storageType and URI correctly. Contributed by Anu Engineer
This commit is contained in:
parent
3a2f5d6329
commit
79e55fb47f
|
@ -814,6 +814,9 @@ Release 2.8.0 - UNRELEASED
|
||||||
HDFS-9314. Improve BlockPlacementPolicyDefault's picking of excess
|
HDFS-9314. Improve BlockPlacementPolicyDefault's picking of excess
|
||||||
replicas. (Xiao Chen via mingma)
|
replicas. (Xiao Chen via mingma)
|
||||||
|
|
||||||
|
HDFS-8807. dfs.datanode.data.dir does not handle spaces between
|
||||||
|
storageType and URI correctly. (Anu Engineer via szetszwo)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than
|
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class StorageLocation {
|
||||||
|
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
String classString = matcher.group(1);
|
String classString = matcher.group(1);
|
||||||
location = matcher.group(2);
|
location = matcher.group(2).trim();
|
||||||
if (!classString.isEmpty()) {
|
if (!classString.isEmpty()) {
|
||||||
storageType =
|
storageType =
|
||||||
StorageType.valueOf(StringUtils.toUpperCase(classString));
|
StorageType.valueOf(StringUtils.toUpperCase(classString));
|
||||||
|
|
|
@ -46,12 +46,16 @@ public class TestDataDirs {
|
||||||
File dir3 = new File("/dir3");
|
File dir3 = new File("/dir3");
|
||||||
File dir4 = new File("/dir4");
|
File dir4 = new File("/dir4");
|
||||||
|
|
||||||
|
File dir5 = new File("/dir5");
|
||||||
|
File dir6 = new File("/dir6");
|
||||||
// Verify that a valid string is correctly parsed, and that storage
|
// Verify that a valid string is correctly parsed, and that storage
|
||||||
// type is not case-sensitive
|
// type is not case-sensitive and we are able to handle white-space between
|
||||||
String locations1 = "[disk]/dir0,[DISK]/dir1,[sSd]/dir2,[disK]/dir3,[ram_disk]/dir4";
|
// storage type and URI.
|
||||||
|
String locations1 = "[disk]/dir0,[DISK]/dir1,[sSd]/dir2,[disK]/dir3," +
|
||||||
|
"[ram_disk]/dir4,[disk]/dir5, [disk] /dir6, [disk] ";
|
||||||
conf.set(DFS_DATANODE_DATA_DIR_KEY, locations1);
|
conf.set(DFS_DATANODE_DATA_DIR_KEY, locations1);
|
||||||
locations = DataNode.getStorageLocations(conf);
|
locations = DataNode.getStorageLocations(conf);
|
||||||
assertThat(locations.size(), is(5));
|
assertThat(locations.size(), is(8));
|
||||||
assertThat(locations.get(0).getStorageType(), is(StorageType.DISK));
|
assertThat(locations.get(0).getStorageType(), is(StorageType.DISK));
|
||||||
assertThat(locations.get(0).getUri(), is(dir0.toURI()));
|
assertThat(locations.get(0).getUri(), is(dir0.toURI()));
|
||||||
assertThat(locations.get(1).getStorageType(), is(StorageType.DISK));
|
assertThat(locations.get(1).getStorageType(), is(StorageType.DISK));
|
||||||
|
@ -62,6 +66,14 @@ public class TestDataDirs {
|
||||||
assertThat(locations.get(3).getUri(), is(dir3.toURI()));
|
assertThat(locations.get(3).getUri(), is(dir3.toURI()));
|
||||||
assertThat(locations.get(4).getStorageType(), is(StorageType.RAM_DISK));
|
assertThat(locations.get(4).getStorageType(), is(StorageType.RAM_DISK));
|
||||||
assertThat(locations.get(4).getUri(), is(dir4.toURI()));
|
assertThat(locations.get(4).getUri(), is(dir4.toURI()));
|
||||||
|
assertThat(locations.get(5).getStorageType(), is(StorageType.DISK));
|
||||||
|
assertThat(locations.get(5).getUri(), is(dir5.toURI()));
|
||||||
|
assertThat(locations.get(6).getStorageType(), is(StorageType.DISK));
|
||||||
|
assertThat(locations.get(6).getUri(), is(dir6.toURI()));
|
||||||
|
|
||||||
|
// not asserting the 8th URI since it is incomplete and it in the
|
||||||
|
// test set to make sure that we don't fail if we get URIs like that.
|
||||||
|
assertThat(locations.get(7).getStorageType(), is(StorageType.DISK));
|
||||||
|
|
||||||
// Verify that an unrecognized storage type result in an exception.
|
// Verify that an unrecognized storage type result in an exception.
|
||||||
String locations2 = "[BadMediaType]/dir0,[ssd]/dir1,[disk]/dir2";
|
String locations2 = "[BadMediaType]/dir0,[ssd]/dir1,[disk]/dir2";
|
||||||
|
@ -90,7 +102,8 @@ public class TestDataDirs {
|
||||||
|
|
||||||
DataNodeDiskChecker diskChecker = mock(DataNodeDiskChecker.class);
|
DataNodeDiskChecker diskChecker = mock(DataNodeDiskChecker.class);
|
||||||
doThrow(new IOException()).doThrow(new IOException()).doNothing()
|
doThrow(new IOException()).doThrow(new IOException()).doNothing()
|
||||||
.when(diskChecker).checkDir(any(LocalFileSystem.class), any(Path.class));
|
.when(diskChecker)
|
||||||
|
.checkDir(any(LocalFileSystem.class), any(Path.class));
|
||||||
LocalFileSystem fs = mock(LocalFileSystem.class);
|
LocalFileSystem fs = mock(LocalFileSystem.class);
|
||||||
AbstractList<StorageLocation> locations = new ArrayList<StorageLocation>();
|
AbstractList<StorageLocation> locations = new ArrayList<StorageLocation>();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue