From 20a6a63e0c6d716ea2137180aa05f6aef19075e3 Mon Sep 17 00:00:00 2001 From: pandaapo <35672972+pandaapo@users.noreply.github.com> Date: Wed, 11 Jan 2023 09:51:28 +0800 Subject: [PATCH] Upgrade curator-recipes to 5.1.0 to fix API change for ZooKeeper data-source (#2963) * Fix issue to upgrade curator-recipes and related API. * Resolve test failure: ClassNotFoundException of ZooKeeperAdmin. * Remove unused property in pom. --- .../sentinel-datasource-zookeeper/pom.xml | 23 +---------- .../zookeeper/ZookeeperDataSource.java | 38 +++++++++---------- 2 files changed, 19 insertions(+), 42 deletions(-) diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml index fb2c6a7c..c6d46354 100644 --- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml +++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml @@ -13,9 +13,7 @@ jar - 3.4.14 - 4.0.1 - 2.12.0 + 5.1.0 @@ -24,21 +22,10 @@ sentinel-datasource-extension - - org.apache.zookeeper - zookeeper - ${zookeeper.version} - org.apache.curator curator-recipes ${curator.version} - - - org.apache.zookeeper - zookeeper - - @@ -54,14 +41,8 @@ org.apache.curator curator-test - ${curator.test.version} + ${curator.version} test - - - org.apache.zookeeper - zookeeper - - com.alibaba diff --git a/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java b/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java index 5e7e95e8..dbc406d7 100644 --- a/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java +++ b/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java @@ -9,8 +9,8 @@ import org.apache.curator.framework.AuthInfo; 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.NodeCache; -import org.apache.curator.framework.recipes.cache.NodeCacheListener; +import org.apache.curator.framework.recipes.cache.CuratorCache; +import org.apache.curator.framework.recipes.cache.CuratorCacheListener; import org.apache.curator.retry.ExponentialBackoffRetry; import java.util.Arrays; @@ -40,11 +40,11 @@ public class ZookeeperDataSource extends AbstractDataSource { new ArrayBlockingQueue(1), new NamedThreadFactory("sentinel-zookeeper-ds-update", true), new ThreadPoolExecutor.DiscardOldestPolicy()); - private NodeCacheListener listener; + private CuratorCacheListener listener; private final String path; private CuratorFramework zkClient = null; - private NodeCache nodeCache = null; + private CuratorCache nodeCache = null; public ZookeeperDataSource(final String serverAddr, final String path, Converter parser) { super(parser); @@ -104,21 +104,17 @@ public class ZookeeperDataSource extends AbstractDataSource { private void initZookeeperListener(final String serverAddr, final List authInfos) { try { - this.listener = new NodeCacheListener() { - @Override - public void nodeChanged() { - - try { - T newValue = loadConfig(); - RecordLog.info("[ZookeeperDataSource] New property value received for ({}, {}): {}", + this.listener = CuratorCacheListener.builder().forNodeCache(() -> { + try { + T newValue = loadConfig(); + RecordLog.info("[ZookeeperDataSource] New property value received for ({}, {}): {}", serverAddr, path, newValue); - // Update the new value to the property. - getProperty().updateValue(newValue); - } catch (Exception ex) { - RecordLog.warn("[ZookeeperDataSource] loadConfig exception", ex); - } + // Update the new value to the property. + getProperty().updateValue(newValue); + } catch (Exception ex) { + RecordLog.warn("[ZookeeperDataSource] loadConfig exception", ex); } - }; + }).build(); String zkKey = getZkKey(serverAddr, authInfos); if (zkClientMap.containsKey(zkKey)) { @@ -148,8 +144,8 @@ public class ZookeeperDataSource extends AbstractDataSource { } } - this.nodeCache = new NodeCache(this.zkClient, this.path); - this.nodeCache.getListenable().addListener(this.listener, this.pool); + this.nodeCache = CuratorCache.build(this.zkClient, this.path); + this.nodeCache.listenable().addListener(this.listener, this.pool); this.nodeCache.start(); } catch (Exception e) { RecordLog.warn("[ZookeeperDataSource] Error occurred when initializing Zookeeper data source", e); @@ -163,7 +159,7 @@ public class ZookeeperDataSource extends AbstractDataSource { throw new IllegalStateException("Zookeeper has not been initialized or error occurred"); } String configInfo = null; - ChildData childData = nodeCache.getCurrentData(); + ChildData childData = nodeCache.get(path).orElse(null); if (null != childData && childData.getData() != null) { configInfo = new String(childData.getData()); @@ -174,7 +170,7 @@ public class ZookeeperDataSource extends AbstractDataSource { @Override public void close() throws Exception { if (this.nodeCache != null) { - this.nodeCache.getListenable().removeListener(listener); + this.nodeCache.listenable().removeListener(listener); this.nodeCache.close(); } if (this.zkClient != null) {