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 # 优先级,数字越大,优先级越高。