Implemented configuration fetching for DistributedConfigurationManager
Project: http://git-wip-us.apache.org/repos/asf/oodt/repo Commit: http://git-wip-us.apache.org/repos/asf/oodt/commit/5fcf2220 Tree: http://git-wip-us.apache.org/repos/asf/oodt/tree/5fcf2220 Diff: http://git-wip-us.apache.org/repos/asf/oodt/diff/5fcf2220 Branch: refs/heads/feature/zookeeper-config Commit: 5fcf2220125b64afba080c6c9c6c5592daae2dea Parents: fadf149 Author: Imesha Sudasingha <[email protected]> Authored: Sat Jun 17 23:21:12 2017 +0530 Committer: Imesha Sudasingha <[email protected]> Committed: Sat Jun 17 23:21:12 2017 +0530 ---------------------------------------------------------------------- README.md | 26 ++-- .../oodt/config/ConfigurationManager.java | 10 +- .../DistributedConfigurationManager.java | 83 +++++++++- .../DistributedConfigurationPublisher.java | 9 +- .../oodt/config/distributed/ZNodePaths.java | 4 + .../config/distributed/utils/CuratorUtils.java | 151 +++++++++++++++++++ .../StandaloneConfigurationManager.java | 3 +- .../apache/oodt/config/utils/CuratorUtils.java | 126 ---------------- .../DistributedConfigurationPublisherTest.java | 4 +- .../cas/filemgr/system/XmlRpcFileManager.java | 8 +- 10 files changed, 264 insertions(+), 160 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index de11028..76c6d49 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -============================================================= - Welcome to Apache OODT <http://oodt.apache.org/> -============================================================= +# Welcome to Apache OODT <http://oodt.apache.org/> OODT is a grid middleware framework used on a number of successful projects at NASA's Jet Propulsion Laboratory/California Institute of Technology, and many @@ -19,8 +17,7 @@ other research institutions and universities, specifically those part of the: OODT is a Top Level project of the Apache Software Foundation <http://www.apache.org/>. -Getting Started -=============== +## Getting Started OODT is primarily written in Java, with some components available in Python. It requires Java 5 and uses the Maven 2 <http://maven.apache.org/> build @@ -31,8 +28,8 @@ this directory: For the Python components, see the "agility" subdirectory. -Contributing -============ +## Contributing + To contribute a patch, follow these instructions (note that installing [Hub](http://hub.github.com) is not strictly required, but is recommended). @@ -53,8 +50,7 @@ To contribute a patch, follow these instructions (note that installing ``` -License (see also LICENSE.txt) -============================== +## License (see also LICENSE.txt) Collective work: Copyright 2010-2012 The Apache Software Foundation. @@ -77,8 +73,7 @@ Apache OODT includes a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the licenses listed in the LICENSE.txt file. -Export control -============== +## Export control This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or @@ -104,8 +99,7 @@ The following provides more details on the included cryptographic software: encrypted PDF files. See http://www.bouncycastle.org/ for more details on Bouncy Castle. -Documentation -============= +## Documentation You can build a local copy of the OODT documentation including JavaDocs using the following Maven 2 command in the OODT source directory: @@ -125,8 +119,7 @@ than likely you'll need to add to the MAVEN_OPTS environment variable in order to set the Java heap maximum size with "-Xmx512m" or larger before attempting to run "mvn site". -Mailing Lists -============= +## Mailing Lists Discussion about OODT takes place on the following mailing lists: @@ -144,8 +137,7 @@ dev-subscribe@oodt...). To unsubscribe, send a message to <LIST>[email protected]. For more instructions, send a message to <LIST>[email protected]. -Issue Tracker -============= +## Issue Tracker If you encounter errors in OODT or want to suggest an improvement or a new feature, please visit the OODT issue tracker at http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/ConfigurationManager.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/ConfigurationManager.java b/config/src/main/java/org/apache/oodt/config/ConfigurationManager.java index 1911889..d65c4ae 100644 --- a/config/src/main/java/org/apache/oodt/config/ConfigurationManager.java +++ b/config/src/main/java/org/apache/oodt/config/ConfigurationManager.java @@ -17,10 +17,8 @@ package org.apache.oodt.config; -import java.io.IOException; - /** - * The abstract class to define functionalities of the configuration managers. + * The abstract class to define functions of the configuration managers. * * @author Imesha Sudasingha */ @@ -32,5 +30,9 @@ public abstract class ConfigurationManager { this.component = component; } - public abstract void loadProperties() throws IOException; + public abstract void loadConfiguration() throws Exception; + + public String getComponent() { + return component; + } } http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationManager.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationManager.java b/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationManager.java index 9ab0e32..d16df7e 100644 --- a/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationManager.java +++ b/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationManager.java @@ -17,15 +17,20 @@ package org.apache.oodt.config.distributed; +import org.apache.commons.io.FileUtils; import org.apache.curator.framework.CuratorFramework; import org.apache.oodt.config.ConfigurationManager; import org.apache.oodt.config.Constants; import org.apache.oodt.config.Constants.Properties; -import org.apache.oodt.config.utils.CuratorUtils; +import org.apache.oodt.config.distributed.utils.CuratorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.util.List; import java.util.concurrent.TimeUnit; import static org.apache.oodt.config.Constants.Properties.ZK_CONNECT_STRING; @@ -41,12 +46,17 @@ public class DistributedConfigurationManager extends ConfigurationManager { private static final Logger logger = LoggerFactory.getLogger(DistributedConfigurationManager.class); - /** Variables required to connect to zookeeper */ + /** Connection string required to connect to zookeeper */ private String connectString; private CuratorFramework client; + /** Name of the OODT component, to which this class is providing configuration support */ + private String componentName; + private ZNodePaths zNodePaths; public DistributedConfigurationManager(String component) { super(component); + this.componentName = component; + this.zNodePaths = new ZNodePaths(component); if (System.getProperty(ZK_PROPERTIES_FILE) == null && System.getProperty(Constants.Properties.ZK_CONNECT_STRING) == null) { throw new IllegalArgumentException("Zookeeper requires system properties " + ZK_PROPERTIES_FILE + " or " + ZK_CONNECT_STRING + " to be set"); @@ -96,7 +106,72 @@ public class DistributedConfigurationManager extends ConfigurationManager { } @Override - public void loadProperties() { - // todo Implement the logic with Curator + public void loadConfiguration() throws Exception { + logger.debug("Loading properties for : {}", componentName); + loadProperties(); + logger.info("Properties loaded for : {}", componentName); + + logger.debug("Saving configuration files for : {}", componentName); + saveConfigFiles(); + logger.info("Configuration files saved for : {}", componentName); + + } + + /** + * This method will fetch <pre>.properties</pre> files stored in zookeeper and load the properties in those files + * to {@link System#props}. + * + * @throws Exception Zookeeper exceptions + */ + private void loadProperties() throws Exception { + String propertiesZNodePath = zNodePaths.getPropertiesZNodePath(); + List<String> propertiesFilesZNodePaths = CuratorUtils.getLeafZNodePaths(client, propertiesZNodePath); + + if (propertiesFilesZNodePaths.contains(propertiesZNodePath)) { + propertiesFilesZNodePaths.remove(propertiesZNodePath); + } + + for (String propertiesFileZNodePath : propertiesFilesZNodePaths) { + logger.debug("Loading properties from ZNode at : {}", propertiesFileZNodePath); + byte[] bytes = client.getData().forPath(propertiesFileZNodePath); + try (InputStream in = new ByteArrayInputStream(bytes)) { + System.getProperties().load(in); + } + + logger.info("Properties loaded from ZNode at : {}", propertiesFileZNodePath); + } + } + + /** + * Fetch and save all the configuration files from zookeeper. Local directories are created accordingly. + * For example, if there is a ZNode under <pre>/components/{component}/configuration/etc/mime-types.xml</pre>, it + * will be fetched and stored in the local path <pre>etc/mime-types.xml</pre> + * + * @throws Exception IOException or Zookeeper exception + */ + private void saveConfigFiles() throws Exception { + String configParentZNodePath = zNodePaths.getConfigurationZNodePath(); + List<String> configFilesZNodePaths = CuratorUtils.getLeafZNodePaths(client, configParentZNodePath); + + if (configFilesZNodePaths.contains(configParentZNodePath)) { + configFilesZNodePaths.remove(configParentZNodePath); + } + + for (String configFileZNodePath : configFilesZNodePaths) { + logger.debug("Fetching configuration file from ZNode at : {}", configFileZNodePath); + byte[] bytes = client.getData().forPath(configFileZNodePath); + + String localFilePath = zNodePaths.getLocalConfigFilePath(configFileZNodePath); + FileUtils.writeByteArrayToFile(new File(localFilePath), bytes); + logger.info("Config file from ZNode at {} saved to {}", configFileZNodePath); + } + } + + public String getComponentName() { + return componentName; + } + + public ZNodePaths getzNodePaths() { + return zNodePaths; } } http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisher.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisher.java b/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisher.java index 8970641..37b57c9 100644 --- a/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisher.java +++ b/config/src/main/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisher.java @@ -20,7 +20,7 @@ package org.apache.oodt.config.distributed; import org.apache.commons.io.FileUtils; import org.apache.curator.framework.CuratorFramework; import org.apache.oodt.config.Constants; -import org.apache.oodt.config.utils.CuratorUtils; +import org.apache.oodt.config.distributed.utils.CuratorUtils; import org.apache.zookeeper.data.Stat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -114,6 +114,8 @@ public class DistributedConfigurationPublisher { logger.debug("Publishing config files : {}", configFiles); publishConfiguration(configFiles, false); logger.info("Config files published successfully"); + + // TODO: 6/17/17 Verify whether the given configuration are published correctly } private void publishConfiguration(Map<String, String> fileMapping, boolean isProperties) throws Exception { @@ -135,7 +137,6 @@ public class DistributedConfigurationPublisher { String existingData = new String(bytes); if (content.equals(existingData)) { logger.warn("{} already exists in zookeeper at {}", entry.getKey(), entry.getValue()); - continue; } else { Stat stat = client.setData().forPath(zNodePath, content.getBytes()); if (stat != null) { @@ -143,6 +144,10 @@ public class DistributedConfigurationPublisher { } } } else { + /* + * Creating these ZNodes with parent 'Containers' is important since containers are automatically deleted + * when no child node is present under them. + */ client.create().creatingParentContainersIfNeeded().forPath(zNodePath, content.getBytes()); } } http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/distributed/ZNodePaths.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/distributed/ZNodePaths.java b/config/src/main/java/org/apache/oodt/config/distributed/ZNodePaths.java index f390838..90fa9a5 100644 --- a/config/src/main/java/org/apache/oodt/config/distributed/ZNodePaths.java +++ b/config/src/main/java/org/apache/oodt/config/distributed/ZNodePaths.java @@ -77,4 +77,8 @@ public class ZNodePaths { public String getConfigurationZNodePath(String subPath) { return configurationZNodeRoot + (subPath.startsWith(SEPARATOR) ? subPath.substring(1) : subPath); } + + public String getLocalConfigFilePath(String zNodePath) { + return zNodePath.substring(configurationZNodeRoot.length()); + } } http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/distributed/utils/CuratorUtils.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/distributed/utils/CuratorUtils.java b/config/src/main/java/org/apache/oodt/config/distributed/utils/CuratorUtils.java new file mode 100644 index 0000000..6f9c97f --- /dev/null +++ b/config/src/main/java/org/apache/oodt/config/distributed/utils/CuratorUtils.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.oodt.config.distributed.utils; + +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.framework.api.ACLProvider; +import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.oodt.config.Constants; +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.ZooDefs; +import org.apache.zookeeper.data.ACL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.oodt.config.Constants.Properties.ZK_PROPERTIES_FILE; +import static org.apache.oodt.config.Constants.ZPaths.*; + +public class CuratorUtils { + + private static final Logger logger = LoggerFactory.getLogger(CuratorUtils.class); + + private CuratorUtils() { + } + + /** + * Loads zookeeper related properties from ZK_PROPERTIES_FILE. + * + * @throws IOException if properties file could not be read + */ + public static void loadZookeeperProperties() throws IOException { + System.getProperties().load(new FileInputStream(System.getProperty(ZK_PROPERTIES_FILE))); + } + + /** + * Create a ZNode in the given path if not exists, with the given data + * + * @param curatorFramework {@link CuratorFramework} client + * @param zNodePath the path in which the ZNode to be created + */ + public static void createZNodeIfNotExists(CuratorFramework curatorFramework, String zNodePath, CreateMode mode, byte[] content) throws Exception { + try { + String path = curatorFramework.create().creatingParentsIfNeeded().withMode(mode).forPath(zNodePath, content); + logger.debug("Created ZNode at path : {}", path); + } catch (Exception e) { + if (e instanceof KeeperException && KeeperException.Code.NODEEXISTS.equals(((KeeperException) e).code())) { + // This is a desired behaviour, trying to create an already existing znode. + logger.debug("Attempting to create an already existing ZNode at path {} : {}", zNodePath, e); + } else { + logger.error("Error when creating ZNode for path {} : {}", zNodePath, e.getMessage()); + throw e; + } + } + } + + /** + * Gets the <code>String</code> value of the data in the given znode path + * + * @param client {@link CuratorFramework} client + * @param path ZNode path to be checked + * @return ZNode's data as a string or null + * @throws Exception zookeeper errors and etc + */ + public static String getIfExists(CuratorFramework client, String path) throws Exception { + return client.checkExists().forPath(path) != null ? new String(client.getData().forPath(path)) : null; + } + + /** + * Builds a {@link CuratorFramework} instance using the given connectString. + * + * @param connectString connection string to connect to zookeeper + * @param logger {@link Logger} instance of the calling class + * @return Newly created CuratorFramework instance. + */ + public static CuratorFramework getCuratorFrameworkClient(String connectString, Logger logger) { + int connectionTimeoutMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "15000")); + int sessionTimeoutMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "60000")); + int retryInitialWaitMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "1000")); + int maxRetryCount = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "3")); + + CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder() + .connectString(connectString) + .retryPolicy(new ExponentialBackoffRetry(retryInitialWaitMs, maxRetryCount)) + .connectionTimeoutMs(connectionTimeoutMs) + .sessionTimeoutMs(sessionTimeoutMs); + + /* + * If authorization information is available, those will be added to the client. NOTE: These auth info are + * for access control, therefore no authentication will happen when the client is being started. These + * info will only be required whenever a client is accessing an already create ZNode. For another client of + * another node to make use of a ZNode created by this node, it should also provide the same auth info. + */ + if (System.getProperty(Constants.Properties.ZK_USERNAME) != null && System.getProperty(Constants.Properties.ZK_PASSWORD) != null) { + String authenticationString = System.getProperty(Constants.Properties.ZK_USERNAME) + ":" + System.getProperty(Constants.Properties.ZK_PASSWORD); + builder.authorization("digest", authenticationString.getBytes()) + .aclProvider(new ACLProvider() { + public List<ACL> getDefaultAcl() { + return ZooDefs.Ids.CREATOR_ALL_ACL; + } + + public List<ACL> getAclForPath(String path) { + return ZooDefs.Ids.CREATOR_ALL_ACL; + } + }); + } + + CuratorFramework client = builder.build(); + logger.debug("CuratorFramework client built successfully with connectString: {}, sessionTimeout: {} and connectionTimeout: {}", + connectString, sessionTimeoutMs, connectionTimeoutMs); + + return client; + } + + public static List<String> getLeafZNodePaths(CuratorFramework client, String parentZNodePath) throws Exception { + List<String> leafZNodePaths = new ArrayList<>(); + + List<String> childNodes = client.getChildren().forPath(parentZNodePath); + if (childNodes != null && childNodes.size() > 0) { + for (String child : childNodes) { + String childZNodePath = parentZNodePath + SEPARATOR + child; + leafZNodePaths.addAll(getLeafZNodePaths(client, childZNodePath)); + } + } else { + // Then, current ZNode path is a leaf node + leafZNodePaths.add(parentZNodePath); + } + + return leafZNodePaths; + } +} http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/standalone/StandaloneConfigurationManager.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/standalone/StandaloneConfigurationManager.java b/config/src/main/java/org/apache/oodt/config/standalone/StandaloneConfigurationManager.java index 6ecb1b7..8d932fb 100644 --- a/config/src/main/java/org/apache/oodt/config/standalone/StandaloneConfigurationManager.java +++ b/config/src/main/java/org/apache/oodt/config/standalone/StandaloneConfigurationManager.java @@ -23,7 +23,6 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -45,7 +44,7 @@ public class StandaloneConfigurationManager extends ConfigurationManager { /** {@inheritDoc} */ @Override - public void loadProperties() throws IOException { + public void loadConfiguration() throws Exception { for (String file : propertiesFiles) { logger.debug("Loading properties from file : {}", file); System.getProperties().load(new FileInputStream(new File(file))); http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/main/java/org/apache/oodt/config/utils/CuratorUtils.java ---------------------------------------------------------------------- diff --git a/config/src/main/java/org/apache/oodt/config/utils/CuratorUtils.java b/config/src/main/java/org/apache/oodt/config/utils/CuratorUtils.java deleted file mode 100644 index c73d48b..0000000 --- a/config/src/main/java/org/apache/oodt/config/utils/CuratorUtils.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.oodt.config.utils; - -import org.apache.curator.framework.CuratorFramework; -import org.apache.curator.framework.CuratorFrameworkFactory; -import org.apache.curator.framework.api.ACLProvider; -import org.apache.curator.retry.ExponentialBackoffRetry; -import org.apache.oodt.config.Constants; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooDefs; -import org.apache.zookeeper.data.ACL; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.FileInputStream; -import java.io.IOException; -import java.util.List; - -import static org.apache.oodt.config.Constants.Properties.ZK_PROPERTIES_FILE; - -public class CuratorUtils { - - private static final Logger logger = LoggerFactory.getLogger(CuratorUtils.class); - - private CuratorUtils() { - } - - /** - * Loads zookeeper related properties from ZK_PROPERTIES_FILE. - * - * @throws IOException if properties file could not be read - */ - public static void loadZookeeperProperties() throws IOException { - System.getProperties().load(new FileInputStream(System.getProperty(ZK_PROPERTIES_FILE))); - } - - /** - * Create a ZNode in the given path if not exists, with the given data - * - * @param curatorFramework {@link CuratorFramework} client - * @param zNodePath the path in which the ZNode to be created - */ - public static void createZNodeIfNotExists(CuratorFramework curatorFramework, String zNodePath, CreateMode mode, byte[] content) throws Exception { - try { - String path = curatorFramework.create().creatingParentsIfNeeded().withMode(mode).forPath(zNodePath, content); - logger.debug("Created ZNode at path : {}", path); - } catch (Exception e) { - if (e instanceof KeeperException && KeeperException.Code.NODEEXISTS.equals(((KeeperException) e).code())) { - // This is a desired behaviour, trying to create an already existing znode. - logger.debug("Attempting to create an already existing ZNode at path {} : {}", zNodePath, e); - } else { - logger.error("Error when creating ZNode for path {} : {}", zNodePath, e.getMessage()); - throw e; - } - } - } - - /** - * Gets the <code>String</code> value of the data in the given znode path - * - * @param client {@link CuratorFramework} client - * @param path ZNode path to be checked - * @return ZNode's data as a string or null - * @throws Exception zookeeper errors and etc - */ - public static String getIfExists(CuratorFramework client, String path) throws Exception { - return client.checkExists().forPath(path) != null ? new String(client.getData().forPath(path)) : null; - } - - public static CuratorFramework getCuratorFrameworkClient(String connectString, Logger logger) { - int connectionTimeoutMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "15000")); - int sessionTimeoutMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "60000")); - int retryInitialWaitMs = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "1000")); - int maxRetryCount = Integer.parseInt(System.getProperty(Constants.Properties.ZK_CONNECTION_TIMEOUT, "3")); - - CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder() - .connectString(connectString) - .retryPolicy(new ExponentialBackoffRetry(retryInitialWaitMs, maxRetryCount)) - .connectionTimeoutMs(connectionTimeoutMs) - .sessionTimeoutMs(sessionTimeoutMs); - - /* - * If authorization information is available, those will be added to the client. NOTE: These auth info are - * for access control, therefore no authentication will happen when the client is being started. These - * info will only be required whenever a client is accessing an already create ZNode. For another client of - * another node to make use of a ZNode created by this node, it should also provide the same auth info. - */ - if (System.getProperty(Constants.Properties.ZK_USERNAME) != null && System.getProperty(Constants.Properties.ZK_PASSWORD) != null) { - String authenticationString = System.getProperty(Constants.Properties.ZK_USERNAME) + ":" + System.getProperty(Constants.Properties.ZK_PASSWORD); - builder.authorization("digest", authenticationString.getBytes()) - .aclProvider(new ACLProvider() { - public List<ACL> getDefaultAcl() { - return ZooDefs.Ids.CREATOR_ALL_ACL; - } - - public List<ACL> getAclForPath(String path) { - return ZooDefs.Ids.CREATOR_ALL_ACL; - } - }); - } - - CuratorFramework client = builder.build(); - logger.debug("CuratorFramework client built successfully with connectString: {}, sessionTimeout: {} and connectionTimeout: {}", - connectString, sessionTimeoutMs, connectionTimeoutMs); - - return client; - } - -} http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/config/src/test/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisherTest.java ---------------------------------------------------------------------- diff --git a/config/src/test/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisherTest.java b/config/src/test/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisherTest.java index 2a3c903..3a0212a 100644 --- a/config/src/test/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisherTest.java +++ b/config/src/test/java/org/apache/oodt/config/distributed/DistributedConfigurationPublisherTest.java @@ -95,8 +95,10 @@ public class DistributedConfigurationPublisherTest { Assert.assertEquals(fileContent, storedContent); } - } + +// DistributedConfigurationManager configurationManager = new DistributedConfigurationManager(Constants.Components.FILE_MANAGER); +// configurationManager.loadConfiguration(); } @AfterClass http://git-wip-us.apache.org/repos/asf/oodt/blob/5fcf2220/filemgr/src/main/java/org/apache/oodt/cas/filemgr/system/XmlRpcFileManager.java ---------------------------------------------------------------------- diff --git a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/system/XmlRpcFileManager.java b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/system/XmlRpcFileManager.java index 9d7d740..261e93c 100644 --- a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/system/XmlRpcFileManager.java +++ b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/system/XmlRpcFileManager.java @@ -117,7 +117,7 @@ public class XmlRpcFileManager { * * @param port The web server port to run the XML Rpc server on, defaults to 1999. */ - public XmlRpcFileManager(int port) throws IOException { + public XmlRpcFileManager(int port) throws Exception { webServerPort = port; // start up the web server @@ -1197,7 +1197,7 @@ public class XmlRpcFileManager { } - public static void main(String[] args) throws IOException { + public static void main(String[] args) throws Exception { int portNum = -1; String usage = "FileManager --portNum <port number for xml rpc service>\n"; @@ -1536,8 +1536,8 @@ public class XmlRpcFileManager { return pMet; } - private void loadConfiguration() throws IOException { - configurationManager.loadProperties(); + private void loadConfiguration() throws Exception { + configurationManager.loadConfiguration(); String metaFactory, dataFactory, transferFactory;
