diff --git a/src/WebJobs.Script.Grpc/Channel/GrpcWorkerChannel.cs b/src/WebJobs.Script.Grpc/Channel/GrpcWorkerChannel.cs index 1765fdb5e5..eb551e13b3 100644 --- a/src/WebJobs.Script.Grpc/Channel/GrpcWorkerChannel.cs +++ b/src/WebJobs.Script.Grpc/Channel/GrpcWorkerChannel.cs @@ -1141,6 +1141,7 @@ internal async Task InvokeResponse(InvocationResponse invokeResponse) } LogSharedMemoryUsage(invokeResponse); + AddWorkerTraceAttributes(invokeResponse, context); if (invokeResponse.Result.IsInvocationSuccess()) { @@ -1738,6 +1739,29 @@ private void AddAdditionalTraceContext(InvocationRequest invocationRequest, Scri } } + private void AddWorkerTraceAttributes(InvocationResponse invocationResponse, ScriptInvocationContext context) + { + var attributes = invocationResponse.TraceContext?.Attributes; + if (attributes is null) + { + return; + } + + if (context.AsyncExecutionContext is null) + { + return; + } + + System.Threading.ExecutionContext.Run(context.AsyncExecutionContext, static state => + { + var attrs = (IDictionary)state; + foreach (var kvp in attrs) + { + Activity.Current?.AddTag(kvp.Key, kvp.Value); + } + }, attributes); + } + private sealed class ExecutingInvocation : IDisposable { public ExecutingInvocation(ScriptInvocationContext context, IInvocationMessageDispatcher dispatcher) diff --git a/src/WebJobs.Script.Grpc/azure-functions-language-worker-protobuf/src/proto/FunctionRpc.proto b/src/WebJobs.Script.Grpc/azure-functions-language-worker-protobuf/src/proto/FunctionRpc.proto index 110df5d24c..4f0f17cc9e 100644 --- a/src/WebJobs.Script.Grpc/azure-functions-language-worker-protobuf/src/proto/FunctionRpc.proto +++ b/src/WebJobs.Script.Grpc/azure-functions-language-worker-protobuf/src/proto/FunctionRpc.proto @@ -442,6 +442,8 @@ message InvocationResponse { // Status of the invocation (success/failure/canceled) StatusResult result = 3; + + RpcTraceContext trace_context = 5; } message WorkerWarmupRequest {