-
Notifications
You must be signed in to change notification settings - Fork 894
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
Sync and Async children (FOLLOWS_FROM) #65
Comments
@tedsuo How would you label server span with a parent propagated from an http request? Perhaps a better name would be Perhaps that wouldn't give you the info required for critical path analysis you need... part of the problem is only the caller really knows if they're blocking, where the link/relationship is established by the callee. {I guess some of this was already discussed in #14} |
I don't think An example of this in JavaScript is promises. The My take on the questions above:
I think both ChildOf/FollowsFrom and sync/async potentially have value for different reasons.
What is the case where this would not be known? I think this is something that is always known in advance. |
@rochdev Hey, sorry for the late answer. Agreed with what you wrote - but what names you think we should use? @tylerbenson already mentioned |
I think How was this relationship called in OpenCensus? |
@rochdev I am worried that the understanding that of childOf and followsFrom is different for you than for others. I think what you explained is different than what others explained to me, I am very confused now about what is the correct meaning of childOf vs followsFrom. |
Moving to the API revision milestone on specification. We need more feedback collected |
In Node this concept is very important and is core to how context propagation works in the runtime itself. For this purpose specifically, we call them Let me give an example specific to Node at the language level: const promise = new Promise((resolve, reject) => {
resolve() // execution ID here it 2
})
// execution ID here is 1
promise.then(() => {
// here, execution ID is 1 and trigger ID is 2
}) The reasoning for the above is that For a case like this, we could then say that the callback is running as a It's possible I got this completely wrong and that In general, I think the different wordings proposed in this thread make sense, but they don't necessarily map 1:1 with each other. |
The problem here is slightly bigger than what to call these. Kudos @rochdev for thinking OpenTracing got it right, but it didn't, not quite (cf. this blog post). The most fundamental question in analyzing the graph of events is the Lamport's
That's it! Neither The difference between Another odd thing about Of course, there's always the argument that OpenTelemetry 1.0 is not supposed to improve upon OpenTracing/OpenCensus (convergence is more important than improvements), in which case it doesn't matter much what we call these, because the model would need to be revisited anyway. |
Thanks for the clarification @yurishkuro! It sounds like this is a larger discussion then. Would it make more sense to wait then instead of implementing this knowing that it's not necessarily the correct way to handle this relationship? Of course, this depends on whether users are currently depending on the feature. If that's the case, then I think we should get more information about exactly how it's used which would give us a better understanding of how the currently used feature should be called. |
I think a flag for sync / async (blocking / non-blocking) spans would be very useful for trace analysis. In this way you could much easier and quicker identify hot spots along the critical path and, thus, the "root causes" for long trace timings. I agree that in many cases only the caller knows whether a child span is blocking or not, but, in such cases this information could be propagated with the context accordingly, so this information could be added at the child span's side. |
To fully capture all (or at least more) of the possible relationships between Spans, in addition to the To show some difficult cases (pseudo C#) : // Start async (the child has no idea whether we used a blocking API or an async
// one -- nor should it have to know).
var request = myClient.GetAsync("http://example.com/myAPI");
var myCalcResult = /* some expensive calculation */; // Could be its own subspan
// Block for child request, but not indefinitely
var maybeResult = await request.withTimeout(500);
if (maybeResult.HasValue) {
renderCompletion(myCalcResult, maybeResult.Value); // Consume result
} else {
renderPleaseWait();
// Another operation/span will consume the result (the handle-response part of the
// client could become a child of the server Span, or it could be an independent
// root span with a CONSUMES relation to the server span).
delayedRequests.AddPending(new PendingInfo(myCalcResult, request));
}
|
Moving to v0.3 |
Closing this as being accomplished through Links in the current spec. |
Links don't address the issue in this ticket. I suggest to close #86 instead, because there's more discussions here. |
After giving this a try via #906, we decided to postpone it in order to develop it properly. Re-labeling it so we can add this feature after GA. |
any update on this? |
+1 |
Solved via span links. |
…pen-telemetry#65) OTLP proposal originally used a separate ResultCode enumeration for server to tell the client whether the failed request can be retried or no. After discussion here open-telemetry/opentelemetry-proto#47 (comment) it became clear that the goal can be achieved using gRPC status codes without a need for custom enumeration. This change removes the ResultCode and explains how to use gRPC status codes. Co-authored-by: Yuri Shkuro <[email protected]>
…pen-telemetry#65) OTLP proposal originally used a separate ResultCode enumeration for server to tell the client whether the failed request can be retried or no. After discussion here open-telemetry/opentelemetry-proto#47 (comment) it became clear that the goal can be achieved using gRPC status codes without a need for custom enumeration. This change removes the ResultCode and explains how to use gRPC status codes. Co-authored-by: Yuri Shkuro <[email protected]>
In OpenTracing, we have
CHILD_OF
andFOLLOWS_FROM
. In the new project, we are considering whether to include this concept as a flag on theSpanBuilder
option when setting the span parent. The new naming is proposed to besync
andasync
children, to make the relationship more clear.Reference PR: open-telemetry/opentelemetry-java#130
Questions:
unknown
flag as well?The text was updated successfully, but these errors were encountered: