From dc515a3d84f86042fb962115c37fd5e1a1bb39c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=B4=E8=8A=82?= Date: Mon, 25 Oct 2021 12:59:44 +0800 Subject: [PATCH 1/4] optimize extension component health report --- .../ext/component/ExtensionComponent.java | 15 ++++- .../sofa/runtime/test/ExtensionTest.java | 66 +++++++++++++------ .../META-INF/extension/test-extension.xml | 6 ++ 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java index e565e6b72..4a88db970 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java @@ -136,7 +136,20 @@ public HealthResult isHealthy() { healthResult.setHealthy(true); return healthResult; } - return super.isHealthy(); + + HealthResult healthResult = new HealthResult(componentName.getRawName()); + //表示对应的 ExtensionPoint 未注册 + if (!isResolved()) { + healthResult.setHealthy(false); + healthResult.setHealthReport("Can not found corresponding ExtensionPoint: " + + extension.getTargetComponentName().getName()); + } else if (e != null) { + healthResult.setHealthy(false); + healthResult.setHealthReport(e.getMessage()); + } else { + healthResult.setHealthy(true); + } + return healthResult; } public Extension getExtension() { diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java index 6acae9ced..dd13bafd4 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java @@ -16,25 +16,6 @@ */ package com.alipay.sofa.runtime.test; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.OutputStream; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.ImportResource; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -import org.w3c.dom.Document; - import com.alipay.sofa.common.xmap.Context; import com.alipay.sofa.common.xmap.DOMSerializer; import com.alipay.sofa.common.xmap.Resource; @@ -43,6 +24,11 @@ import com.alipay.sofa.runtime.api.client.ExtensionClient; import com.alipay.sofa.runtime.api.client.param.ExtensionParam; import com.alipay.sofa.runtime.api.client.param.ExtensionPointParam; +import com.alipay.sofa.runtime.ext.component.ExtensionComponent; +import com.alipay.sofa.runtime.model.ComponentType; +import com.alipay.sofa.runtime.spi.component.ComponentInfo; +import com.alipay.sofa.runtime.spi.component.SofaRuntimeContext; +import com.alipay.sofa.runtime.spi.spring.SofaRuntimeContextAware; import com.alipay.sofa.runtime.test.configuration.RuntimeConfiguration; import com.alipay.sofa.runtime.test.extension.bean.IExtension; import com.alipay.sofa.runtime.test.extension.bean.SimpleSpringBean; @@ -51,6 +37,24 @@ import com.alipay.sofa.runtime.test.extension.descriptor.ClientExtensionDescriptor; import com.alipay.sofa.runtime.test.extension.descriptor.SimpleExtensionDescriptor; import com.alipay.sofa.runtime.test.extension.descriptor.XMapTestDescriptor; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.ImportResource; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.w3c.dom.Document; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.OutputStream; +import java.util.Collection; /** * @author ruoshan @@ -59,10 +63,12 @@ @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(properties = "spring.application.name=ExtensionTest") -public class ExtensionTest implements ExtensionClientAware { +public class ExtensionTest implements ExtensionClientAware, SofaRuntimeContextAware { private ExtensionClient extensionClient; + private SofaRuntimeContext sofaRuntimeContext; + @Autowired private IExtension iExtension; @@ -230,11 +236,31 @@ public void testBad() { Assert.assertNull(iExtension.getBadDescriptor()); } + @Test + public void testNotExist() { + Collection componentInfos = + sofaRuntimeContext.getComponentManager().getComponentInfosByType(new ComponentType("extension")); + componentInfos.forEach(componentInfo -> { + if (componentInfo instanceof ExtensionComponent) { + if (componentInfo.getName().getName().contains("noExist")) { + Assert.assertFalse(componentInfo.isHealthy().isHealthy()); + Assert.assertEquals("Can not found corresponding ExtensionPoint: iExtension$noExist", + componentInfo.isHealthy().getHealthReport()); + } + } + }); + } + @Override public void setExtensionClient(ExtensionClient extensionClient) { this.extensionClient = extensionClient; } + @Override + public void setSofaRuntimeContext(SofaRuntimeContext sofaRuntimeContext) { + this.sofaRuntimeContext = sofaRuntimeContext; + } + @Configuration(proxyBeanMethods = false) @Import(RuntimeConfiguration.class) @ImportResource("classpath*:META-INF/extension/test-extension.xml") diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/resources/META-INF/extension/test-extension.xml b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/resources/META-INF/extension/test-extension.xml index d05417d96..f4de66178 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/resources/META-INF/extension/test-extension.xml +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/resources/META-INF/extension/test-extension.xml @@ -188,4 +188,10 @@ + + + noExist + + + \ No newline at end of file From 45b2521d1c7dda371870f0bdff6e2c834f53a6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=B4=E8=8A=82?= Date: Mon, 25 Oct 2021 19:54:12 +0800 Subject: [PATCH 2/4] fix extension point shutdown error --- .../ext/component/ExtensionComponent.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java index 4a88db970..ff6005162 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java @@ -123,7 +123,7 @@ public void activate() throws ServiceRuntimeException { } } catch (Throwable t) { throw new ServiceRuntimeException(ErrorCode.convert("01-01000", - extensionPointComponentInfo.getName()), t); + extensionPointComponentInfo.getName()), t); } componentStatus = ComponentStatus.ACTIVATED; @@ -138,18 +138,29 @@ public HealthResult isHealthy() { } HealthResult healthResult = new HealthResult(componentName.getRawName()); + //表示 loadContributions 异常的 Extension + if (e!= null) { + healthResult.setHealthy(false); + healthResult.setHealthReport("Extension loadContributions error: " + e.getMessage()); + return healthResult; + } + //表示注册成功的 Extension + if (isActivated()) { + healthResult.setHealthy(true); + return healthResult; + } //表示对应的 ExtensionPoint 未注册 if (!isResolved()) { healthResult.setHealthy(false); - healthResult.setHealthReport("Can not found corresponding ExtensionPoint: " + healthResult.setHealthReport("Can not find corresponding ExtensionPoint: " + extension.getTargetComponentName().getName()); - } else if (e != null) { - healthResult.setHealthy(false); - healthResult.setHealthReport(e.getMessage()); + return healthResult; } else { - healthResult.setHealthy(true); + // 表示 registerExtension 异常的 Extension + healthResult.setHealthy(false); + healthResult.setHealthReport("Extension registerExtension error"); + return healthResult; } - return healthResult; } public Extension getExtension() { From b4d8133c9c7ffa2f6da6c13608811adf3112dd75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=B4=E8=8A=82?= Date: Mon, 25 Oct 2021 21:23:09 +0800 Subject: [PATCH 3/4] format --- .../alipay/sofa/runtime/ext/component/ExtensionComponent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java index ff6005162..fb82d20d2 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/ext/component/ExtensionComponent.java @@ -123,7 +123,7 @@ public void activate() throws ServiceRuntimeException { } } catch (Throwable t) { throw new ServiceRuntimeException(ErrorCode.convert("01-01000", - extensionPointComponentInfo.getName()), t); + extensionPointComponentInfo.getName()), t); } componentStatus = ComponentStatus.ACTIVATED; @@ -139,7 +139,7 @@ public HealthResult isHealthy() { HealthResult healthResult = new HealthResult(componentName.getRawName()); //表示 loadContributions 异常的 Extension - if (e!= null) { + if (e != null) { healthResult.setHealthy(false); healthResult.setHealthReport("Extension loadContributions error: " + e.getMessage()); return healthResult; From f8aca4a5ca86260aa844f3e2cafdd1f5bd8c3d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=B4=E8=8A=82?= Date: Tue, 26 Oct 2021 10:22:40 +0800 Subject: [PATCH 4/4] format --- .../test/java/com/alipay/sofa/runtime/test/ExtensionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java index dd13bafd4..9a9149724 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/test/java/com/alipay/sofa/runtime/test/ExtensionTest.java @@ -244,7 +244,7 @@ public void testNotExist() { if (componentInfo instanceof ExtensionComponent) { if (componentInfo.getName().getName().contains("noExist")) { Assert.assertFalse(componentInfo.isHealthy().isHealthy()); - Assert.assertEquals("Can not found corresponding ExtensionPoint: iExtension$noExist", + Assert.assertEquals("Can not find corresponding ExtensionPoint: iExtension$noExist", componentInfo.isHealthy().getHealthReport()); } }