YARN-5623. Apply SLIDER-1166 to yarn-native-services branch. Contributed by Gour Saha
This commit is contained in:
parent
bce06ed1af
commit
9dc46aa379
@ -604,11 +604,14 @@ protected ZKIntegration getZkClient(String clusterName, String user) throws Yarn
|
||||
BlockingZKWatcher watcher = new BlockingZKWatcher();
|
||||
client = ZKIntegration.newInstance(registryQuorum, user, clusterName, true, false, watcher,
|
||||
ZKIntegration.SESSION_TIMEOUT);
|
||||
client.init();
|
||||
boolean fromCache = client.init();
|
||||
if (!fromCache) {
|
||||
watcher.waitForZKConnection(2 * 1000);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
client = null;
|
||||
log.warn("Unable to connect to zookeeper quorum {}", registryQuorum, e);
|
||||
log.warn("Interrupted - unable to connect to zookeeper quorum {}",
|
||||
registryQuorum, e);
|
||||
} catch (IOException e) {
|
||||
log.warn("Unable to connect to zookeeper quorum {}", registryQuorum, e);
|
||||
}
|
||||
|
@ -33,6 +33,8 @@
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
|
||||
@ -65,6 +67,8 @@ public class ZKIntegration implements Watcher, Closeable {
|
||||
private final String clustername;
|
||||
private final String userPath;
|
||||
private int sessionTimeout = SESSION_TIMEOUT;
|
||||
private static final Map<String, ZooKeeper> ZK_SESSIONS = new HashMap<>();
|
||||
|
||||
/**
|
||||
flag to set to indicate that the user path should be created if
|
||||
it is not already there
|
||||
@ -93,10 +97,32 @@ protected ZKIntegration(String zkConnection,
|
||||
this.userPath = mkSliderUserPath(username);
|
||||
}
|
||||
|
||||
public void init() throws IOException {
|
||||
assert zookeeper == null;
|
||||
log.debug("Binding ZK client to {}", zkConnection);
|
||||
zookeeper = new ZooKeeper(zkConnection, sessionTimeout, this, canBeReadOnly);
|
||||
/**
|
||||
* Returns true only if an active ZK session is available and retrieved from
|
||||
* cache, false when it has to create a new one.
|
||||
*
|
||||
* @return true if from cache, false when new session created
|
||||
* @throws IOException
|
||||
*/
|
||||
public synchronized boolean init() throws IOException {
|
||||
if (zookeeper != null && getAlive()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
synchronized (ZK_SESSIONS) {
|
||||
if (ZK_SESSIONS.containsKey(zkConnection)) {
|
||||
zookeeper = ZK_SESSIONS.get(zkConnection);
|
||||
}
|
||||
if (zookeeper == null || !getAlive()) {
|
||||
log.info("Binding ZK client to {}", zkConnection);
|
||||
zookeeper = new ZooKeeper(zkConnection, sessionTimeout, this,
|
||||
canBeReadOnly);
|
||||
ZK_SESSIONS.put(zkConnection, zookeeper);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user