Skip to content

Commit a1ea247

Browse files
rrectorsergeybykov
authored andcommitted
Fix call pattern that throws. (#6626)
* Fix call pattern that throws. Change from related activity ids to actually setting the activity id for the current event being logged. * Avoid allocations in EventSourceEvents Co-authored-by: ReubenBond <[email protected]> (cherry picked from commit 29400a2)
1 parent eed1501 commit a1ea247

File tree

1 file changed

+115
-57
lines changed

1 file changed

+115
-57
lines changed

src/Orleans.Core/Diagnostics/EventSourceEvents.cs

+115-57
Original file line numberDiff line numberDiff line change
@@ -13,45 +13,45 @@ public void OnTimeout(Message message)
1313
{
1414
if (this.IsEnabled())
1515
{
16-
OnTimeout(message.TraceContext?.ActivityId ?? Guid.Empty);
16+
using (message.SetThreadActivityId())
17+
{
18+
this.OnTimeout();
19+
}
1720
}
1821
}
1922

20-
[Event(1)]
21-
public void OnTimeout(Guid activityId)
22-
{
23-
this.WriteEventWithRelatedActivityId(1, activityId);
24-
}
23+
[Event(1, Level = EventLevel.Warning)]
24+
private void OnTimeout() => this.WriteEvent(1);
2525

2626
[NonEvent]
2727
public void OnTargetSiloFail(Message message)
2828
{
2929
if (this.IsEnabled())
3030
{
31-
OnTargetSiloFail(message.TraceContext?.ActivityId ?? Guid.Empty);
31+
using (message.SetThreadActivityId())
32+
{
33+
this.OnTargetSiloFail();
34+
}
3235
}
3336
}
3437

35-
[Event(2)]
36-
public void OnTargetSiloFail(Guid activityId)
37-
{
38-
this.WriteEventWithRelatedActivityId(2, activityId);
39-
}
38+
[Event(2, Level = EventLevel.Warning)]
39+
private void OnTargetSiloFail() => this.WriteEvent(2);
4040

4141
[NonEvent]
4242
public void DoCallback(Message message)
4343
{
4444
if (this.IsEnabled())
4545
{
46-
DoCallback(message.TraceContext?.ActivityId ?? Guid.Empty);
46+
using (message.SetThreadActivityId())
47+
{
48+
this.DoCallback();
49+
}
4750
}
4851
}
4952

50-
[Event(3)]
51-
public void DoCallback(Guid activityId)
52-
{
53-
WriteEventWithRelatedActivityId(3, activityId);
54-
}
53+
[Event(3, Level = EventLevel.Verbose)]
54+
private void DoCallback() => this.WriteEvent(3);
5555
}
5656

5757
[EventSource(Name = "Microsoft-Orleans-OutsideRuntimeClient")]
@@ -64,45 +64,45 @@ public void SendRequest(Message message)
6464
{
6565
if (this.IsEnabled())
6666
{
67-
SendRequest(message.TraceContext?.ActivityId ?? Guid.Empty);
67+
using (message.SetThreadActivityId())
68+
{
69+
this.SendRequest();
70+
}
6871
}
6972
}
7073

71-
[Event(1)]
72-
public void SendRequest(Guid activityId)
73-
{
74-
WriteEventWithRelatedActivityId(1, activityId);
75-
}
74+
[Event(1, Level = EventLevel.Verbose)]
75+
private void SendRequest() => this.WriteEvent(1);
7676

7777
[NonEvent]
7878
public void ReceiveResponse(Message message)
7979
{
8080
if (this.IsEnabled())
8181
{
82-
ReceiveResponse(message.TraceContext?.ActivityId ?? Guid.Empty);
82+
using (message.SetThreadActivityId())
83+
{
84+
this.ReceiveResponse();
85+
}
8386
}
8487
}
8588

86-
[Event(2)]
87-
public void ReceiveResponse(Guid activityId)
88-
{
89-
WriteEventWithRelatedActivityId(2, activityId);
90-
}
89+
[Event(2, Level = EventLevel.Verbose)]
90+
private void ReceiveResponse() => this.WriteEvent(2);
9191

9292
[NonEvent]
9393
public void SendResponse(Message message)
9494
{
9595
if (this.IsEnabled())
9696
{
97-
SendResponse(message.TraceContext?.ActivityId ?? Guid.Empty);
97+
using (message.SetThreadActivityId())
98+
{
99+
this.SendResponse();
100+
}
98101
}
99102
}
100103

101-
[Event(3)]
102-
public void SendResponse(Guid activityId)
103-
{
104-
WriteEventWithRelatedActivityId(3, activityId);
105-
}
104+
[Event(3, Level = EventLevel.Verbose)]
105+
private void SendResponse() => this.WriteEvent(3);
106106
}
107107

108108
[EventSource(Name = "Microsoft-Orleans-Dispatcher")]
@@ -115,12 +115,15 @@ public void ReceiveMessage(Message message)
115115
{
116116
if (this.IsEnabled())
117117
{
118-
ReceiveMessage(message.TraceContext?.ActivityId ?? Guid.Empty);
118+
using (message.SetThreadActivityId())
119+
{
120+
this.ReceiveMessage();
121+
}
119122
}
120123
}
121124

122-
[Event(1)]
123-
public void ReceiveMessage(Guid activityId) => WriteEventWithRelatedActivityId(1, activityId);
125+
[Event(1, Level = EventLevel.Verbose)]
126+
private void ReceiveMessage() => WriteEvent(1);
124127
}
125128

126129
[EventSource(Name = "Microsoft-Orleans-InsideRuntimeClient")]
@@ -133,36 +136,45 @@ public void SendRequest(Message message)
133136
{
134137
if (this.IsEnabled())
135138
{
136-
SendRequest(message.TraceContext?.ActivityId ?? Guid.Empty);
139+
using (message.SetThreadActivityId())
140+
{
141+
this.SendRequest();
142+
}
137143
}
138144
}
139145

140-
[Event(1)]
141-
public void SendRequest(Guid activityId) => WriteEventWithRelatedActivityId(1, activityId);
146+
[Event(1, Level = EventLevel.Verbose)]
147+
private void SendRequest() => WriteEvent(1);
142148

143149
[NonEvent]
144150
public void ReceiveResponse(Message message)
145151
{
146152
if (this.IsEnabled())
147153
{
148-
ReceiveResponse(message.TraceContext?.ActivityId ?? Guid.Empty);
154+
using (message.SetThreadActivityId())
155+
{
156+
this.ReceiveResponse();
157+
}
149158
}
150159
}
151160

152-
[Event(2)]
153-
public void ReceiveResponse(Guid activityId) => WriteEventWithRelatedActivityId(2, activityId);
161+
[Event(2, Level = EventLevel.Verbose)]
162+
private void ReceiveResponse() => WriteEvent(2);
154163

155164
[NonEvent]
156165
public void SendResponse(Message message)
157166
{
158167
if (this.IsEnabled())
159168
{
160-
SendResponse(message.TraceContext?.ActivityId ?? Guid.Empty);
169+
using (message.SetThreadActivityId())
170+
{
171+
this.SendResponse();
172+
}
161173
}
162174
}
163175

164-
[Event(3)]
165-
public void SendResponse(Guid activityId) => WriteEventWithRelatedActivityId(3, activityId);
176+
[Event(3, Level = EventLevel.Verbose)]
177+
private void SendResponse() => WriteEvent(3);
166178
}
167179

168180
[EventSource(Name = "Microsoft-Orleans-GatewayAcceptor")]
@@ -175,12 +187,15 @@ public void HandleMessage(Message message)
175187
{
176188
if (this.IsEnabled())
177189
{
178-
HandleMessage(message.TraceContext?.ActivityId ?? Guid.Empty);
190+
using (message.SetThreadActivityId())
191+
{
192+
this.HandleMessage();
193+
}
179194
}
180195
}
181196

182-
[Event(1)]
183-
public void HandleMessage(Guid activityId) => WriteEventWithRelatedActivityId(1, activityId);
197+
[Event(1, Level = EventLevel.Verbose)]
198+
private void HandleMessage() => WriteEvent(1);
184199

185200
}
186201

@@ -194,12 +209,15 @@ public void HandleMessage(Message message)
194209
{
195210
if (this.IsEnabled())
196211
{
197-
HandleMessage(message.TraceContext?.ActivityId ?? Guid.Empty);
212+
using (message.SetThreadActivityId())
213+
{
214+
this.HandleMessage();
215+
}
198216
}
199217
}
200218

201-
[Event(1)]
202-
public void HandleMessage(Guid activityId) => WriteEventWithRelatedActivityId(1, activityId);
219+
[Event(1, Level = EventLevel.Verbose)]
220+
private void HandleMessage() => WriteEvent(1);
203221
}
204222

205223
[EventSource(Name = "Microsoft-Orleans-IncomingMessageAgent")]
@@ -212,11 +230,51 @@ public void ReceiveMessage(Message message)
212230
{
213231
if (this.IsEnabled())
214232
{
215-
ReceiveMessage(message.TraceContext?.ActivityId ?? Guid.Empty);
233+
using (message.SetThreadActivityId())
234+
{
235+
this.ReceiveMessage();
236+
}
216237
}
217238
}
218239

219-
[Event(1)]
220-
public void ReceiveMessage(Guid activityId) => WriteEventWithRelatedActivityId(1, activityId);
240+
[Event(1, Level = EventLevel.Verbose)]
241+
private void ReceiveMessage() => WriteEvent(1);
242+
}
243+
244+
internal static class EventSourceMessageExtensions
245+
{
246+
public static ActivityIdScope SetThreadActivityId(this Message message)
247+
{
248+
var activityId = message?.TraceContext?.ActivityId;
249+
250+
if (!(activityId is Guid messageActivityId) || messageActivityId == Guid.Empty)
251+
{
252+
return new ActivityIdScope(Guid.Empty, shouldReset: false);
253+
}
254+
255+
EventSource.SetCurrentThreadActivityId(messageActivityId, out var oldActivity);
256+
return new ActivityIdScope(oldActivity, shouldReset: messageActivityId != oldActivity);
257+
258+
}
259+
260+
internal readonly ref struct ActivityIdScope
261+
{
262+
private readonly Guid oldActivity;
263+
private readonly bool shouldReset;
264+
265+
public ActivityIdScope(Guid oldActivity, bool shouldReset)
266+
{
267+
this.oldActivity = oldActivity;
268+
this.shouldReset = shouldReset;
269+
}
270+
271+
public void Dispose()
272+
{
273+
if (shouldReset)
274+
{
275+
EventSource.SetCurrentThreadActivityId(oldActivity);
276+
}
277+
}
278+
}
221279
}
222280
}

0 commit comments

Comments
 (0)