This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new c583d30c8 [SCB-2722]governance add a Mapper that give a map result if 
request match (#3468)
c583d30c8 is described below

commit c583d30c849f203537b6e7c66e6828b338045999
Author: liubao68 <[email protected]>
AuthorDate: Wed Nov 9 20:44:28 2022 +0800

    [SCB-2722]governance add a Mapper that give a map result if request match 
(#3468)
---
 .../governance/GovernanceConfiguration.java        | 12 +++++
 .../governance/handler/FaultInjectionHandler.java  |  4 +-
 .../governance/handler/LoadBalanceHandler.java     |  2 +-
 .../governance/handler/MapperHandler.java          | 56 ++++++++++++++++++++++
 .../governance/policy/FaultInjectionPolicy.java    |  2 +-
 .../policy/MapperPolicy.java}                      | 16 ++++---
 .../processor}/injection/AbortFault.java           |  2 +-
 .../processor}/injection/AbstractFault.java        |  2 +-
 .../processor}/injection/DelayFault.java           |  2 +-
 .../processor}/injection/Fault.java                |  6 +--
 .../processor}/injection/FaultInjectionConst.java  |  2 +-
 .../injection/FaultInjectionDecorators.java        |  2 +-
 .../injection/FaultInjectionException.java         |  2 +-
 .../processor}/injection/FaultInjectionUtil.java   |  2 +-
 .../processor}/injection/FaultParam.java           |  2 +-
 .../processor}/injection/FaultResponse.java        |  2 +-
 .../processor}/injection/Sleepable.java            |  2 +-
 .../processor}/loadbanlance/LoadBalance.java       |  2 +-
 .../processor}/loadbanlance/LoadBalanceImpl.java   |  2 +-
 .../processor/mapping/Mapper.java}                 | 16 ++++---
 .../properties/GovernanceProperties.java           |  3 ++
 .../properties/MapperProperties.java}              | 22 +++++----
 .../servicecomb/governance/FaultInjectionTest.java |  8 ++--
 .../governance/GovernancePropertiesTest.java       | 12 ++---
 .../servicecomb/governance/LoadBalancerTest.java   |  2 +-
 .../{LoadBalancerTest.java => MapperTest.java}     | 38 +++++----------
 governance/src/test/resources/application.yaml     |  9 ++++
 27 files changed, 152 insertions(+), 80 deletions(-)

diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
index a1ca13560..efe058039 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
@@ -26,6 +26,7 @@ import 
org.apache.servicecomb.governance.handler.IdentifierRateLimitingHandler;
 import org.apache.servicecomb.governance.handler.InstanceBulkheadHandler;
 import org.apache.servicecomb.governance.handler.InstanceIsolationHandler;
 import org.apache.servicecomb.governance.handler.LoadBalanceHandler;
+import org.apache.servicecomb.governance.handler.MapperHandler;
 import org.apache.servicecomb.governance.handler.RateLimitingHandler;
 import org.apache.servicecomb.governance.handler.RetryHandler;
 import 
org.apache.servicecomb.governance.handler.ext.AbstractCircuitBreakerExtension;
@@ -45,6 +46,7 @@ import 
org.apache.servicecomb.governance.properties.IdentifierRateLimitPropertie
 import org.apache.servicecomb.governance.properties.InstanceBulkheadProperties;
 import 
org.apache.servicecomb.governance.properties.InstanceIsolationProperties;
 import org.apache.servicecomb.governance.properties.LoadBalanceProperties;
+import org.apache.servicecomb.governance.properties.MapperProperties;
 import org.apache.servicecomb.governance.properties.MatchProperties;
 import org.apache.servicecomb.governance.properties.RateLimitProperties;
 import org.apache.servicecomb.governance.properties.RetryProperties;
@@ -109,6 +111,11 @@ public class GovernanceConfiguration {
     return new LoadBalanceProperties();
   }
 
+  @Bean
+  public MapperProperties mapperProperties() {
+    return new MapperProperties();
+  }
+
   // handlers configuration
   @Bean
   public BulkheadHandler bulkheadHandler(BulkheadProperties 
bulkheadProperties) {
@@ -159,6 +166,11 @@ public class GovernanceConfiguration {
     return new FaultInjectionHandler(faultInjectionProperties);
   }
 
+  @Bean
+  public MapperHandler mapperHandler(MapperProperties mapperProperties) {
+    return new MapperHandler(mapperProperties);
+  }
+
   // request processor
   @Bean
   public RequestProcessor requestProcessor(Map<String, MatchOperator> 
operatorMap) {
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/FaultInjectionHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/FaultInjectionHandler.java
index d3bcbe6a4..ecdd7662e 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/FaultInjectionHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/FaultInjectionHandler.java
@@ -20,8 +20,8 @@ package org.apache.servicecomb.governance.handler;
 import org.apache.servicecomb.governance.marker.GovernanceRequest;
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 import org.apache.servicecomb.governance.properties.FaultInjectionProperties;
-import org.apache.servicecomb.injection.Fault;
-import org.apache.servicecomb.injection.FaultInjectionUtil;
+import org.apache.servicecomb.governance.processor.injection.Fault;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionUtil;
 
 public class FaultInjectionHandler extends AbstractGovernanceHandler<Fault, 
FaultInjectionPolicy> {
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/LoadBalanceHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/LoadBalanceHandler.java
index b8eb58cd7..dbaf5de32 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/LoadBalanceHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/LoadBalanceHandler.java
@@ -20,7 +20,7 @@ package org.apache.servicecomb.governance.handler;
 import org.apache.servicecomb.governance.marker.GovernanceRequest;
 import org.apache.servicecomb.governance.policy.LoadBalancerPolicy;
 import org.apache.servicecomb.governance.properties.LoadBalanceProperties;
-import org.apache.servicecomb.loadbanlance.LoadBalance;
+import org.apache.servicecomb.governance.processor.loadbanlance.LoadBalance;
 
 public class LoadBalanceHandler extends AbstractGovernanceHandler<LoadBalance, 
LoadBalancerPolicy> {
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/MapperHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/MapperHandler.java
new file mode 100644
index 000000000..8ca0da4aa
--- /dev/null
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/MapperHandler.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.governance.handler;
+
+import org.apache.servicecomb.governance.marker.GovernanceRequest;
+import org.apache.servicecomb.governance.policy.MapperPolicy;
+import org.apache.servicecomb.governance.processor.mapping.Mapper;
+import org.apache.servicecomb.governance.properties.MapperProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MapperHandler extends AbstractGovernanceHandler<Mapper, 
MapperPolicy> {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(RateLimitingHandler.class);
+
+  private final MapperProperties mapperProperties;
+
+  public MapperHandler(MapperProperties mapperProperties) {
+    this.mapperProperties = mapperProperties;
+  }
+
+  @Override
+  protected String createKey(GovernanceRequest governanceRequest, MapperPolicy 
policy) {
+    return mapperProperties.getConfigKey() + "." + policy.getName();
+  }
+
+  @Override
+  public MapperPolicy matchPolicy(GovernanceRequest governanceRequest) {
+    return matchersManager.match(governanceRequest, 
mapperProperties.getParsedEntity());
+  }
+
+  @Override
+  public Disposable<Mapper> createProcessor(String key, GovernanceRequest 
governanceRequest,
+      MapperPolicy policy) {
+    return getMapper(key, policy);
+  }
+
+  private Disposable<Mapper> getMapper(String key, MapperPolicy policy) {
+    LOGGER.info("applying new policy {} for {}", key, policy.toString());
+
+    return new DisposableHolder<>(key, Mapper.create(policy.getTarget()));
+  }
+}
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/policy/FaultInjectionPolicy.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/policy/FaultInjectionPolicy.java
index 509b5a1a7..4f9500d69 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/policy/FaultInjectionPolicy.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/policy/FaultInjectionPolicy.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.governance.policy;
 
 import java.time.Duration;
 
-import org.apache.servicecomb.injection.FaultInjectionConst;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionConst;
 
 public class FaultInjectionPolicy extends AbstractPolicy {
   public static final Duration DEFAULT_TIMEOUT_DURATION = Duration.ofMillis(0);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/policy/MapperPolicy.java
similarity index 72%
copy from 
governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
copy to 
governance/src/main/java/org/apache/servicecomb/governance/policy/MapperPolicy.java
index e89470c90..76db69336 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/policy/MapperPolicy.java
@@ -15,16 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.loadbanlance;
+package org.apache.servicecomb.governance.policy;
 
-public class LoadBalanceImpl implements LoadBalance {
-  private final String rule;
+import java.util.Map;
 
-  public LoadBalanceImpl(String rule) {
-    this.rule = rule;
+public class MapperPolicy extends AbstractPolicy {
+  private Map<String, String> target;
+
+  public Map<String, String> getTarget() {
+    return target;
   }
 
-  public String getRule() {
-    return rule;
+  public void setTarget(Map<String, String> target) {
+    this.target = target;
   }
 }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/AbortFault.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbortFault.java
similarity index 96%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/AbortFault.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbortFault.java
index 1aec44d25..c64239676 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/AbortFault.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbortFault.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 import org.slf4j.Logger;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/AbstractFault.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbstractFault.java
similarity index 95%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/AbstractFault.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbstractFault.java
index 31087efd5..c225ea9a2 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/AbstractFault.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/AbstractFault.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/DelayFault.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/DelayFault.java
similarity index 97%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/DelayFault.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/DelayFault.java
index c8de0bfde..bc82c9178 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/DelayFault.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/DelayFault.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 import org.slf4j.Logger;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/Fault.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Fault.java
similarity index 92%
rename from governance/src/main/java/org/apache/servicecomb/injection/Fault.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Fault.java
index 160287993..204186eae 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/Fault.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Fault.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
-
-import static org.apache.servicecomb.injection.AbortFault.ABORTED_ERROR_MSG;
+package org.apache.servicecomb.governance.processor.injection;
 
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 
@@ -29,7 +27,7 @@ public interface Fault {
       if (fault.injectFault()) {
         if 
(FaultInjectionConst.FALLBACK_THROWEXCEPTION.equals(fault.getPolicy().getFallbackType()))
 {
           throw new FaultInjectionException(
-              FaultResponse.createFail(fault.getPolicy().getErrorCode(), 
ABORTED_ERROR_MSG));
+              FaultResponse.createFail(fault.getPolicy().getErrorCode(), 
AbortFault.ABORTED_ERROR_MSG));
         } else {
           return null;
         }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionConst.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionConst.java
similarity index 95%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionConst.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionConst.java
index 6036532ed..35f276910 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionConst.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionConst.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 /**
  * Handles the all constant values for fault injection.
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionDecorators.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionDecorators.java
similarity index 96%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionDecorators.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionDecorators.java
index c499f3e2e..e5eb7e0ff 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionDecorators.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionDecorators.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import io.vavr.CheckedFunction0;
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionException.java
similarity index 95%
copy from 
governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
copy to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionException.java
index c061c9037..13058eca1 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 public class FaultInjectionException extends RuntimeException {
   private static final long serialVersionUID = 1675558351029273343L;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionUtil.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionUtil.java
similarity index 98%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionUtil.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionUtil.java
index d95c10fe2..c7a1fdb6d 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionUtil.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultInjectionUtil.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultParam.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultParam.java
similarity index 96%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultParam.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultParam.java
index 3e53a68d6..9cd4c6611 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/FaultParam.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultParam.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultResponse.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultResponse.java
similarity index 95%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultResponse.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultResponse.java
index 603451c41..01b8fc8d2 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultResponse.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/FaultResponse.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 public class FaultResponse {
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Sleepable.java
similarity index 93%
copy from 
governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java
copy to 
governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Sleepable.java
index 46b98739d..22a95074f 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/injection/Sleepable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.injection;
 
 public interface Sleepable {
   /**
diff --git 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalance.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalance.java
similarity index 94%
rename from 
governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalance.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalance.java
index e82ddd943..105c4fc59 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalance.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalance.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.loadbanlance;
+package org.apache.servicecomb.governance.processor.loadbanlance;
 
 import org.apache.servicecomb.governance.policy.LoadBalancerPolicy;
 
diff --git 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalanceImpl.java
similarity index 93%
rename from 
governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalanceImpl.java
index e89470c90..48fb023fa 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/loadbanlance/LoadBalanceImpl.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/loadbanlance/LoadBalanceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.loadbanlance;
+package org.apache.servicecomb.governance.processor.loadbanlance;
 
 public class LoadBalanceImpl implements LoadBalance {
   private final String rule;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/mapping/Mapper.java
similarity index 78%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/processor/mapping/Mapper.java
index 46b98739d..f9c435ece 100644
--- a/governance/src/main/java/org/apache/servicecomb/injection/Sleepable.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/processor/mapping/Mapper.java
@@ -15,12 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.processor.mapping;
 
-public interface Sleepable {
-  /**
-   * sleep some time
-   * @param delay time unit is millisecond
-   */
-  void sleep(long delay);
+import java.util.Map;
+
+public interface Mapper {
+  static Mapper create(Map<String, String> target) {
+    return () -> target;
+  }
+
+  Map<String, String> target();
 }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/GovernanceProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/GovernanceProperties.java
index 615c2d522..f8bda9551 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/GovernanceProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/GovernanceProperties.java
@@ -80,6 +80,9 @@ public abstract class GovernanceProperties<T extends 
Configurable> implements In
     entityClass = getEntityClass();
   }
 
+  public String getConfigKey() {
+    return this.configKey;
+  }
 
   @Override
   public void afterPropertiesSet() {
diff --git 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
similarity index 63%
rename from 
governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
index c061c9037..fe2a6eb37 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/injection/FaultInjectionException.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
@@ -15,19 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.injection;
+package org.apache.servicecomb.governance.properties;
 
-public class FaultInjectionException extends RuntimeException {
-  private static final long serialVersionUID = 1675558351029273343L;
+import org.apache.servicecomb.governance.policy.MapperPolicy;
 
-  private final FaultResponse faultResponse;
+public class MapperProperties extends PolicyProperties<MapperPolicy> {
+  private static final String MATCH_MAPPER_KEY = "servicecomb.mapper";
 
-  public FaultInjectionException(FaultResponse faultResponse) {
-    super(faultResponse.getErrorMsg());
-    this.faultResponse = faultResponse;
+  public MapperProperties() {
+    super(MATCH_MAPPER_KEY);
   }
 
-  public FaultResponse getFaultResponse() {
-    return faultResponse;
+  public MapperProperties(String key) {
+    super(key);
+  }
+
+  @Override
+  protected Class<MapperPolicy> getEntityClass() {
+    return MapperPolicy.class;
   }
 }
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
index 4fcc174b6..40e58b78d 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
@@ -23,10 +23,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.servicecomb.governance.handler.FaultInjectionHandler;
 import org.apache.servicecomb.governance.marker.GovernanceRequest;
-import org.apache.servicecomb.injection.Fault;
-import org.apache.servicecomb.injection.FaultInjectionDecorators;
-import 
org.apache.servicecomb.injection.FaultInjectionDecorators.FaultInjectionDecorateCheckedSupplier;
-import org.apache.servicecomb.injection.FaultInjectionException;
+import org.apache.servicecomb.governance.processor.injection.Fault;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionDecorators;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionDecorators.FaultInjectionDecorateCheckedSupplier;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
index 2455a6ca5..df05676dc 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
@@ -34,6 +34,7 @@ import 
org.apache.servicecomb.governance.policy.CircuitBreakerPolicy;
 import org.apache.servicecomb.governance.policy.FaultInjectionPolicy;
 import org.apache.servicecomb.governance.policy.RateLimitingPolicy;
 import org.apache.servicecomb.governance.policy.RetryPolicy;
+import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionConst;
 import org.apache.servicecomb.governance.properties.BulkheadProperties;
 import org.apache.servicecomb.governance.properties.CircuitBreakerProperties;
 import org.apache.servicecomb.governance.properties.FaultInjectionProperties;
@@ -42,7 +43,6 @@ import 
org.apache.servicecomb.governance.properties.InstanceIsolationProperties;
 import org.apache.servicecomb.governance.properties.MatchProperties;
 import org.apache.servicecomb.governance.properties.RateLimitProperties;
 import org.apache.servicecomb.governance.properties.RetryProperties;
-import org.apache.servicecomb.injection.FaultInjectionConst;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -164,13 +164,12 @@ public class GovernancePropertiesTest {
 
   @Test
   public void test_all_bean_is_loaded() {
-    Assertions.assertEquals(9, propertiesList.size());
+    Assertions.assertEquals(10, propertiesList.size());
   }
 
   @Test
   public void test_match_properties_successfully_loaded() {
     Map<String, TrafficMarker> markers = matchProperties.getParsedEntity();
-    Assertions.assertEquals(14, markers.size());
     TrafficMarker demoRateLimiting = markers.get("demo-rateLimiting");
     List<Matcher> matchers = demoRateLimiting.getMatches();
     Assertions.assertEquals(1, matchers.size());
@@ -188,17 +187,17 @@ public class GovernancePropertiesTest {
   @Test
   public void test_match_properties_delete() {
     Map<String, TrafficMarker> markers = matchProperties.getParsedEntity();
-    Assertions.assertEquals(14, markers.size());
+    Assertions.assertEquals(null, markers.get("test"));
     dynamicValues.put("servicecomb.matchGroup.test", "matches:\n"
         + "  - apiPath:\n"
         + "      exact: \"/hello2\"\n"
         + "    name: match0");
     GovernanceEventManager.post(new GovernanceConfigurationChangedEvent(new 
HashSet<>(dynamicValues.keySet())));
     markers = matchProperties.getParsedEntity();
-    Assertions.assertEquals(15, markers.size());
+    Assertions.assertEquals(1, markers.get("test").getMatches().size());
     tearDown();
     markers = matchProperties.getParsedEntity();
-    Assertions.assertEquals(14, markers.size());
+    Assertions.assertEquals(null, markers.get("test"));
   }
 
   @Test
@@ -215,7 +214,6 @@ public class GovernancePropertiesTest {
     GovernanceEventManager.post(new GovernanceConfigurationChangedEvent(new 
HashSet<>(dynamicValues.keySet())));
 
     Map<String, TrafficMarker> markers = matchProperties.getParsedEntity();
-    Assertions.assertEquals(15, markers.size());
     TrafficMarker demoRateLimiting = markers.get("demo-rateLimiting");
     List<Matcher> matchers = demoRateLimiting.getMatches();
     Assertions.assertEquals(1, matchers.size());
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
index dc972807e..d18a57a5e 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.governance;
 
 import org.apache.servicecomb.governance.handler.LoadBalanceHandler;
 import org.apache.servicecomb.governance.marker.GovernanceRequest;
-import org.apache.servicecomb.loadbanlance.LoadBalance;
+import org.apache.servicecomb.governance.processor.loadbanlance.LoadBalance;
 import org.junit.Assert;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
 b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
similarity index 57%
copy from 
governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
copy to 
governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
index dc972807e..8afd9d762 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
@@ -17,10 +17,10 @@
 
 package org.apache.servicecomb.governance;
 
-import org.apache.servicecomb.governance.handler.LoadBalanceHandler;
+import org.apache.servicecomb.governance.handler.MapperHandler;
 import org.apache.servicecomb.governance.marker.GovernanceRequest;
-import org.apache.servicecomb.loadbanlance.LoadBalance;
-import org.junit.Assert;
+import org.apache.servicecomb.governance.processor.mapping.Mapper;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -28,33 +28,21 @@ import 
org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
 @ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
-public class LoadBalancerTest {
-  private LoadBalanceHandler loadBalanceHandler;
+public class MapperTest {
+  private MapperHandler mapperHandler;
 
   @Autowired
-  public void setLoadBalanceHandler(LoadBalanceHandler loadBalanceHandler) {
-    this.loadBalanceHandler = loadBalanceHandler;
-  }
-
-  public LoadBalancerTest() {
-
-  }
-
-  @Test
-  public void test_loadbalance_random() {
-    GovernanceRequest request = new GovernanceRequest();
-    request.setUri("/loadrandom");
-    request.setServiceName("loadrandom");
-    LoadBalance loadBalance = loadBalanceHandler.getActuator(request);
-    Assert.assertEquals("Random", loadBalance.getRule());
+  public void setMapperHandler(MapperHandler mapperHandler) {
+    this.mapperHandler = mapperHandler;
   }
 
   @Test
-  public void test_loadbalance_roundRobin() {
+  public void test_mapper_work() {
     GovernanceRequest request = new GovernanceRequest();
-    request.setUri("/loadroundRobin");
-    request.setServiceName("loadroundRobin");
-    LoadBalance loadBalance = loadBalanceHandler.getActuator(request);
-    Assert.assertEquals("RoundRobin", loadBalance.getRule());
+    request.setUri("/mapper/v1");
+    Mapper mapper = mapperHandler.getActuator(request);
+    Assertions.assertEquals(2, mapper.target().size());
+    Assertions.assertEquals("127.0.0.1", mapper.target().get("host"));
+    Assertions.assertEquals("8080", mapper.target().get("port"));
   }
 }
diff --git a/governance/src/test/resources/application.yaml 
b/governance/src/test/resources/application.yaml
index 569cb918c..923f8f58a 100644
--- a/governance/src/test/resources/application.yaml
+++ b/governance/src/test/resources/application.yaml
@@ -81,6 +81,10 @@ servicecomb:
       matches:
         - apiPath:
             contains: "/faultInjectAbort"
+    demo-mapper: |
+      matches:
+        - apiPath:
+            prefix: "/mapper"
   rateLimiting:
     demo-rateLimiting: |
       rate: 1
@@ -166,6 +170,11 @@ servicecomb:
       rule: Random
     demo-loadbalance-roundRobin: |
       rule: RoundRobin
+  mapper:
+    demo-mapper: |
+      target:
+        host: 127.0.0.1
+        port: 8080
   routeRule:
     test_server1: |                              # 服务名
       - precedence: 1                        # 优先级,数字越大,优先级越高。


Reply via email to