You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pl...@apache.org on 2017/11/14 06:57:01 UTC
directory-kerby git commit: DIRKRB-668 Enable KDC backend connect to
the HA Zookeeper Cluster. Contributed by cclive1601.
Repository: directory-kerby
Updated Branches:
refs/heads/trunk 3a86646a8 -> c64cdefc9
DIRKRB-668 Enable KDC backend connect to the HA Zookeeper Cluster. Contributed by cclive1601.
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/c64cdefc
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/c64cdefc
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/c64cdefc
Branch: refs/heads/trunk
Commit: c64cdefc963cb814d1c7b9d64a2f8e0d6cc7d130
Parents: 3a86646
Author: plusplusjiajia <ji...@intel.com>
Authored: Tue Nov 14 14:57:11 2017 +0800
Committer: plusplusjiajia <ji...@intel.com>
Committed: Tue Nov 14 14:57:11 2017 +0800
----------------------------------------------------------------------
.../ZookeeperIdentityBackend.java | 53 +++++++++++---------
1 file changed, 29 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/c64cdefc/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZookeeperIdentityBackend.java
----------------------------------------------------------------------
diff --git a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZookeeperIdentityBackend.java b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZookeeperIdentityBackend.java
index 2a56d2a..ce82330 100644
--- a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZookeeperIdentityBackend.java
+++ b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZookeeperIdentityBackend.java
@@ -44,12 +44,14 @@ import java.util.Properties;
* A Zookeeper based backend implementation. Currently it uses an embedded
* Zookeeper. In follow up it will be enhanced to support standalone Zookeeper
* cluster for replication and reliability.
+ *
*/
public class ZookeeperIdentityBackend extends AbstractIdentityBackend {
private static Thread zookeeperThread;
private final ZooKeeperServerMain zooKeeperServer = new ZooKeeperServerMain();
- private String zkHost;
+ private String zkHosts;
private int zkPort;
+ private String serverStr;
private File dataDir;
private ZooKeeper zooKeeper;
private static final Logger LOG = LoggerFactory.getLogger(ZookeeperIdentityBackend.class);
@@ -93,24 +95,30 @@ public class ZookeeperIdentityBackend extends AbstractIdentityBackend {
* Init Zookeeper Server and connection service, used to initialize the backend.
*/
private void init() throws KrbException {
- zkHost = getConfig().getString(ZKConfKey.ZK_HOST, true);
+ zkHosts = getConfig().getString(ZKConfKey.ZK_HOST, true);
zkPort = getConfig().getInt(ZKConfKey.ZK_PORT, true);
-
- String dataDirString = getConfig().getString(ZKConfKey.DATA_DIR, true);
- if (dataDirString == null || dataDirString.isEmpty()) {
- File zooKeeperDir = new File(getBackendConfig().getConfDir(), "zookeeper");
- dataDir = new File(zooKeeperDir, "data");
+ String[] array = zkHosts.split(",");
+ if (array.length == 1) {
+ serverStr = array[0] + ":" + zkPort;
} else {
- dataDir = new File(dataDirString);
+ serverStr = zkHosts;
+ for (int i = 0; i != array.length; ++i) {
+ serverStr = serverStr.replaceAll(array[i], array[i] + ":" + zkPort);
+ }
}
-
+ if (getConfig().getBoolean(ZKConfKey.EMBEDDED_ZK, true)) {
+ String dataDirString = getConfig().getString(ZKConfKey.DATA_DIR, true);
+ if (dataDirString == null || dataDirString.isEmpty()) {
+ File zooKeeperDir = new File(getBackendConfig().getConfDir(), "zookeeper");
+ dataDir = new File(zooKeeperDir, "data");
+ } else {
+ dataDir = new File(dataDirString);
+ }
if (!dataDir.exists() && !dataDir.mkdirs()) {
throw new KrbException("could not create data file dir " + dataDir);
}
-
- LOG.info("Data dir: " + dataDir);
-
- if (getConfig().getBoolean(ZKConfKey.EMBEDDED_ZK, true)) {
+
+ LOG.info("Data dir: " + dataDir);
startEmbeddedZookeeper();
}
connectZK();
@@ -120,8 +128,8 @@ public class ZookeeperIdentityBackend extends AbstractIdentityBackend {
* Prepare connection to Zookeeper server.
*/
private void connectZK() throws KrbException {
+ assert !serverStr.isEmpty() : " zkHosts may be empty ";
try {
- String serverStr = zkHost + ":" + zkPort;
zooKeeper = new ZooKeeper(serverStr, 10000, new MyWatcher());
while (true) {
if (!zooKeeper.getState().isConnected()) {
@@ -135,31 +143,28 @@ public class ZookeeperIdentityBackend extends AbstractIdentityBackend {
break;
}
}
-
} catch (IOException e) {
LOG.error("Error occurred while connecting to zookeeper.");
throw new KrbException("Failed to prepare Zookeeper connection");
}
}
-
+
/**
* Start the Zookeeper server
*/
private void startEmbeddedZookeeper() throws KrbException {
+ assert dataDir != null : "data dir of embedded zk is null";
Properties startupProperties = new Properties();
startupProperties.put("dataDir", dataDir.getAbsolutePath());
startupProperties.put("clientPort", zkPort);
-
QuorumPeerConfig quorumConfiguration = new QuorumPeerConfig();
try {
quorumConfiguration.parseProperties(startupProperties);
} catch (Exception e) {
throw new KrbException("Loading quorum configuraiton failed", e);
}
-
final ServerConfig configuration = new ServerConfig();
configuration.readFrom(quorumConfiguration);
-
if (zookeeperThread == null) {
zookeeperThread = new Thread() {
public void run() {
@@ -169,11 +174,11 @@ public class ZookeeperIdentityBackend extends AbstractIdentityBackend {
LOG.warn(e.getMessage());
}
}
- };
- zookeeperThread.setDaemon(true);
- zookeeperThread.start();
- }
- LOG.info("Embedded Zookeeper started.");
+ };
+ zookeeperThread.setDaemon(true);
+ zookeeperThread.start();
+ }
+ LOG.info("Embedded Zookeeper started.");
}
/**