You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/06/14 10:31:36 UTC

[incubator-servicecomb-java-chassis] branch 1.0.0-mX updated (abc08ce -> e981fcc)

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

ningjiang pushed a change to branch 1.0.0-mX
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git.


    from abc08ce  [SCB-659] fix springmvc integration test failed (springmvc-tests-common not marked as a test-jar)
     new 7a947a4  [SCB-667] fix gracefully shutdown is not work in some case
     new e981fcc  [SCB-667] fix test case and small mistake

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../common/rest/AbstractRestInvocation.java          |  9 +++++++--
 .../common/rest/TestAbstractRestInvocation.java      |  4 ++++
 .../java/org/apache/servicecomb/core/SCBEngine.java  |  4 ++--
 .../core/invocation/InvocationFactory.java           |  2 ++
 .../servicecomb/core/unittest/UnitTestMeta.java      |  4 ++++
 .../servicecomb/core/TestInvocationFactory.java      |  1 +
 .../org/apache/servicecomb/core/TestSCBEngine.java   |  4 ++--
 .../core/provider/consumer/TestInvokerUtils.java     |  4 ++--
 .../apache/servicecomb/provider/pojo/Invoker.java    |  1 +
 .../springmvc/reference/CseClientHttpRequest.java    |  5 ++---
 .../reference/TestCseClientHttpRequest.java          | 18 +++++++-----------
 .../async/CseAsyncClientHttpRequestTest.java         | 20 ++------------------
 .../transport/highway/HighwayServerInvoke.java       | 18 ++++++++++++------
 .../transport/highway/TestHighwayServerInvoke.java   |  4 ++++
 14 files changed, 52 insertions(+), 46 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.

[incubator-servicecomb-java-chassis] 02/02: [SCB-667] fix test case and small mistake

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch 1.0.0-mX
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit e981fcc1e17973c4de4d80216db838d3d4e60168
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Thu Jun 14 16:28:02 2018 +0800

    [SCB-667] fix test case and small mistake
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 core/src/main/java/org/apache/servicecomb/core/SCBEngine.java       | 2 +-
 .../java/org/apache/servicecomb/core/TestInvocationFactory.java     | 1 +
 core/src/test/java/org/apache/servicecomb/core/TestSCBEngine.java   | 4 ++--
 .../apache/servicecomb/core/provider/consumer/TestInvokerUtils.java | 4 ++--
 .../apache/servicecomb/transport/highway/HighwayServerInvoke.java   | 6 ++++--
 .../servicecomb/transport/highway/TestHighwayServerInvoke.java      | 4 ++++
 6 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index e274a18..aa42ded 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -277,7 +277,7 @@ public class SCBEngine {
     SCBStatus currentStatus = getStatus();
     if (!SCBStatus.UP.equals(currentStatus)) {
       throw new IllegalStateException(
-          "System is starting and not ready for remote calls or shutting down in progress, STATUS = " + currentStatus);
+          "The request is rejected, as the service cannot process the request due to STATUS = " + currentStatus);
     }
   }
 
diff --git a/core/src/test/java/org/apache/servicecomb/core/TestInvocationFactory.java b/core/src/test/java/org/apache/servicecomb/core/TestInvocationFactory.java
index 7767ad1..b91cad1 100644
--- a/core/src/test/java/org/apache/servicecomb/core/TestInvocationFactory.java
+++ b/core/src/test/java/org/apache/servicecomb/core/TestInvocationFactory.java
@@ -36,6 +36,7 @@ public class TestInvocationFactory {
     ServiceRegistry serviceRegistry = ServiceRegistryFactory.createLocal();
     serviceRegistry.init();
     RegistryUtils.setServiceRegistry(serviceRegistry);
+    SCBEngine.getInstance().setStatus(SCBStatus.UP);
   }
 
   @Test
diff --git a/core/src/test/java/org/apache/servicecomb/core/TestSCBEngine.java b/core/src/test/java/org/apache/servicecomb/core/TestSCBEngine.java
index 6b72f56..89ffe80 100644
--- a/core/src/test/java/org/apache/servicecomb/core/TestSCBEngine.java
+++ b/core/src/test/java/org/apache/servicecomb/core/TestSCBEngine.java
@@ -106,7 +106,7 @@ public class TestSCBEngine {
 
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage(
-        Matchers.is("System is starting and not ready for remote calls or shutting down in progress, STATUS = DOWN"));
+        Matchers.is("The request is rejected, as the service cannot process the request due to STATUS = DOWN"));
     engine.createReferenceConfigForInvoke(null, null, null);
   }
 
@@ -128,7 +128,7 @@ public class TestSCBEngine {
 
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage(
-        Matchers.is("System is starting and not ready for remote calls or shutting down in progress, STATUS = DOWN"));
+        Matchers.is("The request is rejected, as the service cannot process the request due to STATUS = DOWN"));
     engine.getReferenceConfigForInvoke(null);
   }
 }
diff --git a/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestInvokerUtils.java b/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestInvokerUtils.java
index 784a8a6..ef0b021 100644
--- a/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestInvokerUtils.java
+++ b/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestInvokerUtils.java
@@ -126,7 +126,7 @@ public class TestInvokerUtils {
 
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage(
-        Matchers.is("System is starting and not ready for remote calls or shutting down in progress, STATUS = DOWN"));
+        Matchers.is("The request is rejected, as the service cannot process the request due to STATUS = DOWN"));
     InvokerUtils.syncInvoke("ms", "schemaId", "opName", null);
   }
 
@@ -136,7 +136,7 @@ public class TestInvokerUtils {
 
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage(
-        Matchers.is("System is starting and not ready for remote calls or shutting down in progress, STATUS = DOWN"));
+        Matchers.is("The request is rejected, as the service cannot process the request due to STATUS = DOWN"));
 
     InvokerUtils.syncInvoke("ms", "latest", "rest", "schemaId", "opName", null);
   }
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
index 76342e0..fd82cca 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
@@ -158,7 +158,9 @@ public class HighwayServerInvoke {
           msgId);
       LOGGER.error(msg, e);
     } finally {
-      invocation.onFinish(response);
+      if (invocation != null) {
+        invocation.onFinish(response);
+      }
     }
   }
 
@@ -173,7 +175,7 @@ public class HighwayServerInvoke {
       invocation.onStart();
       operationMeta.getExecutor().execute(() -> runInExecutor());
     } catch (IllegalStateException e) {
-      sendResponse(invocation.getContext(), Response.providerFailResp(e));
+      sendResponse(header.getContext(), Response.providerFailResp(e));
     }
   }
 }
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
index 0dc902c..525b5e0 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
@@ -19,6 +19,8 @@ package org.apache.servicecomb.transport.highway;
 
 import javax.xml.ws.Holder;
 
+import org.apache.servicecomb.core.SCBEngine;
+import org.apache.servicecomb.core.SCBStatus;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.event.InvocationFinishEvent;
@@ -65,11 +67,13 @@ public class TestHighwayServerInvoke {
   @BeforeClass
   public static void classSetup() {
     EventManager.eventBus = new EventBus();
+    SCBEngine.getInstance().setStatus(SCBStatus.UP);
   }
 
   @AfterClass
   public static void classTeardown() {
     EventManager.eventBus = new EventBus();
+    SCBEngine.getInstance().setStatus(SCBStatus.DOWN);
   }
 
   @Before

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.

[incubator-servicecomb-java-chassis] 01/02: [SCB-667] fix gracefully shutdown is not work in some case

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch 1.0.0-mX
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 7a947a486d9f3c03277052018b1e1a2533513e9d
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Thu Jun 14 15:38:47 2018 +0800

    [SCB-667] fix gracefully shutdown is not work in some case
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../common/rest/AbstractRestInvocation.java          |  9 +++++++--
 .../common/rest/TestAbstractRestInvocation.java      |  4 ++++
 .../java/org/apache/servicecomb/core/SCBEngine.java  |  2 +-
 .../core/invocation/InvocationFactory.java           |  2 ++
 .../servicecomb/core/unittest/UnitTestMeta.java      |  4 ++++
 .../apache/servicecomb/provider/pojo/Invoker.java    |  1 +
 .../springmvc/reference/CseClientHttpRequest.java    |  5 ++---
 .../reference/TestCseClientHttpRequest.java          | 18 +++++++-----------
 .../async/CseAsyncClientHttpRequestTest.java         | 20 ++------------------
 .../transport/highway/HighwayServerInvoke.java       | 14 +++++++++-----
 10 files changed, 39 insertions(+), 40 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
index 81e6fc9..cb4413b 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
@@ -108,7 +108,13 @@ public abstract class AbstractRestInvocation {
   }
 
   protected void scheduleInvocation() {
-    createInvocation();
+    try {
+      createInvocation();
+    } catch (IllegalStateException e) {
+      sendFailResponse(e);
+      return;
+    }
+
     invocation.onStart();
     OperationMeta operationMeta = restOperationMeta.getOperationMeta();
 
@@ -161,7 +167,6 @@ public abstract class AbstractRestInvocation {
 
   protected Response prepareInvoke() throws Throwable {
     this.initProduceProcessor();
-
     this.setContext();
     invocation.getHandlerContext().put(RestConst.REST_REQUEST, requestEx);
 
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
index 6e5df50..e8d4d7f 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
@@ -36,6 +36,8 @@ import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.core.SCBEngine;
+import org.apache.servicecomb.core.SCBStatus;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
@@ -121,11 +123,13 @@ public class TestAbstractRestInvocation {
   @BeforeClass
   public static void classSetup() {
     EventManager.eventBus = new EventBus();
+    SCBEngine.getInstance().setStatus(SCBStatus.UP);
   }
 
   @AfterClass
   public static void classTeardown() {
     EventManager.eventBus = new EventBus();
+    SCBEngine.getInstance().setStatus(SCBStatus.DOWN);
   }
 
   @Before
diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index 4d2f157..e274a18 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -273,7 +273,7 @@ public class SCBEngine {
     }
   }
 
-  protected void ensureStatusUp() {
+  public void ensureStatusUp() {
     SCBStatus currentStatus = getStatus();
     if (!SCBStatus.UP.equals(currentStatus)) {
       throw new IllegalStateException(
diff --git a/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java b/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
index 8410d93..8c72f93 100644
--- a/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
+++ b/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.core.invocation;
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
@@ -68,6 +69,7 @@ public final class InvocationFactory {
   public static Invocation forProvider(Endpoint endpoint,
       OperationMeta operationMeta,
       Object[] swaggerArguments) {
+    SCBEngine.getInstance().ensureStatusUp();
     return new Invocation(endpoint,
         operationMeta,
         swaggerArguments);
diff --git a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
index 832ea64..fd1eece 100644
--- a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
+++ b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
@@ -61,6 +61,10 @@ public class UnitTestMeta {
 
   private ConsumerProviderManager consumerProviderManager;
 
+  public ConsumerProviderManager getConsumerProviderManager() {
+    return consumerProviderManager;
+  }
+
   private ConsumerSchemaFactory consumerSchemaFactory;
 
   private SchemaLoader schemaLoader = new SchemaLoader() {
diff --git a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
index d4d279c..05cd2fd 100644
--- a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
+++ b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
@@ -57,6 +57,7 @@ public class Invoker implements InvocationHandler {
 
     // initialized and meta not changed
     public boolean isValid() {
+      SCBEngine.getInstance().ensureStatusUp();
       return swaggerConsumer != null && microserviceMeta == referenceConfig.getMicroserviceMeta();
     }
   }
diff --git a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
index 1e85f5a..ec9add3 100644
--- a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
+++ b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
@@ -29,8 +29,8 @@ import org.apache.servicecomb.common.rest.codec.RestCodec;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.common.rest.locator.OperationLocator;
 import org.apache.servicecomb.common.rest.locator.ServicePathManager;
-import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.invocation.InvocationFactory;
 import org.apache.servicecomb.core.provider.consumer.InvokerUtils;
@@ -149,8 +149,7 @@ public class CseClientHttpRequest implements ClientHttpRequest {
   protected RequestMeta createRequestMeta(String httpMethod, URI uri) {
     String microserviceName = uri.getAuthority();
 
-    ReferenceConfig referenceConfig = CseContext.getInstance().getConsumerProviderManager()
-        .getReferenceConfig(microserviceName);
+    ReferenceConfig referenceConfig = SCBEngine.getInstance().getReferenceConfigForInvoke(microserviceName);
 
     MicroserviceMeta microserviceMeta = referenceConfig.getMicroserviceMeta();
     ServicePathManager servicePathManager = ServicePathManager.getServicePathManager(microserviceMeta);
diff --git a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
index de8935d..aadf55f 100644
--- a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
+++ b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
@@ -37,21 +37,17 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import mockit.Mock;
-import mockit.MockUp;
-
 public class TestCseClientHttpRequest {
-  SCBEngine scbEngine = new SCBEngine();
+  static UnitTestMeta meta = new UnitTestMeta();
 
   @Before
   public void setup() {
-    new MockUp<SCBEngine>() {
-      @Mock
-      SCBEngine getInstance() {
-        return scbEngine;
-      }
-    };
-    scbEngine.setStatus(SCBStatus.UP);
+    SCBEngine.getInstance().setStatus(SCBStatus.UP);
+    CseContext.getInstance()
+        .getSchemaListenerManager()
+        .setSchemaListenerList(Collections.singletonList(new RestEngineSchemaListener()));
+    meta.registerSchema(new SpringmvcSwaggerGeneratorContext(), SpringmvcImpl.class);
+    SCBEngine.getInstance().setConsumerProviderManager(meta.getConsumerProviderManager());
   }
 
   @RequestMapping(path = "SpringmvcImpl")
diff --git a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
index b0e3af9..d45dc37 100644
--- a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
+++ b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
@@ -33,7 +33,6 @@ import org.apache.servicecomb.provider.springmvc.reference.CseClientHttpResponse
 import org.apache.servicecomb.swagger.generator.springmvc.SpringmvcSwaggerGeneratorContext;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.http.HttpMethod;
@@ -44,32 +43,17 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import mockit.Mock;
-import mockit.MockUp;
-
 public class CseAsyncClientHttpRequestTest {
   static UnitTestMeta meta = new UnitTestMeta();
 
-  SCBEngine scbEngine = new SCBEngine();
-
-  @Before
-  public void setup() {
-    new MockUp<SCBEngine>() {
-      @Mock
-      SCBEngine getInstance() {
-        return scbEngine;
-      }
-    };
-    scbEngine.setStatus(SCBStatus.UP);
-  }
-
   @BeforeClass
   public static void classSetup() {
     CseContext.getInstance()
         .getSchemaListenerManager()
         .setSchemaListenerList(Collections.singletonList(new RestEngineSchemaListener()));
-
     meta.registerSchema(new SpringmvcSwaggerGeneratorContext(), CseAsyncClientHttpRequestTestSchema.class);
+    SCBEngine.getInstance().setConsumerProviderManager(meta.getConsumerProviderManager());
+    SCBEngine.getInstance().setStatus(SCBStatus.UP);
   }
 
   @RequestMapping(path = "CseAsyncClientHttpRequestTestSchema")
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
index 3dd6006..76342e0 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
@@ -166,10 +166,14 @@ public class HighwayServerInvoke {
    * start time in queue.
    */
   public void execute() {
-    invocation = InvocationFactory.forProvider(endpoint,
-        operationProtobuf.getOperationMeta(),
-        null);
-    invocation.onStart();
-    operationMeta.getExecutor().execute(() -> runInExecutor());
+    try {
+      invocation = InvocationFactory.forProvider(endpoint,
+          operationProtobuf.getOperationMeta(),
+          null);
+      invocation.onStart();
+      operationMeta.getExecutor().execute(() -> runInExecutor());
+    } catch (IllegalStateException e) {
+      sendResponse(invocation.getContext(), Response.providerFailResp(e));
+    }
   }
 }

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.