/// <summary> /// Invoked for deleting mapping in cache becase it no longer exists in store. /// </summary> /// <param name="mapping">Storage representation of mapping.</param> public virtual void DeleteMapping(IStoreMapping mapping) { using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { CacheShardMap csm = _cacheRoot.LookupById(mapping.ShardMapId); if (csm != null) { using (WriteLockScope wlscsm = csm.GetWriteLockScope()) { csm.Mapper.Remove(mapping); // Update perf counters for remove mapping operation and mappings count. csm.IncrementPerformanceCounter(PerformanceCounterName.MappingsRemovePerSec); csm.SetPerformanceCounter(PerformanceCounterName.MappingsCount, csm.Mapper.GetMappingsCount()); Tracer.TraceVerbose( TraceSourceConstants.ComponentNames.ShardMapManager, "OnDeleteMapping", "Cache delete mapping complete. Mapping Id: {0}", mapping.Id); } } } }
/// <summary> /// Invoked for updating specified performance counter for a cached shard map object. /// </summary> /// <param name="shardMap">Storage representation of a shard map.</param> /// <param name="name">Performance counter to increment.</param> public void IncrementPerformanceCounter(IStoreShardMap shardMap, PerformanceCounterName name) { using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { CacheShardMap csm = _cacheRoot.LookupById(shardMap.Id); if (csm != null) { using (ReadLockScope rlsShardMap = csm.GetReadLockScope(false)) { csm.IncrementPerformanceCounter(name); } } } }
/// <summary> /// Looks up a given shard map in cache based on it's name. /// </summary> /// <param name="shardMapName">Name of shard map.</param> /// <returns>The shard being searched.</returns> public virtual IStoreShardMap LookupShardMapByName(string shardMapName) { IStoreShardMap shardMap; using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { // Typical scenario will result in immediate lookup succeeding. _cacheRoot.LookupByName(shardMapName, out shardMap); } Tracer.TraceVerbose( TraceSourceConstants.ComponentNames.ShardMapManager, "LookupShardMapByNameInCache", "Cache {0}; ShardMap: {1}", shardMap == null ? "miss" : "hit", shardMapName); return(shardMap); }
/// <summary> /// Looks up a given key in given shard map. /// </summary> /// <param name="shardMap">Storage representation of shard map.</param> /// <param name="key">Key value.</param> /// <returns>Mapping corresponding to <paramref name="key"/> or null.</returns> public virtual ICacheStoreMapping LookupMappingByKey(IStoreShardMap shardMap, ShardKey key) { ICacheStoreMapping sm = null; using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { CacheShardMap csm = _cacheRoot.LookupById(shardMap.Id); if (csm != null) { using (ReadLockScope rlsShardMap = csm.GetReadLockScope(false)) { IStoreMapping smDummy; sm = csm.Mapper.LookupByKey(key, out smDummy); } } } return(sm); }
/// <summary> /// Invoked for deleting mapping in cache becase it no longer exists in store. /// </summary> /// <param name="mapping">Storage representation of mapping.</param> public virtual void DeleteMapping(IStoreMapping mapping) { using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { CacheShardMap csm = _cacheRoot.LookupById(mapping.ShardMapId); if (csm != null) { using (WriteLockScope wlscsm = csm.GetWriteLockScope()) { csm.Mapper.Remove(mapping); Tracer.TraceVerbose( TraceSourceConstants.ComponentNames.ShardMapManager, "OnDeleteMapping", "Cache delete mapping complete. Mapping Id: {0}", mapping.Id); } } } }
/// <summary> /// Looks up a given key in given shard map. /// </summary> /// <param name="shardMap">Storage representation of shard map.</param> /// <param name="key">Key value.</param> /// <returns>Mapping corresponding to <paramref name="key"/> or null.</returns> public virtual ICacheStoreMapping LookupMappingByKey(IStoreShardMap shardMap, ShardKey key) { ICacheStoreMapping sm = null; using (ReadLockScope rls = _cacheRoot.GetReadLockScope(false)) { CacheShardMap csm = _cacheRoot.LookupById(shardMap.Id); if (csm != null) { using (ReadLockScope rlsShardMap = csm.GetReadLockScope(false)) { IStoreMapping smDummy; sm = csm.Mapper.LookupByKey(key, out smDummy); // perf counter can not be updated in csm.Mapper.LookupByKey() as this function is also called from csm.Mapper.AddOrUpdate() // so updating perf counter value here instead. csm.IncrementPerformanceCounter(sm == null ? PerformanceCounterName.MappingsLookupFailedPerSec : PerformanceCounterName.MappingsLookupSucceededPerSec); } } } return(sm); }