Skip to content

Commit fdf4180

Browse files
authored
HybridCache: don't log cancellation as failure (#5601)
1 parent 5bf9f9f commit fdf4180

File tree

4 files changed

+64
-3
lines changed

4 files changed

+64
-3
lines changed

src/Libraries/Microsoft.Extensions.Caching.Hybrid/Internal/DefaultHybridCache.StampedeStateT.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,15 @@ private async Task BackgroundFetchAsync()
190190
}
191191
}
192192
}
193+
catch (OperationCanceledException) when (SharedToken.IsCancellationRequested)
194+
{
195+
if (eventSourceEnabled)
196+
{
197+
HybridCacheEventSource.Log.DistributedCacheCanceled();
198+
}
199+
200+
throw; // don't just treat as miss - exit ASAP
201+
}
193202
catch (Exception ex)
194203
{
195204
if (eventSourceEnabled)
@@ -227,11 +236,18 @@ private async Task BackgroundFetchAsync()
227236
HybridCacheEventSource.Log.UnderlyingDataQueryComplete();
228237
}
229238
}
230-
catch
239+
catch (Exception ex)
231240
{
232241
if (eventSourceEnabled)
233242
{
234-
HybridCacheEventSource.Log.UnderlyingDataQueryFailed();
243+
if (ex is OperationCanceledException && SharedToken.IsCancellationRequested)
244+
{
245+
HybridCacheEventSource.Log.UnderlyingDataQueryCanceled();
246+
}
247+
else
248+
{
249+
HybridCacheEventSource.Log.UnderlyingDataQueryFailed();
250+
}
235251
}
236252

237253
throw;

src/Libraries/Microsoft.Extensions.Caching.Hybrid/Internal/HybridCacheEventSource.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ internal sealed class HybridCacheEventSource : EventSource
2525
internal const int EventIdLocalCacheWrite = 10;
2626
internal const int EventIdDistributedCacheWrite = 11;
2727
internal const int EventIdStampedeJoin = 12;
28+
internal const int EventIdUnderlyingDataQueryCanceled = 13;
29+
internal const int EventIdDistributedCacheCanceled = 14;
2830

2931
// fast local counters
3032
private long _totalLocalCacheHit;
@@ -117,6 +119,14 @@ public void DistributedCacheFailed()
117119
WriteEvent(EventIdDistributedCacheFailed);
118120
}
119121

122+
[Event(EventIdDistributedCacheCanceled, Level = EventLevel.Verbose)]
123+
public void DistributedCacheCanceled()
124+
{
125+
DebugAssertEnabled();
126+
_ = Interlocked.Decrement(ref _currentDistributedFetch);
127+
WriteEvent(EventIdDistributedCacheCanceled);
128+
}
129+
120130
[Event(EventIdUnderlyingDataQueryStart, Level = EventLevel.Verbose)]
121131
public void UnderlyingDataQueryStart()
122132
{
@@ -143,6 +153,14 @@ public void UnderlyingDataQueryFailed()
143153
WriteEvent(EventIdUnderlyingDataQueryFailed);
144154
}
145155

156+
[Event(EventIdUnderlyingDataQueryCanceled, Level = EventLevel.Verbose)]
157+
public void UnderlyingDataQueryCanceled()
158+
{
159+
DebugAssertEnabled();
160+
_ = Interlocked.Decrement(ref _currentUnderlyingDataQuery);
161+
WriteEvent(EventIdUnderlyingDataQueryCanceled);
162+
}
163+
146164
[Event(EventIdLocalCacheWrite, Level = EventLevel.Verbose)]
147165
public void LocalCacheWrite()
148166
{

test/Libraries/Microsoft.Extensions.Caching.Hybrid.Tests/HybridCacheEventSourceTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,19 @@ public async Task DistributedCacheFailed()
9999
listener.AssertRemainingCountersZero();
100100
}
101101

102+
[SkippableFact]
103+
public async Task DistributedCacheCanceled()
104+
{
105+
AssertEnabled();
106+
107+
listener.Reset().Source.DistributedCacheGet();
108+
listener.Reset(resetCounters: false).Source.DistributedCacheCanceled();
109+
listener.AssertSingleEvent(HybridCacheEventSource.EventIdDistributedCacheCanceled, "DistributedCacheCanceled", EventLevel.Verbose);
110+
111+
await AssertCountersAsync();
112+
listener.AssertRemainingCountersZero();
113+
}
114+
102115
[SkippableFact]
103116
public async Task UnderlyingDataQueryStart()
104117
{
@@ -141,6 +154,20 @@ public async Task UnderlyingDataQueryFailed()
141154
listener.AssertRemainingCountersZero();
142155
}
143156

157+
[SkippableFact]
158+
public async Task UnderlyingDataQueryCanceled()
159+
{
160+
AssertEnabled();
161+
162+
listener.Reset().Source.UnderlyingDataQueryStart();
163+
listener.Reset(resetCounters: false).Source.UnderlyingDataQueryCanceled();
164+
listener.AssertSingleEvent(HybridCacheEventSource.EventIdUnderlyingDataQueryCanceled, "UnderlyingDataQueryCanceled", EventLevel.Verbose);
165+
166+
await AssertCountersAsync();
167+
listener.AssertCounter("total-data-query", "Total Data Queries", 1);
168+
listener.AssertRemainingCountersZero();
169+
}
170+
144171
[SkippableFact]
145172
public async Task LocalCacheWrite()
146173
{

test/Libraries/Microsoft.Extensions.Caching.Hybrid.Tests/TestEventListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ protected override void OnEventSourceCreated(EventSource eventSource)
5050
{
5151
["EventCounterIntervalSec"] = EventCounterIntervalSec.ToString("G", CultureInfo.InvariantCulture),
5252
};
53-
EnableEvents(Source, EventLevel.Verbose, EventKeywords.All, args);
53+
EnableEvents(Source, EventLevel.LogAlways, EventKeywords.All, args);
5454
}
5555

5656
base.OnEventSourceCreated(eventSource);

0 commit comments

Comments
 (0)