-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix the triple header context transfer issue #1467
base: master
Are you sure you want to change the base?
Conversation
WalkthroughThis pull request updates the project version from 5.13.2 to 5.13.3-SNAPSHOT across multiple Maven files and the Version class. It also refactors the server request header interception by introducing a new helper method to convert headers into context, and adds utilities to extract user identification in tracing components. These changes adjust version constants, streamline context management, and enhance header-based user ID extraction within the remoting module. Changes
Sequence Diagram(s)sequenceDiagram
participant C as Client
participant I as ServerReqHeaderInterceptor
participant H as convertHeaderToContext
participant T as TripleTracerAdapter
participant U as getUserId
C->>I: Send Request (with Metadata)
I->>H: Call convertHeaderToContext(call, headers, sofaRequest, serviceDef)
H->>U: Invoke getUserId(Metadata)
U-->>H: Return User ID
H-->>I: Return Constructed Context
I->>T: Call serverReceived(context)
T-->>I: Acknowledge Tracing
I->>C: Process Request
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Tip 🌐 Web search-backed reviews and chat
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java (1)
165-178
: Add method documentation.Consider adding Javadoc to document the purpose, parameters, and return value of this protected method.
+ /** + * Converts request headers into a Context with server span, request headers, and user ID. + * + * @param call the server call + * @param requestHeaders the request headers + * @param sofaRequest the SOFA request + * @param serverServiceDefinition the server service definition + * @return the Context with server span and tracing information + */ protected <ReqT, RespT> Context convertHeaderToContext(ServerCall<ReqT, RespT> call, Metadata requestHeaders, SofaRequest sofaRequest, ServerServiceDefinition serverServiceDefinition) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
all/pom.xml
(1 hunks)bom/pom.xml
(1 hunks)core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java
(1 hunks)pom.xml
(1 hunks)remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java
(2 hunks)remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TracingContextKey.java
(2 hunks)remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java
(4 hunks)
✅ Files skipped from review due to trivial changes (2)
- all/pom.xml
- core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java
🔇 Additional comments (5)
pom.xml (1)
80-80
: Version Revision Updated Correctly.
The<revision>
property has been updated to5.13.3-SNAPSHOT
, which is consistent with the intended versioning strategy for a snapshot release. Ensure that any downstream modules or scripts that depend on this property are updated accordingly.bom/pom.xml (1)
13-13
: Consistent Revision Property Change.
Updating<revision>
to5.13.3-SNAPSHOT
here aligns with the changes made in the parentpom.xml
. This helps maintain uniform versioning across the project artifacts.remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TracingContextKey.java (1)
34-35
: LGTM! Well-structured user ID tracking implementation.The implementation follows the established pattern for context key management and maintains consistency with existing code.
Also applies to: 76-78
remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/interceptor/ServerReqHeaderInterceptor.java (1)
66-66
: LGTM! Clean refactoring of context management.The extraction of header-to-context conversion logic improves code organization and maintainability.
remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/tracer/sofatracer/TripleTracerAdapter.java (1)
56-56
: LGTM! Good use of static import.The static import improves code readability.
public static String getUserId(Metadata requestHeaders) { | ||
String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); | ||
Map<String, String> unitInfoMap = JSON.parseObject(unitInfo, | ||
new TypeReference<Map<String, String>>() { | ||
}); | ||
if (unitInfoMap != null) { | ||
return unitInfoMap.get(USERID_KEY); | ||
} | ||
return null; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add null check and error handling.
The method should handle null input and JSON parsing errors gracefully.
public static String getUserId(Metadata requestHeaders) {
+ if (requestHeaders == null) {
+ return null;
+ }
String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO);
+ if (unitInfo == null) {
+ return null;
+ }
+ try {
Map<String, String> unitInfoMap = JSON.parseObject(unitInfo,
new TypeReference<Map<String, String>>() {
});
if (unitInfoMap != null) {
return unitInfoMap.get(USERID_KEY);
}
return null;
+ } catch (Exception e) {
+ LOGGER.warn("Failed to parse unit info: " + unitInfo, e);
+ return null;
+ }
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
public static String getUserId(Metadata requestHeaders) { | |
String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); | |
Map<String, String> unitInfoMap = JSON.parseObject(unitInfo, | |
new TypeReference<Map<String, String>>() { | |
}); | |
if (unitInfoMap != null) { | |
return unitInfoMap.get(USERID_KEY); | |
} | |
return null; | |
} | |
public static String getUserId(Metadata requestHeaders) { | |
if (requestHeaders == null) { | |
return null; | |
} | |
String unitInfo = requestHeaders.get(HEAD_KEY_UNIT_INFO); | |
if (unitInfo == null) { | |
return null; | |
} | |
try { | |
Map<String, String> unitInfoMap = JSON.parseObject(unitInfo, | |
new TypeReference<Map<String, String>>() { | |
}); | |
if (unitInfoMap != null) { | |
return unitInfoMap.get(USERID_KEY); | |
} | |
return null; | |
} catch (Exception e) { | |
LOGGER.warn("Failed to parse unit info: " + unitInfo, e); | |
return null; | |
} | |
} |
…rry_pick # Conflicts: # all/pom.xml # bom/pom.xml # core/api/src/main/java/com/alipay/sofa/rpc/common/Version.java # pom.xml
fix the triple header context transfer issue
Summary by CodeRabbit