From e0ff585a4c7d00c08f6339d0ea200b957687d02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A3=E5=9C=A8=E7=99=BB=E9=99=86?= Date: Wed, 24 Jan 2024 14:35:59 +0800 Subject: [PATCH] Fix zio-grpc server streams call trace (#13) --- .../ZioGrpcServerCallInstrumentation.scala | 20 +++++------ ...GrpcServerCallConstructorInterceptor.scala | 12 ------- .../ZioGrpcServerCloseInterceptor.scala | 33 +++++------------- .../ZioGrpcServerSendMessageInterceptor.scala | 19 +++------- .../apm-ziogrpc-v06rcx-plugin-0.2.0-beta2.jar | Bin 130436 -> 124541 bytes 5 files changed, 22 insertions(+), 62 deletions(-) delete mode 100644 plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCallConstructorInterceptor.scala diff --git a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/define/ZioGrpcServerCallInstrumentation.scala b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/define/ZioGrpcServerCallInstrumentation.scala index b5aa73a..196c6ed 100644 --- a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/define/ZioGrpcServerCallInstrumentation.scala +++ b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/define/ZioGrpcServerCallInstrumentation.scala @@ -5,6 +5,7 @@ import net.bytebuddy.matcher.ElementMatcher import net.bytebuddy.matcher.ElementMatchers.* import org.apache.skywalking.apm.agent.core.plugin.`match`.* +import org.apache.skywalking.apm.agent.core.plugin.`match`.logical.LogicalMatchOperation import org.apache.skywalking.apm.agent.core.plugin.interceptor.* import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.* @@ -12,16 +13,11 @@ final class ZioGrpcServerCallInstrumentation extends ClassInstanceMethodsEnhance import ZioGrpcServerCallInstrumentation.* - override def enhanceClass(): ClassMatch = NameMatch.byName(ENHANCE_CLASS) + override def enhanceClass(): ClassMatch = ENHANCE_CLASS override def witnessClasses(): Array[String] = Array("scalapb.zio_grpc.ServerImpl") - override def getConstructorsInterceptPoints: Array[ConstructorInterceptPoint] = Array( - new ConstructorInterceptPoint: - override def getConstructorMatcher: ElementMatcher[MethodDescription] = takesArguments(2) - - override def getConstructorInterceptor: String = CLASS_INTERCEPTOR - ) + override def getConstructorsInterceptPoints: Array[ConstructorInterceptPoint] = null override def getInstanceMethodsInterceptPoints: Array[InstanceMethodsInterceptPoint] = methodInterceptors @@ -38,16 +34,18 @@ end ZioGrpcServerCallInstrumentation object ZioGrpcServerCallInstrumentation: - final val CLASS_INTERCEPTOR = - "org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor.ZioGrpcServerCallConstructorInterceptor" - final val CLOSE_METHOD_INTERCEPTOR = "org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor.ZioGrpcServerCloseInterceptor" final val SEND_MESSAGE_METHOD_INTERCEPTOR = "org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor.ZioGrpcServerSendMessageInterceptor" - private final val ENHANCE_CLASS: String = "scalapb.zio_grpc.server.ZServerCall" + // see issue: https://github.com/scalapb/zio-grpc/issues/501, we cannot use Server Interceptor + // Because the server stream calls `ServerCall.sendMessage` and `ServerCall.close`, and we intercept grpc directly. + private final val ENHANCE_CLASS = LogicalMatchOperation.or( + HierarchyMatch.byHierarchyMatch("io.grpc.ServerCall"), + MultiClassNameMatch.byMultiClassMatch("io.grpc.ServerCall") + ) val methodInterceptors: Map[String, ElementMatcher[MethodDescription]] = Map( CLOSE_METHOD_INTERCEPTOR -> named("close"), diff --git a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCallConstructorInterceptor.scala b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCallConstructorInterceptor.scala deleted file mode 100644 index 228dd0b..0000000 --- a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCallConstructorInterceptor.scala +++ /dev/null @@ -1,12 +0,0 @@ -package org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor - -import io.grpc.* - -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.* -import org.bitlap.skywalking.apm.plugin.ziogrpc.common.* -import org.bitlap.skywalking.apm.plugin.ziogrpc.common.Constants.* - -final class ZioGrpcServerCallConstructorInterceptor extends InstanceConstructorInterceptor: - - override def onConstruct(objInst: EnhancedInstance, allArguments: Array[Object]): Unit = - objInst.setSkyWalkingDynamicField(OperationContext(selfCall = allArguments(0).asInstanceOf[ServerCall[?, ?]])) diff --git a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCloseInterceptor.scala b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCloseInterceptor.scala index e68c852..10011bb 100644 --- a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCloseInterceptor.scala +++ b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerCloseInterceptor.scala @@ -2,14 +2,9 @@ package org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor import java.lang.reflect.Method -import scala.util.* -import scalapb.zio_grpc.* - import io.grpc.* import io.grpc.Status.* -import zio.* - import org.apache.skywalking.apm.agent.core.context.* import org.apache.skywalking.apm.agent.core.context.tag.Tags import org.apache.skywalking.apm.agent.core.context.trace.* @@ -28,11 +23,8 @@ final class ZioGrpcServerCloseInterceptor extends InstanceMethodsAroundIntercept argumentsTypes: Array[Class[?]], result: MethodInterceptResult ): Unit = - val ctx = objInst.getSkyWalkingDynamicField - if ctx == null || !ctx.isInstanceOf[OperationContext] then return - - val cx = ctx.asInstanceOf[OperationContext] - val context = OperationContext.remove(cx.selfCall) + val call = objInst.asInstanceOf[ServerCall[?, ?]] + val context = OperationContext.remove(call) if context == null then return val span = beforeClose(context.contextSnapshot, context.methodDescriptor) @@ -63,31 +55,22 @@ final class ZioGrpcServerCloseInterceptor extends InstanceMethodsAroundIntercept if span == null || !span.isInstanceOf[AbstractSpan] then return ret val status = allArguments(0).asInstanceOf[Status] - ret.asInstanceOf[GIO[Unit]].ensuring(ZIO.attempt(afterClose(status, ctx.asyncSpan, span)).ignoreLogged) + afterClose(status, ctx.asyncSpan, span) + ret end afterMethod private def afterClose(status: Status, asyncSpan: AbstractSpan, span: AbstractSpan): Unit = status match { - case OK => - case UNKNOWN => - case INTERNAL => + case UNKNOWN | INTERNAL => if status.getCause == null then span.log(status.asRuntimeException) else span.log(status.getCause) case _ => if status.getCause != null then span.log(status.getCause) } Tags.RPC_RESPONSE_STATUS_CODE.set(span, status.getCode.name) - try span.asyncFinish - catch { - case t: Throwable => - ContextManager.activeSpan.log(t) - } finally - try - asyncSpan.asyncFinish() - catch { - case ignore: Throwable => - } - ContextManager.stopSpan() + AgentUtils.stopAsync(span) + AgentUtils.stopAsync(asyncSpan) + ContextManager.stopSpan() override def handleMethodException( objInst: EnhancedInstance, diff --git a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerSendMessageInterceptor.scala b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerSendMessageInterceptor.scala index d269357..280f906 100644 --- a/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerSendMessageInterceptor.scala +++ b/plugins/ziogrpc-v06rcx-plugin/src/main/scala/org/bitlap/skywalking/apm/plugin/ziogrpc/v06rcx/interceptor/ZioGrpcServerSendMessageInterceptor.scala @@ -2,12 +2,8 @@ package org.bitlap.skywalking.apm.plugin.ziogrpc.v06rcx.interceptor import java.lang.reflect.Method -import scalapb.zio_grpc.* - import io.grpc.* -import zio.ZIO - import org.apache.skywalking.apm.agent.core.context.* import org.apache.skywalking.apm.agent.core.context.trace.* import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.* @@ -24,11 +20,8 @@ final class ZioGrpcServerSendMessageInterceptor extends InstanceMethodsAroundInt argumentsTypes: Array[Class[?]], result: MethodInterceptResult ): Unit = - val ctx = objInst.getSkyWalkingDynamicField - if ctx == null || !ctx.isInstanceOf[OperationContext] then return - - val cx = ctx.asInstanceOf[OperationContext] - val context = OperationContext.get(cx.selfCall) + val call = objInst.asInstanceOf[ServerCall[?, ?]] + val context = OperationContext.get(call) if context == null then return val span = beforeSendMessage(context.contextSnapshot, context.methodDescriptor) span.foreach(s => objInst.setSkyWalkingDynamicField(context.copy(activeSpan = s))) @@ -61,12 +54,10 @@ final class ZioGrpcServerSendMessageInterceptor extends InstanceMethodsAroundInt if context == null || !context.isInstanceOf[OperationContext] then return ret val ctx = context.asInstanceOf[OperationContext] - - if ctx.activeSpan == null then return ret - + AgentUtils.stopAsync(ctx.activeSpan) + ContextManager.stopSpan() ret - .asInstanceOf[GIO[Unit]] - .ensuring(ZIO.attempt { ctx.activeSpan.asyncFinish(); ContextManager.stopSpan() }.ignoreLogged) + end afterMethod override def handleMethodException( diff --git a/scenarios/skywalking-agent/plugins/apm-ziogrpc-v06rcx-plugin-0.2.0-beta2.jar b/scenarios/skywalking-agent/plugins/apm-ziogrpc-v06rcx-plugin-0.2.0-beta2.jar index b6ccad136dddcbb5989d08107235d2cf84c4cb33..0b58c4a8d3192980782796d3178ca0863e8343e0 100644 GIT binary patch delta 19152 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 delta 24286 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

O^cKJEX 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 E0k#9@NdN!<