You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by GitBox <gi...@apache.org> on 2021/11/19 03:29:03 UTC

[GitHub] [servicecomb-java-chassis] five111 opened a new issue #2642: spi加载类失败,报空指针

five111 opened a new issue #2642:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2642


   ### 异常堆栈如下
   ```
   [2021-11-19 01:10:38,139]-[00e0be6c7e2e836d]-[1002]-[group0-1-thread-23]-[org.apache.servicecomb.registry.consumer.MicroserviceVersions.safeSetInstances(MicroserviceVersions.java:201)]-[ERROR] Failed to setInstances, appId=adc, microserviceName=adc:adc-log.
   java.lang.NullPointerException: 
   	at org.apache.servicecomb.registry.consumer.MicroserviceVersions.lambda$mergeInstances$3(MicroserviceVersions.java:252) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) ~[?:1.8.0_302]
   	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647) ~[?:1.8.0_302]
   	at org.apache.servicecomb.registry.consumer.MicroserviceVersions.mergeInstances(MicroserviceVersions.java:251) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.consumer.MicroserviceVersions.setInstances(MicroserviceVersions.java:225) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.consumer.MicroserviceVersions.safeSetInstances(MicroserviceVersions.java:198) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.consumer.MicroserviceVersions.pullInstances(MicroserviceVersions.java:178) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.consumer.MicroserviceManager.getOrCreateMicroserviceVersions(MicroserviceManager.java:64) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.consumer.AppManager.getOrCreateMicroserviceVersions(AppManager.java:66) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.registry.DiscoveryManager.getOrCreateMicroserviceVersions(DiscoveryManager.java:133) ~[foundation-registry-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.SCBEngine.createMicroserviceReferenceConfig(SCBEngine.java:540) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.SCBEngine.createMicroserviceReferenceConfig(SCBEngine.java:511) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.provider.springmvc.reference.CseClientHttpRequest.createRequestMeta(CseClientHttpRequest.java:184) ~[provider-springmvc-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.provider.springmvc.reference.CseClientHttpRequest.execute(CseClientHttpRequest.java:169) ~[provider-springmvc-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776) ~[spring-web-5.3.12.jar:5.3.12]
   	at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:660) ~[spring-web-5.3.12.jar:5.3.12]
   	at org.apache.servicecomb.provider.springmvc.reference.RestTemplateWrapper.exchange(RestTemplateWrapper.java:202) ~[provider-springmvc-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at com.huawei.mateinfo.sdk.log.operation.service.impl.ShardOperationLogRecorder.record(ShardOperationLogRecorder.java:44) ~[mateinfo-sdk-ext-log-2.2.RC1.B012.v7.jar:?]
   	at com.huawei.mateinfo.sdk.log.operation.service.impl.OperationLoggerImpl.log(OperationLoggerImpl.java:75) ~[mateinfo-sdk-ext-log-2.2.RC1.B012.v7.jar:?]
   	at sun.reflect.GeneratedMethodAccessor1034.invoke(Unknown Source) ~[?:?]
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_302]
   	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_302]
   	at com.huawei.mateinfo.sdk.log.operation.handler.OperationLogInvocationHandler.invoke(OperationLogInvocationHandler.java:40) ~[mateinfo-sdk-ext-log-2.2.RC1.B012.v7.jar:?]
   	at com.sun.proxy.$Proxy423.log(Unknown Source) ~[?:?]
   	at com.huawei.mateinfo.sdk.log.operation.aspect.OperationLogAspect.logByOperationSource(OperationLogAspect.java:170) ~[mateinfo-sdk-ext-log-2.2.RC1.B012.v7.jar:?]
   	at com.huawei.mateinfo.sdk.log.operation.aspect.OperationLogAspect.doAfterReturning(OperationLogAspect.java:58) ~[mateinfo-sdk-ext-log-2.2.RC1.B012.v7.jar:?]
   	at sun.reflect.GeneratedMethodAccessor1330.invoke(Unknown Source) ~[?:?]
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_302]
   	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_302]
   	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:617) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.aspectj.AspectJAfterReturningAdvice.afterReturning(AspectJAfterReturningAdvice.java:66) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:58) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.12.jar:5.3.12]
   	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.12.jar:5.3.12]
   	at com.huawei.mateinfo.bpmservice.definition.process.api.inner.ProcessInstallRpcServiceImpl$$EnhancerBySpringCGLIB$$8d5be1d2.prepare(<generated>) ~[mateinfo-bpmservice-definition-2.2.112.1.jar:?]
   	at sun.reflect.GeneratedMethodAccessor1349.invoke(Unknown Source) ~[?:?]
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_302]
   	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_302]
   	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.doInvoke(ProducerOperationHandler.java:128) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.syncInvoke(ProducerOperationHandler.java:113) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.invoke(ProducerOperationHandler.java:61) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.handle(ProducerOperationHandler.java:52) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.tracing.zipkin.ZipkinTracingHandler.handle(ZipkinTracingHandler.java:52) ~[handler-tracing-zipkin-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.tracing.zipkin.ZipkinProviderTracingHandler.handle(ZipkinProviderTracingHandler.java:24) ~[handler-tracing-zipkin-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at com.huawei.mateinfo.sdk.service.handler.ProviderMetricsHandler.handle(ProviderMetricsHandler.java:41) ~[mateinfo-sdk-base-service-2.2.RC1.B012.v7.jar:?]
   	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) ~[java-chassis-core-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.common.rest.AbstractRestInvocation.doInvoke(AbstractRestInvocation.java:245) ~[common-rest-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.common.rest.AbstractRestInvocation.invoke(AbstractRestInvocation.java:219) ~[common-rest-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.common.rest.AbstractRestInvocation.runOnExecutor(AbstractRestInvocation.java:203) ~[common-rest-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at org.apache.servicecomb.common.rest.AbstractRestInvocation.lambda$scheduleInvocation$0(AbstractRestInvocation.java:162) ~[common-rest-2.1.5-h0.gts.dsp.r39.jar:2.1.5-h0.gts.dsp.r39]
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_302]
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_302]
   	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_302]
   ```
   
   ### 经排查 org.apache.servicecomb.registry.consumer.MicroserviceVersions 出现空指针的位置如下
   这里的ping为空 看了下这个MicroserviceInstancePing.class只有默认实现SimpleMicroserviceInstancePing
   这个大概是什么原因导致的,因为发现重启就会ok,所以无法继续debug
   ```
   private MergedInstances mergeInstances(List<MicroserviceInstance> pulledInstances,
         Collection<MicroserviceInstance> inUseInstances) {
       MergedInstances mergedInstances = new MergedInstances();
       MicroserviceInstancePing ping = SPIServiceUtils.getPriorityHighestService(MicroserviceInstancePing.class);
       pulledInstances.stream().forEach(instance -> {
         if (ping.ping(instance)){
           mergedInstances.addInstance(instance);
         }
       });
       if (pulledInstances.isEmpty() && inUseInstances != null && ServiceRegistryCommonConfig
               .isEmptyInstanceProtectionEnabled()) {
         inUseInstances.stream().forEach(instance -> {
           if (!mergedInstances.instanceIdMap.containsKey(instance.getInstanceId())) {
             if (ping.ping(instance)) {
               mergedInstances.addInstance(instance);
             }
           }
         });
       }
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [servicecomb-java-chassis] SpireCat commented on issue #2642: spi加载类失败,报空指针

Posted by GitBox <gi...@apache.org>.
SpireCat commented on issue #2642:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2642#issuecomment-976332519


   刚解决完这个问题,确认下是不是在CompletableFuture的线程内发起的调用。
   详细原理可以参考:https://cloud.tencent.com/developer/article/1765767
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [servicecomb-java-chassis] fanjiwang1992 commented on issue #2642: spi加载类失败,报空指针

Posted by GitBox <gi...@apache.org>.
fanjiwang1992 commented on issue #2642:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2642#issuecomment-976373817


   https://github.com/apache/servicecomb-java-chassis/issues/1221


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [servicecomb-java-chassis] liubao68 commented on issue #2642: spi加载类失败,报空指针

Posted by GitBox <gi...@apache.org>.
liubao68 commented on issue #2642:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2642#issuecomment-976481765


   "用户要改类加载器,不让他改?" 或者 "假设SPI一定在某个类加载器加载,始终使用这个加载器?" 
   感觉两个处理措施都不合理。 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [servicecomb-java-chassis] five111 commented on issue #2642: spi加载类失败,报空指针

Posted by GitBox <gi...@apache.org>.
five111 commented on issue #2642:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2642#issuecomment-976388166


   考虑一下 可否避免用户因为自己的操作 导致类加载器变更?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org