From c30417172fcc04452e88516dab24a4cd9cced961 Mon Sep 17 00:00:00 2001 From: "liujianjun.ljj" Date: Fri, 17 Jan 2025 15:37:58 +0800 Subject: [PATCH 1/3] fix triple header and usedId problem --- all/pom.xml | 2 +- bom/pom.xml | 2 +- .../java/com/alipay/sofa/rpc/common/Version.java | 6 +++--- pom.xml | 2 +- .../interceptor/ServerReqHeaderInterceptor.java | 5 ++++- .../rpc/tracer/sofatracer/TracingContextKey.java | 6 ++++++ .../tracer/sofatracer/TripleTracerAdapter.java | 16 +++++++++++++++- 7 files changed, 31 insertions(+), 8 deletions(-) diff --git a/all/pom.xml b/all/pom.xml index 0034d3f69..ced28a0ab 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -6,7 +6,7 @@ com.alipay.sofa sofa-rpc-all - 5.13.2 + 5.13.3-SNAPSHOT ${project.groupId}:${project.artifactId} diff --git a/bom/pom.xml b/bom/pom.xml index 7a79b1b1b..175de5983 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -10,7 +10,7 @@ pom - 5.13.2 + 5.13.3-SNAPSHOT 3.29.2-GA 1.9.8 4.1.77.Final diff --git a/core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java b/core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java index ca8533b36..3c6af946f 100644 --- a/core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java +++ b/core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java @@ -27,16 +27,16 @@ public final class Version { /** * 当前RPC版本,例如:5.6.7 */ - public static final String VERSION = "5.13.2"; + public static final String VERSION = "5.13.3"; /** * 当前RPC版本,例如: 5.6.7 对应 50607 */ - public static final int RPC_VERSION = 51302; + public static final int RPC_VERSION = 51303; /** * 当前Build版本,每次发布修改 */ - public static final String BUILD_VERSION = "5.13.2_20241016193119"; + public static final String BUILD_VERSION = "5.13.3_20250117153647"; } diff --git a/pom.xml b/pom.xml index d9329de5f..4273da9ee 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ - 5.13.2 + 5.13.3-SNAPSHOT 1.33 true true diff --git a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java index b531ae5de..efcc0d3b0 100644 --- a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java +++ b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java @@ -62,6 +62,7 @@ public ServerCall.Listener interceptCall(final ServerCall ServerCall.Listener interceptCall(final ServerCall keySofaRequest = Context.key(KEY_SOFA_REQUEST_NAME); private static final Context.Key keyMetadata = Context.key("io.opentracing.metadata"); + public static final String KEY_TRIPLE_USER_ID = "io.opentracing.tri-user-id"; + private static final Context.Key keyUserId = Context.key(KEY_TRIPLE_USER_ID); /** * Retrieves the active span. @@ -70,4 +72,8 @@ public static Context.Key getKeySofaRequest() { public static Context.Key getKeyMetadata() { return keyMetadata; } + + public static Context.Key getKeyUserId() { + return keyUserId; + } } diff --git a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java index e17af6406..b6857ce37 100644 --- a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java +++ b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java @@ -16,6 +16,8 @@ */ package com.alipay.sofa.rpc.tracer.sofatracer; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.alipay.common.tracer.core.appender.self.SelfLog; import com.alipay.common.tracer.core.context.span.SofaTracerSpanContext; import com.alipay.common.tracer.core.context.trace.SofaTraceContext; @@ -51,6 +53,7 @@ import java.util.Set; import static com.alipay.sofa.rpc.common.RemotingConstants.HEAD_APP_NAME; +import static com.alipay.sofa.rpc.server.triple.TripleHeadKeys.HEAD_KEY_UNIT_INFO; /** * 客户端:startRpc ——> filter --> beforeSend --> 存入tracer信息 --> clientReceived @@ -114,7 +117,7 @@ public static void beforeSend(SofaRequest sofaRequest, ConsumerConfig consumerCo if (StringUtils.isNotBlank(route)) { Map map = new HashMap<>(); map.put(USERID_KEY, route); - header.put(TripleHeadKeys.HEAD_KEY_UNIT_INFO.name(), JSONUtils.toJSONString(map)); + header.put(HEAD_KEY_UNIT_INFO.name(), JSONUtils.toJSONString(map)); } if (StringUtils.isNotEmpty(consumerConfig.getUniqueId())) { @@ -300,4 +303,15 @@ public static void serverSend(SofaRequest request, final Metadata requestHeaders EventBus.post(new ServerSendEvent(request, response, throwable)); } } + + public static String getUserId(Metadata requestHeaders) { + String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); + Map unitInfoMap = JSON.parseObject(unitInfo, + new TypeReference>() { + }); + if (unitInfoMap != null) { + return unitInfoMap.get(USERID_KEY); + } + return null; + } } \ No newline at end of file From 66d35b1d8ead91999ce8fa705d3d9269beb873c8 Mon Sep 17 00:00:00 2001 From: "liujianjun.ljj" Date: Wed, 22 Jan 2025 16:22:32 +0800 Subject: [PATCH 2/3] Increase the extensibility of the header conversion context. --- .../ServerReqHeaderInterceptor.java | 26 ++++++++++++------- .../sofatracer/TripleTracerAdapter.java | 4 +-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java index efcc0d3b0..20c57990c 100644 --- a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java +++ b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java @@ -62,17 +62,8 @@ public ServerCall.Listener interceptCall(final ServerCall Context convertHeaderToContext(ServerCall call, + Metadata requestHeaders, SofaRequest sofaRequest, + ServerServiceDefinition serverServiceDefinition) { + TripleTracerAdapter.serverReceived(sofaRequest, serverServiceDefinition, call, requestHeaders); + String userId = TripleTracerAdapter.getUserId(requestHeaders); + SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext(); + SofaTracerSpan serverSpan = sofaTraceContext.getCurrentSpan(); + return Context.current() + .withValue(TracingContextKey.getKey(), serverSpan) + .withValue(TracingContextKey.getSpanContextKey(), serverSpan.context()) + .withValue(TracingContextKey.getKeySofaRequest(), sofaRequest) + .withValue(TracingContextKey.getKeyMetadata(), requestHeaders) + .withValue(TracingContextKey.getKeyUserId(), userId); + } } \ No newline at end of file diff --git a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java index b6857ce37..47498e670 100644 --- a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java +++ b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java @@ -307,8 +307,8 @@ public static void serverSend(SofaRequest request, final Metadata requestHeaders public static String getUserId(Metadata requestHeaders) { String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); Map unitInfoMap = JSON.parseObject(unitInfo, - new TypeReference>() { - }); + new TypeReference>() { + }); if (unitInfoMap != null) { return unitInfoMap.get(USERID_KEY); } From c78677a3969c969e00e263aa4e768b9ac81eaa38 Mon Sep 17 00:00:00 2001 From: Evenljj Date: Thu, 13 Feb 2025 14:43:46 +0800 Subject: [PATCH 3/3] fix the triple header context transfer issue --- .../tracer/sofatracer/TripleTracerAdapter.java | 17 ++++++++++++----- .../sofatracer/TripleTracerAdapterTest.java | 10 ++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java index 47498e670..50800b934 100644 --- a/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java +++ b/remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java @@ -306,11 +306,18 @@ public static void serverSend(SofaRequest request, final Metadata requestHeaders public static String getUserId(Metadata requestHeaders) { String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); - Map unitInfoMap = JSON.parseObject(unitInfo, - new TypeReference>() { - }); - if (unitInfoMap != null) { - return unitInfoMap.get(USERID_KEY); + if (unitInfo == null) { + return null; + } + try { + Map unitInfoMap = JSON.parseObject(unitInfo, + new TypeReference>() { + }); + if (unitInfoMap != null) { + return unitInfoMap.get(USERID_KEY); + } + } catch (Exception e) { + LOGGER.warn("Failed to parse tri-unit-info: " + unitInfo, e); } return null; } diff --git a/remoting/remoting-triple/src/test/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapterTest.java b/remoting/remoting-triple/src/test/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapterTest.java index 1ea78e9b3..47043d2cc 100644 --- a/remoting/remoting-triple/src/test/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapterTest.java +++ b/remoting/remoting-triple/src/test/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapterTest.java @@ -53,4 +53,14 @@ public void testBeforeSend() { Assert.assertEquals("value2", metadata.get(TripleHeadKeys.getKey("triple.header.object.key2"))); } + @Test + public void testGetUserId() { + Metadata metadata = new Metadata(); + Assert.assertNull(TripleTracerAdapter.getUserId(metadata)); + metadata.put(TripleHeadKeys.HEAD_KEY_UNIT_INFO, "test"); + Assert.assertNull(TripleTracerAdapter.getUserId(metadata)); + metadata.put(TripleHeadKeys.HEAD_KEY_UNIT_INFO, "{\"userid\":\"99\"}"); + Assert.assertEquals("99", TripleTracerAdapter.getUserId(metadata)); + } + } \ No newline at end of file