YARN-4365. FileSystemNodeLabelStore should check for root dir existence on startup. Contributed by Kuhu Shukla

This commit is contained in:
Jason Lowe 2015-11-24 23:47:10 +00:00
parent 4ac6799d4a
commit f5acf94eca
3 changed files with 39 additions and 2 deletions

View File

@ -1100,6 +1100,9 @@ Release 2.7.3 - UNRELEASED
YARN-4344. NMs reconnecting with changed capabilities can lead to wrong
cluster resource calculations (Varun Vasudev via jlowe)
YARN-4365. FileSystemNodeLabelStore should check for root dir existence on
startup (Kuhu Shukla via jlowe)
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES
@ -1960,6 +1963,9 @@ Release 2.6.3 - UNRELEASED
YARN-3925. ContainerLogsUtils#getContainerLogFile fails to read container
log files from full disks. (zhihai xu via jlowe)
YARN-4365. FileSystemNodeLabelStore should check for root dir existence on
startup (Kuhu Shukla via jlowe)
Release 2.6.2 - 2015-10-28
INCOMPATIBLE CHANGES

View File

@ -88,7 +88,9 @@ public class FileSystemNodeLabelsStore extends NodeLabelsStore {
setFileSystem(conf);
// mkdir of root dir path
fs.mkdirs(fsWorkingPath);
if (!fs.exists(fsWorkingPath)) {
fs.mkdirs(fsWorkingPath);
}
}
@Override
@ -96,7 +98,7 @@ public class FileSystemNodeLabelsStore extends NodeLabelsStore {
IOUtils.cleanup(LOG, fs, editlogOs);
}
private void setFileSystem(Configuration conf) throws IOException {
void setFileSystem(Configuration conf) throws IOException {
Configuration confCopy = new Configuration(conf);
confCopy.setBoolean("dfs.client.retry.policy.enabled", true);
String retryPolicy =

View File

@ -24,6 +24,8 @@ import java.util.Arrays;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.yarn.api.records.NodeLabel;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.event.InlineDispatcher;
@ -33,6 +35,7 @@ import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
import org.mockito.Mockito;
public class TestFileSystemNodeLabelsStore extends NodeLabelTestBase {
MockNodeLabelManager mgr = null;
@ -317,4 +320,30 @@ public class TestFileSystemNodeLabelsStore extends NodeLabelTestBase {
Arrays.asList("p2", "p4", "p6", "p7", "p8", "p9")));
mgr.stop();
}
@Test
public void testRootMkdirOnInitStore() throws Exception {
final FileSystem mockFs = Mockito.mock(FileSystem.class);
FileSystemNodeLabelsStore mockStore = new FileSystemNodeLabelsStore(mgr) {
void setFileSystem(Configuration conf) throws IOException {
fs = mockFs;
}
};
mockStore.fs = mockFs;
verifyMkdirsCount(mockStore, true, 0);
verifyMkdirsCount(mockStore, false, 1);
verifyMkdirsCount(mockStore, true, 1);
verifyMkdirsCount(mockStore, false, 2);
}
private void verifyMkdirsCount(FileSystemNodeLabelsStore store,
boolean existsRetVal, int expectedNumOfCalls)
throws Exception {
Mockito.when(store.fs.exists(Mockito.any(
Path.class))).thenReturn(existsRetVal);
store.init(conf);
Mockito.verify(store.fs,Mockito.times(
expectedNumOfCalls)).mkdirs(Mockito.any(Path
.class));
}
}