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

xiatian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/master by this push:
     new 015b6e958 [ISSUE #4963] Updating version of pinpoint libraries to 
3.0.0 (#5010)
015b6e958 is described below

commit 015b6e958ffc8fcecf8b582afe1e0508cfc31d1e
Author: lmnewton <[email protected]>
AuthorDate: Wed Jul 10 22:33:35 2024 -0400

    [ISSUE #4963] Updating version of pinpoint libraries to 3.0.0 (#5010)
    
    * Upgrading version of pinpoint-profiler to 3.0
    
    Signed-off-by: lmnewton <[email protected]>
    
    * Fixing issues with how transaction IDs are being passed, added test to 
test that parent context is being propagated.
    
    * Addressing checkstyle violations.
    
    Signed-off-by: Lindsay Newton <[email protected]>
    
    * Fixing import ordering issue for checkstyle.
    
    Signed-off-by: Lindsay Newton <[email protected]>
    
    ---------
    
    Signed-off-by: lmnewton <[email protected]>
    Signed-off-by: Lindsay Newton <[email protected]>
---
 .../eventmesh-trace-pinpoint/build.gradle          |   2 +-
 .../pinpoint/exporter/PinpointSpanExporter.java    | 143 ++++++++++++++-------
 .../exporter/PinpointSpanExporterTest.java         |  99 +++++++++++++-
 3 files changed, 188 insertions(+), 56 deletions(-)

diff --git a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/build.gradle 
b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/build.gradle
index 0758ba291..fcb492d69 100644
--- a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/build.gradle
+++ b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/build.gradle
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-def pinpointVersion = "2.4.1"
+def pinpointVersion = "3.0.0"
 
 dependencies {
     implementation project(":eventmesh-trace-plugin:eventmesh-trace-api")
diff --git 
a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/main/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporter.java
 
b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/main/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporter.java
index 24e41039f..61186c306 100644
--- 
a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/main/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporter.java
+++ 
b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/main/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporter.java
@@ -40,6 +40,8 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
 
+import org.mapstruct.factory.Mappers;
+
 import io.grpc.NameResolverProvider;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.internal.OtelEncodingUtils;
@@ -55,6 +57,7 @@ import 
io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
 
 import com.navercorp.pinpoint.bootstrap.context.SpanId;
 import com.navercorp.pinpoint.bootstrap.context.TraceId;
+import com.navercorp.pinpoint.common.profiler.util.TransactionIdUtils;
 import com.navercorp.pinpoint.common.trace.AnnotationKey;
 import com.navercorp.pinpoint.common.trace.ServiceType;
 import com.navercorp.pinpoint.common.util.JvmUtils;
@@ -67,6 +70,7 @@ import com.navercorp.pinpoint.grpc.client.HeaderFactory;
 import com.navercorp.pinpoint.profiler.AgentInfoSender;
 import com.navercorp.pinpoint.profiler.JvmInformation;
 import 
com.navercorp.pinpoint.profiler.context.DefaultServerMetaDataRegistryService;
+import com.navercorp.pinpoint.profiler.context.DefaultSpanFactory;
 import com.navercorp.pinpoint.profiler.context.ServerMetaDataRegistryService;
 import com.navercorp.pinpoint.profiler.context.Span;
 import com.navercorp.pinpoint.profiler.context.SpanEvent;
@@ -75,12 +79,24 @@ import 
com.navercorp.pinpoint.profiler.context.compress.GrpcSpanProcessorV2;
 import 
com.navercorp.pinpoint.profiler.context.grpc.GrpcAgentInfoMessageConverter;
 import com.navercorp.pinpoint.profiler.context.grpc.GrpcSpanMessageConverter;
 import com.navercorp.pinpoint.profiler.context.grpc.config.GrpcTransportConfig;
-import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId;
-import com.navercorp.pinpoint.profiler.context.id.DefaultTraceRoot;
+import com.navercorp.pinpoint.profiler.context.grpc.config.SpanAutoUriGetter;
+import com.navercorp.pinpoint.profiler.context.grpc.config.SpanUriGetter;
+import com.navercorp.pinpoint.profiler.context.grpc.mapper.AgentInfoMapper;
+import com.navercorp.pinpoint.profiler.context.grpc.mapper.AgentInfoMapperImpl;
+import 
com.navercorp.pinpoint.profiler.context.grpc.mapper.AnnotationValueMapper;
+import com.navercorp.pinpoint.profiler.context.grpc.mapper.JvmGcTypeMapper;
+import com.navercorp.pinpoint.profiler.context.grpc.mapper.JvmGcTypeMapperImpl;
+import com.navercorp.pinpoint.profiler.context.grpc.mapper.SpanMessageMapper;
+import 
com.navercorp.pinpoint.profiler.context.grpc.mapper.SpanMessageMapperImpl;
+import com.navercorp.pinpoint.profiler.context.id.DefaultTraceIdFactory;
+import com.navercorp.pinpoint.profiler.context.id.DefaultTraceRootFactory;
+import com.navercorp.pinpoint.profiler.context.id.TraceIdFactory;
 import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
+import com.navercorp.pinpoint.profiler.context.id.TraceRootFactory;
 import 
com.navercorp.pinpoint.profiler.context.provider.AgentInformationProvider;
 import 
com.navercorp.pinpoint.profiler.context.provider.grpc.DnsExecutorServiceProvider;
 import 
com.navercorp.pinpoint.profiler.context.provider.grpc.GrpcNameResolverProvider;
+import 
com.navercorp.pinpoint.profiler.context.provider.grpc.SSLContextProvider;
 import com.navercorp.pinpoint.profiler.metadata.MetaDataType;
 import com.navercorp.pinpoint.profiler.monitor.metric.gc.JvmGcType;
 import com.navercorp.pinpoint.profiler.receiver.ProfilerCommandLocatorBuilder;
@@ -117,6 +133,7 @@ public final class PinpointSpanExporter implements 
SpanExporter {
     private final String applicationName;
 
     private final GrpcTransportConfig grpcTransportConfig;
+    private final SSLContextProvider sslContextProvider;
 
     private final HeaderFactory headerFactory;
 
@@ -124,22 +141,35 @@ public final class PinpointSpanExporter implements 
SpanExporter {
 
     private final SpanGrpcDataSender spanGrpcDataSender;
 
+    private final JvmGcTypeMapper jvmGcTypeMapper = new JvmGcTypeMapperImpl();
+    private final AgentInfoMapper agentInfoMapper = new 
AgentInfoMapperImpl(jvmGcTypeMapper);
+
+    private final SpanUriGetter spanUriGetter = new SpanAutoUriGetter();
+    private final AnnotationValueMapper annotationValueMapper = 
Mappers.getMapper(AnnotationValueMapper.class);
+    private final SpanMessageMapper spanMessageMapper = new 
SpanMessageMapperImpl(annotationValueMapper, spanUriGetter);
+
     public PinpointSpanExporter(final String agentId,
-        final String agentName,
-        final String applicationName,
-        final GrpcTransportConfig grpcTransportConfig) {
+            final String agentName,
+            final String applicationName,
+            final GrpcTransportConfig grpcTransportConfig) {
 
         this.agentId = Objects.requireNonNull(agentId, "agentId cannot be 
null");
         this.agentName = Objects.requireNonNull(agentName, "agentName cannot 
be null");
         this.applicationName = Objects.requireNonNull(applicationName, 
"applicationName cannot be  null");
         this.grpcTransportConfig = Objects.requireNonNull(grpcTransportConfig, 
"grpcTransportConfig cannot be  null");
 
+        if (grpcTransportConfig.getSslOption() != null) {
+            this.sslContextProvider = new 
SSLContextProvider(grpcTransportConfig);
+        } else {
+            this.sslContextProvider = null;
+        }
+
         this.headerFactory = new AgentHeaderFactory(
-            agentId,
-            agentName,
-            applicationName,
-            ServiceType.UNDEFINED.getCode(),
-            agentStartTime);
+                agentId,
+                agentName,
+                applicationName,
+                ServiceType.UNDEFINED.getCode(),
+                agentStartTime);
 
         this.agentInfoSender = createAgentInfoSender();
         this.agentInfoSender.start();
@@ -155,7 +185,7 @@ public final class PinpointSpanExporter implements 
SpanExporter {
                 grpcTransportConfig.getAgentCollectorIp(),
                 grpcTransportConfig.getAgentCollectorPort(),
                 grpcTransportConfig.getAgentSenderExecutorQueueSize(),
-                new GrpcAgentInfoMessageConverter(),
+                new GrpcAgentInfoMessageConverter(agentInfoMapper),
                 reconnectExecutor,
                 scheduledExecutorService,
                 agentChannelFactory,
@@ -171,17 +201,17 @@ public final class PinpointSpanExporter implements 
SpanExporter {
                 ServiceType.STAND_ALONE);
 
         final JvmInformation jvmInformation = new JvmInformation(
-            JvmUtils.getSystemProperty(SystemPropertyKey.JAVA_VERSION),
-            JvmGcType.UNKNOWN);
+                JvmUtils.getSystemProperty(SystemPropertyKey.JAVA_VERSION),
+                JvmGcType.UNKNOWN);
 
         final ServerMetaDataRegistryService serverMetaDataRegistryService = 
new DefaultServerMetaDataRegistryService(
-            Collections.emptyList());
+                Collections.emptyList());
         
serverMetaDataRegistryService.setServerName(EventMeshTraceConstants.SERVICE_NAME);
 
         final AgentInfoFactory agentInfoFactory = new AgentInfoFactory(
-            agentInformationProvider.createAgentInformation(),
-            serverMetaDataRegistryService,
-            jvmInformation);
+                agentInformationProvider.createAgentInformation(),
+                serverMetaDataRegistryService,
+                jvmInformation);
 
         return new AgentInfoSender.Builder(agentGrpcDataSender, 
agentInfoFactory).build();
     }
@@ -193,7 +223,8 @@ public final class PinpointSpanExporter implements 
SpanExporter {
             new GrpcSpanMessageConverter(
                 agentId,
                 ServiceType.STAND_ALONE.getCode(),
-                new GrpcSpanProcessorV2());
+                new GrpcSpanProcessorV2(),
+                this.spanMessageMapper);
 
         final StreamState streamState =
             new SimpleStreamState(
@@ -201,21 +232,23 @@ public final class PinpointSpanExporter implements 
SpanExporter {
                 grpcTransportConfig.getSpanClientOption().getLimitTime());
 
         return new SpanGrpcDataSender(
-            grpcTransportConfig.getSpanCollectorIp(),
-            grpcTransportConfig.getSpanCollectorPort(),
-            grpcTransportConfig.getSpanSenderExecutorQueueSize(),
-            messageConverter,
-            reconnectExecutor,
-            spanChannelFactory,
-            streamState);
+                grpcTransportConfig.getSpanCollectorIp(),
+                grpcTransportConfig.getSpanCollectorPort(),
+                grpcTransportConfig.getSpanSenderExecutorQueueSize(),
+                messageConverter,
+                reconnectExecutor,
+                spanChannelFactory,
+                streamState,
+                grpcTransportConfig.getSpanRpcMaxAgeMillis());
     }
 
     private ChannelFactory createAgentChannelFactory() {
-        final ChannelFactoryBuilder channelFactoryBuilder =
-            new DefaultChannelFactoryBuilder(AGENT_CHANNEL_FACTORY);
+        final ChannelFactoryBuilder channelFactoryBuilder = new 
DefaultChannelFactoryBuilder(AGENT_CHANNEL_FACTORY);
         channelFactoryBuilder.setHeaderFactory(headerFactory);
         channelFactoryBuilder.setNameResolverProvider(nameResolverProvider);
-        channelFactoryBuilder.setSslOption(grpcTransportConfig.getSslOption());
+        if (this.sslContextProvider != null) {
+            channelFactoryBuilder.setSslContext(this.sslContextProvider.get());
+        }
         
channelFactoryBuilder.setClientOption(grpcTransportConfig.getAgentClientOption());
         
channelFactoryBuilder.setExecutorQueueSize(grpcTransportConfig.getAgentChannelExecutorQueueSize());
 
@@ -223,11 +256,12 @@ public final class PinpointSpanExporter implements 
SpanExporter {
     }
 
     private ChannelFactory createSpanChannelFactory() {
-        final ChannelFactoryBuilder channelFactoryBuilder =
-            new DefaultChannelFactoryBuilder(SPAN_CHANNEL_FACTORY);
+        final ChannelFactoryBuilder channelFactoryBuilder = new 
DefaultChannelFactoryBuilder(SPAN_CHANNEL_FACTORY);
         channelFactoryBuilder.setHeaderFactory(headerFactory);
         channelFactoryBuilder.setNameResolverProvider(nameResolverProvider);
-        channelFactoryBuilder.setSslOption(grpcTransportConfig.getSslOption());
+        if (this.sslContextProvider != null) {
+            channelFactoryBuilder.setSslContext(this.sslContextProvider.get());
+        }
         
channelFactoryBuilder.setClientOption(grpcTransportConfig.getSpanClientOption());
         
channelFactoryBuilder.setExecutorQueueSize(grpcTransportConfig.getSpanChannelExecutorQueueSize());
 
@@ -289,12 +323,21 @@ public final class PinpointSpanExporter implements 
SpanExporter {
             }
         });
 
-        final TraceId traceId = new DefaultTraceId(agentId, startTimestamp, 
transactionId, parentSpanId[0], spanId,
-            (short) spanData.getKind().ordinal());
-
-        final TraceRoot traceRoot = new DefaultTraceRoot(traceId, 
this.agentId, startTimestamp, transactionId);
+        final TraceIdFactory traceIdFactory = new 
DefaultTraceIdFactory(this.agentId, startTimestamp);
+        final TraceRootFactory traceRootFactory = new 
DefaultTraceRootFactory(this.agentId, traceIdFactory);
+
+        final TraceRoot traceRoot;
+        if (parentSpanId[0] == SpanId.NULL) {
+            traceRoot = traceRootFactory.newTraceRoot(transactionId);
+        } else {
+            final TraceId traceId = traceIdFactory.continueTraceId(
+                    TransactionIdUtils.formatString(this.agentId, 
startTimestamp, transactionId), parentSpanId[0],
+                    spanId, (short) spanData.getKind().ordinal());
+            traceRoot = traceRootFactory.continueTraceRoot(traceId, 
transactionId);
+        }
 
-        final Span span = new Span(traceRoot);
+        final DefaultSpanFactory spanFactory = new DefaultSpanFactory();
+        final Span span = spanFactory.newSpan(traceRoot);
 
         final StatusData statusData = spanData.getStatus();
         if (statusData != null) {
@@ -315,15 +358,15 @@ public final class PinpointSpanExporter implements 
SpanExporter {
         span.setRemoteAddr(UNKNOWN_REQ_IP);
 
         Optional.ofNullable(spanData.getAttributes())
-            .ifPresent(attributes -> {
-                
span.addAnnotation(Annotations.of(AnnotationKey.HTTP_PARAM_ENTITY.getCode(),
-                    JsonUtils.toJSONString(attributes)));
-                attributes.forEach((key, value) -> {
-                    if (REQ_IP.equals(key.getKey())) {
-                        span.setRemoteAddr(String.valueOf(value));
-                    }
+                .ifPresent(attributes -> {
+                    
span.addAnnotation(Annotations.of(AnnotationKey.HTTP_PARAM_ENTITY.getCode(),
+                            JsonUtils.toJSONString(attributes)));
+                    attributes.forEach((key, value) -> {
+                        if (REQ_IP.equals(key.getKey())) {
+                            span.setRemoteAddr(String.valueOf(value));
+                        }
+                    });
                 });
-            });
 
         if (CollectionUtils.isNotEmpty(spanData.getEvents())) {
             final AtomicInteger sequence = new AtomicInteger();
@@ -342,7 +385,7 @@ public final class PinpointSpanExporter implements 
SpanExporter {
         spanEvent.setServiceType(ServiceType.INTERNAL_METHOD.getCode());
         spanEvent.setEndPoint(eventData.getName());
         
spanEvent.addAnnotation(Annotations.of(AnnotationKey.HTTP_PARAM_ENTITY.getCode(),
-            JsonUtils.toJSONString(eventData.getAttributes())));
+                JsonUtils.toJSONString(eventData.getAttributes())));
         spanEvent.setElapsedTime((int) toMillis(eventData.getEpochNanos()));
         return spanEvent;
     }
@@ -354,16 +397,16 @@ public final class PinpointSpanExporter implements 
SpanExporter {
     private static long hex32StringToLong(final String hex32String) {
         final CharSequence charSequence = new 
StringBuilder().append(hex32String);
         return OtelEncodingUtils.isValidBase16String(charSequence)
-            ? OtelEncodingUtils.longFromBase16String(charSequence, 0)
-                & OtelEncodingUtils.longFromBase16String(charSequence, 16)
-            : hex32String.hashCode();
+                ? OtelEncodingUtils.longFromBase16String(charSequence, 0)
+                        & OtelEncodingUtils.longFromBase16String(charSequence, 
16)
+                : hex32String.hashCode();
     }
 
     private static long hex16StringToLong(final String hex16String) {
         final CharSequence charSequence = new 
StringBuilder().append(hex16String);
         return OtelEncodingUtils.isValidBase16String(charSequence)
-            ? OtelEncodingUtils.longFromBase16String(charSequence, 0)
-            : hex16String.hashCode();
+                ? OtelEncodingUtils.longFromBase16String(charSequence, 0)
+                : hex16String.hashCode();
     }
 
     private static String getEndpoint(final Resource resource) {
diff --git 
a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/test/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporterTest.java
 
b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/test/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporterTest.java
index 5475876ce..6ae974825 100644
--- 
a/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/test/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporterTest.java
+++ 
b/eventmesh-trace-plugin/eventmesh-trace-pinpoint/src/test/java/org/apache/eventmesh/trace/pinpoint/exporter/PinpointSpanExporterTest.java
@@ -21,16 +21,16 @@ import org.apache.eventmesh.common.utils.RandomStringUtils;
 import org.apache.eventmesh.trace.api.TracePluginFactory;
 import org.apache.eventmesh.trace.pinpoint.PinpointTraceService;
 import org.apache.eventmesh.trace.pinpoint.config.PinpointConfiguration;
-
+ 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
-
+ 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-
+ 
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.trace.SpanContext;
 import io.opentelemetry.api.trace.SpanKind;
@@ -43,10 +43,11 @@ import io.opentelemetry.sdk.trace.data.EventData;
 import io.opentelemetry.sdk.trace.data.LinkData;
 import io.opentelemetry.sdk.trace.data.SpanData;
 import io.opentelemetry.sdk.trace.data.StatusData;
-
+ 
 public class PinpointSpanExporterTest {
 
     private PinpointSpanExporter exporter;
+    public static final String AGENT_ID = "test";
 
     @BeforeEach
     public void setup() {
@@ -73,6 +74,11 @@ public class PinpointSpanExporterTest {
         spans.clear();
         spans.add(new SpanDateTest());
         Assertions.assertEquals(CompletableResultCode.ofSuccess(), 
exporter.export(spans));
+
+        spans.clear();
+        spans.add(new SpanDateTest());
+        spans.add(new ChildSpanDateTest());
+        Assertions.assertEquals(CompletableResultCode.ofSuccess(), 
exporter.export(spans));
     }
 
     @Test
@@ -87,7 +93,7 @@ public class PinpointSpanExporterTest {
 
     /**
      * for test
-     */
+    */
     private static class SpanDateTest implements SpanData {
 
         @Override
@@ -171,6 +177,89 @@ public class PinpointSpanExporterTest {
         }
     }
 
+    private static class ChildSpanDateTest implements SpanData {
+
+        @Override
+        public SpanContext getSpanContext() {
+            return new SpanContextTest();
+        }
+
+        @Override
+        public SpanContext getParentSpanContext() {
+            return new SpanContextTest();
+        }
+
+        @Override
+        public Resource getResource() {
+            return null;
+        }
+
+        @Override
+        public InstrumentationLibraryInfo getInstrumentationLibraryInfo() {
+            return null;
+        }
+
+        @Override
+        public String getName() {
+            return this.getClass().getName();
+        }
+
+        @Override
+        public SpanKind getKind() {
+            return SpanKind.INTERNAL;
+        }
+
+        @Override
+        public long getStartEpochNanos() {
+            return System.nanoTime();
+        }
+
+        @Override
+        public Attributes getAttributes() {
+            return null;
+        }
+
+        @Override
+        public List<EventData> getEvents() {
+            return null;
+        }
+
+        @Override
+        public List<LinkData> getLinks() {
+            return null;
+        }
+
+        @Override
+        public StatusData getStatus() {
+            return StatusData.ok();
+        }
+
+        @Override
+        public long getEndEpochNanos() {
+            return System.nanoTime();
+        }
+
+        @Override
+        public boolean hasEnded() {
+            return true;
+        }
+
+        @Override
+        public int getTotalRecordedEvents() {
+            return 0;
+        }
+
+        @Override
+        public int getTotalRecordedLinks() {
+            return 0;
+        }
+
+        @Override
+        public int getTotalAttributeCount() {
+            return 0;
+        }
+    }
+
     private static class SpanContextTest implements SpanContext {
 
         @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to