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.
This commit is contained in:
pandaapo 2023-01-11 09:51:28 +08:00 committed by LearningGp
parent 44080bc886
commit 20a6a63e0c
2 changed files with 19 additions and 42 deletions

View File

@ -13,9 +13,7 @@
<packaging>jar</packaging>
<properties>
<zookeeper.version>3.4.14</zookeeper.version>
<curator.version>4.0.1</curator.version>
<curator.test.version>2.12.0</curator.test.version>
<curator.version>5.1.0</curator.version>
</properties>
<dependencies>
@ -24,21 +22,10 @@
<artifactId>sentinel-datasource-extension</artifactId>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
@ -54,14 +41,8 @@
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
<version>${curator.test.version}</version>
<version>${curator.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>

View File

@ -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<T> extends AbstractDataSource<String, T> {
new ArrayBlockingQueue<Runnable>(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<String, T> parser) {
super(parser);
@ -104,10 +104,7 @@ public class ZookeeperDataSource<T> extends AbstractDataSource<String, T> {
private void initZookeeperListener(final String serverAddr, final List<AuthInfo> authInfos) {
try {
this.listener = new NodeCacheListener() {
@Override
public void nodeChanged() {
this.listener = CuratorCacheListener.builder().forNodeCache(() -> {
try {
T newValue = loadConfig();
RecordLog.info("[ZookeeperDataSource] New property value received for ({}, {}): {}",
@ -117,8 +114,7 @@ public class ZookeeperDataSource<T> extends AbstractDataSource<String, T> {
} 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<T> extends AbstractDataSource<String, T> {
}
}
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<T> extends AbstractDataSource<String, T> {
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<T> extends AbstractDataSource<String, T> {
@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) {