This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new cc6e1aea89 feat: fix lds observe (#11300)
cc6e1aea89 is described below
commit cc6e1aea8949206be571ccc8d7719702679a4c72
Author: aamingaa <[email protected]>
AuthorDate: Sun Jan 15 21:09:21 2023 +0800
feat: fix lds observe (#11300)
* feat: fix lds observe
* feat: remove unuse import
---
.../dubbo/registry/xds/util/PilotExchanger.java | 9 +++++----
.../xds/util/protocol/AbstractProtocol.java | 14 ++++----------
.../xds/util/protocol/impl/LdsProtocol.java | 21 +++++++--------------
3 files changed, 16 insertions(+), 28 deletions(-)
diff --git
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/PilotExchanger.java
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/PilotExchanger.java
index ce84aab722..567a1ca6dd 100644
---
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/PilotExchanger.java
+++
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/PilotExchanger.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.registry.xds.util;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.ConcurrentHashSet;
+import org.apache.dubbo.registry.xds.util.protocol.AbstractProtocol;
import org.apache.dubbo.registry.xds.util.protocol.impl.EdsProtocol;
import org.apache.dubbo.registry.xds.util.protocol.impl.LdsProtocol;
import org.apache.dubbo.registry.xds.util.protocol.impl.RdsProtocol;
@@ -65,15 +66,15 @@ public class PilotExchanger {
this.listenerResult = ldsProtocol.getListeners();
this.routeResult =
rdsProtocol.getResource(listenerResult.values().iterator().next().getRouteConfigNames());
-
+ Set<String> ldsResourcesName = new HashSet<>();
+ ldsResourcesName.add(AbstractProtocol.emptyResourceName);
// Observer RDS update
if
(CollectionUtils.isNotEmpty(listenerResult.values().iterator().next().getRouteConfigNames()))
{
createRouteObserve();
isRdsObserve.set(true);
}
-
// Observe LDS updated
- ldsProtocol.observeListeners((newListener) -> {
+ ldsProtocol.observeResource(ldsResourcesName, (newListener) -> {
// update local cache
if (!newListener.equals(listenerResult)) {
this.listenerResult = newListener;
@@ -82,7 +83,7 @@ public class PilotExchanger {
createRouteObserve();
}
}
- });
+ }, false);
}
private void createRouteObserve() {
diff --git
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/AbstractProtocol.java
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/AbstractProtocol.java
index 6fcd422635..34f7dfa560 100644
---
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/AbstractProtocol.java
+++
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/AbstractProtocol.java
@@ -24,6 +24,7 @@ import io.grpc.stub.StreamObserver;
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.registry.xds.util.XdsChannel;
import org.apache.dubbo.rpc.model.ApplicationModel;
@@ -126,7 +127,7 @@ public abstract class AbstractProtocol<T, S extends
DeltaResource<T>> implements
}
private Map<String, T> getResourceFromCache(Set<String> resourceNames) {
- return resourceNames.stream()
+ return resourceNames.stream().filter(o -> !StringUtils.isEmpty(o))
.collect(Collectors.toMap(k -> k, this::getCacheResource));
}
@@ -183,18 +184,11 @@ public abstract class AbstractProtocol<T, S extends
DeltaResource<T>> implements
}
public void observeResource(Set<String> resourceNames,
Consumer<Map<String, T>> consumer, boolean isReConnect) {
- resourceNames = resourceNames == null ? Collections.emptySet() :
resourceNames;
// call once for full data
if (!isReConnect) {
try {
writeLock.lock();
- Set<String> consumerObserveResourceNames = new HashSet<>();
- if (resourceNames.isEmpty()) {
- consumerObserveResourceNames.add(emptyResourceName);
- } else {
- consumerObserveResourceNames = resourceNames;
- }
- consumerObserveMap.compute(consumerObserveResourceNames, (k,
v) -> {
+ consumerObserveMap.compute(resourceNames, (k, v) -> {
if (v == null) {
v = new ArrayList<>();
}
@@ -202,10 +196,10 @@ public abstract class AbstractProtocol<T, S extends
DeltaResource<T>> implements
v.add(consumer);
return v;
});
- consumer.accept(getResource(resourceNames));
} finally {
writeLock.unlock();
}
+ consumer.accept(getResource(resourceNames));
}
try {
writeLock.lock();
diff --git
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/LdsProtocol.java
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/LdsProtocol.java
index e1b9ce6bb7..7129337959 100644
---
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/LdsProtocol.java
+++
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/LdsProtocol.java
@@ -16,14 +16,6 @@
*/
package org.apache.dubbo.registry.xds.util.protocol.impl;
-import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.registry.xds.util.XdsChannel;
-import org.apache.dubbo.registry.xds.util.protocol.AbstractProtocol;
-import org.apache.dubbo.registry.xds.util.protocol.delta.DeltaListener;
-import org.apache.dubbo.registry.xds.util.protocol.message.ListenerResult;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import io.envoyproxy.envoy.config.core.v3.Node;
@@ -32,14 +24,19 @@ import io.envoyproxy.envoy.config.listener.v3.Listener;
import
io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager;
import
io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.Rds;
import io.envoyproxy.envoy.service.discovery.v3.DiscoveryResponse;
+import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.registry.xds.util.XdsChannel;
+import org.apache.dubbo.registry.xds.util.protocol.AbstractProtocol;
+import org.apache.dubbo.registry.xds.util.protocol.delta.DeltaListener;
+import org.apache.dubbo.registry.xds.util.protocol.message.ListenerResult;
+import org.apache.dubbo.rpc.model.ApplicationModel;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Consumer;
import java.util.stream.Collectors;
import static
org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_ERROR_RESPONSE_XDS;
@@ -60,10 +57,6 @@ public class LdsProtocol extends
AbstractProtocol<ListenerResult, DeltaListener>
return getResource(null);
}
- public void observeListeners(Consumer<Map<String, ListenerResult>>
consumer) {
- observeResource(Collections.emptySet(), consumer, false);
- }
-
@Override
protected Map<String, ListenerResult>
decodeDiscoveryResponse(DiscoveryResponse response) {
if (getTypeUrl().equals(response.getTypeUrl())) {