diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 7c98a441add..53311b9adaf 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -575,6 +575,10 @@ Release 2.8.0 - UNRELEASED HADOOP-12386. RetryPolicies.RETRY_FOREVER should be able to specify a retry interval. (Sunil G via wangda) + HADOOP-8436. NPE In getLocalPathForWrite ( path, conf ) when the + required context item is not configured + (Brahma Reddy Battula via harsh) + OPTIMIZATIONS HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString() diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java index 6fb34e3a959..8f011ce409f 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java @@ -265,6 +265,9 @@ public class LocalDirAllocator { private synchronized void confChanged(Configuration conf) throws IOException { String newLocalDirs = conf.get(contextCfgItemName); + if (null == newLocalDirs) { + throw new IOException(contextCfgItemName + " not configured"); + } if (!newLocalDirs.equals(savedLocalDirs)) { localDirs = StringUtils.getTrimmedStrings(newLocalDirs); localFS = FileSystem.getLocal(conf); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java index ae650c355ef..624fa14497e 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java @@ -299,6 +299,23 @@ public class TestLocalDirAllocator { } } + /* + * Test when mapred.local.dir not configured and called + * getLocalPathForWrite + */ + @Test + public void testShouldNotthrowNPE() throws Exception { + Configuration conf1 = new Configuration(); + try { + dirAllocator.getLocalPathForWrite("/test", conf1); + fail("Exception not thrown when " + CONTEXT + " is not set"); + } catch (IOException e) { + assertEquals(CONTEXT + " not configured", e.getMessage()); + } catch (NullPointerException e) { + fail("Lack of configuration should not have thrown an NPE."); + } + } + /** Test no side effect files are left over. After creating a temp * temp file, remove both the temp file and its parent. Verify that * no files or directories are left over as can happen when File objects