[SCB-2877]Fix zookeeper cache instances by application name problem (#4329)
diff --git a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscovery.java b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscovery.java
index 4d871b3..c421a70 100644
--- a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscovery.java
+++ b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscovery.java
@@ -73,7 +73,7 @@
private static final Logger LOGGER = LoggerFactory.getLogger(ZookeeperDiscovery.class);
- private final Map<String, ServiceCache<ZookeeperInstance>> serviceDiscoveries =
+ private final Map<String, Map<String, ServiceCache<ZookeeperInstance>>> serviceDiscoveries =
new ConcurrentHashMapEx<>();
private Environment environment;
@@ -112,7 +112,8 @@
@Override
public List<ZookeeperDiscoveryInstance> findServiceInstances(String application, String serviceName) {
try {
- ServiceCache<ZookeeperInstance> discovery = serviceDiscoveries.computeIfAbsent(application, app -> {
+ ServiceCache<ZookeeperInstance> discovery = serviceDiscoveries.computeIfAbsent(application, app ->
+ new ConcurrentHashMapEx<>()).computeIfAbsent(serviceName, name -> {
JsonInstanceSerializer<ZookeeperInstance> serializer =
new JsonInstanceSerializer<>(ZookeeperInstance.class);
ServiceDiscovery<ZookeeperInstance> dis = ServiceDiscoveryBuilder.builder(ZookeeperInstance.class)