コード例 #1
0
        /// <summary>
        /// Removes shard map from cache given the name.
        /// </summary>
        /// <param name="ssm">Storage representation of shard map.</param>
        internal void Remove(IStoreShardMap ssm)
        {
            if (_shardMapsByName.ContainsKey(ssm.Name))
            {
                CacheShardMap csm = _shardMapsByName[ssm.Name];
                _shardMapsByName.Remove(ssm.Name);

                // Dispose off the cached map
                if (csm != null)
                {
                    csm.Dispose();
                }
            }

            if (_shardMapsById.ContainsKey(ssm.Id))
            {
                CacheShardMap csm = _shardMapsById[ssm.Id];
                _shardMapsById.Remove(ssm.Id);

                // Dispose off the cached map
                if (csm != null)
                {
                    csm.Dispose();
                }
            }
        }
コード例 #2
0
        internal CacheShardMap AddOrUpdate(IStoreShardMap ssm)
        {
            CacheShardMap csm          = new CacheShardMap(ssm);
            CacheShardMap csmOldByName = null;
            CacheShardMap csmOldById   = null;

            if (_shardMapsByName.TryGetValue(ssm.Name, out csmOldByName))
            {
                _shardMapsByName.Remove(ssm.Name);
            }

            if (_shardMapsById.TryGetValue(ssm.Id, out csmOldById))
            {
                _shardMapsById.Remove(ssm.Id);
            }

            // Both should be found or none should be found.
            Debug.Assert((csmOldByName == null && csmOldById == null) ||
                         (csmOldByName != null && csmOldById != null));

            // Both should point to same cached copy.
            Debug.Assert(Object.ReferenceEquals(csmOldByName, csmOldById));

            if (csmOldByName != null)
            {
                csm.TransferStateFrom(csmOldByName);

                // Dispose off the old cached shard map
                csmOldByName.Dispose();
            }

            _shardMapsByName.Add(ssm.Name, csm);

            _shardMapsById.Add(ssm.Id, csm);
            return(csm);
        }