This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch dev-metadata in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit d9e0b6464bd86aa3b916f894d53865f78671012b Author: ken.lj <ken.lj...@gmail.com> AuthorDate: Tue Nov 27 19:07:42 2018 +0800 save one zookeeper implementation as default --- .../dubbo-configcenter-archaius/pom.xml | 53 ---- .../zookeeper/ArchaiusDynamicConfiguration.java | 163 ------------- .../sources/ZooKeeperConfigurationSource.java | 268 --------------------- ....apache.dubbo.configcenter.DynamicConfiguration | 1 - .../dubbo-configcenter-zookeeper-cache/pom.xml | 53 ---- ....apache.dubbo.configcenter.DynamicConfiguration | 1 - .../ZookeeperDynamicConfigurationTest.java | 150 ------------ .../dubbo-configcenter-zookeeper/pom.xml | 19 +- .../support/zookeeper/CacheListener.java | 1 - .../zookeeper/ZookeeperDynamicConfiguration.java | 0 dubbo-configcenter/pom.xml | 2 - dubbo-dependencies-bom/pom.xml | 12 - 12 files changed, 3 insertions(+), 720 deletions(-) diff --git a/dubbo-configcenter/dubbo-configcenter-archaius/pom.xml b/dubbo-configcenter/dubbo-configcenter-archaius/pom.xml deleted file mode 100644 index a122d72..0000000 --- a/dubbo-configcenter/dubbo-configcenter-archaius/pom.xml +++ /dev/null @@ -1,53 +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. - --> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo-configcenter</artifactId> - <version>2.7.0-SNAPSHOT</version> - </parent> - <artifactId>dubbo-configcenter-archaius</artifactId> - <packaging>jar</packaging> - <name>${project.artifactId}</name> - <description>The archaius implementation of the config-center api</description> - - <dependencies> - <dependency> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo-configcenter-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - <dependency> - <groupId>com.netflix.archaius</groupId> - <artifactId>archaius-core</artifactId> - </dependency> - <dependency> - <groupId>org.apache.curator</groupId> - <artifactId>curator-framework</artifactId> - </dependency> - <dependency> - <groupId>org.apache.curator</groupId> - <artifactId>curator-recipes</artifactId> - </dependency> - <dependency> - <groupId>commons-configuration</groupId> - <artifactId>commons-configuration</artifactId> - </dependency> - </dependencies> -</project> \ No newline at end of file diff --git a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ArchaiusDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ArchaiusDynamicConfiguration.java deleted file mode 100644 index e0c64e3..0000000 --- a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ArchaiusDynamicConfiguration.java +++ /dev/null @@ -1,163 +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.dubbo.configcenter.support.zookeeper; - -import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; -import com.netflix.config.DynamicWatchedConfiguration; -import org.apache.dubbo.common.Constants; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.logger.Logger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.ConcurrentHashSet; -import org.apache.dubbo.common.utils.StringUtils; -import org.apache.dubbo.configcenter.AbstractDynamicConfiguration; -import org.apache.dubbo.configcenter.ConfigChangeEvent; -import org.apache.dubbo.configcenter.ConfigChangeType; -import org.apache.dubbo.configcenter.ConfigType; -import org.apache.dubbo.configcenter.ConfigurationListener; -import org.apache.dubbo.configcenter.support.zookeeper.sources.ZooKeeperConfigurationSource; - -import java.util.Set; - -import static org.apache.dubbo.common.Constants.CONFIG_NAMESPACE_KEY; -import static org.apache.dubbo.configcenter.support.zookeeper.sources.ZooKeeperConfigurationSource.ARCHAIUS_CONFIG_CHECK_KEY; -import static org.apache.dubbo.configcenter.support.zookeeper.sources.ZooKeeperConfigurationSource.ARCHAIUS_CONFIG_ROOT_PATH_KEY; -import static org.apache.dubbo.configcenter.support.zookeeper.sources.ZooKeeperConfigurationSource.ARCHAIUS_SOURCE_ADDRESS_KEY; -import static org.apache.dubbo.configcenter.support.zookeeper.sources.ZooKeeperConfigurationSource.DEFAULT_CONFIG_ROOT_PATH; - -/** - * Archaius supports various sources and it's extensiable: JDBC, ZK, Properties, ..., so should we make it extensiable? - * FIXME: we should get rid of Archaius or move it to eco system since Archaius is out of maintenance, instead, we - * should rely on curator-x-async which looks quite promising. - */ -public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<ArchaiusDynamicConfiguration.ArchaiusListener> { - private static final Logger logger = LoggerFactory.getLogger(ArchaiusDynamicConfiguration.class); - - public ArchaiusDynamicConfiguration() { - } - - @Override - public void initWith(URL url) { - super.initWith(url); - - // String address = env.getCompositeConf().getString(ADDRESS_KEY); - // String app = env.getCompositeConf().getString(APP_KEY); - - String address = url.getBackupAddress(); - if (!address.equals(Constants.ANYHOST_VALUE)) { - System.setProperty(ARCHAIUS_SOURCE_ADDRESS_KEY, address); - } - System.setProperty(ARCHAIUS_CONFIG_ROOT_PATH_KEY, url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_CONFIG_ROOT_PATH)); - System.setProperty(ARCHAIUS_CONFIG_CHECK_KEY, url.getParameter(Constants.CONFIG_CHECK_KEY, "false")); - - try { - ZooKeeperConfigurationSource zkConfigSource = new ZooKeeperConfigurationSource(url); - zkConfigSource.start(); - /*if (!zkConfigSource.isConnected()) { - // we can check the status of config center here, and decide to fail or continue if we cannot reach the config server. - }*/ - DynamicWatchedConfiguration zkDynamicConfig = new DynamicWatchedConfiguration(zkConfigSource); - ConfigurationManager.install(zkDynamicConfig); - } catch (Exception e) { - throw new IllegalStateException(e.getMessage(), e); - } - } - - /** - * The hierarchy of configuration properties is: - * 1. /{namespace}/config/dubbo/dubbo.properties - * 2. /{namespace}/config/{applicationname}/dubbo.properties - * <p> - * To make the API compatible with other configuration systems, the key doesn't has group as prefix, so we should - * add the group prefix before try to get value. If being used for dubbo router rules, the key must already - * contains group prefix. - */ - @Override - protected String getTargetConfig(String key, String group, long timeout) { - if (StringUtils.isNotEmpty(group)) { - key = group + "." + key; - } - - return DynamicPropertyFactory.getInstance() - .getStringProperty(key, null) - .get(); - } - - /** - * First, get app level configuration. If there's no value in app level, try to get global dubbo level. - */ - @Override - protected Object getInternalProperty(String key) { - return DynamicPropertyFactory.getInstance() - .getStringProperty(key, null) - .get(); - } - - @Override - protected void addConfigurationListener(String key, ArchaiusListener targetListener, ConfigurationListener configurationListener) { - targetListener.addListener(configurationListener); - } - - @Override - protected ArchaiusListener createTargetListener(String key) { - ArchaiusListener archaiusListener = new ArchaiusListener(key); - DynamicStringProperty prop = DynamicPropertyFactory.getInstance() - .getStringProperty(key, null); - prop.addCallback(archaiusListener); - return archaiusListener; - } - - @Override - protected void recover() { - // FIXME will Archaius recover automatically? - } - - public class ArchaiusListener implements Runnable { - private Set<ConfigurationListener> listeners = new ConcurrentHashSet<>(); - private String key; - private ConfigType type; - - public ArchaiusListener(String key) { - this.key = key; - } - - public void addListener(ConfigurationListener listener) { - this.listeners.add(listener); - } - - @Override - public void run() { - DynamicStringProperty prop = DynamicPropertyFactory.getInstance() - .getStringProperty(key, null); - String newValue = prop.get(); - ConfigChangeEvent event = new ConfigChangeEvent(key, newValue); - if (newValue == null) { - event.setChangeType(ConfigChangeType.DELETED); - } else { - if (newValue.equals("")) { - logger.warn("an empty rule is received for " + key + ", the current working rule is unknown, " + - "the empty rule will not take effect."); - return; - } - event.setChangeType(ConfigChangeType.MODIFIED); - } - listeners.forEach(listener -> listener.process(event)); - } - } -} diff --git a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/sources/ZooKeeperConfigurationSource.java b/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/sources/ZooKeeperConfigurationSource.java deleted file mode 100644 index e77e434..0000000 --- a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/sources/ZooKeeperConfigurationSource.java +++ /dev/null @@ -1,268 +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.dubbo.configcenter.support.zookeeper.sources; - -import com.google.common.io.Closeables; -import com.netflix.config.WatchedConfigurationSource; -import com.netflix.config.WatchedUpdateListener; -import com.netflix.config.WatchedUpdateResult; -import org.apache.curator.framework.CuratorFramework; -import org.apache.curator.framework.CuratorFrameworkFactory; -import org.apache.curator.framework.recipes.cache.ChildData; -import org.apache.curator.framework.recipes.cache.TreeCache; -import org.apache.curator.framework.recipes.cache.TreeCacheEvent; -import org.apache.curator.framework.recipes.cache.TreeCacheListener; -import org.apache.curator.retry.ExponentialBackoffRetry; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.Closeable; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -/** - * zookeeper archaius source. - */ -public class ZooKeeperConfigurationSource implements WatchedConfigurationSource, Closeable { - public static final String ARCHAIUS_SOURCE_ADDRESS_KEY = "archaius.zk.address"; - public static final String ARCHAIUS_CONFIG_ROOT_PATH_KEY = "archaius.zk.rootpath"; - public static final String ARCHAIUS_CONFIG_CHECK_KEY = "archaius.zk.check"; - public static final String DEFAULT_CONFIG_ROOT_PATH = "/dubbo"; - - private static final Logger logger = LoggerFactory.getLogger(ZooKeeperConfigurationSource.class); - private Executor executor = Executors.newFixedThreadPool(1); - private final CuratorFramework client; - - // The final root path would be: /configRootPath/"config" - private final String configRootPath; - private final TreeCache treeCache; - private CountDownLatch initializedLatch = new CountDownLatch(1); - - private final Charset charset = Charset.forName("UTF-8"); - - private List<WatchedUpdateListener> listeners = new CopyOnWriteArrayList<WatchedUpdateListener>(); - - private URL url; - - public ZooKeeperConfigurationSource(URL url) { - this(System.getProperty(ARCHAIUS_SOURCE_ADDRESS_KEY), 60 * 1000, 10000, - System.getProperty(ARCHAIUS_CONFIG_ROOT_PATH_KEY, DEFAULT_CONFIG_ROOT_PATH)); - this.url = url; - } - - public ZooKeeperConfigurationSource(int sessionTimeout, int connectTimeout, String configRootPath) { - this(System.getProperty(ARCHAIUS_SOURCE_ADDRESS_KEY), sessionTimeout, connectTimeout, configRootPath); - } - - - /** - * @param connectString, the zookeeper address - * @param sessionTimeout, timeout for session - * @param connectTimeout, timeout to wait before build a connection - * @param configRootPath, the final path would be: configRootPath/"config" - */ - public ZooKeeperConfigurationSource(String connectString, int sessionTimeout, int connectTimeout, String configRootPath) { - if (connectString == null) { - throw new IllegalArgumentException("connectString is null, must specify the address to connect for " + - "zookeeper archaius source."); - } - - if (!configRootPath.startsWith("/")) { - configRootPath = "/" + configRootPath + "/config"; - } - - CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, sessionTimeout, connectTimeout, - new ExponentialBackoffRetry(1000, 3)); - client.start(); - try { - boolean connected = client.blockUntilConnected(connectTimeout, TimeUnit.MILLISECONDS); - if (!connected) { - boolean check = Boolean.parseBoolean(System.getProperty(ARCHAIUS_CONFIG_CHECK_KEY, "false")); - if (check) { - throw new IllegalStateException("Failed to connect to config center (zookeeper): " - + connectString + " in " + connectTimeout + "ms."); - } else { - logger.warn("Cannot connect to config center (zookeeper) " + connectString - + " in " + connectTimeout + "ms"); - } - } - } catch (InterruptedException e) { - throw new IllegalStateException("The thread was interrupted unexpectedly when try connecting to zookeeper " - + connectString + " config center, ", e); - } - this.client = client; - this.configRootPath = configRootPath; - this.treeCache = new TreeCache(client, configRootPath); - } - - /** - * Creates the pathChildrenCache using the CuratorFramework client and ZK root path node for the config - * - * @param client zookeeper client - * @param configRootPath path to ZK root parent node for the rest of the configuration properties (ie. /<my-app>/config) - */ - public ZooKeeperConfigurationSource(CuratorFramework client, String configRootPath) { - this.client = client; - this.configRootPath = configRootPath; - this.treeCache = new TreeCache(client, configRootPath); - } - - /** - * Adds a listener to the pathChildrenCache, initializes the cache, then starts the cache-management background - * thread - */ - public void start() throws Exception { - // create the watcher for future configuration updates - treeCache.getListenable().addListener(new TreeCacheListener() { - public void childEvent(CuratorFramework aClient, TreeCacheEvent event) throws Exception { - - TreeCacheEvent.Type type = event.getType(); - ChildData data = event.getData(); - if (type == TreeCacheEvent.Type.INITIALIZED) { - initializedLatch.countDown(); - } - - // TODO, ignore other event types - if (data == null) { - return; - } - - // TODO We limit the notification of config changes to a specific path level, for example - // /dubbo/config/service/configurators, other config changes not in this level will not get notified, - // say /dubbo/config/dubbo.properties - if (data.getPath().split("/").length == 5) { - byte[] value = data.getData(); - String stringValue = new String(value, charset); - - // fire event to all listeners - Map<String, Object> added = null; - Map<String, Object> changed = null; - Map<String, Object> deleted = null; - - switch (type) { - case NODE_ADDED: - added = new HashMap<>(1); - added.put(pathToKey(data.getPath()), stringValue); - break; - case NODE_REMOVED: - deleted = new HashMap<>(1); - deleted.put(pathToKey(data.getPath()), stringValue); - break; - case NODE_UPDATED: - changed = new HashMap<>(1); - changed.put(pathToKey(data.getPath()), stringValue); - } - - WatchedUpdateResult result = WatchedUpdateResult.createIncremental(added, - changed, deleted); - - fireEvent(result); - } - } - }, executor); - - // it's not blocking, so we use an extra latch 'initializedLatch' to make sure cache fully initialized before use. - treeCache.start(); - } - - /** - * This is used to convert a configuration nodePath into a key - * - * @param path - * @return key (nodePath less the config root path) - */ - private String pathToKey(String path) { - if (StringUtils.isEmpty(path)) { - return path; - } - return path.replace(configRootPath + "/", "").replaceAll("/", "."); - } - - @Override - public Map<String, Object> getCurrentData() throws Exception { - logger.debug("getCurrentData() retrieving current data."); - - Map<String, Object> all = new HashMap<>(); - - try { - initializedLatch.await(); - } catch (InterruptedException e) { - logger.error("Being interrupted unexpectedly when waiting zookeeper to initialize, the config data " + - "may not ready yet, be careful!"); - } - - Map<String, ChildData> dataMap = treeCache.getCurrentChildren(configRootPath); - if (dataMap != null && dataMap.size() > 0) { - dataMap.forEach((childPath, childData) -> { - String fullChildPath = configRootPath + "/" + childPath; - /*// special treatment for /dubbo/config/dubbo.properties, it's the only config item need to store in cache in this level. - if (childPath.equals(url.getParameter(Constants.CONFIG_DATAID_KEY))) { - all.put(pathToKey(fullChildPath), new String(childData.getData(), charset)); - }*/ - treeCache.getCurrentChildren(fullChildPath).forEach((subChildPath, subChildData) -> { - all.put(pathToKey(fullChildPath + "/" + subChildPath), new String(subChildData.getData(), charset)); - }); - }); - } - - logger.debug("getCurrentData() retrieved [{}] config elements.", all.size()); - - return all; - } - - @Override - public void addUpdateListener(WatchedUpdateListener l) { - if (l != null) { - listeners.add(l); - } - } - - @Override - public void removeUpdateListener(WatchedUpdateListener l) { - if (l != null) { - listeners.remove(l); - } - } - - protected void fireEvent(WatchedUpdateResult result) { - for (WatchedUpdateListener l : listeners) { - try { - l.updateConfiguration(result); - } catch (Throwable ex) { - logger.error("Error in invoking WatchedUpdateListener", ex); - } - } - } - - public void close() { - try { - Closeables.close(treeCache, true); - } catch (IOException exc) { - logger.error("IOException should not have been thrown.", exc); - } - } -} diff --git a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration b/dubbo-configcenter/dubbo-configcenter-archaius/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration deleted file mode 100644 index d271f16..0000000 --- a/dubbo-configcenter/dubbo-configcenter-archaius/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration +++ /dev/null @@ -1 +0,0 @@ -archaius=org.apache.dubbo.configcenter.support.archaius.ArchaiusDynamicConfiguration \ No newline at end of file diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/pom.xml b/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/pom.xml deleted file mode 100644 index 191b4ae..0000000 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/pom.xml +++ /dev/null @@ -1,53 +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. - --> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo-configcenter</artifactId> - <version>2.7.0-SNAPSHOT</version> - </parent> - <artifactId>dubbo-configcenter-zookeeper-cache</artifactId> - <packaging>jar</packaging> - <name>${project.artifactId}</name> - <description>The zookeeper implementation of the config-center api</description> - - <dependencies> - <dependency> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo-configcenter-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - <dependency> - <groupId>org.apache.curator</groupId> - <artifactId>curator-framework</artifactId> - <version>2.12.0</version> - </dependency> - <dependency> - <groupId>org.apache.curator</groupId> - <artifactId>curator-recipes</artifactId> - <version>2.12.0</version> - </dependency> - <dependency> - <groupId>org.apache.curator</groupId> - <artifactId>curator-test</artifactId> - <version>2.12.0</version> - <scope>test</scope> - </dependency> - </dependencies> -</project> \ No newline at end of file diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration b/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration deleted file mode 100644 index 0379c0e..0000000 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfiguration +++ /dev/null @@ -1 +0,0 @@ -zookeeper=org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration \ No newline at end of file diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java b/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java deleted file mode 100644 index 382e77d..0000000 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java +++ /dev/null @@ -1,150 +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.dubbo.configcenter.support.zookeeper; - -import org.apache.curator.framework.CuratorFramework; -import org.apache.curator.framework.CuratorFrameworkFactory; -import org.apache.curator.retry.ExponentialBackoffRetry; -import org.apache.curator.test.TestingServer; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.extension.ExtensionLoader; -import org.apache.dubbo.common.utils.NetUtils; -import org.apache.dubbo.configcenter.ConfigChangeEvent; -import org.apache.dubbo.configcenter.ConfigurationListener; -import org.apache.dubbo.configcenter.DynamicConfiguration; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CountDownLatch; - -/** - * - */ -public class ZookeeperDynamicConfigurationTest { - private static CuratorFramework client; - - private static URL configUrl; - private static int zkServerPort = NetUtils.getAvailablePort(); - private static TestingServer zkServer; - private static DynamicConfiguration configuration; - - @BeforeClass - public static void setUp() throws Exception { - zkServer = new TestingServer(zkServerPort, true); - - client = CuratorFrameworkFactory.newClient("localhost:" + zkServerPort, 60 * 1000, 60 * 1000, - new ExponentialBackoffRetry(1000, 3)); - client.start(); - - try { - setData("/dubbo/config/dubbo/dubbo.properties", "The content from dubbo.properties"); - setData("/dubbo/config/group*service:version/configurators", "The content from configurators"); - setData("/dubbo/config/appname", "The content from higer level node"); - setData("/dubbo/config/appname/tagrouters", "The content from appname tagrouters"); - } catch (Exception e) { - e.printStackTrace(); - } - - - configUrl = URL.valueOf("zookeeper://localhost:" + zkServerPort); - - configuration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(configUrl.getProtocol()); - configuration.initWith(configUrl); - } - - @AfterClass - public static void tearDown() throws Exception { - zkServer.stop(); - } - - @Test - public void testGetConfig() throws Exception { - Assert.assertEquals("The content from dubbo.properties", configuration.getConfig("dubbo.dubbo.properties")); - Assert.assertEquals("The content from dubbo.properties", configuration.getConfig("dubbo.properties", "dubbo")); - } - - @Test - public void testAddListener() throws Exception { - CountDownLatch latch = new CountDownLatch(4); - TestListener listener1 = new TestListener(latch); - TestListener listener2 = new TestListener(latch); - TestListener listener3 = new TestListener(latch); - TestListener listener4 = new TestListener(latch); - configuration.addListener("group*service:version.configurators", listener1); - configuration.addListener("group*service:version.configurators", listener2); - configuration.addListener("appname.tagrouters", listener3); - configuration.addListener("appname.tagrouters", listener4); - - setData("/dubbo/config/group*service:version/configurators", "new value1"); - Thread.sleep(100); - setData("/dubbo/config/appname/tagrouters", "new value2"); - Thread.sleep(100); - setData("/dubbo/config/appname", "new value3"); - - Thread.sleep(5000); - - latch.await(); - Assert.assertEquals(1, listener1.getCount("group*service:version.configurators")); - Assert.assertEquals(1, listener2.getCount("group*service:version.configurators")); - Assert.assertEquals(1, listener3.getCount("appname.tagrouters")); - Assert.assertEquals(1, listener4.getCount("appname.tagrouters")); - - Assert.assertEquals("new value1", listener1.getValue()); - Assert.assertEquals("new value1", listener2.getValue()); - Assert.assertEquals("new value2", listener3.getValue()); - Assert.assertEquals("new value2", listener4.getValue()); - } - - private static void setData(String path, String data) throws Exception { - if (client.checkExists().forPath(path) == null) { - client.create().creatingParentsIfNeeded().forPath(path); - } - client.setData().forPath(path, data.getBytes()); - } - - private class TestListener implements ConfigurationListener { - private CountDownLatch latch; - private String value; - private Map<String, Integer> countMap = new HashMap<>(); - - public TestListener(CountDownLatch latch) { - this.latch = latch; - } - - @Override - public void process(ConfigChangeEvent event) { - Integer count = countMap.computeIfAbsent(event.getKey(), k -> new Integer(0)); - countMap.put(event.getKey(), ++count); - - value = event.getNewValue(); - latch.countDown(); - } - - public int getCount(String key) { - return countMap.get(key); - } - - public String getValue() { - return value; - } - } - -} diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml index 717f5ef..c672933 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml @@ -33,31 +33,18 @@ <artifactId>dubbo-configcenter-api</artifactId> <version>${project.parent.version}</version> </dependency> - <!--<dependency>--> - <!--<groupId>org.apache.curator</groupId>--> - <!--<artifactId>curator-framework</artifactId>--> - <!--</dependency>--> <dependency> <groupId>org.apache.curator</groupId> - <artifactId>curator-recipes</artifactId> + <artifactId>curator-framework</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> - <artifactId>curator-x-async</artifactId> - <version>4.0.1</version> - <exclusions> - <exclusion> - <groupId>org.apache.zookeeper</groupId> - <artifactId>zookeeper</artifactId> - </exclusion> - </exclusions> + <artifactId>curator-recipes</artifactId> </dependency> - <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-test</artifactId> - <version>2.12.0</version> <scope>test</scope> </dependency> </dependencies> -</project> +</project> \ No newline at end of file diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java similarity index 98% rename from dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java rename to dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java index bbfa057..b91e76e 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java @@ -20,7 +20,6 @@ import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.recipes.cache.ChildData; import org.apache.curator.framework.recipes.cache.TreeCacheEvent; import org.apache.curator.framework.recipes.cache.TreeCacheListener; -import org.apache.dubbo.common.config.Configuration; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.configcenter.ConfigChangeEvent; import org.apache.dubbo.configcenter.ConfigChangeType; diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java similarity index 100% rename from dubbo-configcenter/dubbo-configcenter-zookeeper-cache/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java rename to dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java diff --git a/dubbo-configcenter/pom.xml b/dubbo-configcenter/pom.xml index 4d7dd84..e969c04 100644 --- a/dubbo-configcenter/pom.xml +++ b/dubbo-configcenter/pom.xml @@ -33,8 +33,6 @@ <modules> <module>dubbo-configcenter-api</module> <module>dubbo-configcenter-zookeeper</module> - <!--<module>dubbo-configcenter-zookeeper-cache</module>--> <module>dubbo-configcenter-apollo</module> - <module>dubbo-configcenter-archaius</module> </modules> </project> \ No newline at end of file diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 16a9d98..43ad512 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -99,9 +99,7 @@ <kryo_serializers_version>0.42</kryo_serializers_version> <fst_version>2.48-jdk-6</fst_version> <apollo_client_version>1.1.1</apollo_client_version> - <archaius_version>0.7.6</archaius_version> <snakeyaml_version>1.20</snakeyaml_version> - <commons_configuration_version>1.8</commons_configuration_version> <commons_lang3_version>3.8.1</commons_lang3_version> <protostuff_version>1.5.9</protostuff_version> @@ -372,11 +370,6 @@ <version>${apollo_client_version}</version> </dependency> <dependency> - <groupId>com.netflix.archaius</groupId> - <artifactId>archaius-core</artifactId> - <version>${archaius_version}</version> - </dependency> - <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator_version}</version> @@ -387,11 +380,6 @@ <version>${snakeyaml_version}</version> </dependency> <dependency> - <groupId>commons-configuration</groupId> - <artifactId>commons-configuration</artifactId> - <version>${commons_configuration_version}</version> - </dependency> - <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons_lang3_version}</version>