HADOOP-18427. Improve ZKDelegationTokenSecretManager#startThead With recommended methods. (#4812)
This commit is contained in:
parent
03961b10c2
commit
0db3ee5b4b
|
@ -42,7 +42,6 @@ import org.apache.curator.framework.recipes.cache.CuratorCacheListener;
|
|||
import org.apache.curator.framework.recipes.shared.SharedCount;
|
||||
import org.apache.curator.framework.recipes.shared.VersionedValue;
|
||||
import org.apache.curator.retry.RetryNTimes;
|
||||
import org.apache.curator.utils.EnsurePath;
|
||||
import org.apache.hadoop.classification.InterfaceAudience;
|
||||
import org.apache.hadoop.classification.InterfaceAudience.Private;
|
||||
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||
|
@ -134,6 +133,11 @@ public abstract class ZKDelegationTokenSecretManager<TokenIdent extends Abstract
|
|||
CURATOR_TL.set(curator);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected static CuratorFramework getCurator() {
|
||||
return CURATOR_TL.get();
|
||||
}
|
||||
|
||||
private final boolean isExternalClient;
|
||||
protected final CuratorFramework zkClient;
|
||||
private SharedCount delTokSeqCounter;
|
||||
|
@ -260,10 +264,8 @@ public abstract class ZKDelegationTokenSecretManager<TokenIdent extends Abstract
|
|||
// If namespace parents are implicitly created, they won't have ACLs.
|
||||
// So, let's explicitly create them.
|
||||
CuratorFramework nullNsFw = zkClient.usingNamespace(null);
|
||||
EnsurePath ensureNs =
|
||||
nullNsFw.newNamespaceAwareEnsurePath("/" + zkClient.getNamespace());
|
||||
try {
|
||||
ensureNs.ensure(nullNsFw.getZookeeperClient());
|
||||
nullNsFw.create().creatingParentContainersIfNeeded().forPath("/" + zkClient.getNamespace());
|
||||
} catch (Exception e) {
|
||||
throw new IOException("Could not create namespace", e);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.apache.hadoop.test.GenericTestUtils;
|
|||
import org.apache.zookeeper.ZooDefs;
|
||||
import org.apache.zookeeper.data.ACL;
|
||||
import org.apache.zookeeper.data.Id;
|
||||
import org.apache.zookeeper.data.Stat;
|
||||
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
|
@ -507,4 +508,32 @@ public class TestZKDelegationTokenSecretManager {
|
|||
}
|
||||
}, 1000, 5000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreatingParentContainersIfNeeded() throws Exception {
|
||||
|
||||
String connectString = zkServer.getConnectString();
|
||||
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
|
||||
Configuration conf = getSecretConf(connectString);
|
||||
CuratorFramework curatorFramework =
|
||||
CuratorFrameworkFactory.builder()
|
||||
.connectString(connectString)
|
||||
.retryPolicy(retryPolicy)
|
||||
.build();
|
||||
curatorFramework.start();
|
||||
ZKDelegationTokenSecretManager.setCurator(curatorFramework);
|
||||
DelegationTokenManager tm1 = new DelegationTokenManager(conf, new Text("foo"));
|
||||
|
||||
// When the init method is called,
|
||||
// the ZKDelegationTokenSecretManager#startThread method will be called,
|
||||
// and the creatingParentContainersIfNeeded will be called to create the nameSpace.
|
||||
tm1.init();
|
||||
|
||||
String workingPath = "/" + conf.get(ZKDelegationTokenSecretManager.ZK_DTSM_ZNODE_WORKING_PATH,
|
||||
ZKDelegationTokenSecretManager.ZK_DTSM_ZNODE_WORKING_PATH_DEAFULT) + "/ZKDTSMRoot";
|
||||
|
||||
// Check if the created NameSpace exists.
|
||||
Stat stat = curatorFramework.checkExists().forPath(workingPath);
|
||||
Assert.assertNotNull(stat);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue