33import com .navercorp .pinpoint .common .buffer .AutomaticBuffer ;
44import com .navercorp .pinpoint .common .buffer .Buffer ;
55import com .navercorp .pinpoint .common .buffer .OffsetFixedBuffer ;
6+ import com .navercorp .pinpoint .common .server .trace .OtelServerTraceId ;
67import com .navercorp .pinpoint .common .server .trace .PinpointServerTraceId ;
78import com .navercorp .pinpoint .common .server .trace .ServerTraceId ;
89import com .navercorp .pinpoint .common .server .util .TransactionIdParser ;
1213
1314public class TraceIndexValue {
1415
16+ public static final byte TRACE_TYPE_PINPOINT = (byte ) 1 ;
17+ public static final byte TRACE_TYPE_OTEL = (byte ) 2 ;
18+
1519 public record Index (String agentId , int elapsed , int errorCode ) {
1620 public Index (String agentId , int elapsed , int errorCode ) {
1721 this .agentId = Objects .requireNonNull (agentId , "agentId" );
@@ -36,20 +40,20 @@ public static Index decode(byte[] bytes, int offset, int length) {
3640 }
3741 }
3842
39- public record Meta (ServerTraceId transactionId , long startTime , String remoteAddr , String endpoint , String agentName ) {
40- public Meta (ServerTraceId transactionId , long startTime , String remoteAddr , String endpoint , String agentName ) {
41- this .transactionId = Objects .requireNonNull (transactionId , "transactionId" );
43+ public record Meta (ServerTraceId serverTraceId , long startTime , String remoteAddr , String endpoint ,
44+ String agentName ) {
45+ public Meta (ServerTraceId serverTraceId , long startTime , String remoteAddr , String endpoint , String agentName ) {
46+ this .serverTraceId = Objects .requireNonNull (serverTraceId , "serverTraceId" );
4247 this .startTime = startTime ;
4348 this .remoteAddr = remoteAddr ;
4449 this .endpoint = endpoint ;
4550 this .agentName = agentName ;
4651 }
4752
48- public static byte [] encode (ServerTraceId transactionId , long startTime , String remoteAddr , String endpoint , String agentName ) {
53+ public static byte [] encode (ServerTraceId serverTraceId , long startTime , String remoteAddr , String endpoint , String agentName ) {
4954 final Buffer buffer = new AutomaticBuffer (128 );
5055 buffer .putLong (startTime );
51- buffer .putByte ((byte ) 1 ); // version
52- TransactionIdParser .writeTransactionIdV1 (buffer , transactionId );
56+ encodeServerTraceId (buffer , serverTraceId );
5357 buffer .putPrefixedString (remoteAddr );
5458 buffer .putPrefixedString (endpoint );
5559 buffer .putPrefixedString (agentName );
@@ -59,13 +63,36 @@ public static byte[] encode(ServerTraceId transactionId, long startTime, String
5963 public static Meta decode (byte [] bytes , int offset , int length ) {
6064 Buffer buffer = new OffsetFixedBuffer (bytes , offset , length );
6165 long startTime = buffer .readLong ();
62- buffer .readByte (); // version
63- ServerTraceId serverTraceId = PinpointServerTraceId .of (buffer );
66+ ServerTraceId serverTraceId = decodeServerTraceId (buffer );
6467 String remoteAddr = buffer .readPrefixedString ();
6568 String endpoint = buffer .readPrefixedString ();
6669 String agentName = buffer .readPrefixedString ();
6770 return new Meta (serverTraceId , startTime , remoteAddr , endpoint , agentName );
6871 }
72+
73+
74+ private static void encodeServerTraceId (Buffer buffer , ServerTraceId serverTraceId ) {
75+ if (serverTraceId instanceof PinpointServerTraceId pinpointServerTraceId ) {
76+ buffer .putByte (TRACE_TYPE_PINPOINT );
77+ TransactionIdParser .writeTransactionIdV1 (buffer , pinpointServerTraceId );
78+ } else if (serverTraceId instanceof OtelServerTraceId otelServerTraceId ) {
79+ buffer .putByte (TRACE_TYPE_OTEL );
80+ buffer .putBytes (otelServerTraceId .getId ());
81+ } else {
82+ throw new IllegalArgumentException ("Unknown ServerTraceId implementation: " + serverTraceId .getClass ());
83+ }
84+ }
85+
86+ private static ServerTraceId decodeServerTraceId (Buffer buffer ) {
87+ byte type = buffer .readByte ();
88+ if (type == TRACE_TYPE_PINPOINT ) {
89+ return PinpointServerTraceId .of (buffer );
90+ } else if (type == TRACE_TYPE_OTEL ) {
91+ return OtelServerTraceId .of (buffer );
92+ } else {
93+ throw new IllegalArgumentException ("Unknown ServerTraceId type: " + type );
94+ }
95+ }
6996 }
7097
7198 public record MetaRpc (String rpc ) {
0 commit comments