예제 #1
0
        /// <summary>
        /// Returns the proper ShardManagementException corresponding to given error code in
        /// <paramref name="result"/> for ShardMap operations.
        /// </summary>
        /// <param name="result">Operation result object.</param>
        /// <param name="shardMap">Shard map object.</param>
        /// <param name="location">Location of operation.</param>
        /// <param name="errorCategory">Error category to use for raised errors.</param>
        /// <param name="operationName">Operation being performed.</param>
        /// <param name="storedProcName">Stored procedure being executed.</param>
        /// <returns>ShardManagementException to be raised.</returns>
        internal static ShardManagementException OnRecoveryErrorLocal(
            IStoreResults result,
            IStoreShardMap shardMap,
            ShardLocation location,
            ShardManagementErrorCategory errorCategory,
            string operationName,
            string storedProcName)
        {
            switch (result.Result)
            {
            case StoreResult.ShardMapDoesNotExist:
                return(new ShardManagementException(
                           errorCategory,
                           ShardManagementErrorCode.ShardMapDoesNotExist,
                           Errors._Store_ShardMap_DoesNotExistLocal,
                           shardMap.Name,
                           location,
                           storedProcName,
                           operationName));

            case StoreResult.StoreVersionMismatch:
            case StoreResult.MissingParametersForStoredProcedure:
            default:
                return(StoreOperationErrorHandler.OnCommonErrorLocal(
                           result,
                           location,
                           operationName,
                           storedProcName));
            }
        }
        /// <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();
                }
            }
        }
 /// <summary>
 /// Constructs request for attaching the given shard map and shard information to the GSM database.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shard">Shard to attach</param>
 /// <param name="shardMap">Shard map to attach specified shard</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateAttachShardOperation(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shard)
 {
     return(new AttachShardOperation(shardMapManager, shardMap, shard));
 }
 /// <summary>
 /// Creates request to attach shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which to attach shard.</param>
 /// <param name="shard">Shard to attach.</param>
 protected internal AttachShardOperation(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shard) :
     this(shardMapManager, Guid.NewGuid(), StoreOperationState.UndoBegin, shardMap, shard)
 {
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which to add shard.</param>
 /// <param name="shard">Shard to add.</param>
 protected internal AddShardOperation(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shard) :
     this(shardMapManager, Guid.NewGuid(), StoreOperationState.UndoBegin, shardMap, shard)
 {
 }
예제 #6
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();
                }
            }
        }
 /// <summary>
 /// Removes a shard map from global shard map.
 /// </summary>
 /// <param name="ssm">Shard map to remove.</param>
 private void RemoveShardMapFromStore(IStoreShardMap ssm)
 {
     using (IStoreOperationGlobal op = this.StoreOperationFactory.CreateRemoveShardMapGlobalOperation(this, "DeleteShardMap", ssm))
     {
         op.Do();
     }
 }
        /// <summary>
        /// Converts IStoreShardMap to ShardMap.
        /// </summary>
        /// <param name="manager">Reference to shard map manager.</param>
        /// <param name="ssm">Storage representation for ShardMap.</param>
        /// <returns>ShardMap object corresponding to storange representation.</returns>
        internal static ShardMap CreateShardMapFromStoreShardMap(
            ShardMapManager manager,
            IStoreShardMap ssm)
        {
            switch (ssm.MapType)
            {
            case ShardMapType.List:
                // Create ListShardMap<TKey>
                return((ShardMap)Activator.CreateInstance(
                           typeof(ListShardMap <>).MakeGenericType(
                               ShardKey.TypeFromShardKeyType(ssm.KeyType)),
                           BindingFlags.NonPublic | BindingFlags.Instance,
                           null,
                           new object[] { manager, ssm },
                           CultureInfo.InvariantCulture));

            default:
                Debug.Assert(ssm.MapType == ShardMapType.Range);
                // Create RangeShardMap<TKey>
                return((ShardMap)Activator.CreateInstance(
                           typeof(RangeShardMap <>).MakeGenericType(
                               ShardKey.TypeFromShardKeyType(ssm.KeyType)),
                           BindingFlags.NonPublic | BindingFlags.Instance,
                           null,
                           new object[] { manager, ssm },
                           CultureInfo.InvariantCulture));
            }
        }
        /// <summary>
        /// Finds a shard map from cache if requested and if necessary from global shard map.
        /// </summary>
        /// <param name="operationName">Operation name, useful for diagnostics.</param>
        /// <param name="shardMapName">Name of shard map.</param>
        /// <param name="lookInCacheFirst">Whether to skip first lookup in cache.</param>
        /// <returns>Shard map object corresponding to one being searched.</returns>
        internal ShardMap LookupShardMapByName(string operationName, string shardMapName, bool lookInCacheFirst)
        {
            IStoreShardMap ssm = null;

            if (lookInCacheFirst)
            {
                // Typical scenario will result in immediate lookup succeeding.
                ssm = this.Cache.LookupShardMapByName(shardMapName);
            }

            ShardMap shardMap;

            // Cache miss. Go to store and add entry to cache.
            if (ssm == null)
            {
                Stopwatch stopwatch = Stopwatch.StartNew();

                shardMap = this.LookupShardMapByNameInStore(operationName, shardMapName);

                stopwatch.Stop();

                Tracer.TraceInfo(TraceSourceConstants.ComponentNames.ShardMapManager,
                                 "LookupShardMapByName", "Lookup ShardMap: {0} in store complete; Duration: {1}",
                                 shardMapName, stopwatch.Elapsed);
            }
            else
            {
                shardMap = ShardMapUtils.CreateShardMapFromStoreShardMap(this, ssm);
            }

            return(shardMap);
        }
 /// <summary>
 /// Adds a shard to global shard map.
 /// </summary>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="ssm">Storage representation of shard map object.</param>
 private void AddShardMapToStore(string operationName, IStoreShardMap ssm)
 {
     using (IStoreOperationGlobal op = this.StoreOperationFactory.CreateAddShardMapGlobalOperation(this, operationName, ssm))
     {
         op.Do();
     }
 }
예제 #11
0
        /// <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);
        }
예제 #12
0
 /// <summary>
 /// Constructs request to get shard with specific location for given shard map from GSM.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMap">Shard map for which shard is being requested.</param>
 /// <param name="location">Location of shard being searched.</param>
 internal FindShardByLocationGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, ShardLocation location) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMapManager = shardMapManager;
     _shardMap        = shardMap;
     _location        = location;
 }
 /// <summary>
 /// Constructs request to get shard with specific location for given shard map from GSM.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMap">Shard map for which shard is being requested.</param>
 /// <param name="location">Location of shard being searched.</param>
 internal FindShardByLocationGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, ShardLocation location) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMapManager = shardMapManager;
     _shardMap = shardMap;
     _location = location;
 }
예제 #14
0
        /// <summary>
        /// Constructs a new instance.
        /// </summary>
        /// <param name="manager">Reference to ShardMapManager.</param>
        /// <param name="ssm">Storage representation.</param>
        internal ListShardMap(ShardMapManager manager, IStoreShardMap ssm) : base(manager, ssm)
        {
            Debug.Assert(manager != null);
            Debug.Assert(ssm != null);

            _lsm = new ListShardMapper <TKey>(this.Manager, this);
        }
예제 #15
0
        /// <summary>
        /// Converts IStoreShardMap to ShardMap.
        /// </summary>
        /// <param name="manager">Reference to shard map manager.</param>
        /// <param name="ssm">Storage representation for ShardMap.</param>
        /// <returns>ShardMap object corresponding to storange representation.</returns>
        internal static ShardMap CreateShardMapFromStoreShardMap(
            ShardMapManager manager,
            IStoreShardMap ssm)
        {
            switch (ssm.MapType)
            {
                case ShardMapType.List:
                    // Create ListShardMap<TKey>
                    return (ShardMap)Activator.CreateInstance(
                            typeof(ListShardMap<>).MakeGenericType(
                                ShardKey.TypeFromShardKeyType(ssm.KeyType)),
                            BindingFlags.NonPublic | BindingFlags.Instance,
                            null,
                            new object[] { manager, ssm },
                            CultureInfo.InvariantCulture);

                default:
                    Debug.Assert(ssm.MapType == ShardMapType.Range);
                    // Create RangeShardMap<TKey>
                    return (ShardMap)Activator.CreateInstance(
                            typeof(RangeShardMap<>).MakeGenericType(
                                ShardKey.TypeFromShardKeyType(ssm.KeyType)),
                            BindingFlags.NonPublic | BindingFlags.Instance,
                            null,
                            new object[] { manager, ssm },
                            CultureInfo.InvariantCulture);
            }
        }
예제 #16
0
 /// <summary>
 /// Creates request to update shard in given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which to remove shard.</param>
 /// <param name="shardOld">Shard to update.</param>
 /// <param name="shardNew">Updated shard.</param>
 protected internal UpdateShardOperation(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shardOld,
     IStoreShard shardNew) :
     this(shardMapManager, Guid.NewGuid(), StoreOperationState.UndoBegin, shardMap, shardOld, shardNew)
 {
 }
 /// <summary>
 /// Constructs request for replacing the GSM mappings for given shard map with the input mappings.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation name.</param>
 /// <param name="shardMap">GSM Shard map.</param>
 /// <param name="shard">GSM Shard.</param>
 /// <param name="mappingsToRemove">Optional list of mappings to remove.</param>
 /// <param name="mappingsToAdd">List of mappings to add.</param>
 internal ReplaceMappingsGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable<IStoreMapping> mappingsToRemove, IEnumerable<IStoreMapping> mappingsToAdd) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMap = shardMap;
     _shard = shard;
     _mappingsToRemove = mappingsToRemove;
     _mappingsToAdd = mappingsToAdd;
 }
 /// <summary>
 /// Creates request to update shard in given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which to remove shard.</param>
 /// <param name="shardOld">Shard to update.</param>
 /// <param name="shardNew">Updated shard.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateUpdateShardOperation(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shardOld,
     IStoreShard shardNew)
 {
     return(new UpdateShardOperation(shardMapManager, shardMap, shardOld, shardNew));
 }
 /// <summary>
 /// Constructs request for obtaining mapping from GSM based on given key.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation being executed.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="mapping">Mapping whose Id will be used.</param>
 /// <param name="errorCategory">Error category.</param>
 internal FindMappingByIdGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreMapping mapping, ShardManagementErrorCategory errorCategory) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _manager = shardMapManager;
     _shardMap = shardMap;
     _mapping = mapping;
     _errorCategory = errorCategory;
 }
예제 #20
0
 /// <summary>
 /// Constructs request for replacing the GSM mappings for given shard map with the input mappings.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation name.</param>
 /// <param name="shardMap">GSM Shard map.</param>
 /// <param name="shard">GSM Shard.</param>
 /// <param name="mappingsToRemove">Optional list of mappings to remove.</param>
 /// <param name="mappingsToAdd">List of mappings to add.</param>
 internal ReplaceMappingsGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable <IStoreMapping> mappingsToRemove, IEnumerable <IStoreMapping> mappingsToAdd) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMap         = shardMap;
     _shard            = shard;
     _mappingsToRemove = mappingsToRemove;
     _mappingsToAdd    = mappingsToAdd;
 }
 /// <summary>
 /// Constructs request for obtaining mapping from GSM based on given key.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation being executed.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="mapping">Mapping whose Id will be used.</param>
 /// <param name="errorCategory">Error category.</param>
 internal FindMappingByIdGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreMapping mapping, ShardManagementErrorCategory errorCategory) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _manager       = shardMapManager;
     _shardMap      = shardMap;
     _mapping       = mapping;
     _errorCategory = errorCategory;
 }
예제 #22
0
 internal NTimeFailingRemoveShardMapGlobalOperation(
     int failureCountMax,
     ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap) :
     base(shardMapManager, operationName, shardMap)
 {
     _failureCountMax     = failureCountMax;
     _currentFailureCount = 0;
 }
 /// <summary>
 /// Constructs request to get all shards for given shard map from GSM.
 /// </summary>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which shards are being requested.</param>
 internal GetShardsGlobalOperation(
     string operationName,
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMapManager = shardMapManager;
     _shardMap = shardMap;
 }
 /// <summary>
 /// Constructs request to get all shards for given shard map from GSM.
 /// </summary>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which shards are being requested.</param>
 internal GetShardsGlobalOperation(
     string operationName,
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _shardMapManager = shardMapManager;
     _shardMap        = shardMap;
 }
 /// <summary>
 /// Constructs request to remove given shard map from GSM.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMap">Shard map to remove.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperationGlobal CreateRemoveShardMapGlobalOperation(
     ShardMapManager shardMapManager,
     string operationName,
     IStoreShardMap shardMap)
 {
     return(new RemoveShardMapGlobalOperation(
                shardMapManager,
                operationName,
                shardMap));
 }
예제 #26
0
 internal NTimeFailingRemoveShardOperation(
     int failureCountMax,
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shard) :
     base(shardMapManager, shardMap, shard)
 {
     _failureCountMax     = failureCountMax;
     _currentFailureCount = 0;
 }
 /// <summary>
 /// Constructs request to get all shards for given shard map from GSM.
 /// </summary>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="shardMap">Shard map for which shards are being requested.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperationGlobal CreateGetShardsGlobalOperation(
     string operationName,
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap)
 {
     return(new GetShardsGlobalOperation(
                operationName,
                shardMapManager,
                shardMap));
 }
 /// <summary>
 /// Creates request to attach shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="shardMap">Shard map for which to attach shard.</param>
 /// <param name="shard">Shard to attach.</param>
 internal AttachShardOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     IStoreShardMap shardMap,
     IStoreShard shard) :
     base(shardMapManager, operationId, undoStartState, StoreOperationCode.AttachShard, default(Guid), default(Guid))
 {
     _shardMap = shardMap;
     _shard    = shard;
 }
 /// <summary>
 /// Constructs request for obtaining all the mappings from GSM based on given shard and mappings.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation being executed.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="shard">Local shard.</param>
 /// <param name="range">Optional range to get mappings from.</param>
 /// <param name="errorCategory">Error category.</param>
 /// <param name="cacheResults">Whether to cache the results of the operation.</param>
 /// <param name="ignoreFailure">Ignore shard map not found error.</param>
 internal GetMappingsByRangeGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, ShardManagementErrorCategory errorCategory, bool cacheResults, bool ignoreFailure) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _manager       = shardMapManager;
     _shardMap      = shardMap;
     _shard         = shard;
     _range         = range;
     _errorCategory = errorCategory;
     _cacheResults  = cacheResults;
     _ignoreFailure = ignoreFailure;
 }
 /// <summary>
 /// Constructs request for obtaining all the mappings from GSM based on given shard and mappings.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation being executed.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="shard">Local shard.</param>
 /// <param name="range">Optional range to get mappings from.</param>
 /// <param name="errorCategory">Error category.</param>
 /// <param name="cacheResults">Whether to cache the results of the operation.</param>
 /// <param name="ignoreFailure">Ignore shard map not found error.</param>
 internal GetMappingsByRangeGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, ShardManagementErrorCategory errorCategory, bool cacheResults, bool ignoreFailure) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _manager = shardMapManager;
     _shardMap = shardMap;
     _shard = shard;
     _range = range;
     _errorCategory = errorCategory;
     _cacheResults = cacheResults;
     _ignoreFailure = ignoreFailure;
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="shardMap">Shard map for which to add shard.</param>
 /// <param name="shard">Shard to add.</param>
 internal AddShardOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     IStoreShardMap shardMap,
     IStoreShard shard) :
     base(shardMapManager, operationId, undoStartState, StoreOperationCode.AddShard, default(Guid), default(Guid))
 {
     _shardMap = shardMap;
     _shard = shard;
 }
예제 #32
0
 internal NTimeFailingUpdateShardOperation(
     int failureCountMax,
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shardOld,
     IStoreShard shardNew) :
     base(shardMapManager, shardMap, shardOld, shardNew)
 {
     _failureCountMax     = failureCountMax;
     _currentFailureCount = 0;
 }
 /// <summary>
 /// Constructs request to get shard with specific location for given shard map from GSM.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationName">Operation name, useful for diagnostics.</param>
 /// <param name="shardMap">Shard map for which shard is being requested.</param>
 /// <param name="location">Location of shard being searched.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperationGlobal CreateFindShardByLocationGlobalOperation(
     ShardMapManager shardMapManager,
     string operationName,
     IStoreShardMap shardMap,
     ShardLocation location)
 {
     return(new FindShardByLocationGlobalOperation(
                shardMapManager,
                operationName,
                shardMap,
                location));
 }
        /// <summary>
        /// Constructs request to lock or unlock given mappings in GSM.
        /// </summary>
        /// <param name="shardMapManager">Shard map manager object.</param>
        /// <param name="operationName">Operation name, useful for diagnostics.</param>
        /// <param name="shardMap">Shard map to add.</param>
        /// <param name="mapping">Mapping to lock or unlock. Null means all mappings.</param>
        /// <param name="lockOwnerId">Lock owner.</param>
        /// <param name="lockOpType">Lock operation type.</param>
        /// <param name="errorCategory">Error category.</param>
        internal LockOrUnLockMappingsGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreMapping mapping, Guid lockOwnerId, LockOwnerIdOpType lockOpType, ShardManagementErrorCategory errorCategory) :
            base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
        {
            _shardMapManager = shardMapManager;
            _shardMap = shardMap;
            _mapping = mapping;
            _lockOwnerId = lockOwnerId;
            _lockOpType = lockOpType;
            _errorCategory = errorCategory;

            Debug.Assert(mapping != null || (lockOpType == LockOwnerIdOpType.UnlockAllMappingsForId || lockOpType == LockOwnerIdOpType.UnlockAllMappings));
        }
 /// <summary>
 /// Raise conversion exception.
 /// </summary>
 /// <typeparam name="TKey">Key type.</typeparam>
 /// <param name="ssm">Shard map whose conversion failed.</param>
 /// <param name="targetKind">Requested type of shard map.</param>
 private static ShardManagementException GetConversionException <TKey>(IStoreShardMap ssm, string targetKind)
 {
     return(new ShardManagementException(
                ShardManagementErrorCategory.ShardMapManager,
                ShardManagementErrorCode.ShardMapTypeConversionError,
                Errors._ShardMapExtensions_AsTypedShardMap_ConversionFailure,
                ssm.Name,
                targetKind,
                typeof(TKey).Name,
                ssm.MapType.ToString(),
                ssm.KeyType == ShardKeyType.None ? string.Empty : ShardKey.TypeFromShardKeyType(ssm.KeyType).Name));
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to add mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateAddMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping)
 {
     return(new AddMappingOperation(
                shardMapManager,
                operationCode,
                shardMap,
                mapping));
 }
예제 #37
0
        /// <summary>
        /// Constructs request to lock or unlock given mappings in GSM.
        /// </summary>
        /// <param name="shardMapManager">Shard map manager object.</param>
        /// <param name="operationName">Operation name, useful for diagnostics.</param>
        /// <param name="shardMap">Shard map to add.</param>
        /// <param name="mapping">Mapping to lock or unlock. Null means all mappings.</param>
        /// <param name="lockOwnerId">Lock owner.</param>
        /// <param name="lockOpType">Lock operation type.</param>
        /// <param name="errorCategory">Error category.</param>
        internal LockOrUnLockMappingsGlobalOperation(ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreMapping mapping, Guid lockOwnerId, LockOwnerIdOpType lockOpType, ShardManagementErrorCategory errorCategory) :
            base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
        {
            _shardMapManager = shardMapManager;
            _shardMap        = shardMap;
            _mapping         = mapping;
            _lockOwnerId     = lockOwnerId;
            _lockOpType      = lockOpType;
            _errorCategory   = errorCategory;

            Debug.Assert(mapping != null || (lockOpType == LockOwnerIdOpType.UnlockAllMappingsForId || lockOpType == LockOwnerIdOpType.UnlockAllMappings));
        }
예제 #38
0
        /// <summary>
        /// Invoked for deleting shard map in cache becase it no longer exists in store.
        /// </summary>
        /// <param name="shardMap">Storage representation of shard map.</param>
        public virtual void DeleteShardMap(IStoreShardMap shardMap)
        {
            using (WriteLockScope wls = _cacheRoot.GetWriteLockScope())
            {
                _cacheRoot.Remove(shardMap);

                Tracer.TraceVerbose(
                    TraceSourceConstants.ComponentNames.ShardMapManager,
                    "OnDeleteShardMap",
                    "Cache delete complete. ShardMap: {0}",
                    shardMap.Name);
            }
        }
예제 #39
0
 /// <summary>
 /// Instantiates a new instance of range mapping comparison result.
 /// </summary>
 /// <param name="ssm">Store representation of shard map.</param>
 /// <param name="range">Range being considered.</param>
 /// <param name="mappingLocation">Location of mapping.</param>
 /// <param name="gsmMapping">Storage representation of GSM mapping.</param>
 /// <param name="lsmMapping">Storange representation of LSM mapping.</param>
 internal MappingComparisonResult(
     IStoreShardMap ssm,
     ShardRange range,
     MappingLocation mappingLocation,
     IStoreMapping gsmMapping,
     IStoreMapping lsmMapping)
 {
     this.ShardMap               = ssm;
     this.Range                  = range;
     this.MappingLocation        = mappingLocation;
     this.ShardMapManagerMapping = gsmMapping;
     this.ShardMapping           = lsmMapping;
 }
예제 #40
0
        /// <summary>
        /// Invoked for deleting shard map in cache becase it no longer exists in store.
        /// </summary>
        /// <param name="shardMap">Storage representation of shard map.</param>
        public virtual void DeleteShardMap(IStoreShardMap shardMap)
        {
            using (WriteLockScope wls = _cacheRoot.GetWriteLockScope())
            {
                _cacheRoot.Remove(shardMap);

                Tracer.TraceVerbose(
                    TraceSourceConstants.ComponentNames.ShardMapManager,
                    "OnDeleteShardMap",
                    "Cache delete complete. ShardMap: {0}",
                    shardMap.Name);
            }
        }
 /// <summary>
 /// Instantiates a new instance of range mapping comparison result.
 /// </summary>
 /// <param name="ssm">Store representation of shard map.</param>
 /// <param name="range">Range being considered.</param>
 /// <param name="mappingLocation">Location of mapping.</param>
 /// <param name="gsmMapping">Storage representation of GSM mapping.</param>
 /// <param name="lsmMapping">Storange representation of LSM mapping.</param>
 internal MappingComparisonResult(
     IStoreShardMap ssm,
     ShardRange range,
     MappingLocation mappingLocation,
     IStoreMapping gsmMapping,
     IStoreMapping lsmMapping)
 {
     this.ShardMap = ssm;
     this.Range = range;
     this.MappingLocation = mappingLocation;
     this.ShardMapManagerMapping = gsmMapping;
     this.ShardMapping = lsmMapping;
 }
        /// <summary>
        /// Helper function that produces a list of MappingComparisonResults from union of points in the gsmMappings and lsmMappings.
        /// </summary>
        /// <param name="ssm">StoreShardmap to be referenced in produced MappingComparisonResults</param>
        /// <param name="gsmMappings">List of mappings from the GSM.</param>
        /// <param name="lsmMappings">List of mappings from the LSM.</param>
        /// <returns>List of mappingcomparisonresults: one for each range arising from the union of boundaries in gsmMappings and lsmMappings.</returns>
        internal static List <MappingComparisonResult> ComparePointMappings(
            IStoreShardMap ssm,
            IEnumerable <IStoreMapping> gsmMappings,
            IEnumerable <IStoreMapping> lsmMappings)
        {
            ShardKeyType keyType = ssm.KeyType;
            // Get a Linq-able set of points from the input mappings.
            //
            IDictionary <ShardKey, IStoreMapping> gsmPoints =
                gsmMappings.ToDictionary(gsmMapping => ShardKey.FromRawValue(keyType, gsmMapping.MinValue));
            IDictionary <ShardKey, IStoreMapping> lsmPoints =
                lsmMappings.ToDictionary(lsmMapping => ShardKey.FromRawValue(keyType, lsmMapping.MinValue));

            // Construct the output list. This is the concatenation of 3 mappings:
            //  1.) Intersection (the key exists in both the shardmap and the shard.)
            //  2.) Shard only (the key exists only in the shard.)
            //  3.) Shardmap only (the key exists only in the shardmap.)
            //
            List <MappingComparisonResult> results = (new List <MappingComparisonResult>()).Concat(
                // Intersection.
                lsmPoints.Keys.Intersect(gsmPoints.Keys).Select(
                    commonPoint =>
                    new MappingComparisonResult(
                        ssm,
                        new ShardRange(commonPoint, commonPoint.GetNextKey()),
                        MappingLocation.MappingInShardMapAndShard,
                        gsmPoints[commonPoint],
                        lsmPoints[commonPoint]))
                ).Concat(
                // Lsm only.
                lsmPoints.Keys.Except(gsmPoints.Keys).Select(
                    lsmOnlyPoint =>
                    new MappingComparisonResult(
                        ssm,
                        new ShardRange(lsmOnlyPoint, lsmOnlyPoint.GetNextKey()),
                        MappingLocation.MappingInShardOnly,
                        null,
                        lsmPoints[lsmOnlyPoint]))
                ).Concat(
                // Gsm only.
                gsmPoints.Keys.Except(lsmPoints.Keys).Select(
                    gsmOnlyPoint =>
                    new MappingComparisonResult(
                        ssm,
                        new ShardRange(gsmOnlyPoint, gsmOnlyPoint.GetNextKey()),
                        MappingLocation.MappingInShardMapOnly,
                        gsmPoints[gsmOnlyPoint],
                        null))).ToList();

            return(results);
        }
 internal MappingDifference(
     MappingDifferenceType type,
     MappingLocation location,
     IStoreShardMap shardMap,
     IStoreMapping mappingForShardMap,
     IStoreMapping mappingForShard
     )
 {
     this.Type = type;
     this.Location = location;
     this.ShardMap = shardMap;
     this.MappingForShardMap = mappingForShardMap;
     this.MappingForShard = mappingForShard;
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to add mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 protected internal AddMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping) :
     this(
     shardMapManager,
     Guid.NewGuid(),
     StoreOperationState.UndoBegin,
     operationCode,
     shardMap,
     mapping,
     default(Guid))
 {
 }
예제 #45
0
        /// <summary>
        /// Constructs the cached shard map.
        /// </summary>
        /// <param name="ssm">Storage representation of shard map.</param>
        internal CacheShardMap(IStoreShardMap ssm)
            : base()
        {
            this.StoreShardMap = ssm;

            switch (ssm.MapType)
            {
                case ShardMapType.List:
                    this.Mapper = new CacheListMapper(ssm.KeyType);
                    break;
                case ShardMapType.Range:
                    this.Mapper = new CacheRangeMapper(ssm.KeyType);
                    break;
            }
        }
 /// <summary>
 /// Constructs request for replacing the LSM mappings for given shard map with the input mappings.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="location">Location of the LSM.</param>
 /// <param name="operationName">Operation name.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="shard">Local shard.</param>
 /// <param name="rangesToRemove">Optional list of ranges to minimize amount of deletions.</param>
 /// <param name="mappingsToAdd">List of mappings to add.</param>
 internal ReplaceMappingsLocalOperation(
     ShardMapManager shardMapManager,
     ShardLocation location,
     string operationName,
     IStoreShardMap shardMap,
     IStoreShard shard,
     IEnumerable<ShardRange> rangesToRemove,
     IEnumerable<IStoreMapping> mappingsToAdd) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, location, operationName)
 {
     _shardMap = shardMap;
     _shard = shard;
     _rangesToRemove = rangesToRemove;
     _mappingsToAdd = mappingsToAdd;
 }
 /// <summary>
 /// Serializes shard map to xml.
 /// </summary>
 /// <param name="name">Element name for shard map.</param>
 /// <param name="shardMap">Shard Map to serialize.</param>
 /// <returns>XElement representing Shard Map.</returns>
 internal static XElement WriteIStoreShardMap(string name, IStoreShardMap shardMap)
 {
     if (shardMap == null)
     {
         return new XElement(name, new XAttribute("Null", 1));
     }
     else
     {
         return new XElement(name,
             new XAttribute("Null", 0),
             new XElement("Id", shardMap.Id),
             new XElement("Name", shardMap.Name),
             new XElement("Kind", (int)shardMap.MapType),
             new XElement("KeyKind", (int)shardMap.KeyType));
     }
 }
 /// <summary>
 /// Creates request to replace mappings within shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to update mapping.</param>
 /// <param name="mappingsSource">Original mappings.</param>
 /// <param name="mappingsTarget">Target mappings mapping.</param>
 protected internal ReplaceMappingsOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     Tuple<IStoreMapping, Guid>[] mappingsSource,
     Tuple<IStoreMapping, Guid>[] mappingsTarget) :
     this(
     shardMapManager,
     Guid.NewGuid(),
     StoreOperationState.UndoBegin,
     operationCode,
     shardMap,
     mappingsSource,
     mappingsTarget,
     default(Guid))
 {
 }
        /// <summary>
        /// Constructs request for obtaining all the shard maps and shards from an LSM.
        /// </summary>
        /// <param name="shardMapManager">Shard map manager.</param>
        /// <param name="location">Location of the LSM.</param>
        /// <param name="operationName">Operation name.</param>
        /// <param name="shardMap">Local shard map.</param>
        /// <param name="shard">Local shard.</param>
        /// <param name="range">Optional range to get mappings from.</param>
        /// <param name="ignoreFailure">Ignore shard map not found error.</param>
        internal GetMappingsByRangeLocalOperation(
            ShardMapManager shardMapManager,
            ShardLocation location,
            string operationName,
            IStoreShardMap shardMap,
            IStoreShard shard,
            ShardRange range,
            bool ignoreFailure) :
            base(shardMapManager.Credentials, shardMapManager.RetryPolicy, location, operationName)
        {
            Debug.Assert(shard != null);

            _shardMap = shardMap;
            _shard = shard;
            _range = range;
            _ignoreFailure = ignoreFailure;
        }
예제 #50
0
        /// <summary>
        /// Constructs the cached shard map.
        /// </summary>
        /// <param name="ssm">Storage representation of shard map.</param>
        internal CacheShardMap(IStoreShardMap ssm)
            : base()
        {
            this.StoreShardMap = ssm;

            switch (ssm.MapType)
            {
                case ShardMapType.List:
                    this.Mapper = new CacheListMapper(ssm.KeyType);
                    break;
                case ShardMapType.Range:
                    this.Mapper = new CacheRangeMapper(ssm.KeyType);
                    break;
            }

            this._perfCounters = new PerfCounterInstance(ssm.Name);
        }
 /// <summary>
 /// Creates request to update shard in given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="shardMap">Shard map for which to remove shard.</param>
 /// <param name="shardOld">Shard to update.</param>
 /// <param name="shardNew">Updated shard.</param>
 internal UpdateShardOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     IStoreShardMap shardMap,
     IStoreShard shardOld,
     IStoreShard shardNew) :
     base(
     shardMapManager,
     operationId,
     undoStartState,
     StoreOperationCode.UpdateShard,
     default(Guid),
     default(Guid))
 {
     _shardMap = shardMap;
     _shardOld = shardOld;
     _shardNew = shardNew;
 }
 /// <summary>
 /// Constructs request for obtaining mapping from GSM based on given key.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager.</param>
 /// <param name="operationName">Operation being executed.</param>
 /// <param name="shardMap">Local shard map.</param>
 /// <param name="key">Key for lookup operation.</param>
 /// <param name="policy">Policy for cache update.</param>
 /// <param name="errorCategory">Error category.</param>
 /// <param name="cacheResults">Whether to cache the results of the operation.</param>
 /// <param name="ignoreFailure">Ignore shard map not found error.</param>
 protected internal FindMappingByKeyGlobalOperation(
     ShardMapManager shardMapManager,
     string operationName,
     IStoreShardMap shardMap,
     ShardKey key,
     CacheStoreMappingUpdatePolicy policy,
     ShardManagementErrorCategory errorCategory,
     bool cacheResults,
     bool ignoreFailure) :
     base(shardMapManager.Credentials, shardMapManager.RetryPolicy, operationName)
 {
     _manager = shardMapManager;
     _shardMap = shardMap;
     _key = key;
     _policy = policy;
     _errorCategory = errorCategory;
     _cacheResults = cacheResults;
     _ignoreFailure = ignoreFailure;
 }
 /// <summary>
 /// Creates request to replace mappings within shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to update mapping.</param>
 /// <param name="mappingsSource">Original mappings.</param>
 /// <param name="mappingsTarget">Target mappings mapping.</param>
 /// <param name="originalShardVersionAdds">Original shard version on source.</param>
 internal ReplaceMappingsOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     Tuple<IStoreMapping, Guid>[] mappingsSource,
     Tuple<IStoreMapping, Guid>[] mappingsTarget,
     Guid originalShardVersionAdds) :
     base(
     shardMapManager,
     operationId,
     undoStartState,
     operationCode,
     originalShardVersionAdds,
     originalShardVersionAdds)
 {
     _shardMap = shardMap;
     _mappingsSource = mappingsSource;
     _mappingsTarget = mappingsTarget;
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to add mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 /// <param name="originalShardVersionAdds">Original shard version.</param>
 internal AddMappingOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping,
     Guid originalShardVersionAdds) :
     base(
     shardMapManager,
     operationId,
     undoStartState,
     operationCode,
     default(Guid),
     originalShardVersionAdds)
 {
     _shardMap = shardMap;
     _mapping = mapping;
     _errorCategory = operationCode == StoreOperationCode.AddRangeMapping ?
         ShardManagementErrorCategory.RangeShardMap :
         ShardManagementErrorCategory.ListShardMap;
 }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map for which to update mapping.</param>
 /// <param name="mappingSource">Mapping to update.</param>
 /// <param name="mappingTarget">Updated mapping.</param>
 /// <param name="patternForKill">Pattern for kill commands.</param>
 /// <param name="lockOwnerId">Id of lock owner.</param>
 protected internal UpdateMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mappingSource,
     IStoreMapping mappingTarget,
     string patternForKill,
     Guid lockOwnerId) :
     this(
     shardMapManager,
     Guid.NewGuid(),
     StoreOperationState.UndoBegin,
     operationCode,
     shardMap,
     mappingSource,
     mappingTarget,
     patternForKill,
     lockOwnerId,
     default(Guid),
     default(Guid))
 {
 }
        /// <summary>
        /// Execute the operation against GSM in the current transaction scope.
        /// </summary>
        /// <param name="ts">Transaction scope.</param>
        /// <returns>
        /// Results of the operation.
        /// </returns>
        public override IStoreResults DoGlobalExecute(IStoreTransactionScope ts)
        {
            _loadResults.Clear();

            IStoreResults result = ts.ExecuteOperation(
                StoreOperationRequestBuilder.SpGetAllShardMapsGlobal,
                StoreOperationRequestBuilder.GetAllShardMapsGlobal());

            if (result.Result == StoreResult.Success)
            {
                foreach (IStoreShardMap ssm in result.StoreShardMaps)
                {
                    _ssmCurrent = ssm;

                    result = ts.ExecuteOperation(
                        StoreOperationRequestBuilder.SpGetAllShardMappingsGlobal,
                        StoreOperationRequestBuilder.GetAllShardMappingsGlobal(ssm, null, null));

                    if (result.Result == StoreResult.Success)
                    {
                        _loadResults.Add(
                            new LoadResult
                            {
                                ShardMap = ssm,
                                Mappings = result.StoreMappings
                            });
                    }
                    else
                    if (result.Result != StoreResult.ShardMapDoesNotExist)
                    {
                        // Ignore some possible failures for Load operation and skip failed
                        // shard map caching operations.
                        break;
                    }
                }
            }

            return result;
        }
        /// <summary>
        /// Returns the proper ShardManagementException corresponding to given error code in 
        /// <paramref name="result"/> for ShardMapManager operations.
        /// </summary>
        /// <param name="result">Operation result object.</param>
        /// <param name="shardMap">Shard map object.</param>
        /// <param name="operationName">Operation being performed.</param>
        /// <param name="storedProcName">Stored procedure being executed.</param>
        /// <returns>ShardManagementException to be raised.</returns>
        internal static ShardManagementException OnShardMapManagerErrorGlobal(
            IStoreResults result,
            IStoreShardMap shardMap,
            string operationName,
            string storedProcName)
        {
            switch (result.Result)
            {
                case StoreResult.ShardMapExists:
                    Debug.Assert(shardMap != null);
                    return new ShardManagementException(
                        ShardManagementErrorCategory.ShardMapManager,
                        ShardManagementErrorCode.ShardMapAlreadyExists,
                        Errors._Store_ShardMap_AlreadyExistsGlobal,
                        shardMap.Name,
                        storedProcName,
                        operationName);

                case StoreResult.ShardMapHasShards:
                    Debug.Assert(shardMap != null);
                    return new ShardManagementException(
                        ShardManagementErrorCategory.ShardMapManager,
                        ShardManagementErrorCode.ShardMapHasShards,
                        Errors._Store_ShardMap_ContainsShardsGlobal,
                        shardMap.Name,
                        storedProcName,
                        operationName);

                case StoreResult.StoreVersionMismatch:
                case StoreResult.MissingParametersForStoredProcedure:
                default:
                    return StoreOperationErrorHandler.OnCommonErrorGlobal(
                        result,
                        operationName,
                        storedProcName);
            }
        }
 /// <summary>
 /// Creates request to add shard to given shard map.
 /// </summary>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="operationCode">Store operation code.</param>
 /// <param name="shardMap">Shard map from which to remove mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 /// <param name="lockOwnerId">Id of lock owner.</param>
 /// <param name="originalShardVersionRemoves">Original shard version.</param>
 internal RemoveMappingOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping,
     Guid lockOwnerId,
     Guid originalShardVersionRemoves) :
     base(
     shardMapManager,
     operationId,
     undoStartState,
     operationCode,
     originalShardVersionRemoves,
     default(Guid))
 {
     _shardMap = shardMap;
     _mapping = mapping;
     _lockOwnerId = lockOwnerId;
     _errorCategory = operationCode == StoreOperationCode.RemoveRangeMapping ?
         ShardManagementErrorCategory.RangeShardMap :
         ShardManagementErrorCategory.ListShardMap;
 }
예제 #59
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;
        }
 internal AddShardOperationFailAfterLocalSource(
     ShardMapManager shardMapManager,
     IStoreShardMap shardMap,
     IStoreShard shard)
     : base(shardMapManager,
     shardMap,
     shard)
 {
 }