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 2d44592b2 [SCB-2723]governance handler allows user to define their own 
key/bean (#3469)
2d44592b2 is described below

commit 2d44592b20cd162bb379d826d3d8a84748de2526
Author: liubao68 <[email protected]>
AuthorDate: Thu Nov 10 08:51:55 2022 +0800

    [SCB-2723]governance handler allows user to define their own key/bean 
(#3469)
---
 .../governance/handler/BulkheadHandler.java        |  6 +--
 .../governance/handler/CircuitBreakerHandler.java  | 16 +++----
 .../handler/IdentifierRateLimitingHandler.java     |  8 ++--
 .../handler/InstanceBulkheadHandler.java           |  8 ++--
 .../handler/InstanceIsolationHandler.java          | 18 ++++----
 .../governance/handler/LoadBalanceHandler.java     |  8 ++--
 .../governance/handler/RateLimitingHandler.java    |  6 +--
 .../governance/handler/RetryHandler.java           |  4 +-
 .../governance/properties/BulkheadProperties.java  |  4 ++
 .../properties/CircuitBreakerProperties.java       |  4 ++
 .../properties/FaultInjectionProperties.java       |  4 ++
 .../properties/IdentifierRateLimitProperties.java  |  4 ++
 .../properties/InstanceBulkheadProperties.java     |  4 ++
 .../properties/InstanceIsolationProperties.java    |  4 ++
 .../properties/LoadBalanceProperties.java          |  4 ++
 .../governance/properties/MapperProperties.java    |  2 +-
 .../governance/properties/RateLimitProperties.java |  4 ++
 .../governance/properties/RetryProperties.java     |  4 ++
 .../servicecomb/governance/FaultInjectionTest.java | 29 +++++++++++-
 .../governance/GovernancePropertiesTest.java       |  2 +-
 .../apache/servicecomb/governance/MapperTest.java  | 16 ++++++-
 .../servicecomb/governance/MockConfiguration.java  | 53 ++++++++++++++++++++++
 governance/src/test/resources/application.yaml     |  9 ++++
 23 files changed, 180 insertions(+), 41 deletions(-)

diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
index 4b09cce00..3fa0e21db 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
@@ -42,7 +42,7 @@ public class BulkheadHandler extends 
AbstractGovernanceHandler<Bulkhead, Bulkhea
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
BulkheadPolicy policy) {
-    return BulkheadProperties.MATCH_BULKHEAD_KEY + "." + policy.getName();
+    return bulkheadProperties.getConfigKey() + "." + policy.getName();
   }
 
   @Override
@@ -67,9 +67,9 @@ public class BulkheadHandler extends 
AbstractGovernanceHandler<Bulkhead, Bulkhea
     if (meterRegistry != null) {
       TaggedBulkheadMetrics
           .ofBulkheadRegistry(BulkheadMetricNames.custom()
-              
.availableConcurrentCallsMetricName(BulkheadProperties.MATCH_BULKHEAD_KEY + 
".available.concurrent.calls")
+              
.availableConcurrentCallsMetricName(bulkheadProperties.getConfigKey() + 
".available.concurrent.calls")
               .maxAllowedConcurrentCallsMetricName(
-                  BulkheadProperties.MATCH_BULKHEAD_KEY + 
".max.allowed.concurrent.calls").build(), registry)
+                  bulkheadProperties.getConfigKey() + 
".max.allowed.concurrent.calls").build(), registry)
           .bindTo(meterRegistry);
     }
     return new DisposableBulkhead(key, registry, registry.bulkhead(key));
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
index fccbbfd7c..0f75e7ea7 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
@@ -46,7 +46,7 @@ public class CircuitBreakerHandler extends 
AbstractGovernanceHandler<CircuitBrea
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
CircuitBreakerPolicy policy) {
-    return CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + "." + 
policy.getName();
+    return this.circuitBreakerProperties.getConfigKey() + "." + 
policy.getName();
   }
 
   @Override
@@ -79,13 +79,13 @@ public class CircuitBreakerHandler extends 
AbstractGovernanceHandler<CircuitBrea
     if (meterRegistry != null) {
       TaggedCircuitBreakerMetrics
           .ofCircuitBreakerRegistry(CircuitBreakerMetricNames.custom()
-              
.callsMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + ".calls")
-              
.notPermittedCallsMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY 
+ ".not.permitted.calls")
-              
.stateMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + ".state")
-              
.bufferedCallsMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + 
".buffered.calls")
-              
.slowCallsMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + 
".slow.calls")
-              
.failureRateMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + 
".failure.rate")
-              
.slowCallRateMetricName(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + 
".slow.call.rate")
+              .callsMetricName(this.circuitBreakerProperties.getConfigKey() + 
".calls")
+              
.notPermittedCallsMetricName(this.circuitBreakerProperties.getConfigKey() + 
".not.permitted.calls")
+              .stateMetricName(this.circuitBreakerProperties.getConfigKey() + 
".state")
+              
.bufferedCallsMetricName(this.circuitBreakerProperties.getConfigKey() + 
".buffered.calls")
+              
.slowCallsMetricName(this.circuitBreakerProperties.getConfigKey() + 
".slow.calls")
+              
.failureRateMetricName(this.circuitBreakerProperties.getConfigKey() + 
".failure.rate")
+              
.slowCallRateMetricName(this.circuitBreakerProperties.getConfigKey() + 
".slow.call.rate")
               .build(), circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/IdentifierRateLimitingHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/IdentifierRateLimitingHandler.java
index 8b704e4aa..e733d1d17 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/IdentifierRateLimitingHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/IdentifierRateLimitingHandler.java
@@ -49,14 +49,14 @@ public class IdentifierRateLimitingHandler extends
       LOGGER.info("identifier rate limiting is not properly configured, 
identifier is empty.");
       return null;
     }
-    return IdentifierRateLimitProperties.MATCH_RATE_LIMIT_KEY
+    return this.rateLimitProperties.getConfigKey()
         + "." + policy.getName()
         + "." + governanceRequest.getHeader(policy.getIdentifier());
   }
 
   @Override
   protected void onConfigurationChanged(String key) {
-    if (key.startsWith(IdentifierRateLimitProperties.MATCH_RATE_LIMIT_KEY)) {
+    if (key.startsWith(this.rateLimitProperties.getConfigKey())) {
       for (String processorKey : processors.keySet()) {
         if (processorKey.startsWith(key)) {
           Disposable<RateLimiter> processor = processors.remove(processorKey);
@@ -93,8 +93,8 @@ public class IdentifierRateLimitingHandler extends
       TaggedRateLimiterMetrics
           .ofRateLimiterRegistry(RateLimiterMetricNames.custom()
                   .availablePermissionsMetricName(
-                      IdentifierRateLimitProperties.MATCH_RATE_LIMIT_KEY + 
".available.permissions")
-                  
.waitingThreadsMetricName(IdentifierRateLimitProperties.MATCH_RATE_LIMIT_KEY + 
".waiting.threads")
+                      this.rateLimitProperties.getConfigKey() + 
".available.permissions")
+                  
.waitingThreadsMetricName(this.rateLimitProperties.getConfigKey() + 
".waiting.threads")
                   .build(),
               rateLimiterRegistry)
           .bindTo(meterRegistry);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceBulkheadHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceBulkheadHandler.java
index 0f8e5d6b5..31e407434 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceBulkheadHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceBulkheadHandler.java
@@ -43,7 +43,7 @@ public class InstanceBulkheadHandler extends 
AbstractGovernanceHandler<Bulkhead,
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
BulkheadPolicy policy) {
-    return InstanceBulkheadProperties.MATCH_INSTANCE_BULKHEAD_KEY
+    return this.bulkheadProperties.getConfigKey()
         + "." + policy.getName()
         + "." + governanceRequest.getServiceName()
         + "." + governanceRequest.getInstanceId();
@@ -51,7 +51,7 @@ public class InstanceBulkheadHandler extends 
AbstractGovernanceHandler<Bulkhead,
 
   @Override
   protected void onConfigurationChanged(String key) {
-    if 
(key.startsWith(InstanceBulkheadProperties.MATCH_INSTANCE_BULKHEAD_KEY)) {
+    if (key.startsWith(this.bulkheadProperties.getConfigKey())) {
       for (String processorKey : processors.keySet()) {
         if (processorKey.startsWith(key)) {
           Disposable<Bulkhead> processor = processors.remove(processorKey);
@@ -92,9 +92,9 @@ public class InstanceBulkheadHandler extends 
AbstractGovernanceHandler<Bulkhead,
       TaggedBulkheadMetrics
           .ofBulkheadRegistry(BulkheadMetricNames.custom()
                   .availableConcurrentCallsMetricName(
-                      InstanceBulkheadProperties.MATCH_INSTANCE_BULKHEAD_KEY + 
".available.concurrent.calls")
+                      this.bulkheadProperties.getConfigKey() + 
".available.concurrent.calls")
                   .maxAllowedConcurrentCallsMetricName(
-                      InstanceBulkheadProperties.MATCH_INSTANCE_BULKHEAD_KEY + 
".max.allowed.concurrent.calls").build(),
+                      this.bulkheadProperties.getConfigKey() + 
".max.allowed.concurrent.calls").build(),
               registry)
           .bindTo(meterRegistry);
     }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
index 14ce46177..d9d194373 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
@@ -54,7 +54,7 @@ public class InstanceIsolationHandler extends 
AbstractGovernanceHandler<CircuitB
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
CircuitBreakerPolicy policy) {
-    return InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
+    return this.instanceIsolationProperties.getConfigKey()
         + "." + policy.getName()
         + "." + governanceRequest.getServiceName()
         + "." + governanceRequest.getInstanceId();
@@ -62,7 +62,7 @@ public class InstanceIsolationHandler extends 
AbstractGovernanceHandler<CircuitB
 
   @Override
   protected void onConfigurationChanged(String key) {
-    if 
(key.startsWith(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY)) {
+    if (key.startsWith(this.instanceIsolationProperties.getConfigKey())) {
       for (String processorKey : processors.keySet()) {
         if (processorKey.startsWith(key)) {
           Disposable<CircuitBreaker> circuitBreaker = 
processors.remove(processorKey);
@@ -110,14 +110,14 @@ public class InstanceIsolationHandler extends 
AbstractGovernanceHandler<CircuitB
     if (meterRegistry != null) {
       TaggedCircuitBreakerMetrics
           .ofCircuitBreakerRegistry(CircuitBreakerMetricNames.custom()
-              
.callsMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY + 
".calls")
+              .callsMetricName(this.instanceIsolationProperties.getConfigKey() 
+ ".calls")
               .notPermittedCallsMetricName(
-                  InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY + 
".not.permitted.calls")
-              
.stateMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY + 
".state")
-              
.bufferedCallsMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
 + ".buffered.calls")
-              
.slowCallsMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY + 
".slow.calls")
-              
.failureRateMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY 
+ ".failure.rate")
-              
.slowCallRateMetricName(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
 + ".slow.call.rate")
+                  this.instanceIsolationProperties.getConfigKey() + 
".not.permitted.calls")
+              .stateMetricName(this.instanceIsolationProperties.getConfigKey() 
+ ".state")
+              
.bufferedCallsMetricName(this.instanceIsolationProperties.getConfigKey() + 
".buffered.calls")
+              
.slowCallsMetricName(this.instanceIsolationProperties.getConfigKey() + 
".slow.calls")
+              
.failureRateMetricName(this.instanceIsolationProperties.getConfigKey() + 
".failure.rate")
+              
.slowCallRateMetricName(this.instanceIsolationProperties.getConfigKey() + 
".slow.call.rate")
               .build(), circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
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 dbaf5de32..d63c8c766 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
@@ -19,8 +19,8 @@ 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.governance.processor.loadbanlance.LoadBalance;
+import org.apache.servicecomb.governance.properties.LoadBalanceProperties;
 
 public class LoadBalanceHandler extends AbstractGovernanceHandler<LoadBalance, 
LoadBalancerPolicy> {
 
@@ -32,7 +32,7 @@ public class LoadBalanceHandler extends 
AbstractGovernanceHandler<LoadBalance, L
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
LoadBalancerPolicy policy) {
-    return LoadBalanceProperties.MATCH_LOADBANLANCER_KEY + "." + 
policy.getName();
+    return this.loadBalanceProperties.getConfigKey() + "." + policy.getName();
   }
 
   @Override
@@ -41,8 +41,8 @@ public class LoadBalanceHandler extends 
AbstractGovernanceHandler<LoadBalance, L
   }
 
   @Override
-  protected DisposableHolder<LoadBalance> createProcessor(String key, 
GovernanceRequest governanceRequest, LoadBalancerPolicy policy) {
+  protected DisposableHolder<LoadBalance> createProcessor(String key, 
GovernanceRequest governanceRequest,
+      LoadBalancerPolicy policy) {
     return new DisposableHolder<>(key, LoadBalance.getLoadBalance(key, 
policy));
   }
-
 }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
index b4653bf8c..7570137ad 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
@@ -41,7 +41,7 @@ public class RateLimitingHandler extends 
AbstractGovernanceHandler<RateLimiter,
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, 
RateLimitingPolicy policy) {
-    return RateLimitProperties.MATCH_RATE_LIMIT_KEY + "." + policy.getName();
+    return this.rateLimitProperties.getConfigKey() + "." + policy.getName();
   }
 
   @Override
@@ -68,8 +68,8 @@ public class RateLimitingHandler extends 
AbstractGovernanceHandler<RateLimiter,
       TaggedRateLimiterMetrics
           .ofRateLimiterRegistry(RateLimiterMetricNames.custom()
                   .availablePermissionsMetricName(
-                      RateLimitProperties.MATCH_RATE_LIMIT_KEY + 
".available.permissions")
-                  
.waitingThreadsMetricName(RateLimitProperties.MATCH_RATE_LIMIT_KEY + 
".waiting.threads")
+                      this.rateLimitProperties.getConfigKey() + 
".available.permissions")
+                  
.waitingThreadsMetricName(this.rateLimitProperties.getConfigKey() + 
".waiting.threads")
                   .build(),
               rateLimiterRegistry)
           .bindTo(meterRegistry);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
index b46f7d406..18abbdbda 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
@@ -48,7 +48,7 @@ public class RetryHandler extends 
AbstractGovernanceHandler<Retry, RetryPolicy>
 
   @Override
   protected String createKey(GovernanceRequest governanceRequest, RetryPolicy 
policy) {
-    return RetryProperties.MATCH_RETRY_KEY + "." + policy.getName();
+    return this.retryProperties.getConfigKey() + "." + policy.getName();
   }
 
   @Override
@@ -76,7 +76,7 @@ public class RetryHandler extends 
AbstractGovernanceHandler<Retry, RetryPolicy>
     if (meterRegistry != null) {
       TaggedRetryMetrics
           .ofRetryRegistry(RetryMetricNames.custom()
-                  .callsMetricName(RetryProperties.MATCH_RETRY_KEY + ".calls")
+                  .callsMetricName(this.retryProperties.getConfigKey() + 
".calls")
                   .build(),
               registry)
           .bindTo(meterRegistry);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
index 6bef14c74..62d6cc2c7 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
@@ -26,6 +26,10 @@ public class BulkheadProperties extends 
PolicyProperties<BulkheadPolicy> {
     super(MATCH_BULKHEAD_KEY);
   }
 
+  public BulkheadProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<BulkheadPolicy> getEntityClass() {
     return BulkheadPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
index 9b04fd0a9..96aa701ad 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
@@ -25,6 +25,10 @@ public class CircuitBreakerProperties extends 
PolicyProperties<CircuitBreakerPol
     super(MATCH_CIRCUITBREAKER_KEY);
   }
 
+  public CircuitBreakerProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<CircuitBreakerPolicy> getEntityClass() {
     return CircuitBreakerPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/FaultInjectionProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/FaultInjectionProperties.java
index 3fe8af40e..3a881352c 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/FaultInjectionProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/FaultInjectionProperties.java
@@ -26,6 +26,10 @@ public class FaultInjectionProperties extends 
PolicyProperties<FaultInjectionPol
     super(MATCH_FAULT_INJECTION_KEY);
   }
 
+  public FaultInjectionProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<FaultInjectionPolicy> getEntityClass() {
     return FaultInjectionPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/IdentifierRateLimitProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/IdentifierRateLimitProperties.java
index a02d69bfd..7db52c45b 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/IdentifierRateLimitProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/IdentifierRateLimitProperties.java
@@ -25,6 +25,10 @@ public class IdentifierRateLimitProperties extends 
PolicyProperties<IdentifierRa
     super(MATCH_RATE_LIMIT_KEY);
   }
 
+  public IdentifierRateLimitProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<IdentifierRateLimitingPolicy> getEntityClass() {
     return IdentifierRateLimitingPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceBulkheadProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceBulkheadProperties.java
index edd4b6045..126270467 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceBulkheadProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceBulkheadProperties.java
@@ -26,6 +26,10 @@ public class InstanceBulkheadProperties extends 
PolicyProperties<BulkheadPolicy>
     super(MATCH_INSTANCE_BULKHEAD_KEY);
   }
 
+  public InstanceBulkheadProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<BulkheadPolicy> getEntityClass() {
     return BulkheadPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
index 0f773ed7b..e47193fd3 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
@@ -26,6 +26,10 @@ public class InstanceIsolationProperties extends 
PolicyProperties<CircuitBreaker
     super(MATCH_INSTANCE_ISOLATION_KEY);
   }
 
+  public InstanceIsolationProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<CircuitBreakerPolicy> getEntityClass() {
     return CircuitBreakerPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/LoadBalanceProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/LoadBalanceProperties.java
index be8e9b267..892bbb8a5 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/LoadBalanceProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/LoadBalanceProperties.java
@@ -26,6 +26,10 @@ public class LoadBalanceProperties extends 
PolicyProperties<LoadBalancerPolicy>
     super(MATCH_LOADBANLANCER_KEY);
   }
 
+  public LoadBalanceProperties(String key) {
+    super(key);
+  }
+
   @Override
   protected Class<LoadBalancerPolicy> getEntityClass() {
     return LoadBalancerPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
index fe2a6eb37..5a20d4dd3 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/MapperProperties.java
@@ -20,7 +20,7 @@ package org.apache.servicecomb.governance.properties;
 import org.apache.servicecomb.governance.policy.MapperPolicy;
 
 public class MapperProperties extends PolicyProperties<MapperPolicy> {
-  private static final String MATCH_MAPPER_KEY = "servicecomb.mapper";
+  public static final String MATCH_MAPPER_KEY = "servicecomb.mapper";
 
   public MapperProperties() {
     super(MATCH_MAPPER_KEY);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
index 7aa5daef8..c3c094346 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
@@ -26,6 +26,10 @@ public class RateLimitProperties extends 
PolicyProperties<RateLimitingPolicy> {
     super(MATCH_RATE_LIMIT_KEY);
   }
 
+  public RateLimitProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<RateLimitingPolicy> getEntityClass() {
     return RateLimitingPolicy.class;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
index b19d44653..50106c2a0 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
@@ -25,6 +25,10 @@ public class RetryProperties extends 
PolicyProperties<RetryPolicy> {
     super(MATCH_RETRY_KEY);
   }
 
+  public RetryProperties(String key) {
+    super(key);
+  }
+
   @Override
   public Class<RetryPolicy> getEntityClass() {
     return RetryPolicy.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 40e58b78d..47eadd80d 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
@@ -30,6 +30,7 @@ import 
org.apache.servicecomb.governance.processor.injection.FaultInjectionExcep
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -38,9 +39,13 @@ import org.springframework.test.context.ContextConfiguration;
 public class FaultInjectionTest {
   private FaultInjectionHandler faultInjectionHandler;
 
+  private FaultInjectionHandler faultInjectionHandler2;
+
   @Autowired
-  public void setFaultInjectionHandler(FaultInjectionHandler 
faultInjectionHandler) {
+  public void setFaultInjectionHandler(FaultInjectionHandler 
faultInjectionHandler,
+      @Qualifier("faultInjectionHandler2") FaultInjectionHandler 
faultInjectionHandler2) {
     this.faultInjectionHandler = faultInjectionHandler;
+    this.faultInjectionHandler2 = faultInjectionHandler2;
   }
 
   public FaultInjectionTest() {
@@ -175,4 +180,26 @@ public class FaultInjectionTest {
     ds.withFaultInjection(fault);
     Assertions.assertEquals("test", ds.get());
   }
+
+  @Test
+  public void test_fallback_ThrowException_work_handler2() throws Throwable {
+    FaultInjectionDecorateCheckedSupplier<Object> ds =
+        FaultInjectionDecorators.ofCheckedSupplier(() -> "test");
+
+    GovernanceRequest request = new GovernanceRequest();
+    request.setUri("/throwException");
+    request.setServiceName("ThrowException");
+
+    Fault fault = faultInjectionHandler2.getActuator(request);
+    ds.withFaultInjection(fault);
+    boolean expected = false;
+    try {
+      ds.get();
+    } catch (FaultInjectionException e) {
+      if (e.getFaultResponse().getErrorCode() == 500) {
+        expected = true;
+      }
+    }
+    Assertions.assertEquals(true, expected);
+  }
 }
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 df05676dc..77902d848 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
@@ -164,7 +164,7 @@ public class GovernancePropertiesTest {
 
   @Test
   public void test_all_bean_is_loaded() {
-    Assertions.assertEquals(10, propertiesList.size());
+    Assertions.assertEquals(14, propertiesList.size());
   }
 
   @Test
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java 
b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
index 8afd9d762..8ee861bc9 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
@@ -23,6 +23,7 @@ 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.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -31,9 +32,12 @@ import org.springframework.test.context.ContextConfiguration;
 public class MapperTest {
   private MapperHandler mapperHandler;
 
+  private MapperHandler mapperHandler2;
+
   @Autowired
-  public void setMapperHandler(MapperHandler mapperHandler) {
+  public void setMapperHandler(MapperHandler mapperHandler, 
@Qualifier("mapperHandler2") MapperHandler mapperHandler2) {
     this.mapperHandler = mapperHandler;
+    this.mapperHandler2 = mapperHandler2;
   }
 
   @Test
@@ -45,4 +49,14 @@ public class MapperTest {
     Assertions.assertEquals("127.0.0.1", mapper.target().get("host"));
     Assertions.assertEquals("8080", mapper.target().get("port"));
   }
+
+  @Test
+  public void test_mapper2_work() {
+    GovernanceRequest request = new GovernanceRequest();
+    request.setUri("/mapper/v1");
+    Mapper mapper = mapperHandler2.getActuator(request);
+    Assertions.assertEquals(2, mapper.target().size());
+    Assertions.assertEquals("127.0.0.1", mapper.target().get("host"));
+    Assertions.assertEquals("9090", mapper.target().get("port"));
+  }
 }
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
index 7b0281682..b75d9cdb9 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
@@ -17,6 +17,16 @@
 
 package org.apache.servicecomb.governance;
 
+import org.apache.servicecomb.governance.handler.BulkheadHandler;
+import org.apache.servicecomb.governance.handler.CircuitBreakerHandler;
+import org.apache.servicecomb.governance.handler.FaultInjectionHandler;
+import org.apache.servicecomb.governance.handler.MapperHandler;
+import 
org.apache.servicecomb.governance.handler.ext.AbstractCircuitBreakerExtension;
+import org.apache.servicecomb.governance.properties.BulkheadProperties;
+import org.apache.servicecomb.governance.properties.CircuitBreakerProperties;
+import org.apache.servicecomb.governance.properties.FaultInjectionProperties;
+import org.apache.servicecomb.governance.properties.MapperProperties;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -49,4 +59,47 @@ public class MockConfiguration {
   public PrometheusMeterRegistry meterRegistry() {
     return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
   }
+
+  @Bean
+  public MapperProperties mapperProperties2() {
+    return new MapperProperties(MapperProperties.MATCH_MAPPER_KEY + "2");
+  }
+
+  @Bean
+  public MapperHandler mapperHandler2(@Qualifier("mapperProperties2") 
MapperProperties mapperProperties) {
+    return new MapperHandler(mapperProperties);
+  }
+
+  @Bean
+  public BulkheadProperties bulkheadProperties2() {
+    return new BulkheadProperties(BulkheadProperties.MATCH_BULKHEAD_KEY + "2");
+  }
+
+  @Bean
+  public BulkheadHandler bulkheadHandler2(@Qualifier("bulkheadProperties2") 
BulkheadProperties bulkheadProperties) {
+    return new BulkheadHandler(bulkheadProperties);
+  }
+
+  @Bean
+  public CircuitBreakerProperties circuitBreakerProperties2() {
+    return new 
CircuitBreakerProperties(CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + 
"2");
+  }
+
+  @Bean
+  public CircuitBreakerHandler circuitBreakerHandler2(
+      @Qualifier("circuitBreakerProperties2") CircuitBreakerProperties 
circuitBreakerProperties,
+      AbstractCircuitBreakerExtension circuitBreakerExtension) {
+    return new CircuitBreakerHandler(circuitBreakerProperties, 
circuitBreakerExtension);
+  }
+
+  @Bean
+  public FaultInjectionProperties faultInjectionProperties2() {
+    return new 
FaultInjectionProperties(FaultInjectionProperties.MATCH_FAULT_INJECTION_KEY + 
"2");
+  }
+
+  @Bean
+  public FaultInjectionHandler faultInjectionHandler2(
+      @Qualifier("faultInjectionProperties2") FaultInjectionProperties 
faultInjectionProperties) {
+    return new FaultInjectionHandler(faultInjectionProperties);
+  }
 }
diff --git a/governance/src/test/resources/application.yaml 
b/governance/src/test/resources/application.yaml
index 923f8f58a..69c07171c 100644
--- a/governance/src/test/resources/application.yaml
+++ b/governance/src/test/resources/application.yaml
@@ -165,6 +165,10 @@ servicecomb:
     wrongIngored: |
       delayTime: -1
       type: ERROR
+  faultInjection2:
+    demo-fallback-ThrowException: |
+      type: abort
+      percentage: 100
   loadbalance:
     demo-loadbalance-random: |
       rule: Random
@@ -175,6 +179,11 @@ servicecomb:
       target:
         host: 127.0.0.1
         port: 8080
+  mapper2:
+    demo-mapper: |
+      target:
+        host: 127.0.0.1
+        port: 9090
   routeRule:
     test_server1: |                              # 服务名
       - precedence: 1                        # 优先级,数字越大,优先级越高。


Reply via email to