Skip to content

Commit 1c225be

Browse files
Merge pull request #577 from johelvisguzman/cache-exception
Cache exception
2 parents cd443af + 9ee6716 commit 1c225be

File tree

1 file changed

+45
-23
lines changed

1 file changed

+45
-23
lines changed

src/DotNetToolkit.Repository/Extensions/CachingProviderExtensions.cs

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static class CachingProviderExtensions
2525
{
2626
private static string CachePrefix = "RepositoriesCachingPrefix";
2727
private static string CacheCounterPrefix = "RepositoriesCachingCounterPrefix";
28-
private static string CachePrefixGlue = "§";
28+
private static string CachePrefixGlue = ...";
2929

3030
private static readonly object _syncRoot = new object();
3131
private static string Name<T>() => typeof(T).FullName;
@@ -50,10 +50,10 @@ public static ICacheQueryResult<TResult> GetOrSet<TEntity, TResult>(
5050
Guard.NotEmpty(key, nameof(key));
5151
Guard.NotNull(logger, nameof(logger));
5252

53-
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key);
53+
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key, logger);
5454
var cacheUsed = false;
5555

56-
if (!cacheProvider.TryGetValue<TResult>(hashedKey, out var value))
56+
if (cacheProvider.TryGetValue<TResult>(hashedKey, logger, out var value) == false)
5757
{
5858
var expiry = cacheProvider.Expiry;
5959

@@ -93,10 +93,10 @@ public static ICachePagedQueryResult<TResult> GetOrSet<TEntity, TResult>(
9393
Guard.NotNull(getter, nameof(getter));
9494
Guard.NotNull(logger, nameof(logger));
9595

96-
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key);
96+
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key, logger);
9797
var cacheUsed = false;
9898

99-
if (!cacheProvider.TryGetValue<PagedQueryResult<TResult>>(hashedKey, out var value))
99+
if (cacheProvider.TryGetValue<PagedQueryResult<TResult>>(hashedKey, logger, out var value) == false)
100100
{
101101
var expiry = cacheProvider.Expiry;
102102

@@ -136,10 +136,10 @@ public static async Task<ICacheQueryResult<TResult>> GetOrSetAsync<TEntity, TRes
136136
Guard.NotNull(getter, nameof(getter));
137137
Guard.NotNull(logger, nameof(logger));
138138

139-
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key);
139+
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key, logger);
140140
var cacheUsed = false;
141141

142-
if (!cacheProvider.TryGetValue<TResult>(hashedKey, out var value))
142+
if (cacheProvider.TryGetValue<TResult>(hashedKey, logger, out var value) == false)
143143
{
144144
var expiry = cacheProvider.Expiry;
145145

@@ -179,10 +179,10 @@ public static async Task<ICachePagedQueryResult<TResult>> GetOrSetAsync<TEntity,
179179
Guard.NotNull(getter, nameof(getter));
180180
Guard.NotNull(logger, nameof(logger));
181181

182-
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key);
182+
var hashedKey = FormatHashedKey<TEntity>(cacheProvider, key, logger);
183183
var cacheUsed = false;
184184

185-
if (!cacheProvider.TryGetValue<PagedQueryResult<TResult>>(hashedKey, out var value))
185+
if (cacheProvider.TryGetValue<PagedQueryResult<TResult>>(hashedKey, logger, out var value) == false)
186186
{
187187
var expiry = cacheProvider.Expiry;
188188

@@ -453,35 +453,56 @@ private static void SetValue<T>(
453453

454454
lock (_syncRoot)
455455
{
456-
logger.Debug(expiry.HasValue
456+
try
457+
{
458+
cacheProvider.Cache.Set<T>(
459+
hashedKey,
460+
value,
461+
expiry,
462+
reason => logger.Debug($"Cache for '{hashedKey}' has expired. Evicting from cache for '{reason}'"));
463+
464+
logger.Debug(expiry.HasValue
457465
? $"Setting up cache for '{hashedKey}' expire handling in {expiry.Value.TotalSeconds} seconds"
458466
: $"Setting up cache for '{hashedKey}'");
459-
460-
cacheProvider.Cache.Set<T>(
461-
hashedKey,
462-
value,
463-
expiry,
464-
reason => logger.Debug($"Cache for '{hashedKey}' has expired. Evicting from cache for '{reason}'"));
467+
}
468+
catch (Exception ex)
469+
{
470+
logger.Error(ex, $"Unable to set cache value for '{hashedKey}'");
471+
}
465472
}
466473
}
467474

468-
private static bool TryGetValue<T>([NotNull] this ICacheProvider cacheProvider, [NotNull] string key, out T value)
475+
private static bool? TryGetValue<T>([NotNull] this ICacheProvider cacheProvider, [NotNull] string key, [NotNull] ILogger logger, out T value)
469476
{
470477
Guard.NotNull(cacheProvider, nameof(cacheProvider));
471-
Guard.NotEmpty(key, nameof(key));
472478
Guard.EnsureNotNull(cacheProvider.Cache, "The caching cannot be null.");
479+
Guard.NotEmpty(key, nameof(key));
480+
Guard.NotNull(logger, nameof(logger));
473481

474482
lock (_syncRoot)
475483
{
476-
return cacheProvider.Cache.TryGetValue<T>(key, out value);
484+
bool? result = null;
485+
value = default(T);
486+
487+
try
488+
{
489+
result = cacheProvider.Cache.TryGetValue<T>(key, out value);
490+
}
491+
catch (Exception ex)
492+
{
493+
logger.Error(ex, $"Unable to get cache value for '{key}'");
494+
}
495+
496+
return result;
477497
}
478498
}
479499

480-
private static int GetCachingPrefixCounter<T>([NotNull] this ICacheProvider cacheProvider)
500+
private static int GetCachingPrefixCounter<T>([NotNull] this ICacheProvider cacheProvider, [NotNull] ILogger logger)
481501
{
482502
Guard.NotNull(cacheProvider, nameof(cacheProvider));
503+
Guard.NotNull(logger, nameof(logger));
483504

484-
return !cacheProvider.TryGetValue<int>(FormatCachePrefixCounterKey<T>(), out var key) ? 1 : key;
505+
return cacheProvider.TryGetValue<int>(FormatCachePrefixCounterKey<T>(), logger, out var key) == true ? key : 1;
485506
}
486507

487508
private static string FormatCachePrefixCounterKey<T>()
@@ -492,16 +513,17 @@ private static string FormatCachePrefixCounterKey<T>()
492513
CacheCounterPrefix);
493514
}
494515

495-
private static string FormatHashedKey<T>([NotNull] this ICacheProvider cacheProvider, [NotNull] string key)
516+
private static string FormatHashedKey<T>([NotNull] this ICacheProvider cacheProvider, [NotNull] string key, [NotNull] ILogger logger)
496517
{
497518
Guard.NotNull(cacheProvider, nameof(cacheProvider));
498519
Guard.NotEmpty(key, nameof(key));
520+
Guard.NotNull(logger, nameof(logger));
499521

500522
var cacheKeyTransformer = cacheProvider.KeyTransformer ?? new DefaultCacheKeyTransformer();
501523

502524
return string.Format("{1}{0}{2}{0}{3}",
503525
CachePrefixGlue,
504-
cacheProvider.GetCachingPrefixCounter<T>(),
526+
cacheProvider.GetCachingPrefixCounter<T>(logger),
505527
cacheKeyTransformer.Transform(key),
506528
CachePrefix);
507529
}

0 commit comments

Comments
 (0)