You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2019/06/27 01:49:48 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1304]FallbackPolicy#getFallbackResponse add Throwable

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 6d728de  [SCB-1304]FallbackPolicy#getFallbackResponse add Throwable
6d728de is described below

commit 6d728de6e2dd0bcdc22d33b5b384cfec1a9d49d1
Author: pengliang <pe...@huawei.com>
AuthorDate: Fri Jun 21 10:27:28 2019 +0800

    [SCB-1304]FallbackPolicy#getFallbackResponse add Throwable
---
 .../springmvc/client/MockedFallbackExample.java    |  2 +-
 .../servicecomb/bizkeeper/FallbackPolicy.java      |  2 +-
 .../bizkeeper/FallbackPolicyManager.java           |  2 +-
 .../bizkeeper/FromCacheFallbackPolicy.java         |  2 +-
 .../bizkeeper/ReturnNullFallbackPolicy.java        |  2 +-
 .../bizkeeper/ThrowExceptionFallbackPolicy.java    |  4 +--
 .../bizkeeper/TestBizkeeperHandler.java            |  3 +-
 .../bizkeeper/TestFallbackPolicyManager.java       | 37 ++++++++++++++++++++++
 8 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/MockedFallbackExample.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/MockedFallbackExample.java
index 019f402..3533aed 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/MockedFallbackExample.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/MockedFallbackExample.java
@@ -30,7 +30,7 @@ public class MockedFallbackExample implements FallbackPolicy {
   }
 
   @Override
-  public Response getFallbackResponse(Invocation invocation) {
+  public Response getFallbackResponse(Invocation invocation, Throwable error) {
     return Response.succResp("mockedreslut");
   }
 }
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicy.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicy.java
index 75b1eb4..c394a35 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicy.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicy.java
@@ -22,7 +22,7 @@ import org.apache.servicecomb.swagger.invocation.Response;
 public interface FallbackPolicy {
   String name();
 
-  Response getFallbackResponse(Invocation invocation);
+  Response getFallbackResponse(Invocation invocation, Throwable error);
 
   default void record(Invocation invocation, Response response, boolean isSuccess) {
 
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicyManager.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicyManager.java
index 1382f0a..88f502a 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicyManager.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FallbackPolicyManager.java
@@ -39,7 +39,7 @@ public class FallbackPolicyManager {
   public static Response getFallbackResponse(String type, Throwable error, Invocation invocation) {
     FallbackPolicy policy = getPolicy(type, invocation);
     if (policy != null) {
-      return policy.getFallbackResponse(invocation);
+      return policy.getFallbackResponse(invocation, error);
     } else {
       return Response.failResp(invocation.getInvocationType(),
           BizkeeperExceptionUtils
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FromCacheFallbackPolicy.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FromCacheFallbackPolicy.java
index e992e19..2e6314b 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FromCacheFallbackPolicy.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/FromCacheFallbackPolicy.java
@@ -35,7 +35,7 @@ public class FromCacheFallbackPolicy implements FallbackPolicy {
   }
 
   @Override
-  public Response getFallbackResponse(Invocation invocation) {
+  public Response getFallbackResponse(Invocation invocation, Throwable error) {
     if (cachedResponse.get(invocation.getInvocationQualifiedName()) != null) {
       return cachedResponse.get(invocation.getInvocationQualifiedName());
     } else {
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ReturnNullFallbackPolicy.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ReturnNullFallbackPolicy.java
index b4b0a5f..1b4d6e0 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ReturnNullFallbackPolicy.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ReturnNullFallbackPolicy.java
@@ -30,7 +30,7 @@ public class ReturnNullFallbackPolicy implements FallbackPolicy {
   }
 
   @Override
-  public Response getFallbackResponse(Invocation invocation) {
+  public Response getFallbackResponse(Invocation invocation, Throwable error) {
     return Response.succResp(null);
   }
 }
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ThrowExceptionFallbackPolicy.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ThrowExceptionFallbackPolicy.java
index 1376510..1c74e4a 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ThrowExceptionFallbackPolicy.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/ThrowExceptionFallbackPolicy.java
@@ -30,11 +30,11 @@ public class ThrowExceptionFallbackPolicy implements FallbackPolicy {
   }
 
   @Override
-  public Response getFallbackResponse(Invocation invocation) {
+  public Response getFallbackResponse(Invocation invocation, Throwable error) {
     return Response.failResp(invocation.getInvocationType(),
         BizkeeperExceptionUtils
             .createBizkeeperException(BizkeeperExceptionUtils.SERVICECOMB_BIZKEEPER_FALLBACK,
-                null,
+                error,
                 invocation.getOperationMeta().getMicroserviceQualifiedName()));
   }
 }
diff --git a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
index 9d049cb..cb4656c 100644
--- a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
+++ b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
@@ -159,7 +159,8 @@ public class TestBizkeeperHandler extends BizkeeperHandler {
         .thenReturn("testHandleInError");
     FallbackPolicy policy = Mockito.mock(FallbackPolicy.class);
     Mockito.when(policy.name()).thenReturn("throwException");
-    Mockito.when(policy.getFallbackResponse(Mockito.any(Invocation.class))).thenThrow(new RuntimeException());
+    Mockito.when(policy.getFallbackResponse(Mockito.any(Invocation.class), Mockito.any(null)))
+        .thenThrow(new RuntimeException());
     FallbackPolicyManager.addPolicy(policy);
     System.setProperty("servicecomb.fallbackpolicy.groupname.testHandleInError.policy", "throwException");
     Mockito.doAnswer(new Answer<Void>() {
diff --git a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestFallbackPolicyManager.java b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestFallbackPolicyManager.java
index b254599..4860146 100644
--- a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestFallbackPolicyManager.java
+++ b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestFallbackPolicyManager.java
@@ -20,6 +20,7 @@ import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.exception.CseException;
 import org.apache.servicecomb.swagger.invocation.Response;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -33,6 +34,42 @@ public class TestFallbackPolicyManager {
     FallbackPolicyManager.addPolicy(new ReturnNullFallbackPolicy());
     FallbackPolicyManager.addPolicy(new ThrowExceptionFallbackPolicy());
     FallbackPolicyManager.addPolicy(new FromCacheFallbackPolicy());
+    FallbackPolicyManager.addPolicy(new FallbackPolicy() {
+      private static final String CUSTOM = "custom";
+
+      @Override
+      public String name() {
+        return CUSTOM;
+      }
+
+      @Override
+      public Response getFallbackResponse(Invocation invocation, Throwable error) {
+        if (error instanceof InvocationException) {
+          return Response.succResp("test");
+        }
+        if (error instanceof RuntimeException) {
+          return Response.succResp("runtime");
+        }
+        return null;
+      }
+    });
+
+    new Expectations() {
+      {
+        invocation.getMicroserviceName();
+        result = "testservice";
+        invocation.getOperationMeta();
+        result = operation;
+        operation.getMicroserviceQualifiedName();
+        result = "testservice.schema.custom";
+        config.getFallbackPolicyPolicy("Consumer", "testservice", "testservice.schema.custom");
+        result = "custom";
+      }
+    };
+
+    Assert.assertEquals("runtime",
+        FallbackPolicyManager.getFallbackResponse("Consumer", new RuntimeException(), invocation)
+            .getResult());
 
     new Expectations() {
       {