Skip to content

Commit 0037462

Browse files
committed
[o11y] Add more debug logging for missing/delayed Onset event
1 parent 5569a25 commit 0037462

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/workerd/api/worker-rpc.c++

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,6 +1935,9 @@ kj::Promise<WorkerInterface::CustomEvent::Result> JsRpcSessionCustomEventImpl::r
19351935
IoContext& ioctx = incomingRequest->getContext();
19361936

19371937
incomingRequest->delivered();
1938+
KJ_IF_SOME(tracer, incomingRequest->getWorkerTracer()) {
1939+
tracer.setIsJsRpc();
1940+
}
19381941

19391942
KJ_DEFER({
19401943
// waitUntil() should allow extending execution on the server side even when the client

src/workerd/io/tracer.c++

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// https://opensource.org/licenses/Apache-2.0
44

55
#include <workerd/io/tracer.h>
6+
#include <workerd/util/sentry.h>
67
#include <workerd/util/thread-scopes.h>
78

89
#include <capnp/message.h> // for capnp::clone()
@@ -167,6 +168,10 @@ void WorkerTracer::addLog(const tracing::InvocationSpanContext& context,
167168
// available. If the given worker stage is only tailed by a streaming tail worker, adding the log
168169
// to the legacy trace object is not needed; this will be addressed in a future refactor.
169170
KJ_IF_SOME(writer, maybeTailStreamWriter) {
171+
// TODO(felix): Used for debug logging, remove after a few days.
172+
if (topLevelInvocationSpanContext == kj::none) {
173+
LOG_NOSENTRY(WARNING, "tried to send log before onset event", trace->entrypoint, isJsRpc);
174+
}
170175
// If message is too big on its own, truncate it.
171176
writer->report(context,
172177
{(tracing::Log(timestamp, logLevel,
@@ -220,7 +225,8 @@ void WorkerTracer::addSpan(CompleteSpan&& span) {
220225
// TODO(o11y): Provide correct nested spans
221226
// TODO(o11y): Propagate span context when context entropy is not available for RPC-based worker
222227
// invocations as indicated by isTrigger
223-
auto& topLevelContext = KJ_ASSERT_NONNULL(topLevelInvocationSpanContext, span);
228+
auto& topLevelContext =
229+
KJ_ASSERT_NONNULL(topLevelInvocationSpanContext, span, trace->entrypoint, isJsRpc);
224230
tracing::InvocationSpanContext context = [&]() {
225231
if (topLevelContext.isTrigger()) {
226232
return topLevelContext.clone();
@@ -453,4 +459,8 @@ SpanParent WorkerTracer::getUserRequestSpan() {
453459
return userRequestSpan.addRef();
454460
}
455461

462+
void BaseTracer::setIsJsRpc() {
463+
isJsRpc = true;
464+
}
465+
456466
} // namespace workerd

src/workerd/io/tracer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ class BaseTracer: public kj::Refcounted {
131131
virtual void recordTimestamp(kj::Date timestamp) = 0;
132132

133133
virtual SpanParent getUserRequestSpan() = 0;
134+
135+
// TODO(felix): Used for debug logging, remove after a few days.
136+
void setIsJsRpc();
137+
138+
// Indicates that we're reporting from a JsRpc customEvent.
139+
bool isJsRpc = false;
134140
};
135141

136142
// Records a worker stage's trace information into a Trace object. When all references to the

0 commit comments

Comments
 (0)