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:29:35 UTC
[incubator-servicecomb-java-chassis] 01/02: [SCB-667] fix
gracefully shutdown is not work in some case
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 3619109a94aed15c537be8a282d376ddf007c46d
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.