RATIS-2393 Add Span Context to RaftRpcRequestProto#1341
RATIS-2393 Add Span Context to RaftRpcRequestProto#1341szetszwo merged 13 commits intoapache:masterfrom
Conversation
|
@szetszwo Hi Nicholas, should I directly open PRs to master branch ? in addition , the test failure doesn't seem to be related to my changes |
szetszwo
left a comment
There was a problem hiding this comment.
@taklwu , thanks for working on this! Please see the comment inlined.
BTW, this change is very small. Let's combine the usage of the new SpanContextProto such as RATIS-2395 or some part of it. Otherwise, it is hard to determine whether this change is good or not.
|
@taklwu Please add license for the failed ci! |
|
@OneSizeFitsQuorum I have updated the license and good catch. |
szetszwo
left a comment
There was a problem hiding this comment.
@taklwu , thanks for the update!
Please see the comments inlined and also https://issues.apache.org/jira/secure/attachment/13081062/1341_review.patch
ratis-common/src/main/java/org/apache/ratis/protocol/RaftClientRequest.java
Outdated
Show resolved
Hide resolved
ratis-common/src/main/java/org/apache/ratis/trace/RatisAttributes.java
Outdated
Show resolved
Hide resolved
ratis-common/src/main/java/org/apache/ratis/trace/TraceUtils.java
Outdated
Show resolved
Hide resolved
ratis-common/src/main/java/org/apache/ratis/trace/TraceUtils.java
Outdated
Show resolved
Hide resolved
ratis-common/src/main/java/org/apache/ratis/trace/TraceUtils.java
Outdated
Show resolved
Hide resolved
ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
Outdated
Show resolved
Hide resolved
- First commit of using OpenTelemetry - use junit5 and default opentelemetry extension in test case. - Add test to mock client level span and inject when request is being sent - only include the server extract
1. use traceAsyncMethod 2. add ClientInvocationId 3. and other places
This comment was marked as off-topic.
This comment was marked as off-topic.
ratis-common/src/main/java/org/apache/ratis/util/FutureUtils.java
Outdated
Show resolved
Hide resolved
ratis-common/src/main/java/org/apache/ratis/trace/ClientRequestSpanBuilder.java
Outdated
Show resolved
Hide resolved
| */ | ||
| package org.apache.ratis.server.impl; | ||
|
|
||
| import io.opentelemetry.api.trace.Span; |
There was a problem hiding this comment.
Sorry that I may not be clear in my last comment -- we should import io.opentelemetry only in ratis-common. Then, it will be easier to change the tracing dependency to be pluggable in the future.
We often see that a library may introduce incompatible changes (such as Dropwizard Metrics v3 vs v4). Since Ratis itself is also a library, we don't want to force our consumer applications to use a particular dependency (e.g. Ratis supports both Dropwizard Metrics v3 and v4 by making it pluggable). Another reason is that a dependency may have CVEs (e.g. the infamous Log4Shell case). Applications may choose to disable it.
BTW, we should add a conf to enable/disable tracing.
- use lambda instead of implements supplier - move most the code into ratis-common
ratis-server/src/test/java/org/apache/ratis/server/impl/RaftServerImplTracingTests.java
Show resolved
Hide resolved
ratis-server/pom.xml
Outdated
| <groupId>io.opentelemetry</groupId> | ||
| <artifactId>opentelemetry-sdk</artifactId> | ||
| <scope>test</scope> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>io.opentelemetry</groupId> | ||
| <artifactId>opentelemetry-sdk-testing</artifactId> | ||
| <scope>test</scope> |
There was a problem hiding this comment.
unless I test differently, otherwise, I see these lines are required...
There was a problem hiding this comment.
@taklwu , could you take a look https://issues.apache.org/jira/secure/attachment/13081062/1341_review.patch ? It does not add any dependencies to ratis-server.
There was a problem hiding this comment.
ah, I missed that, I moved them all into ratis-common as transitive dependencies.
|
@taklwu , thanks for the update! I will review it in details tomorrow. |
| public static final AttributeKey<String> ATTR_CLIENT_INVOCATION_ID = | ||
| AttributeKey.stringKey("raft.client.invocation.id"); |
There was a problem hiding this comment.
It should be "raft.client.id".
| import static org.apache.ratis.conf.ConfUtils.getBoolean; | ||
| import static org.apache.ratis.conf.ConfUtils.setBoolean; | ||
|
|
||
| public interface TraceConfigKeys { |
There was a problem hiding this comment.
Let's have this class temporarily. We should combine it with RaftServerConfigKyes.
There was a problem hiding this comment.
at the beginning it was part of the RaftServerConfigKeys in ratis-server, but I was thinking to have this configuration on the client as well, such I moved it to the ratis-common.
anyhow, as you said let's keep it temporarily.
| public static final AttributeKey<String> ATTR_CLIENT_INVOCATION_ID = | ||
| AttributeKey.stringKey("raft.client.invocation.id"); | ||
| public static final AttributeKey<String> ATTR_MEMBER_ID = AttributeKey.stringKey("raft.member.id"); | ||
| public static final AttributeKey<String> ATTR_CALL_ID = AttributeKey.stringKey("raft.call.id"); |
There was a problem hiding this comment.
Since the fields are already in RatisAttributes, let remove the ATTR_ prefix, i.e.
- RatisAttributes.MEMBER_ID
- RatisAttributes.CLIENT_ID
- RatisAttributes.CALL_ID
szetszwo
left a comment
There was a problem hiding this comment.
+1 the change looks good.
What changes were proposed in this pull request?
We're adding a new map to RaftRpcRequestProto that will be used for upcoming Opentelemetry integration.
see the usage of PoC https://github.com/taklwu/ratis/blob/opentelemetry0129/ratis-common/src/main/java/org/apache/ratis/trace/TraceUtils.java#L235-L251
Another official reference for how this map is going to be inject and extract from the http / rpc header
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/RATIS-2393
How was this patch tested?
running mvn clean package -DskipTests