Skip to content

Commit

Permalink
Fix ActivitySource to log the right amount of stopped (#37211)
Browse files Browse the repository at this point in the history
* Fix ActivitySource to log the right amount of stopped

* Fix test and typo

Co-authored-by: Chandramouleswaran Ravichandran <chandramouleswaranravichandran@Chandramouleswarans-MacBook-Pro.local>
  • Loading branch information
chandramouleswaran and Chandramouleswaran Ravichandran authored May 31, 2020
1 parent a589a17 commit e250030
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public bool HasListeners()

Activity? activity = null;

ActivityDataRequest dateRequest = ActivityDataRequest.None;
ActivityDataRequest dataRequest = ActivityDataRequest.None;

if (parentId != null)
{
Expand All @@ -120,13 +120,13 @@ public bool HasListeners()
{
ActivityCreationOptions<string> aco = new ActivityCreationOptions<string>(this, name, parentId, kind, tags, links);
ActivityDataRequest dr = getRequestedDataUsingParentId(ref aco);
if (dr > dateRequest)
if (dr > dataRequest)
{
dateRequest = dr;
dataRequest = dr;
}

// Stop the enumeration if we get the max value RecordingAndSampling.
return dateRequest != ActivityDataRequest.AllDataAndRecorded;
return dataRequest != ActivityDataRequest.AllDataAndRecorded;
}
return true;
});
Expand All @@ -139,21 +139,21 @@ public bool HasListeners()
{
ActivityCreationOptions<ActivityContext> aco = new ActivityCreationOptions<ActivityContext>(this, name, context, kind, tags, links);
ActivityDataRequest dr = getRequestedDataUsingContext(ref aco);
if (dr > dateRequest)
if (dr > dataRequest)
{
dateRequest = dr;
dataRequest = dr;
}

// Stop the enumeration if we get the max value RecordingAndSampling.
return dateRequest != ActivityDataRequest.AllDataAndRecorded;
return dataRequest != ActivityDataRequest.AllDataAndRecorded;
}
return true;
});
}

if (dateRequest != ActivityDataRequest.None)
if (dataRequest != ActivityDataRequest.None)
{
activity = Activity.CreateAndStart(this, name, kind, parentId, context, tags, links, startTime, dateRequest);
activity = Activity.CreateAndStart(this, name, kind, parentId, context, tags, links, startTime, dataRequest);
listeners.EnumWithAction(listener => {
var activityStarted = listener.ActivityStarted;
if (activityStarted != null)
Expand Down Expand Up @@ -238,9 +238,7 @@ internal void NotifyActivityStop(Activity activity)
SynchronizedList<ActivityListener>? listeners = _listeners;
if (listeners != null && listeners.Count > 0)
{
listeners.EnumWithAction(listener => {
listeners.EnumWithAction(listener => listener.ActivityStopped?.Invoke(activity));
});
listeners.EnumWithAction(listener => listener.ActivityStopped?.Invoke(activity));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,13 +228,16 @@ public void TestExpectedListenersReturnValues()
{
RemoteExecutor.Invoke(() => {

int activityStartCount = 0;
int activityStopCount = 0;

ActivitySource source = new ActivitySource("MultipleListenerSource");
ActivityListener [] listeners = new ActivityListener[4];

listeners[0] = new ActivityListener
{
ActivityStarted = activity => Assert.NotNull(activity),
ActivityStopped = activity => Assert.NotNull(activity),
ActivityStarted = (activity) => { activityStartCount++; Assert.NotNull(activity); },
ActivityStopped = (activity) => { activityStopCount++; Assert.NotNull(activity); },
ShouldListenTo = (activitySource) => true,
GetRequestedDataUsingParentId = (ref ActivityCreationOptions<string> activityOptions) => ActivityDataRequest.None,
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> activityOptions) => ActivityDataRequest.None
Expand All @@ -243,10 +246,13 @@ public void TestExpectedListenersReturnValues()

Assert.Null(source.StartActivity("a1"));

Assert.Equal(0, activityStartCount);
Assert.Equal(0, activityStopCount);

listeners[1] = new ActivityListener
{
ActivityStarted = activity => Assert.NotNull(activity),
ActivityStopped = activity => Assert.NotNull(activity),
ActivityStarted = (activity) => { activityStartCount++; Assert.NotNull(activity); },
ActivityStopped = (activity) => { activityStopCount++; Assert.NotNull(activity); },
ShouldListenTo = (activitySource) => true,
GetRequestedDataUsingParentId = (ref ActivityCreationOptions<string> activityOptions) => ActivityDataRequest.PropagationData,
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> activityOptions) => ActivityDataRequest.PropagationData
Expand All @@ -257,12 +263,18 @@ public void TestExpectedListenersReturnValues()
{
Assert.False(a2.IsAllDataRequested);
Assert.True((a2.ActivityTraceFlags & ActivityTraceFlags.Recorded) == 0);

Assert.Equal(2, activityStartCount);
Assert.Equal(0, activityStopCount);
}

Assert.Equal(activityStartCount, activityStopCount);
Assert.Equal(2, activityStopCount);

listeners[2] = new ActivityListener
{
ActivityStarted = activity => Assert.NotNull(activity),
ActivityStopped = activity => Assert.NotNull(activity),
ActivityStarted = (activity) => { activityStartCount++; Assert.NotNull(activity); },
ActivityStopped = (activity) => { activityStopCount++; Assert.NotNull(activity); },
ShouldListenTo = (activitySource) => true,
GetRequestedDataUsingParentId = (ref ActivityCreationOptions<string> activityOptions) => ActivityDataRequest.AllData,
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> activityOptions) => ActivityDataRequest.AllData
Expand All @@ -273,12 +285,18 @@ public void TestExpectedListenersReturnValues()
{
Assert.True(a3.IsAllDataRequested);
Assert.True((a3.ActivityTraceFlags & ActivityTraceFlags.Recorded) == 0);

Assert.Equal(5, activityStartCount);
Assert.Equal(2, activityStopCount);
}

Assert.Equal(activityStartCount, activityStopCount);
Assert.Equal(5, activityStopCount);

listeners[3] = new ActivityListener
{
ActivityStarted = activity => Assert.NotNull(activity),
ActivityStopped = activity => Assert.NotNull(activity),
ActivityStarted = (activity) => { activityStartCount++; Assert.NotNull(activity); },
ActivityStopped = (activity) => { activityStopCount++; Assert.NotNull(activity); },
ShouldListenTo = (activitySource) => true,
GetRequestedDataUsingParentId = (ref ActivityCreationOptions<string> activityOptions) => ActivityDataRequest.AllDataAndRecorded,
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> activityOptions) => ActivityDataRequest.AllDataAndRecorded
Expand All @@ -289,13 +307,18 @@ public void TestExpectedListenersReturnValues()
{
Assert.True(a4.IsAllDataRequested);
Assert.True((a4.ActivityTraceFlags & ActivityTraceFlags.Recorded) != 0, $"a4.ActivityTraceFlags failed: {a4.ActivityTraceFlags}");

Assert.Equal(9, activityStartCount);
Assert.Equal(5, activityStopCount);
}

foreach (IDisposable listener in listeners)
{
listener.Dispose();
}

Assert.Equal(activityStartCount, activityStopCount);
Assert.Equal(9, activityStopCount);
Assert.Null(source.StartActivity("a5"));
}).Dispose();
}
Expand Down

0 comments on commit e250030

Please sign in to comment.