diff --git a/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/TraceId.java b/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/TraceId.java index 18eb7b143c12..76240dc74d0d 100644 --- a/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/TraceId.java +++ b/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/TraceId.java @@ -25,17 +25,14 @@ public interface TraceId { long getSpanId(); - String getTransactionId(); - - String getAgentId(); - - long getAgentStartTime(); - - long getTransactionSequence(); - long getParentSpanId(); short getFlags(); boolean isRoot(); + + + String getTransactionId(); + + String getTransactionUId(); } diff --git a/agent-module/plugins/jboss/src/test/java/com/navercorp/pinpoint/plugin/jboss/InvokeMethodInterceptorTest.java b/agent-module/plugins/jboss/src/test/java/com/navercorp/pinpoint/plugin/jboss/InvokeMethodInterceptorTest.java index a85e6f7a2733..ca08ed67a2fc 100644 --- a/agent-module/plugins/jboss/src/test/java/com/navercorp/pinpoint/plugin/jboss/InvokeMethodInterceptorTest.java +++ b/agent-module/plugins/jboss/src/test/java/com/navercorp/pinpoint/plugin/jboss/InvokeMethodInterceptorTest.java @@ -25,6 +25,7 @@ import com.navercorp.pinpoint.bootstrap.plugin.RequestRecorderFactory; import com.navercorp.pinpoint.bootstrap.plugin.proxy.DisableRequestRecorder; import com.navercorp.pinpoint.bootstrap.plugin.request.RequestAdaptor; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.plugin.jboss.interceptor.StandardHostValveInvokeInterceptor; import com.navercorp.pinpoint.profiler.context.DefaultMethodDescriptor; import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId; @@ -203,7 +204,7 @@ public void testValidHeaderExists() { when(request.getRequestURI()).thenReturn("/hellotest.nhn"); when(request.getRemoteAddr()).thenReturn("10.0.0.1"); - TraceId traceId = new DefaultTraceId("agentTest", System.currentTimeMillis(), 1); + TraceId traceId = new DefaultTraceId(TransactionId.of("agentTest", System.currentTimeMillis(), 1)); when(request.getHeader(Header.HTTP_TRACE_ID.toString())).thenReturn(traceId.getTransactionId()); when(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString())).thenReturn("PARENTSPANID"); when(request.getHeader(Header.HTTP_SPAN_ID.toString())).thenReturn("SPANID"); diff --git a/agent-module/profiler-test/src/test/java/com/navercorp/pinpoint/profiler/test/OrderedSpanRecorderTest.java b/agent-module/profiler-test/src/test/java/com/navercorp/pinpoint/profiler/test/OrderedSpanRecorderTest.java index dcf820b6c9fb..2f46797f35ac 100644 --- a/agent-module/profiler-test/src/test/java/com/navercorp/pinpoint/profiler/test/OrderedSpanRecorderTest.java +++ b/agent-module/profiler-test/src/test/java/com/navercorp/pinpoint/profiler/test/OrderedSpanRecorderTest.java @@ -17,6 +17,7 @@ package com.navercorp.pinpoint.profiler.test; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.profiler.context.DefaultAsyncSpanChunk; import com.navercorp.pinpoint.profiler.context.DefaultLocalAsyncId; import com.navercorp.pinpoint.profiler.context.DefaultSpanChunk; @@ -67,7 +68,7 @@ public void testOrderingWithSameEventTime() { final long startTime = 100; final long spanId = 1L; - TraceId traceId = new DefaultTraceId(agentId, startTime, 0, -1L, spanId, (short) 0); + TraceId traceId = new DefaultTraceId(TransactionId.of(agentId, startTime, 0), null, -1L, spanId, (short) 0); final TraceRoot traceRoot = TraceRoot.remote(traceId, agentId, startTime, 0); Span span = createSpan(traceRoot, startTime); @@ -111,13 +112,13 @@ public void testMultipleAsyncSpanEvents() { // given final long startTime1 = 100; final long spanId = 1L; - TraceId traceId1 = new DefaultTraceId(agentId, startTime1, 0, -1L, spanId, (short) 0); + TraceId traceId1 = new DefaultTraceId(TransactionId.of(agentId, startTime1, 0), null, -1L, spanId, (short) 0); final TraceRoot traceRoot1 = TraceRoot.remote(traceId1, agentId, startTime1, 0); final long startTime2 = startTime1 + 10L; final long spanId2 = 2L; - final TraceId traceId2 = new DefaultTraceId(agentId, startTime2, 0, -1L, spanId2, (short) 0); + final TraceId traceId2 = new DefaultTraceId(TransactionId.of(agentId, startTime2, 0), null, -1L, spanId2, (short) 0); final TraceRoot traceRoot2 = TraceRoot.remote(traceId2, agentId, startTime2, 0); @@ -164,12 +165,12 @@ public void testMultipleSpanOrdering() { // given final long startTime1 = 100; final long spanId1 = 1L; - final TraceId traceId1 = new DefaultTraceId(agentId, startTime1, 0, -1L, spanId1, (short) 0); + final TraceId traceId1 = new DefaultTraceId(TransactionId.of(agentId, startTime1, 0), null, -1L, spanId1, (short) 0); final TraceRoot traceRoot1 = TraceRoot.remote(traceId1, agentId, startTime1, 0); final long startTime2 = startTime1 + 10L; final long spanId2 = 2L; - final TraceId traceId2 = new DefaultTraceId(agentId, startTime2, 0, -1L, spanId2, (short) 0); + final TraceId traceId2 = new DefaultTraceId(TransactionId.of(agentId, startTime2, 0), null, -1L, spanId2, (short) 0); final TraceRoot traceRoot2 = TraceRoot.remote(traceId2, agentId, startTime2, 0); Span span1 = createSpan(traceRoot1, startTime1); diff --git a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/grpc/mapper/TraceIdMapStructUtils.java b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/grpc/mapper/TraceIdMapStructUtils.java index 52b80b0bd2e6..e1225ed0f408 100644 --- a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/grpc/mapper/TraceIdMapStructUtils.java +++ b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/grpc/mapper/TraceIdMapStructUtils.java @@ -16,7 +16,9 @@ package com.navercorp.pinpoint.profiler.context.grpc.mapper; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.grpc.trace.PTransactionId; +import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId; import org.mapstruct.Qualifier; import java.lang.annotation.ElementType; @@ -36,10 +38,15 @@ public class TraceIdMapStructUtils { @ToTransactionId public static PTransactionId newTransactionId(TraceId traceId) { - final PTransactionId.Builder builder = PTransactionId.newBuilder(); - builder.setAgentId(traceId.getAgentId()); - builder.setAgentStartTime(traceId.getAgentStartTime()); - builder.setSequence(traceId.getTransactionSequence()); - return builder.build(); + if (traceId instanceof DefaultTraceId) { + DefaultTraceId defaultTraceId = (DefaultTraceId) traceId; + TransactionId txId = defaultTraceId.getInternalTransactionId(); + final PTransactionId.Builder builder = PTransactionId.newBuilder(); + builder.setAgentId(txId.getAgentId()); + builder.setAgentStartTime(txId.getAgentStartTime()); + builder.setSequence(txId.getTransactionSequence()); + return builder.build(); + } + throw new IllegalArgumentException("Unexpected TraceId type: " + traceId); } } diff --git a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceId.java b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceId.java index 2f26f00ddcaa..b83ed4b803c6 100644 --- a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceId.java +++ b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceId.java @@ -18,7 +18,8 @@ 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.profiler.util.TransactionId; +import com.navercorp.pinpoint.common.profiler.util.TransactionUId; import java.util.Objects; @@ -27,49 +28,52 @@ */ public class DefaultTraceId implements TraceId { - private final String agentId; - private final long agentStartTime; - private final long transactionSequence; + private final TransactionId transactionId; + private final TransactionUId transactionUId; private final long parentSpanId; private final long spanId; private final short flags; - public DefaultTraceId(String agentId, long agentStartTime, long transactionId) { - this(agentId, agentStartTime, transactionId, SpanId.NULL, SpanId.newSpanId(), (short) 0); + + public DefaultTraceId(TransactionId transactionId) { + this(transactionId, null, SpanId.NULL, SpanId.newSpanId(), (short) 0); } - public TraceId getNextTraceId() { - return new DefaultTraceId(this.agentId, this.agentStartTime, transactionSequence, spanId, SpanId.nextSpanID(spanId, parentSpanId), flags); + public static TraceId v4(TransactionId transactionId, TransactionUId txId) { + return new DefaultTraceId(transactionId, txId, SpanId.NULL, SpanId.newSpanId(), (short) 0); } - public DefaultTraceId(String agentId, long agentStartTime, long transactionId, long parentSpanId, long spanId, short flags) { - this.agentId = Objects.requireNonNull(agentId, "agentId"); - this.agentStartTime = agentStartTime; - this.transactionSequence = transactionId; + public DefaultTraceId(TransactionId transactionId, + TransactionUId transactionUId, + long parentSpanId, long spanId, short flags) { + this.transactionId = Objects.requireNonNull(transactionId, "transactionId"); + + // optional + this.transactionUId = transactionUId; this.parentSpanId = parentSpanId; this.spanId = spanId; this.flags = flags; } - public String getTransactionId() { - return TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence); + public TraceId getNextTraceId() { + return new DefaultTraceId(transactionId, transactionUId, spanId, SpanId.nextSpanID(spanId, parentSpanId), flags); } - public String getAgentId() { - return agentId; + public String getTransactionId() { + return transactionId.toString(); } - public long getAgentStartTime() { - return agentStartTime; + public TransactionId getInternalTransactionId() { + return transactionId; } - public long getTransactionSequence() { - return transactionSequence; + @Override + public String getTransactionUId() { + return transactionUId.toString(); } - public long getParentSpanId() { return parentSpanId; } @@ -89,15 +93,12 @@ public boolean isRoot() { @Override public String toString() { - final StringBuilder sb = new StringBuilder("DefaultTraceId{"); - sb.append("agentId='").append(agentId).append('\''); - sb.append(", agentStartTime=").append(agentStartTime); - sb.append(", transactionSequence=").append(transactionSequence); - sb.append(", parentSpanId=").append(parentSpanId); - sb.append(", spanId=").append(spanId); - sb.append(", flags=").append(flags); - sb.append('}'); - return sb.toString(); + return "DefaultTraceId{" + + "transactionId=" + transactionId + + ", transactionUId=" + transactionUId + + ", parentSpanId=" + parentSpanId + + ", spanId=" + spanId + + ", flags=" + flags + + '}'; } - } diff --git a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceIdFactory.java b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceIdFactory.java index 0e2f6c32c489..dd629c94faa2 100644 --- a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceIdFactory.java +++ b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceIdFactory.java @@ -42,13 +42,23 @@ public DefaultTraceIdFactory(@AgentId String agentId, @AgentStartTime long agent @Override public TraceId newTraceId(long localTransactionId) { - return new DefaultTraceId(agentId, agentStartTime, localTransactionId); + TransactionId transactionId = TransactionId.of(agentId, agentStartTime, localTransactionId); + return newTraceId(transactionId); } public TraceId continueTraceId(String transactionId, long parentSpanId, long spanId, short flags) { Objects.requireNonNull(transactionId, "transactionId"); - final TransactionId parseId = TransactionIdUtils.parseTransactionId(transactionId); - return new DefaultTraceId(parseId.getAgentId(), parseId.getAgentStartTime(), parseId.getTransactionSequence(), parentSpanId, spanId, flags); + final TransactionId parseTxId = TransactionIdUtils.parseTransactionId(transactionId); + return continueTraceId(parseTxId, parentSpanId, spanId, flags); + } + + + public static TraceId newTraceId(TransactionId transactionId) { + return new DefaultTraceId(transactionId); + } + + public static TraceId continueTraceId(TransactionId transactionId, long parentSpanId, long spanId, short flags) { + return new DefaultTraceId(transactionId, null, parentSpanId, spanId, flags); } } diff --git a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/name/AgentIdResolver.java b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/name/AgentIdResolver.java index 31788a4a0c4f..6d4bfe4eadfb 100644 --- a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/name/AgentIdResolver.java +++ b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/name/AgentIdResolver.java @@ -16,7 +16,7 @@ package com.navercorp.pinpoint.profiler.name; -import com.navercorp.pinpoint.common.profiler.name.AgentUuidUtils; +import com.navercorp.pinpoint.common.profiler.name.Base64Utils; import com.navercorp.pinpoint.common.util.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -63,7 +63,7 @@ public AgentIds resolve() { private String newRandomAgentId() { UUID agentUUID = UUID.randomUUID(); - return AgentUuidUtils.encode(agentUUID); + return Base64Utils.encode(agentUUID); } private String getAgentId() { diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultTraceContextTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultTraceContextTest.java index fedd6521e468..74e16e0b546c 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultTraceContextTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultTraceContextTest.java @@ -60,7 +60,7 @@ public void parseTest() { String agent = "test"; long agentStartTime = System.currentTimeMillis(); long agentTransactionCount = 10; - TraceId traceId = new DefaultTraceId(agent, agentStartTime, agentTransactionCount); + TraceId traceId = new DefaultTraceId(TransactionId.of(agent, agentStartTime, agentTransactionCount)); String id = traceId.getTransactionId(); @@ -132,7 +132,7 @@ public void transactionCountTest() { final long expectedSampledContinuationCount = 5L; for (int i = 0; i < expectedSampledContinuationCount; i++) { - traceContext.continueTraceObject(new DefaultTraceId("agentId", 0L, i)); + traceContext.continueTraceObject(new DefaultTraceId(TransactionId.of("agentId", 0L, i))); traceContext.removeTraceObject(); } diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/TraceTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/TraceTest.java index 1cf5c63c8a8e..a55725e94b05 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/TraceTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/TraceTest.java @@ -19,11 +19,10 @@ import com.navercorp.pinpoint.bootstrap.context.SpanRecorder; import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.profiler.context.errorhandler.BypassErrorHandler; import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler; import com.navercorp.pinpoint.profiler.context.exception.ExceptionRecorder; -import com.navercorp.pinpoint.profiler.context.exception.disabled.DisabledExceptionContext; -import com.navercorp.pinpoint.profiler.context.exception.model.ExceptionContext; import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; import com.navercorp.pinpoint.profiler.context.recorder.DefaultSpanRecorder; @@ -72,7 +71,7 @@ public class TraceTest { @Test public void trace() { - final TraceId traceId = new DefaultTraceId(agentId, agentStartTime, 1); + final TraceId traceId = new DefaultTraceId(TransactionId.of(agentId, agentStartTime, 1)); final TraceRoot traceRoot = TraceRoot.remote(traceId, agentId, traceStartTime, 0); final CallStack callStack = newCallStack(); @@ -101,7 +100,7 @@ public void trace() { @Test public void popEventTest() { - final TraceId traceId = new DefaultTraceId(agentId, agentStartTime, 1); + final TraceId traceId = new DefaultTraceId(TransactionId.of(agentId, agentStartTime, 1)); final TraceRoot traceRoot = TraceRoot.remote(traceId, agentId, traceStartTime, 0); final CallStack callStack = newCallStack(); diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/active/ActiveTraceRepositoryTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/active/ActiveTraceRepositoryTest.java index 4b180b5edab6..29302c357d4a 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/active/ActiveTraceRepositoryTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/active/ActiveTraceRepositoryTest.java @@ -25,6 +25,7 @@ import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceContext; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.profiler.context.MockTraceContextFactory; import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId; import com.navercorp.pinpoint.profiler.context.id.DefaultTransactionCounter; @@ -109,7 +110,7 @@ public void verifyActiveTraceCollectionAndTransactionCount() throws Exception { List activeTraceInfos = this.activeTraceRepository.snapshot(); awaitLatch.countDown(); List executedTraces = futures.get(5, TimeUnit.SECONDS); - Map executedTraceMap = new HashMap(executedTraces.size()); + Map executedTraceMap = new HashMap<>(executedTraces.size()); for (TraceThreadTuple tuple : executedTraces) { executedTraceMap.put(tuple.id, tuple); } @@ -140,7 +141,7 @@ private ListenableFuture> executeTransactions( int totalNewCount = sampledNewCount + unsampledNewCount; final ListeningExecutorService executor = MoreExecutors.listeningDecorator(executorService); - final List> futures = new ArrayList>(); + final List> futures = new ArrayList<>(); for (int i = 0; i < totalNewCount; i++) { futures.add(executeNewTrace(executor, awaitLatch, executeLatch)); } @@ -175,7 +176,7 @@ private ListenableFuture executeSampledContinuedTrace(Listenin @Override public TraceThreadTuple call() throws Exception { try { - TraceId agentId1 = new DefaultTraceId("agentId", 0L, id); + TraceId agentId1 = new DefaultTraceId(TransactionId.of("agentId", 0L, id)); Trace agentId = traceContext.continueTraceObject(agentId1); return new TraceThreadTuple(agentId, Thread.currentThread().getId()); } finally { diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/compress/GrpcSpanProcessorV2Test.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/compress/GrpcSpanProcessorV2Test.java index 329c0badf59b..9ce13221f378 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/compress/GrpcSpanProcessorV2Test.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/compress/GrpcSpanProcessorV2Test.java @@ -17,6 +17,7 @@ package com.navercorp.pinpoint.profiler.context.compress; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.grpc.trace.PSpan; import com.navercorp.pinpoint.grpc.trace.PSpanChunk; import com.navercorp.pinpoint.grpc.trace.PSpanEvent; @@ -66,7 +67,7 @@ public void preProcess() { } private Span newSpan() { - TraceId traceId = new DefaultTraceId("agent", 1, 0); + TraceId traceId = new DefaultTraceId(TransactionId.of("agent", 1, 0)); TraceRoot traceRoot = TraceRoot.remote(traceId, "agent", 0, 3); return new Span(traceRoot); } diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcExceptionMetaDataConverterTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcExceptionMetaDataConverterTest.java index 3db6bc515499..e93a5cfdb11a 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcExceptionMetaDataConverterTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcExceptionMetaDataConverterTest.java @@ -1,5 +1,6 @@ package com.navercorp.pinpoint.profiler.context.grpc; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.grpc.trace.PException; import com.navercorp.pinpoint.grpc.trace.PExceptionMetaData; import com.navercorp.pinpoint.grpc.trace.PStackTraceElement; @@ -38,7 +39,7 @@ private static TraceRoot newTraceRoot() { TraceRoot traceRoot = mock(TraceRoot.class); final String agentId = "agent"; final long agentStartTime = System.currentTimeMillis(); - when(traceRoot.getTraceId()).thenReturn(new DefaultTraceId(agentId, agentStartTime, 0)); + when(traceRoot.getTraceId()).thenReturn(new DefaultTraceId(TransactionId.of(agentId, agentStartTime, 0))); when(traceRoot.getTraceStartTime()).thenReturn(agentStartTime + 100); when(traceRoot.getLocalTransactionId()).thenReturn((long) 1); diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcSpanMessageConverterTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcSpanMessageConverterTest.java index fecd43b4468d..c31cdfef050d 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcSpanMessageConverterTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/grpc/GrpcSpanMessageConverterTest.java @@ -1,9 +1,12 @@ package com.navercorp.pinpoint.profiler.context.grpc; +import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.common.util.IntStringValue; import com.navercorp.pinpoint.grpc.trace.PSpan; import com.navercorp.pinpoint.grpc.trace.PSpanChunk; import com.navercorp.pinpoint.grpc.trace.PSpanEvent; +import com.navercorp.pinpoint.grpc.trace.PTransactionId; import com.navercorp.pinpoint.io.SpanVersion; import com.navercorp.pinpoint.profiler.context.Annotation; import com.navercorp.pinpoint.profiler.context.AsyncId; @@ -147,7 +150,7 @@ static List> newAnnotations() { static TraceRoot newTraceRoot() { TraceRoot traceRoot = mock(TraceRoot.class); final long agentStartTime = System.currentTimeMillis(); - when(traceRoot.getTraceId()).thenReturn(new DefaultTraceId(agentId, agentStartTime, 0)); + when(traceRoot.getTraceId()).thenReturn(new DefaultTraceId(TransactionId.of(agentId, agentStartTime, 0))); when(traceRoot.getTraceStartTime()).thenReturn(agentStartTime + 100); when(traceRoot.getLocalTransactionId()).thenReturn((long) 1); @@ -171,9 +174,8 @@ void testMapSpan() { // skipped in compressed type // assertEquals(span.getTraceRoot().getTraceId().getAgentId(), pSpan.getTransactionId().getAgentId()); - assertEquals(span.getTraceRoot().getTraceId().getAgentStartTime(), pSpan.getTransactionId().getAgentStartTime()); - assertEquals(span.getTraceRoot().getTraceId().getAgentStartTime(), pSpan.getTransactionId().getAgentStartTime()); - assertEquals(span.getTraceRoot().getTraceId().getTransactionSequence(), pSpan.getTransactionId().getSequence()); + assertEqualsTraceId(span.getTraceRoot().getTraceId(), pSpan.getTransactionId()); + assertEquals(span.getTraceRoot().getTraceId().getSpanId(), pSpan.getSpanId()); assertEquals(span.getTraceRoot().getTraceId().getParentSpanId(), pSpan.getParentSpanId()); @@ -220,6 +222,17 @@ void testMapSpan() { } } + private void assertEqualsTraceId(TraceId traceId, PTransactionId transactionId) { + if (traceId instanceof DefaultTraceId) { + DefaultTraceId defaultTraceId = (DefaultTraceId) traceId; + TransactionId transactionIdObject = defaultTraceId.getInternalTransactionId(); + assertEquals(transactionIdObject.getAgentId(), transactionId.getAgentId()); + assertEquals(transactionIdObject.getAgentStartTime(), transactionId.getAgentStartTime()); + assertEquals(transactionIdObject.getTransactionSequence(), transactionId.getSequence()); + } else { + throw new IllegalArgumentException("Unsupported TraceId type"); + } + } @Test @@ -231,10 +244,7 @@ void testMapSpanChunk() { assertEquals(applicationServiceType, pSpanChunk.getApplicationServiceType()); // skipped in compressed type - // assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentId(), pSpanChunk.getTransactionId().getAgentId()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentStartTime(), pSpanChunk.getTransactionId().getAgentStartTime()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentStartTime(), pSpanChunk.getTransactionId().getAgentStartTime()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getTransactionSequence(), pSpanChunk.getTransactionId().getSequence()); + assertEqualsTraceId(spanChunk.getTraceRoot().getTraceId(), pSpanChunk.getTransactionId()); assertEquals(spanChunk.getTraceRoot().getTraceId().getSpanId(), pSpanChunk.getSpanId()); @@ -271,10 +281,8 @@ void testMapAsyncSpanChunk() { assertEquals(applicationServiceType, pSpanChunk.getApplicationServiceType()); // skipped in compressed type - // assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentId(), pSpanChunk.getTransactionId().getAgentId()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentStartTime(), pSpanChunk.getTransactionId().getAgentStartTime()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentStartTime(), pSpanChunk.getTransactionId().getAgentStartTime()); - assertEquals(spanChunk.getTraceRoot().getTraceId().getTransactionSequence(), pSpanChunk.getTransactionId().getSequence()); +// assertEquals(spanChunk.getTraceRoot().getTraceId().getAgentId(), pSpanChunk.getTransactionId().getAgentId()); + assertEqualsTraceId(spanChunk.getTraceRoot().getTraceId(), pSpanChunk.getTransactionId()); assertEquals(spanChunk.getTraceRoot().getTraceId().getSpanId(), pSpanChunk.getSpanId()); diff --git a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/storage/BufferedStorageTest.java b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/storage/BufferedStorageTest.java index fd2f72cdc185..ed3420a3e458 100644 --- a/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/storage/BufferedStorageTest.java +++ b/agent-module/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/storage/BufferedStorageTest.java @@ -17,6 +17,7 @@ package com.navercorp.pinpoint.profiler.context.storage; import com.navercorp.pinpoint.bootstrap.context.TraceId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.profiler.context.DefaultSpanChunkFactory; import com.navercorp.pinpoint.profiler.context.Span; import com.navercorp.pinpoint.profiler.context.SpanChunkFactory; @@ -30,7 +31,7 @@ public class BufferedStorageTest { - private final String agentId = "agentId"; + private static final String agentId = "agentId"; private final long agentStartTime = System.currentTimeMillis(); private final CountingDataSender countingDataSender = new CountingDataSender(); @@ -43,7 +44,7 @@ public void before() { } private TraceRoot newInternalTraceId() { - TraceId traceId = new DefaultTraceId(agentId, agentStartTime, 100); + TraceId traceId = new DefaultTraceId(TransactionId.of(agentId, agentStartTime, 100)); return TraceRoot.remote(traceId, agentId, agentStartTime, 100); } @@ -51,7 +52,6 @@ private TraceRoot newInternalTraceId() { public void testStore_Noflush() { BufferedStorage bufferedStorage = newBufferedStorage(10); - Span span = new Span(internalTraceId); SpanEvent spanEvent = new SpanEvent(); bufferedStorage.store(spanEvent); bufferedStorage.store(spanEvent); @@ -63,7 +63,6 @@ public void testStore_Noflush() { public void testStore_flush() { BufferedStorage bufferedStorage = newBufferedStorage(1); - Span span = new Span(internalTraceId); SpanEvent spanEvent = new SpanEvent(); bufferedStorage.store(spanEvent); bufferedStorage.store(spanEvent); @@ -113,7 +112,6 @@ public void testStore_spanLastFlush() { public void testStore_manual_flush() { BufferedStorage bufferedStorage = newBufferedStorage(10); - Span span = new Span(internalTraceId); SpanEvent spanEvent = new SpanEvent(); bufferedStorage.store(spanEvent); bufferedStorage.store(spanEvent); @@ -130,4 +128,4 @@ private BufferedStorage newBufferedStorage(int bufferSize) { SpanChunkFactory spanChunkFactory = new DefaultSpanChunkFactory(internalTraceId); return new BufferedStorage(spanChunkFactory, countingDataSender, bufferSize); } -} \ No newline at end of file +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcExceptionMetaDataHandler.java b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcExceptionMetaDataHandler.java index e2e809aee5f3..5229dfa6a93d 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcExceptionMetaDataHandler.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcExceptionMetaDataHandler.java @@ -143,9 +143,9 @@ private List handleStackTraceElements(List>> 32)); - result = 31 * result + (int) (transactionSequence ^ (transactionSequence >>> 32)); - return result; - } - @Override - public String toString() { - return TransactionIdUtils.formatString(this); + static TransactionId of(String agentId, long agentStartTime, long transactionSequence) { + return new TransactionIdV1(agentId, agentStartTime, transactionSequence); } } diff --git a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtils.java b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtils.java index 838f5f480963..74ddcfca551d 100644 --- a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtils.java +++ b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtils.java @@ -106,7 +106,7 @@ public static TransactionId parseTransactionId(final byte[] transactionId, Strin final long agentStartTime = buffer.readVLong(); final long transactionSequence = buffer.readVLong(); - return new TransactionId(agentId, agentStartTime,transactionSequence); + return TransactionId.of(agentId, agentStartTime,transactionSequence); } public static TransactionId parseTransactionId(final String transactionId) { @@ -137,7 +137,7 @@ public static TransactionId parseTransactionId(final String transactionId) { transactionSequenceIndex = transactionId.length(); } final long transactionSequence = parseLong(transactionId, agentStartTimeIndex + 1, transactionSequenceIndex); - return new TransactionId(agentId, agentStartTime, transactionSequence); + return TransactionId.of(agentId, agentStartTime, transactionSequence); } private static int nextIndex(String transactionId, int fromIndex) { diff --git a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdV1.java b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdV1.java new file mode 100644 index 000000000000..a0c93b3c2072 --- /dev/null +++ b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdV1.java @@ -0,0 +1,86 @@ +/* + * Copyright 2025 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.common.profiler.util; + +import com.navercorp.pinpoint.common.util.IdValidateUtils; + +import java.util.Objects; + +/** + * @author emeroad + */ +public class TransactionIdV1 implements TransactionId { + + private final String agentId; + private final long agentStartTime; + private final long transactionSequence; + + private String cache; + + TransactionIdV1(String agentId, long agentStartTime, long transactionSequence) { + if (!IdValidateUtils.validateId(agentId)) { + throw new IllegalArgumentException("invalid agentId"); + } + this.agentId = agentId; + this.agentStartTime = agentStartTime; + this.transactionSequence = transactionSequence; + } + + @Override + public String getAgentId() { + return agentId; + } + + @Override + public long getAgentStartTime() { + return agentStartTime; + } + + @Override + public long getTransactionSequence() { + return transactionSequence; + } + + @Override + public String getId() { + if (cache == null) { + cache = TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence); + } + return cache; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + + TransactionIdV1 that = (TransactionIdV1) o; + return agentStartTime == that.agentStartTime && transactionSequence == that.transactionSequence && Objects.equals(agentId, that.agentId); + } + + @Override + public int hashCode() { + int result = Objects.hashCode(agentId); + result = 31 * result + Long.hashCode(agentStartTime); + result = 31 * result + Long.hashCode(transactionSequence); + return result; + } + + @Override + public String toString() { + return getId(); + } +} diff --git a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUId.java b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUId.java new file mode 100644 index 000000000000..3e7ba1466324 --- /dev/null +++ b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUId.java @@ -0,0 +1,19 @@ +package com.navercorp.pinpoint.common.profiler.util; + +import java.util.UUID; + +/** + * pinpoint V4 spec + */ +public interface TransactionUId { + + UUID getUuid(); + + String getUuidString(); + + String getBase64String(); + + static TransactionUId of(UUID uuid) { + return new TransactionUIdV4(uuid); + } +} diff --git a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUIdV4.java b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUIdV4.java new file mode 100644 index 000000000000..9faf872d83a3 --- /dev/null +++ b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/util/TransactionUIdV4.java @@ -0,0 +1,40 @@ +package com.navercorp.pinpoint.common.profiler.util; + +import com.navercorp.pinpoint.common.profiler.name.Base64Utils; + +import java.util.Objects; +import java.util.UUID; + +public class TransactionUIdV4 implements TransactionUId { + // UUID v7 + private final UUID uuid; + private String uuidCache; + private String base64Cache; + + public TransactionUIdV4(UUID uuid) { + this.uuid = Objects.requireNonNull(uuid, "uuid"); + } + + public UUID getUuid() { + return uuid; + } + + public String getUuidString() { + if (uuidCache == null) { + uuidCache = uuid.toString(); + } + return uuidCache; + } + + public String getBase64String() { + if (base64Cache == null) { + base64Cache = Base64Utils.encode(uuid); + } + return base64Cache; + } + + @Override + public String toString() { + return getUuidString(); + } +} diff --git a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/AgentUuidUtilsTest.java b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/Base64UtilsTest.java similarity index 84% rename from commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/AgentUuidUtilsTest.java rename to commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/Base64UtilsTest.java index ee7f6b489196..1ae0649d22da 100644 --- a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/AgentUuidUtilsTest.java +++ b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/name/Base64UtilsTest.java @@ -27,14 +27,14 @@ /** * @author HyunGil Jeong */ -public class AgentUuidUtilsTest { +public class Base64UtilsTest { @RepeatedTest(10) public void testEncodingAndDecoding() { UUID expected = UUID.randomUUID(); - String encoded = AgentUuidUtils.encode(expected); + String encoded = Base64Utils.encode(expected); Assertions.assertTrue(IdValidateUtils.validateId(encoded, PinpointConstants.AGENT_ID_MAX_LEN)); - UUID actual = AgentUuidUtils.decode(encoded); + UUID actual = Base64Utils.decode(encoded); Assertions.assertEquals(expected, actual); } @@ -42,7 +42,7 @@ public void testEncodingAndDecoding() { public void decodeShouldFailWhenSrcIsNot22CharactersLong() { Assertions.assertThrows(IllegalArgumentException.class, () -> { String invalid = "012345678901234567890"; - AgentUuidUtils.decode(invalid); + Base64Utils.decode(invalid); }); } @@ -50,14 +50,14 @@ public void decodeShouldFailWhenSrcIsNot22CharactersLong() { public void decodeShouldFailWhenSrcContainsInvalidCharacter() { Assertions.assertThrows(IllegalArgumentException.class, () -> { String invalid = "012345678901.345678901"; - AgentUuidUtils.decode(invalid); + Base64Utils.decode(invalid); }); } @Test public void encodeStringShouldThrowNpeForNullArgument() { Assertions.assertThrows(NullPointerException.class, () -> { - AgentUuidUtils.encode((String) null); + Base64Utils.encode((String) null); }); } @@ -65,21 +65,21 @@ public void encodeStringShouldThrowNpeForNullArgument() { public void encodeStringShouldThrowIllegalArgumentExceptionForInvalidUuidString() { Assertions.assertThrows(IllegalArgumentException.class, () -> { String invalidUuidString = "abcdefg"; - AgentUuidUtils.encode(invalidUuidString); + Base64Utils.encode(invalidUuidString); }); } @Test public void encodeUuidShouldThrowNpeForNullArgument() { Assertions.assertThrows(NullPointerException.class, () -> { - AgentUuidUtils.encode((UUID) null); + Base64Utils.encode((UUID) null); }); } @Test public void decodeShouldThrowNpeForNullArgument() { Assertions.assertThrows(NullPointerException.class, () -> { - AgentUuidUtils.decode(null); + Base64Utils.decode(null); }); } } diff --git a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdComparatorTest.java b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdComparatorTest.java index 8b2aae1e1897..87740e2b59b2 100644 --- a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdComparatorTest.java +++ b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdComparatorTest.java @@ -33,37 +33,37 @@ public class TransactionIdComparatorTest { @Test public void sameAll() { - TransactionId id1 = new TransactionId("A1", 1, 1); - TransactionId id2 = new TransactionId("A1", 1, 1); + TransactionId id1 = TransactionId.of("A1", 1, 1); + TransactionId id2 = TransactionId.of("A1", 1, 1); Assertions.assertEquals(0, comparator.compare(id1, id2)); } @Test public void diffAgentStartTimeAsc() { - TransactionId id1 = new TransactionId("A1", 1, 1); - TransactionId id2 = new TransactionId("A1", 2, 1); + TransactionId id1 = TransactionId.of("A1", 1, 1); + TransactionId id2 = TransactionId.of("A1", 2, 1); Assertions.assertEquals(-1, comparator.compare(id1, id2)); } @Test public void diffAgentStartTimeDesc() { - TransactionId id1 = new TransactionId("A1", 2, 1); - TransactionId id2 = new TransactionId("A1", 1, 1); + TransactionId id1 = TransactionId.of("A1", 2, 1); + TransactionId id2 = TransactionId.of("A1", 1, 1); Assertions.assertEquals(1, comparator.compare(id1, id2)); } @Test public void diffSeqAsc() { - TransactionId id1 = new TransactionId("A1", 1, 1); - TransactionId id2 = new TransactionId("A1", 1, 2); + TransactionId id1 = TransactionId.of("A1", 1, 1); + TransactionId id2 = TransactionId.of("A1", 1, 2); Assertions.assertEquals(-1, comparator.compare(id1, id2)); } @Test public void diffSeqDesc() { - TransactionId id1 = new TransactionId("A1", 1, 2); - TransactionId id2 = new TransactionId("A1", 1, 1); + TransactionId id1 = TransactionId.of("A1", 1, 2); + TransactionId id2 = TransactionId.of("A1", 1, 1); Assertions.assertEquals(1, comparator.compare(id1, id2)); } @@ -77,7 +77,7 @@ public void order() { List list = new ArrayList<>(); for (int i = 0; i < 10; i++) { - list.add(new TransactionId("A", 1, numbers.get(i))); + list.add(TransactionId.of("A", 1, numbers.get(i))); } logger.debug("{}", list); diff --git a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtilsTest.java b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtilsTest.java index c3472e447cfe..7f498a3adc3e 100644 --- a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtilsTest.java +++ b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/util/TransactionIdUtilsTest.java @@ -35,17 +35,17 @@ public class TransactionIdUtilsTest { @Test public void testParseTransactionId() { TransactionId transactionId = TransactionIdUtils.parseTransactionId(AGENT_ID + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "2"); - Assertions.assertEquals(transactionId.getAgentId(), "test"); - Assertions.assertEquals(transactionId.getAgentStartTime(), 1L); - Assertions.assertEquals(transactionId.getTransactionSequence(), 2L); + Assertions.assertEquals("test", transactionId.getAgentId()); + Assertions.assertEquals(1L, transactionId.getAgentStartTime()); + Assertions.assertEquals(2L, transactionId.getTransactionSequence()); } @Test public void testParseTransactionId2() { TransactionId transactionId = TransactionIdUtils.parseTransactionId(AGENT_ID + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "2" + TransactionIdUtils.TRANSACTION_ID_DELIMITER); - Assertions.assertEquals(transactionId.getAgentId(), AGENT_ID); - Assertions.assertEquals(transactionId.getAgentStartTime(), 1L); - Assertions.assertEquals(transactionId.getTransactionSequence(), 2L); + Assertions.assertEquals(AGENT_ID, transactionId.getAgentId()); + Assertions.assertEquals(1L, transactionId.getAgentStartTime()); + Assertions.assertEquals(2L, transactionId.getTransactionSequence()); } @@ -56,9 +56,9 @@ public void testParseTransactionId_RpcHeaderDuplicateAdd_BugReproduce() { String id1 = AGENT_ID + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "2"; String id2 = AGENT_ID + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "3"; TransactionId transactionId = TransactionIdUtils.parseTransactionId(id1 + ", " + id2); - Assertions.assertEquals(transactionId.getAgentId(), "test"); - Assertions.assertEquals(transactionId.getAgentStartTime(), 1L); - Assertions.assertEquals(transactionId.getTransactionSequence(), 2L); + Assertions.assertEquals("test", transactionId.getAgentId()); + Assertions.assertEquals(1L, transactionId.getAgentStartTime()); + Assertions.assertEquals(2L, transactionId.getTransactionSequence()); }); } @@ -68,9 +68,9 @@ public void testParseTransactionIdByte1() { long time = System.currentTimeMillis(); byte[] bytes = TransactionIdUtils.formatBytes(AGENT_ID, time, 2); TransactionId transactionId = TransactionIdUtils.parseTransactionId(bytes, AGENT_ID); - Assertions.assertEquals(transactionId.getAgentId(), AGENT_ID); - Assertions.assertEquals(transactionId.getAgentStartTime(), time); - Assertions.assertEquals(transactionId.getTransactionSequence(), 2L); + Assertions.assertEquals(AGENT_ID, transactionId.getAgentId()); + Assertions.assertEquals(time, transactionId.getAgentStartTime()); + Assertions.assertEquals(2L, transactionId.getTransactionSequence()); } @Test @@ -78,9 +78,9 @@ public void testParseTransactionIdByte2() { long time = Long.MAX_VALUE; byte[] bytes = TransactionIdUtils.formatBytes(AGENT_ID, time, Long.MAX_VALUE); TransactionId transactionId = TransactionIdUtils.parseTransactionId(bytes, AGENT_ID); - Assertions.assertEquals(transactionId.getAgentId(), AGENT_ID); - Assertions.assertEquals(transactionId.getAgentStartTime(), Long.MAX_VALUE); - Assertions.assertEquals(transactionId.getTransactionSequence(), Long.MAX_VALUE); + Assertions.assertEquals(AGENT_ID, transactionId.getAgentId()); + Assertions.assertEquals(Long.MAX_VALUE, transactionId.getAgentStartTime()); + Assertions.assertEquals(Long.MAX_VALUE, transactionId.getTransactionSequence()); } @Test @@ -88,9 +88,9 @@ public void testParseTransactionIdByte3() { long time = Long.MIN_VALUE; byte[] bytes = TransactionIdUtils.formatBytes(AGENT_ID, time, Long.MIN_VALUE); TransactionId transactionId = TransactionIdUtils.parseTransactionId(bytes, AGENT_ID); - Assertions.assertEquals(transactionId.getAgentId(), AGENT_ID); - Assertions.assertEquals(transactionId.getAgentStartTime(), Long.MIN_VALUE); - Assertions.assertEquals(transactionId.getTransactionSequence(), Long.MIN_VALUE); + Assertions.assertEquals(AGENT_ID, transactionId.getAgentId()); + Assertions.assertEquals(Long.MIN_VALUE, transactionId.getAgentStartTime()); + Assertions.assertEquals(Long.MIN_VALUE, transactionId.getTransactionSequence()); } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java index dc68f0da3005..702d6f43836b 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java @@ -284,9 +284,9 @@ SpanChunkBo newSpanChunkBo(PSpanChunk pSpanChunk, BindAttribute attribute) { private TransactionId newTransactionId(PTransactionId pTransactionId, String spanAgentId) { final String transactionAgentId = pTransactionId.getAgentId(); if (StringUtils.hasLength(transactionAgentId)) { - return new TransactionId(transactionAgentId, pTransactionId.getAgentStartTime(), pTransactionId.getSequence()); + return TransactionId.of(transactionAgentId, pTransactionId.getAgentStartTime(), pTransactionId.getSequence()); } else { - return new TransactionId(spanAgentId, pTransactionId.getAgentStartTime(), pTransactionId.getSequence()); + return TransactionId.of(spanAgentId, pTransactionId.getAgentStartTime(), pTransactionId.getSequence()); } } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyDecoderV2.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyDecoderV2.java index 042c7e32a979..6df28b7e7047 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyDecoderV2.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyDecoderV2.java @@ -57,7 +57,7 @@ private TransactionId readTransactionId(byte[] rowKey, int offset) { long agentStartTime = BytesUtils.bytesToLong(rowKey, offset + AGENT_ID_MAX_LEN); long transactionSequence = BytesUtils.bytesToLong(rowKey, offset + BytesUtils.LONG_BYTE_LENGTH + AGENT_ID_MAX_LEN); - return new TransactionId(agentId, agentStartTime, transactionSequence); + return TransactionId.of(agentId, agentStartTime, transactionSequence); } // for test diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2Test.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2Test.java index 1cd0d9752a31..aab1ca82769e 100644 --- a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2Test.java +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2Test.java @@ -42,14 +42,14 @@ private RowKeyDistributorByHashPrefix newDistributorByHashPrefix() { return new RowKeyDistributorByHashPrefix(oneByteSimpleHash); } - private RowKeyEncoder traceRowKeyEncoder = new TraceRowKeyEncoderV2(distributorByHashPrefix); + private final RowKeyEncoder traceRowKeyEncoder = new TraceRowKeyEncoderV2(distributorByHashPrefix); - private RowKeyDecoder traceRowKeyDecoder = new TraceRowKeyDecoderV2(); + private final RowKeyDecoder traceRowKeyDecoder = new TraceRowKeyDecoderV2(); @Test public void encodeRowKey() { - TransactionId spanTransactionId = new TransactionId("traceAgentId", System.currentTimeMillis(), random.nextLong(0, 10000)); + TransactionId spanTransactionId = TransactionId.of("traceAgentId", System.currentTimeMillis(), random.nextLong(0, 10000)); byte[] rowKey = traceRowKeyEncoder.encodeRowKey(spanTransactionId); TransactionId transactionId = traceRowKeyDecoder.decodeRowKey(rowKey); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java index 5d1ed07b5bdb..3fc9188c458b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java @@ -81,7 +81,7 @@ private CallTreeNode getLastChild(CallTreeNode rootNode) { private SpanAlign createMultiChildSpanAlign(short serviceType, long startTime) { SpanBo spanBo = new SpanBo(); - spanBo.setTransactionId(new TransactionId("UNKNOWN", 0, 0)); + spanBo.setTransactionId(TransactionId.of("UNKNOWN", 0, 0)); spanBo.setServiceType(serviceType); spanBo.setStartTime(startTime); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java index a662e42c7bf1..318b57d19d06 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java @@ -39,11 +39,11 @@ public class MetaSpanCallTreeFactory { private static final String CORRUPTED_AGENT_ID = "CORRUPTED"; private static final long AGENT_START_TIME = 0; - private long timeoutMillisec = DEFAULT_TIMEOUT_MILLISEC; + private final long timeoutMillisec = DEFAULT_TIMEOUT_MILLISEC; public CallTree unknown(final long startTimeMillis) { final SpanBo rootSpan = new SpanBo(); - rootSpan.setTransactionId(new TransactionId(UNKNOWN_AGENT_ID, AGENT_START_TIME, 0)); + rootSpan.setTransactionId(TransactionId.of(UNKNOWN_AGENT_ID, AGENT_START_TIME, 0)); rootSpan.setAgentId(UNKNOWN_AGENT_ID); rootSpan.setApplicationId("UNKNOWN"); rootSpan.setStartTime(startTimeMillis); @@ -69,7 +69,7 @@ public SpanCallTree corrupted(final String title, final long parentSpanId, final rootSpan.setSpanId(spanId); rootSpan.setStartTime(startTimeMillis); - rootSpan.setTransactionId(new TransactionId(CORRUPTED_AGENT_ID, AGENT_START_TIME, 0)); + rootSpan.setTransactionId(TransactionId.of(CORRUPTED_AGENT_ID, AGENT_START_TIME, 0)); rootSpan.setAgentId(CORRUPTED_AGENT_ID); rootSpan.setApplicationId("CORRUPTED"); rootSpan.setServiceType(ServiceType.UNKNOWN.getCode()); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/TransactionIdMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/TransactionIdMapper.java index 3b590d07d56b..f9198557a3b7 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/mapper/TransactionIdMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/TransactionIdMapper.java @@ -16,24 +16,23 @@ package com.navercorp.pinpoint.web.mapper; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - import com.navercorp.pinpoint.common.buffer.Buffer; import com.navercorp.pinpoint.common.buffer.OffsetFixedBuffer; import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; import com.navercorp.pinpoint.common.hbase.RowMapper; - import com.navercorp.pinpoint.common.profiler.util.TransactionId; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.client.Result; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + /** * @author emeroad * @author netspider @@ -77,6 +76,6 @@ public static TransactionId parseVarTransactionId(byte[] bytes, int offset, int String agentId = buffer.readPrefixedString(); long agentStartTime = buffer.readSVLong(); long transactionSequence = buffer.readVLong(); - return new TransactionId(agentId, agentStartTime, transactionSequence); + return TransactionId.of(agentId, agentStartTime, transactionSequence); } } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java b/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java index 972069386d90..7c96b44a4bff 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java @@ -17,11 +17,11 @@ package com.navercorp.pinpoint.web; import com.navercorp.pinpoint.bootstrap.context.SpanId; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.server.bo.SpanEventBo; -import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; import com.navercorp.pinpoint.common.trace.ServiceType; -import com.navercorp.pinpoint.common.profiler.util.TransactionId; +import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; import com.navercorp.pinpoint.web.util.ServiceTypeRegistryMockFactory; import org.assertj.core.matcher.AssertionMatcher; @@ -79,7 +79,7 @@ private static class TransactionIdGenerator { TransactionId generate(String agentId) { int nextSequence = getNextSequence(agentId); - return new TransactionId(agentId, 0L, nextSequence); + return TransactionId.of(agentId, 0L, nextSequence); } private int getNextSequence(String agentId) { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoTest.java b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoTest.java index 8a9f7b4a93a1..4b812acd2939 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoTest.java @@ -149,7 +149,7 @@ public void scanTraceScatterDataTest() { private List> createScatterDotList() { List> ret = new ArrayList<>(); - TransactionId transactionId = new TransactionId("A", 1, 1); + TransactionId transactionId = TransactionId.of("A", 1, 1); addDot(ret, new Dot(transactionId, 2000L, 1000, 0, "a1")); addDot(ret, new Dot(transactionId, 3000L, 5000, 0, "a2")); addDot(ret, new Dot(transactionId, 2400L, 3000, 0, "a3")); @@ -166,7 +166,7 @@ private List> createTraceIndexList() { for (int i = 0; i < 5; i++) { ret.add(new ArrayList<>()); for (int j = 0; j < 2; j++) { - ret.get(i).add(j, new TransactionId("agentId" + i, 1000L * (i + 1), j)); + ret.get(i).add(j, TransactionId.of("agentId" + i, 1000L * (i + 1), j)); } } return ret; diff --git a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java index 4a78670a1454..9126efb9a8ee 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java @@ -15,7 +15,7 @@ public class SpanQueryBuilderTest { private static final int COLLECTOR_ACCEPTOR_TIME = 100; private static final int RESPONSE_TIME = 200; - private static final TransactionId txId = new TransactionId("agent", 1, 2); + private static final TransactionId txId = TransactionId.of("agent", 1, 2); @Test public void spanQuery_build() { @@ -26,7 +26,7 @@ public void spanQuery_build() { SpanQuery spanQuery = builder.build(traceInfo); SpanBo span = new SpanBo(); - span.setTransactionId(new TransactionId("agent", 1, 2)); + span.setTransactionId(TransactionId.of("agent", 1, 2)); span.setCollectorAcceptTime(100); span.setElapsed(200); span.setApplicationId("appName"); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java index c60d7ee338a2..31e989df7bcb 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java @@ -171,7 +171,7 @@ private static TransactionId createTransactionId() { long agentStartTime = ThreadLocalRandom.current().nextLong(originAgentStartTime, boundAgentStartTime); int transactionSequence = ThreadLocalRandom.current().nextInt(0, 10); - return new TransactionId(agentId, agentStartTime, transactionSequence); + return TransactionId.of(agentId, agentStartTime, transactionSequence); } private static long createCollectorAcceptTime() { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/scatter/ElpasedTimeDotPredicateTest.java b/web/src/test/java/com/navercorp/pinpoint/web/scatter/ElpasedTimeDotPredicateTest.java index e1bc301be451..745ccdcfc2d7 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/scatter/ElpasedTimeDotPredicateTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/scatter/ElpasedTimeDotPredicateTest.java @@ -20,7 +20,7 @@ public void newDragAreaDotPredicate() { } private Dot newDot(int elapsedTime) { - TransactionId transactionId = new TransactionId("agent", 0, 1); + TransactionId transactionId = TransactionId.of("agent", 0, 1); return new Dot(transactionId, 0, elapsedTime, 0, "agentId"); } } \ No newline at end of file diff --git a/web/src/test/java/com/navercorp/pinpoint/web/scatter/ScatterDataTest.java b/web/src/test/java/com/navercorp/pinpoint/web/scatter/ScatterDataTest.java index fa88a4a2be08..15e82b8189b2 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/scatter/ScatterDataTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/scatter/ScatterDataTest.java @@ -67,8 +67,8 @@ public void addDotTest2() { long currentTime = System.currentTimeMillis(); - TransactionId transactionId1 = new TransactionId(transactionAgentId, currentTime, 1); - TransactionId transactionId2 = new TransactionId(transactionAgentId, currentTime, 2); + TransactionId transactionId1 = TransactionId.of(transactionAgentId, currentTime, 1); + TransactionId transactionId2 = TransactionId.of(transactionAgentId, currentTime, 2); long acceptedTime = Math.max(Math.abs(ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)), from); int executionTime = (int) Math.abs(ThreadLocalRandom.current().nextLong(60 * 1000)); @@ -102,7 +102,7 @@ public void addDotTest3() { long currentTime = System.currentTimeMillis(); - TransactionId transactionId = new TransactionId(transactionAgentId, currentTime, 1); + TransactionId transactionId = TransactionId.of(transactionAgentId, currentTime, 1); long acceptedTime = Math.max(Math.abs(ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)), from); int executionTime = (int) Math.abs(ThreadLocalRandom.current().nextLong(60 * 1000)); @@ -124,7 +124,7 @@ private List createDotList(String agentId, String transactionAgentId, int c List transactionIdList = new ArrayList<>(createSize); for (int i = 0; i < createSize; i++) { - transactionIdList.add(new TransactionId(transactionAgentId, currentTime, i)); + transactionIdList.add(TransactionId.of(transactionAgentId, currentTime, i)); } long acceptedTime = Math.max(Math.abs(ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)), from); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java index 3ebafa62a4f5..26836fd14ed4 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java @@ -30,8 +30,8 @@ public class HeatMapServiceImplTest { private static final String APPLICATION_NAME = "applicationName"; private static final int LIMIT = 50; - private static final TransactionId TRANSACTION_ID_1 = new TransactionId("txAgent1", 10, 100); - private static final TransactionId TRANSACTION_ID_2 = new TransactionId("txAgent2", 20, 200); + private static final TransactionId TRANSACTION_ID_1 = TransactionId.of("txAgent1", 10, 100); + private static final TransactionId TRANSACTION_ID_2 = TransactionId.of("txAgent2", 20, 200); @Test public void legacyCompatibilityCheckPassTest() { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java b/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java index 929c71537030..be516cd3b1f3 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java @@ -93,7 +93,7 @@ public void getException_check_argument() { final RecordFactory factory = newRecordFactory(); SpanBo spanBo = new SpanBo(); - spanBo.setTransactionId(new TransactionId("test", 0, 0)); + spanBo.setTransactionId(TransactionId.of("test", 0, 0)); spanBo.setExceptionInfo(1, null); Align align = new SpanAlign(spanBo); @@ -221,7 +221,7 @@ public void testMakeRecord() { .setAgentName("") .setApplicationId("express-node-sample-name") .setAgentStartTime(1670293953108L) - .setTransactionId(new TransactionId("express-node-sample-id", 1670293953108L, 30)) + .setTransactionId(TransactionId.of("express-node-sample-id", 1670293953108L, 30)) .setParentSpanId(-1) .setParentApplicationId(null) .setParentApplicationServiceType((short) 0)