/// <summary> /// Initializes a new instance of the <see cref="DomainCache"/> class. /// </summary> public DomainCache(SnapDictionary <int, Domain> .Snapshot snapshot, string defaultCulture) { _snapshot = snapshot; DefaultCulture = defaultCulture; }
public ScopedWriteLock(SnapDictionary <TKey, TValue> dictionary, bool scoped) { _dictionary = dictionary; dictionary.Lock(_lockinfo, scoped); }
/// <summary> /// Lazily populates the stores only when they are first requested /// </summary> internal void EnsureCaches() => LazyInitializer.EnsureInitialized( ref _isReady, ref _isReadSet, ref _isReadyLock, () => { // lock this entire call, we only want a single thread to be accessing the stores at once and within // the call below to mainDom.Register, a callback may occur on a threadpool thread to MainDomRelease // at the same time as we are trying to write to the stores. MainDomRelease also locks on _storesLock so // it will not be able to close the stores until we are done populating (if the store is empty) lock (_storesLock) { if (!_options.IgnoreLocalDb) { _mainDom.Register(MainDomRegister, MainDomRelease); // stores are created with a db so they can write to it, but they do not read from it, // stores need to be populated, happens in OnResolutionFrozen which uses _localDbExists to // figure out whether it can read the databases or it should populate them from sql _logger.LogInformation("Creating the content store, localContentDbExists? {LocalContentDbExists}", _localContentDbExists); _contentStore = new ContentStore(_publishedSnapshotAccessor, _variationContextAccessor, _loggerFactory.CreateLogger("ContentStore"), _loggerFactory, _publishedModelFactory, _localContentDb); _logger.LogInformation("Creating the media store, localMediaDbExists? {LocalMediaDbExists}", _localMediaDbExists); _mediaStore = new ContentStore(_publishedSnapshotAccessor, _variationContextAccessor, _loggerFactory.CreateLogger("ContentStore"), _loggerFactory, _publishedModelFactory, _localMediaDb); } else { _logger.LogInformation("Creating the content store (local db ignored)"); _contentStore = new ContentStore(_publishedSnapshotAccessor, _variationContextAccessor, _loggerFactory.CreateLogger("ContentStore"), _loggerFactory, _publishedModelFactory); _logger.LogInformation("Creating the media store (local db ignored)"); _mediaStore = new ContentStore(_publishedSnapshotAccessor, _variationContextAccessor, _loggerFactory.CreateLogger("ContentStore"), _loggerFactory, _publishedModelFactory); } _domainStore = new SnapDictionary <int, Domain>(); var okContent = false; var okMedia = false; SyncBootState bootState = _syncBootStateAccessor.GetSyncBootState(); try { if (bootState != SyncBootState.ColdBoot && _localContentDbExists) { okContent = LockAndLoadContent(() => LoadContentFromLocalDbLocked(true)); if (!okContent) { _logger.LogWarning("Loading content from local db raised warnings, will reload from database."); } } if (bootState != SyncBootState.ColdBoot && _localMediaDbExists) { okMedia = LockAndLoadMedia(() => LoadMediaFromLocalDbLocked(true)); if (!okMedia) { _logger.LogWarning("Loading media from local db raised warnings, will reload from database."); } } if (!okContent) { LockAndLoadContent(() => LoadContentFromDatabaseLocked(true)); } if (!okMedia) { LockAndLoadMedia(() => LoadMediaFromDatabaseLocked(true)); } LockAndLoadDomains(); } catch (Exception ex) { _logger.LogCritical(ex, "Panic, exception while loading cache data."); throw; } return(true); } });
public TestHelper(SnapDictionary <TKey, TValue> dict) { _dict = dict; }