@Override public boolean isLeader() { if (_instanceType != InstanceType.CONTROLLER && _instanceType != InstanceType.CONTROLLER_PARTICIPANT) { return false; } if (!isConnected()) { return false; } try { LiveInstance leader = _dataAccessor.getProperty(_keyBuilder.controllerLeader()); if (leader != null) { String leaderName = leader.getInstanceName(); String sessionId = leader.getSessionId(); if (leaderName != null && leaderName.equals(_instanceName) && sessionId != null && sessionId.equals(_sessionId)) { return true; } } } catch (Exception e) { // log } return false; }
@Override public void disconnect() { if (_zkclient == null) { LOG.info("instanceName: " + _instanceName + " already disconnected"); return; } LOG.info("disconnect " + _instanceName + "(" + _instanceType + ") from " + _clusterName); try { /** stop all timer tasks */ stopTimerTasks(); /** * shutdown thread pool first to avoid reset() being invoked in the middle of state transition */ _messagingService.getExecutor().shutdown(); // TODO reset user defined handlers only resetHandlers(); _dataAccessor.shutdown(); if (_leaderElectionHandler != null) { _leaderElectionHandler.reset(); } } finally { _zkclient.close(); _zkclient = null; LOG.info("Cluster manager: " + _instanceName + " disconnected"); } }