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 fd3fb63826 Add xdsroute observe logic (#11309)
fd3fb63826 is described below

commit fd3fb63826a59239ea29a3d05e8672825b519f89
Author: Montos <[email protected]>
AuthorDate: Tue Jan 17 15:03:04 2023 +0800

    Add xdsroute observe logic (#11309)
---
 .../dubbo/registry/xds/util/PilotExchanger.java    | 61 ++++++++++++++++++----
 .../xds/util/protocol/impl/LdsProtocol.java        | 16 +++---
 .../xds/util/protocol/impl/RdsProtocol.java        |  6 ++-
 .../xds/util/protocol/message/RouteResult.java     | 20 +++++++
 .../rpc/cluster/router/xds/EdsEndpointManager.java | 19 +++----
 .../cluster/router/xds/RdsRouteRuleManager.java    | 18 ++++---
 .../dubbo/rpc/cluster/router/xds/XdsRouter.java    | 32 ++++++++----
 .../dubbo/rpc/cluster/router/xds/XdsRouteTest.java | 31 +++++------
 8 files changed, 144 insertions(+), 59 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 567a1ca6dd..de31651934 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
@@ -16,6 +16,14 @@
  */
 package org.apache.dubbo.registry.xds.util;
 
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
+
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
@@ -27,15 +35,10 @@ import 
org.apache.dubbo.registry.xds.util.protocol.message.Endpoint;
 import org.apache.dubbo.registry.xds.util.protocol.message.EndpointResult;
 import org.apache.dubbo.registry.xds.util.protocol.message.ListenerResult;
 import org.apache.dubbo.registry.xds.util.protocol.message.RouteResult;
+import org.apache.dubbo.rpc.cluster.router.xds.RdsVirtualHostListener;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Consumer;
+import io.envoyproxy.envoy.config.route.v3.VirtualHost;
 
 public class PilotExchanger {
 
@@ -52,10 +55,14 @@ public class PilotExchanger {
     protected Map<String, RouteResult> routeResult;
 
     private final AtomicBoolean isRdsObserve = new AtomicBoolean(false);
-    private final HashSet<String> domainObserveRequest = new HashSet<>();
+    private final Set<String> domainObserveRequest = new 
ConcurrentHashSet<String>();
 
     private final Map<String, Set<Consumer<Set<Endpoint>>>> 
domainObserveConsumer = new ConcurrentHashMap<>();
 
+    private final Map<String, Consumer<RdsVirtualHostListener>> 
rdsObserveConsumer = new ConcurrentHashMap<>();
+
+    private static  PilotExchanger GLOBAL_PILOT_EXCHANGER = null;
+
     protected PilotExchanger(URL url) {
         xdsChannel = new XdsChannel(url);
         int pollingTimeout = url.getParameter("pollingTimeout", 10);
@@ -108,9 +115,25 @@ public class PilotExchanger {
     }
 
     public static PilotExchanger initialize(URL url) {
-        return new PilotExchanger(url);
+        synchronized (PilotExchanger.class){
+            if (GLOBAL_PILOT_EXCHANGER != null) {
+                return GLOBAL_PILOT_EXCHANGER;
+            }
+            return (GLOBAL_PILOT_EXCHANGER = new PilotExchanger(url));
+        }
+    }
+
+    public static PilotExchanger getInstance() {
+        synchronized (PilotExchanger.class) {
+            return GLOBAL_PILOT_EXCHANGER;
+        }
     }
 
+    public static boolean isEnabled() {
+        return GLOBAL_PILOT_EXCHANGER != null;
+    }
+
+
     public void destroy() {
         xdsChannel.destroy();
     }
@@ -172,4 +195,24 @@ public class PilotExchanger {
         }
 
     }
+
+    public void unObserveEndpoints(String domain, Consumer<Set<Endpoint>> 
consumer) {
+        domainObserveConsumer.get(domain).remove(consumer);
+        domainObserveRequest.remove(domain);
+    }
+
+    public VirtualHost getVirtualHost(String domain) {
+        for (Map.Entry<String, RouteResult> entry : routeResult.entrySet()) {
+            if (entry.getValue().searchVirtualHost(domain) != null) {
+                return entry.getValue().searchVirtualHost(domain);
+            }
+        }
+        return null;
+    }
+
+    public void unObserveRds(String domain) {
+        for (Map.Entry<String, RouteResult> entry : routeResult.entrySet()) {
+            entry.getValue().removeVirtualHost(domain);
+        }
+    }
 }
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 7129337959..8e7a7f5b7b 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,6 +16,14 @@
  */
 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;
@@ -24,13 +32,7 @@ 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.HashMap;
 import java.util.Map;
diff --git 
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/RdsProtocol.java
 
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/RdsProtocol.java
index 900fb22efe..a9e0b55b43 100644
--- 
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/RdsProtocol.java
+++ 
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/impl/RdsProtocol.java
@@ -31,6 +31,8 @@ import io.envoyproxy.envoy.config.route.v3.Route;
 import io.envoyproxy.envoy.config.route.v3.RouteAction;
 import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;
 import io.envoyproxy.envoy.service.discovery.v3.DiscoveryResponse;
+import io.envoyproxy.envoy.config.route.v3.VirtualHost;
+import java.util.concurrent.ConcurrentHashMap;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -66,6 +68,7 @@ public class RdsProtocol extends 
AbstractProtocol<RouteResult, DeltaRoute> {
 
     private RouteResult decodeResourceToListener(RouteConfiguration resource) {
         Map<String, Set<String>> map = new HashMap<>();
+        Map<String, VirtualHost> rdsVirtualhostMap = new ConcurrentHashMap<>();
         resource.getVirtualHostsList()
             .forEach(virtualHost -> {
                 Set<String> cluster = virtualHost.getRoutesList().stream()
@@ -74,9 +77,10 @@ public class RdsProtocol extends 
AbstractProtocol<RouteResult, DeltaRoute> {
                     .collect(Collectors.toSet());
                 for (String domain : virtualHost.getDomainsList()) {
                     map.put(domain, cluster);
+                    rdsVirtualhostMap.put(domain,virtualHost);
                 }
             });
-        return new RouteResult(map);
+        return new RouteResult(map,rdsVirtualhostMap);
     }
 
     private static RouteConfiguration unpackRouteConfiguration(Any any) {
diff --git 
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/message/RouteResult.java
 
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/message/RouteResult.java
index d3166c5f17..8824a63248 100644
--- 
a/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/message/RouteResult.java
+++ 
b/dubbo-xds/src/main/java/org/apache/dubbo/registry/xds/util/protocol/message/RouteResult.java
@@ -23,18 +23,28 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import io.envoyproxy.envoy.config.route.v3.VirtualHost;
+
 
 public class RouteResult {
     private final Map<String, Set<String>> domainMap;
+    private Map<String, VirtualHost> virtualHostMap;
+
 
     public RouteResult() {
         this.domainMap = new ConcurrentHashMap<>();
+        this.virtualHostMap = new ConcurrentHashMap<>();
     }
 
     public RouteResult(Map<String, Set<String>> domainMap) {
         this.domainMap = domainMap;
+        this.virtualHostMap = new ConcurrentHashMap<>();
     }
 
+    public RouteResult(Map<String, Set<String>> domainMap,Map<String, 
VirtualHost> virtualHostMap) {
+        this.domainMap = domainMap;
+        this.virtualHostMap = virtualHostMap;
+    }
 
     public Map<String, Set<String>> getDomainMap() {
         return domainMap;
@@ -69,6 +79,16 @@ public class RouteResult {
         return Objects.hash(domainMap);
     }
 
+
+    public VirtualHost searchVirtualHost(String domain) {
+        return virtualHostMap.get(domain);
+    }
+
+
+    public void removeVirtualHost(String domain) {
+        virtualHostMap.remove(domain);
+    }
+
     @Override
     public String toString() {
         return "RouteResult{" +
diff --git 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/EdsEndpointManager.java
 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/EdsEndpointManager.java
index e29f9becc8..bc4706b877 100644
--- 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/EdsEndpointManager.java
+++ 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/EdsEndpointManager.java
@@ -16,14 +16,15 @@
  */
 package org.apache.dubbo.rpc.cluster.router.xds;
 
-import org.apache.dubbo.common.utils.CollectionUtils;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.registry.xds.util.protocol.message.Endpoint;
-
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 
+import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.common.utils.ConcurrentHashSet;
+import org.apache.dubbo.registry.xds.util.PilotExchanger;
+import org.apache.dubbo.registry.xds.util.protocol.message.Endpoint;
+
 public class EdsEndpointManager {
 
     private static final ConcurrentHashMap<String, Set<EdsEndpointListener>> 
ENDPOINT_LISTENERS = new ConcurrentHashMap<>();
@@ -56,8 +57,9 @@ public class EdsEndpointManager {
             notifyEndpointChange(cluster, endpoints);
         });
         Consumer<Set<Endpoint>> consumer = EDS_LISTENERS.get(cluster);
-
-        //todo control plane subscribe eds
+        if (PilotExchanger.isEnabled()) {
+            PilotExchanger.getInstance().observeEndpoints(cluster, consumer);
+        }
     }
 
     public synchronized void unSubscribeEds(String cluster, 
EdsEndpointListener listener) {
@@ -75,9 +77,8 @@ public class EdsEndpointManager {
     private void doUnsubscribeEds(String cluster) {
         Consumer<Set<Endpoint>> consumer = EDS_LISTENERS.remove(cluster);
 
-        if (consumer != null) {
-
-            //todo control plane unsubscribe eds
+        if (consumer != null && PilotExchanger.isEnabled()) {
+            PilotExchanger.getInstance().unObserveEndpoints(cluster,consumer);
         }
         ENDPOINT_DATA_CACHE.remove(cluster);
     }
diff --git 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/RdsRouteRuleManager.java
 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/RdsRouteRuleManager.java
index 0d60c20c0f..1f331843d9 100644
--- 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/RdsRouteRuleManager.java
+++ 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/RdsRouteRuleManager.java
@@ -16,14 +16,15 @@
  */
 package org.apache.dubbo.rpc.cluster.router.xds;
 
-import org.apache.dubbo.common.utils.CollectionUtils;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.rpc.cluster.router.xds.rule.XdsRouteRule;
-
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.common.utils.ConcurrentHashSet;
+import org.apache.dubbo.registry.xds.util.PilotExchanger;
+import org.apache.dubbo.rpc.cluster.router.xds.rule.XdsRouteRule;
+
 public class RdsRouteRuleManager {
 
 
@@ -54,7 +55,9 @@ public class RdsRouteRuleManager {
     private void doSubscribeRds(String domain) {
         RDS_LISTENERS.computeIfAbsent(domain, key -> new 
RdsVirtualHostListener(domain, this));
         RdsVirtualHostListener rdsVirtualHostListener = 
RDS_LISTENERS.get(domain);
-        // todo request control plane subscribe rds
+        if (PilotExchanger.isEnabled()) {
+            
rdsVirtualHostListener.parseVirtualHost(PilotExchanger.getInstance().getVirtualHost(domain));
+        }
     }
 
     public synchronized void unSubscribeRds(String domain, 
XdsRouteRuleListener listener) {
@@ -72,9 +75,8 @@ public class RdsRouteRuleManager {
     private void doUnsubscribeRds(String domain) {
         RdsVirtualHostListener rdsVirtualHostListener = 
RDS_LISTENERS.remove(domain);
 
-        if (rdsVirtualHostListener != null) {
-
-            // todo request control plane unsubscribe rds
+        if (rdsVirtualHostListener != null && PilotExchanger.isEnabled()) {
+            PilotExchanger.getInstance().unObserveRds(domain);
         }
         ROUTE_DATA_CACHE.remove(domain);
     }
diff --git 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouter.java
 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouter.java
index 17a4af0f85..299fcd6417 100644
--- 
a/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouter.java
+++ 
b/dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouter.java
@@ -16,11 +16,21 @@
  */
 package org.apache.dubbo.rpc.cluster.router.xds;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.stream.Collectors;
+
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
 import org.apache.dubbo.common.utils.Holder;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.registry.xds.util.PilotExchanger;
 import org.apache.dubbo.registry.xds.util.protocol.message.Endpoint;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
@@ -36,15 +46,6 @@ import 
org.apache.dubbo.rpc.cluster.router.xds.rule.HttpRequestMatch;
 import org.apache.dubbo.rpc.cluster.router.xds.rule.PathMatcher;
 import org.apache.dubbo.rpc.cluster.router.xds.rule.XdsRouteRule;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.stream.Collectors;
-
 public class XdsRouter<T> extends AbstractStateRouter<T> implements 
XdsRouteRuleListener, EdsEndpointListener {
 
     private Set<String> subscribeApplications;
@@ -61,8 +62,11 @@ public class XdsRouter<T> extends AbstractStateRouter<T> 
implements XdsRouteRule
 
     private static final String BINARY_HEADER_SUFFIX = "-bin";
 
+    private final boolean isEnable;
+
     public XdsRouter(URL url) {
         super(url);
+        isEnable = PilotExchanger.isEnabled();
         rdsRouteRuleManager = 
url.getOrDefaultApplicationModel().getBeanFactory().getBean(RdsRouteRuleManager.class);
         edsEndpointManager = 
url.getOrDefaultApplicationModel().getBeanFactory().getBean(EdsEndpointManager.class);
         subscribeApplications = new ConcurrentHashSet<>();
@@ -74,8 +78,9 @@ public class XdsRouter<T> extends AbstractStateRouter<T> 
implements XdsRouteRule
     /**
      * @deprecated only for uts
      */
-    protected XdsRouter(URL url, RdsRouteRuleManager rdsRouteRuleManager, 
EdsEndpointManager edsEndpointManager) {
+    protected XdsRouter(URL url, RdsRouteRuleManager rdsRouteRuleManager, 
EdsEndpointManager edsEndpointManager, boolean isEnable) {
         super(url);
+        this.isEnable = isEnable;
         this.rdsRouteRuleManager = rdsRouteRuleManager;
         this.edsEndpointManager = edsEndpointManager;
         subscribeApplications = new ConcurrentHashSet<>();
@@ -88,6 +93,13 @@ public class XdsRouter<T> extends AbstractStateRouter<T> 
implements XdsRouteRule
     protected BitList<Invoker<T>> doRoute(BitList<Invoker<T>> invokers, URL 
url, Invocation invocation,
                                           boolean needToPrintMessage, 
Holder<RouterSnapshotNode<T>> nodeHolder,
                                           Holder<String> messageHolder) throws 
RpcException {
+        if (!isEnable) {
+            if (needToPrintMessage) {
+                messageHolder.set("Directly Return. Reason: Pilot exchanger 
has not been initialized, may not in mesh mode.");
+            }
+            return invokers;
+        }
+
         if (CollectionUtils.isEmpty(invokers)) {
             if (needToPrintMessage) {
                 messageHolder.set("Directly Return. Reason: Invokers from 
previous router is empty.");
diff --git 
a/dubbo-xds/src/test/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouteTest.java
 
b/dubbo-xds/src/test/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouteTest.java
index e48ae10ace..2e74193171 100644
--- 
a/dubbo-xds/src/test/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouteTest.java
+++ 
b/dubbo-xds/src/test/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouteTest.java
@@ -16,6 +16,10 @@
  */
 package org.apache.dubbo.rpc.cluster.router.xds;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.Holder;
 import org.apache.dubbo.common.utils.StringUtils;
@@ -25,21 +29,18 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.cluster.router.mesh.util.TracingContextProvider;
 import org.apache.dubbo.rpc.cluster.router.state.BitList;
 import org.apache.dubbo.rpc.cluster.router.xds.rule.DestinationSubset;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 
 import com.google.protobuf.UInt32Value;
+
 import io.envoyproxy.envoy.config.route.v3.HeaderMatcher;
 import io.envoyproxy.envoy.config.route.v3.Route;
 import io.envoyproxy.envoy.config.route.v3.RouteAction;
 import io.envoyproxy.envoy.config.route.v3.RouteMatch;
 import io.envoyproxy.envoy.config.route.v3.VirtualHost;
 import io.envoyproxy.envoy.config.route.v3.WeightedCluster;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -80,7 +81,7 @@ public class XdsRouteTest {
 
     @Test
     public void testNotifyInvoker() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         xdsRouter.notify(null);
         assertEquals(0, xdsRouter.getSubscribeApplications().size());
 
@@ -106,7 +107,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRuleChange() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         String cluster1 = "cluster-test1";
         String cluster2 = "cluster-test2";
@@ -141,7 +142,7 @@ public class XdsRouteTest {
 
     @Test
     public void testEndpointChange() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         String cluster1 = "cluster-test1";
         BitList<Invoker<Object>> invokers = new 
BitList<>(Arrays.asList(createInvoker(appName, "1.1.1.1:20880")
@@ -177,7 +178,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRouteNotMatch() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         BitList<Invoker<Object>> invokers = new 
BitList<>(Arrays.asList(createInvoker(appName, "1.1.1.1:20880")
             , createInvoker(appName, "2.2.2.2:20880")));
@@ -189,7 +190,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRoutePathMatch() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         String cluster1 = "cluster-test1";
         Invoker<Object> invoker1 = createInvoker(appName, "1.1.1.1:20880");
@@ -229,7 +230,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRouteHeadMatch() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         String cluster1 = "cluster-test1";
         Invoker<Object> invoker1 = createInvoker(appName, "1.1.1.1:20880");
@@ -267,7 +268,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRouteWeightCluster() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName = "app1";
         String cluster1 = "cluster-test1";
         String cluster2 = "cluster-test2";
@@ -321,7 +322,7 @@ public class XdsRouteTest {
 
     @Test
     public void testRouteMultiApp() {
-        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager);
+        XdsRouter<Object> xdsRouter = new XdsRouter<>(url, 
rdsRouteRuleManager, edsEndpointManager, true);
         String appName1 = "app1";
         String appName2 = "app2";
         String cluster1 = "cluster-test1";

Reply via email to