Fixes: U4-6597 Umbraco fails to reconnect to a SQL Server if it started up when SQL server was offline - however this requires some review.

This commit is contained in:
Shannon
2015-05-19 14:29:25 +10:00
parent 9d8f33e98e
commit 0e5a469577
2 changed files with 21 additions and 4 deletions

View File

@@ -134,7 +134,11 @@ namespace Umbraco.Core.Cache
lck.UpgradeToWriteLock();
result = new Lazy<object>(getCacheItem, LazyThreadSafetyMode.PublicationOnly);
result = new Lazy<object>(getCacheItem,
//NOTE: This is required to not cache any exceptions that throw when the callback is executed.
// we want to ensure the callback is re-executed and not cached in the case that it might no
// longer throw an exception if runtime circumstances have changed.
LazyThreadSafetyMode.PublicationOnly);
_cache.Insert(cacheKey, result, dependency, absolute, sliding, priority, removedCallback);
}
@@ -175,7 +179,12 @@ namespace Umbraco.Core.Cache
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = new Lazy<object>(getCacheItem, LazyThreadSafetyMode.PublicationOnly);
var result = new Lazy<object>(getCacheItem,
//NOTE: This is required to not cache any exceptions that throw when the callback is executed.
// we want to ensure the callback is re-executed and not cached in the case that it might no
// longer throw an exception if runtime circumstances have changed.
LazyThreadSafetyMode.PublicationOnly);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
if (value == null) return; // do not store null values (backward compat)

View File

@@ -207,10 +207,14 @@ namespace Umbraco.Core.Cache
result = MemoryCache.Get(cacheKey) as Lazy<object>;
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = new Lazy<object>(getCacheItem);
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
lck.UpgradeToWriteLock();
result = new Lazy<object>(getCacheItem,
//NOTE: This is required to not cache any exceptions that throw when the callback is executed.
// we want to ensure the callback is re-executed and not cached in the case that it might no
// longer throw an exception if runtime circumstances have changed.
LazyThreadSafetyMode.PublicationOnly);
MemoryCache.Set(cacheKey, result, policy);
}
}
@@ -227,7 +231,11 @@ namespace Umbraco.Core.Cache
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = new Lazy<object>(getCacheItem);
var result = new Lazy<object>(getCacheItem,
//NOTE: This is required to not cache any exceptions that throw when the callback is executed.
// we want to ensure the callback is re-executed and not cached in the case that it might no
// longer throw an exception if runtime circumstances have changed.
LazyThreadSafetyMode.PublicationOnly);
var value = result.Value; // force evaluation now
if (value == null) return; // do not store null values (backward compat)