From 3bc72cc16d8c7b8addd8f565523001dfcc32b891 Mon Sep 17 00:00:00 2001 From: Tsuyoshi Ozawa Date: Wed, 18 Mar 2015 11:53:14 +0900 Subject: [PATCH] YARN-3205. FileSystemRMStateStore should disable FileSystem Cache to avoid get a Filesystem with an old configuration. Contributed by Zhihai Xu. --- hadoop-yarn-project/CHANGES.txt | 3 +++ .../recovery/FileSystemRMStateStore.java | 22 ++++++++++++++----- .../recovery/TestFSRMStateStore.java | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index bb752ab1ee..c869113cc1 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -72,6 +72,9 @@ Release 2.8.0 - UNRELEASED YARN-3305. Normalize AM resource request on app submission. (Rohith Sharmaks via jianhe) + YARN-3205 FileSystemRMStateStore should disable FileSystem Cache to avoid + get a Filesystem with an old configuration. (Zhihai Xu via ozawa) + Release 2.7.0 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java index 8147597dca..7652a07018 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java @@ -84,7 +84,10 @@ public class FileSystemRMStateStore extends RMStateStore { protected static final String AMRMTOKEN_SECRET_MANAGER_NODE = "AMRMTokenSecretManagerNode"; + @VisibleForTesting protected FileSystem fs; + @VisibleForTesting + protected Configuration fsConf; private Path rootDirPath; @Private @@ -121,14 +124,23 @@ protected synchronized void startInternal() throws Exception { // create filesystem only now, as part of service-start. By this time, RM is // authenticated with kerberos so we are good to create a file-system // handle. - Configuration conf = new Configuration(getConfig()); - conf.setBoolean("dfs.client.retry.policy.enabled", true); + fsConf = new Configuration(getConfig()); + fsConf.setBoolean("dfs.client.retry.policy.enabled", true); String retryPolicy = - conf.get(YarnConfiguration.FS_RM_STATE_STORE_RETRY_POLICY_SPEC, + fsConf.get(YarnConfiguration.FS_RM_STATE_STORE_RETRY_POLICY_SPEC, YarnConfiguration.DEFAULT_FS_RM_STATE_STORE_RETRY_POLICY_SPEC); - conf.set("dfs.client.retry.policy.spec", retryPolicy); + fsConf.set("dfs.client.retry.policy.spec", retryPolicy); - fs = fsWorkingPath.getFileSystem(conf); + String scheme = fsWorkingPath.toUri().getScheme(); + if (scheme == null) { + scheme = FileSystem.getDefaultUri(fsConf).getScheme(); + } + if (scheme != null) { + String disableCacheName = String.format("fs.%s.impl.disable.cache", scheme); + fsConf.setBoolean(disableCacheName, true); + } + + fs = fsWorkingPath.getFileSystem(fsConf); mkdirsWithRetries(rmDTSecretManagerRoot); mkdirsWithRetries(rmAppRoot); mkdirsWithRetries(amrmTokenSecretManagerRoot); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/TestFSRMStateStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/TestFSRMStateStore.java index d2eddd62d4..c5f557855b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/TestFSRMStateStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/TestFSRMStateStore.java @@ -106,6 +106,11 @@ public RMStateStore getRMStateStore() throws Exception { this.store = new TestFileSystemRMStore(conf); Assert.assertEquals(store.getNumRetries(), 8); Assert.assertEquals(store.getRetryInterval(), 900L); + Assert.assertTrue(store.fs.getConf() == store.fsConf); + FileSystem previousFs = store.fs; + store.startInternal(); + Assert.assertTrue(store.fs != previousFs); + Assert.assertTrue(store.fs.getConf() == store.fsConf); return store; }