/// <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) { }
/// <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> /// Helper function to obtain a store shard object from given recovery token. /// </summary> /// <param name="operationName">Operation name.</param> /// <param name="token">Token from DetectMappingDifferences.</param> /// <param name="ssmLocal">Reference to store shard map corresponding to the token.</param> /// <returns>Store shard object corresponding to given token, or null if shard map is default shard map.</returns> private DefaultStoreShard GetStoreShardFromToken(string operationName, RecoveryToken token, out IStoreShardMap ssmLocal) { Tuple <IStoreShardMap, IStoreShard> shardInfoLocal; if (!this.StoreShardMaps.TryGetValue(token, out shardInfoLocal)) { throw new ArgumentException( StringUtils.FormatInvariant( Errors._Recovery_InvalidRecoveryToken, token), "token"); } ssmLocal = shardInfoLocal.Item1; IStoreShard ssLocal = shardInfoLocal.Item2; ShardLocation location = this.GetShardLocation(token); using (IStoreOperationLocal op = this.Manager.StoreOperationFactory.CreateCheckShardLocalOperation( operationName, this.Manager, location)) { op.Do(); } return(new DefaultStoreShard( ssLocal.Id, ssLocal.Version, ssLocal.ShardMapId, ssLocal.Location, ssLocal.Status)); }
/// <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> protected internal UpdateShardOperation( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) : this(shardMapManager, Guid.NewGuid(), StoreOperationState.UndoBegin, shardMap, shardOld, shardNew) { }
/// <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 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; }
internal NTimeFailingRemoveShardOperation( int failureCountMax, ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shard) : base(shardMapManager, shardMap, shard) { _failureCountMax = failureCountMax; _currentFailureCount = 0; }
internal NTimeFailingUpdateShardOperation( int failureCountMax, ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) : base(shardMapManager, shardMap, shardOld, shardNew) { _failureCountMax = failureCountMax; _currentFailureCount = 0; }
/// <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> /// 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; }
/// <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> /// 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 to xml. /// </summary> /// <param name="name">Element name for shard.</param> /// <param name="shard">Shard to serialize.</param> /// <returns>XElement representing Shard.</returns> internal static XElement WriteIStoreShard(string name, IStoreShard shard) { if (shard == null) { return(new XElement(name, new XAttribute("Null", 1))); } else { return(new XElement(name, new XAttribute("Null", 0), new XElement("Id", shard.Id), new XElement("Version", shard.Version), new XElement("ShardMapId", shard.ShardMapId), WriteShardLocation("Location", shard.Location), new XElement("Status", (int)shard.Status))); } }
/// <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> /// <returns>The store operation.</returns> public virtual IStoreOperationGlobal CreateReplaceMappingsGlobalOperation( ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable <IStoreMapping> mappingsToRemove, IEnumerable <IStoreMapping> mappingsToAdd) { return(new ReplaceMappingsGlobalOperation( shardMapManager, operationName, shardMap, shard, mappingsToRemove, mappingsToAdd)); }
/// <summary> /// Internal constructor that uses storage representation. /// </summary> /// <param name="manager">Owning ShardMapManager.</param> /// <param name="shardMap">Owning shard map.</param> /// <param name="storeShard">Storage representation of the shard.</param> internal Shard( ShardMapManager manager, ShardMap shardMap, IStoreShard storeShard) { Debug.Assert(manager != null); this.Manager = manager; Debug.Assert(shardMap != null); this.ShardMap = shardMap; Debug.Assert(storeShard.ShardMapId != default(Guid)); this.StoreShard = storeShard; _hashCode = this.CalculateHashCode(); }
/// <summary> /// Serializes shard to xml. /// </summary> /// <param name="name">Element name for shard.</param> /// <param name="shard">Shard to serialize.</param> /// <returns>XElement representing Shard.</returns> internal static XElement WriteIStoreShard(string name, IStoreShard shard) { if (shard == null) { return new XElement(name, new XAttribute("Null", 1)); } else { return new XElement(name, new XAttribute("Null", 0), new XElement("Id", shard.Id), new XElement("Version", shard.Version), new XElement("ShardMapId", shard.ShardMapId), WriteShardLocation("Location", shard.Location), new XElement("Status", (int)shard.Status)); } }
/// <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; }
/// <summary> /// Constructs the storage representation from client side objects. /// </summary> /// <param name="id">Identify of mapping.</param> /// <param name="shardMapId">Id of parent shardmap.</param> /// <param name="storeShard">IStoreShard</param> /// <param name="minValue">Min key value.</param> /// <param name="maxValue">Max key value.</param> /// <param name="status">Mapping status.</param> /// <param name="lockOwnerId">Lock owner id.</param> internal DefaultStoreMapping( Guid id, Guid shardMapId, IStoreShard storeShard, byte[] minValue, byte[] maxValue, int status, Guid lockOwnerId) { this.Id = id; this.ShardMapId = shardMapId; this.MinValue = minValue; this.MaxValue = maxValue; this.Status = status; this.LockOwnerId = lockOwnerId; this.StoreShard = storeShard; }
/// <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> public virtual IStoreOperationLocal CreateGetMappingsByRangeLocalOperation( ShardMapManager shardMapManager, ShardLocation location, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, bool ignoreFailure) { return(new GetMappingsByRangeLocalOperation( shardMapManager, location, operationName, shardMap, shard, range, ignoreFailure)); }
/// <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> public virtual IStoreOperationLocal CreateReplaceMappingsLocalOperation( ShardMapManager shardMapManager, ShardLocation location, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable <ShardRange> rangesToRemove, IEnumerable <IStoreMapping> mappingsToAdd) { return(new ReplaceMappingsLocalOperation( shardMapManager, location, operationName, shardMap, shard, rangesToRemove, mappingsToAdd)); }
/// <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; }
public void AttachShard(ShardLocation location, string shardMapName) { ExceptionUtils.DisallowNullArgument(location, "location"); IStoreResults result; using (IStoreOperationLocal op = this.Manager.StoreOperationFactory.CreateGetShardsLocalOperation( this.Manager, location, "AttachShard")) { result = op.Do(); } Debug.Assert(result.Result == StoreResult.Success); IEnumerable <IStoreShardMap> shardMaps = shardMapName == null ? result.StoreShardMaps : result.StoreShardMaps.Where(s => s.Name == shardMapName); shardMaps.ToList <IStoreShardMap>().ForEach((sm) => { IStoreShard shard = result.StoreShards.SingleOrDefault(s => s.ShardMapId == sm.Id); // construct a new store shard with correct location DefaultStoreShard sNew = new DefaultStoreShard( shard.Id, shard.Version, shard.ShardMapId, location, shard.Status); using (IStoreOperation op = this.Manager.StoreOperationFactory.CreateAttachShardOperation( this.Manager, sm, sNew)) { op.Do(); } }); }
/// <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> /// <returns>The store operation.</returns> public virtual IStoreOperationGlobal CreateGetMappingsByRangeGlobalOperation( ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, ShardManagementErrorCategory errorCategory, bool cacheResults, bool ignoreFailure) { return(new GetMappingsByRangeGlobalOperation( shardMapManager, operationName, shardMap, shard, range, errorCategory, cacheResults, ignoreFailure)); }
/// <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="shard">Shard object.</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 OnRecoveryErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardLocationExists: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardLocationAlreadyExists, Errors._Store_Shard_LocationAlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardMapExists: Debug.Assert(shardMap != null); return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapAlreadyExists, Errors._Store_ShardMap_AlreadyExistsGlobal, shardMap.Name, storedProcName, operationName)); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return(StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName)); } }
/// <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="shard">Shard object.</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 OnRecoveryErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardLocationExists: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardLocationAlreadyExists, Errors._Store_Shard_LocationAlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardMapExists: Debug.Assert(shardMap != null); return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapAlreadyExists, Errors._Store_ShardMap_AlreadyExistsGlobal, shardMap.Name, storedProcName, operationName); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName); } }
/// <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="shard">Shard object.</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 OnShardMapErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardMapDoesNotExist: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapDoesNotExist, Errors._Store_ShardMap_DoesNotExistGlobal, shardMap.Name, storedProcName, operationName, shard != null ? shard.Location.ToString() : "*")); case StoreResult.ShardExists: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardAlreadyExists, Errors._Store_Shard_AlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardLocationExists: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardLocationAlreadyExists, Errors._Store_Shard_LocationAlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardDoesNotExist: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardDoesNotExist, Errors._Store_Shard_DoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardVersionMismatch: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardVersionMismatch, Errors._Store_Shard_VersionMismatchGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardHasMappings: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardHasMappings, Errors._Store_Shard_HasMappingsGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return(StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName)); } }
/// <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> public virtual IStoreOperationLocal CreateGetMappingsByRangeLocalOperation( ShardMapManager shardMapManager, ShardLocation location, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, bool ignoreFailure) { return new GetMappingsByRangeLocalOperation( shardMapManager, location, operationName, shardMap, shard, range, ignoreFailure); }
/// <summary> /// Returns the proper ShardManagementException corresponding to given error code in /// <paramref name="result"/> for ShardMapper operations. /// </summary> /// <param name="result">Operation result object.</param> /// <param name="shardMap">Shard map object.</param> /// <param name="shard">Shard object.</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 OnShardMapperErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardMapDoesNotExist: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapDoesNotExist, Errors._Store_ShardMap_DoesNotExistGlobal, shardMap.Name, storedProcName, operationName, shard != null ? shard.Location.ToString() : "*")); case StoreResult.ShardDoesNotExist: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardDoesNotExist, Errors._Store_Shard_DoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.ShardVersionMismatch: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardVersionMismatch, Errors._Store_Shard_VersionMismatchGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.MappingDoesNotExist: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingDoesNotExist, Errors._Store_ShardMapper_MappingDoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.MappingRangeAlreadyMapped: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingRangeAlreadyMapped, Errors._Store_ShardMapper_MappingPointOrRangeAlreadyMapped, shard.Location, shardMap.Name, "Range", storedProcName, operationName)); case StoreResult.MappingPointAlreadyMapped: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingPointAlreadyMapped, Errors._Store_ShardMapper_MappingPointOrRangeAlreadyMapped, shard.Location, shardMap.Name, "Point", storedProcName, operationName)); case StoreResult.MappingNotFoundForKey: Debug.Fail("MappingNotFoundForKey should not be raised during SqlOperation."); return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingNotFoundForKey, Errors._Store_ShardMapper_MappingNotFoundForKeyGlobal, shardMap.Name, storedProcName, operationName)); case StoreResult.MappingIsAlreadyLocked: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingIsAlreadyLocked, Errors._Store_ShardMapper_LockMappingAlreadyLocked, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.MappingLockOwnerIdDoesNotMatch: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingLockOwnerIdDoesNotMatch, Errors._Store_ShardMapper_LockOwnerDoesNotMatch, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.MappingIsNotOffline: return(new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingIsNotOffline, Errors._Store_ShardMapper_MappingIsNotOffline, shard.Location, shardMap.Name, storedProcName, operationName)); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return(StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName)); } }
internal UpdateShardOperationFailAfterGlobalPreLocal( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) : base(shardMapManager, shardMap, shardOld, shardNew) { }
internal AddShardOperationFailAfterGlobalPreLocal( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shard) : base(shardMapManager, shardMap, shard) { }
/// <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 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> /// Request to attach shard to GSM. /// </summary> /// <param name="shardMap">Shard map to attach.</param> /// <param name="shard">Shard to attach.</param> /// <returns>Xml formatted request.</returns> internal static XElement AttachShardGlobal(IStoreShardMap shardMap, IStoreShard shard) { return new XElement( @"AttachShardGlobal", StoreOperationRequestBuilder.s_gsmVersion, StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap), StoreObjectFormatterXml.WriteIStoreShard("Shard", shard)); }
/// <summary> /// Returns the proper ShardManagementException corresponding to given error code in /// <paramref name="result"/> for ShardMapper operations. /// </summary> /// <param name="result">Operation result object.</param> /// <param name="shardMap">Shard map object.</param> /// <param name="shard">Shard object.</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 OnShardMapperErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardMapDoesNotExist: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapDoesNotExist, Errors._Store_ShardMap_DoesNotExistGlobal, shardMap.Name, storedProcName, operationName, shard != null ? shard.Location.ToString() : "*"); case StoreResult.ShardDoesNotExist: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardDoesNotExist, Errors._Store_Shard_DoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardVersionMismatch: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardVersionMismatch, Errors._Store_Shard_VersionMismatchGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.MappingDoesNotExist: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingDoesNotExist, Errors._Store_ShardMapper_MappingDoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.MappingRangeAlreadyMapped: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingRangeAlreadyMapped, Errors._Store_ShardMapper_MappingPointOrRangeAlreadyMapped, shard.Location, shardMap.Name, "Range", storedProcName, operationName); case StoreResult.MappingPointAlreadyMapped: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingPointAlreadyMapped, Errors._Store_ShardMapper_MappingPointOrRangeAlreadyMapped, shard.Location, shardMap.Name, "Point", storedProcName, operationName); case StoreResult.MappingNotFoundForKey: Debug.Fail("MappingNotFoundForKey should not be raised during SqlOperation."); return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingNotFoundForKey, Errors._Store_ShardMapper_MappingNotFoundForKeyGlobal, shardMap.Name, storedProcName, operationName); case StoreResult.MappingIsAlreadyLocked: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingIsAlreadyLocked, Errors._Store_ShardMapper_LockMappingAlreadyLocked, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.MappingLockOwnerIdDoesNotMatch: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingLockOwnerIdDoesNotMatch, Errors._Store_ShardMapper_LockOwnerDoesNotMatch, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.MappingIsNotOffline: return new ShardManagementException( errorCategory, ShardManagementErrorCode.MappingIsNotOffline, Errors._Store_ShardMapper_MappingIsNotOffline, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName); } }
/// <summary> /// Request to update shard in given shard map in LSM. /// </summary> /// <param name="operationId">Operation Id.</param> /// <param name="shardMap">Shard map to remove shard from.</param> /// <param name="shard">Shard to update.</param> /// <returns>Xml formatted request.</returns> internal static XElement UpdateShardLocal( Guid operationId, IStoreShardMap shardMap, IStoreShard shard) { return new XElement( "UpdateShardLocal", StoreOperationRequestBuilder.OperationId(operationId), StoreOperationRequestBuilder.s_lsmVersion, StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap), StoreObjectFormatterXml.WriteIStoreShard("Shard", shard)); }
public IEnumerable <RecoveryToken> DetectMappingDifferences(ShardLocation location, string shardMapName) { ExceptionUtils.DisallowNullArgument(location, "location"); IList <RecoveryToken> listOfTokens = new List <RecoveryToken>(); IStoreResults getShardsLocalResult; using (IStoreOperationLocal op = this.Manager.StoreOperationFactory.CreateGetShardsLocalOperation( this.Manager, location, "DetectMappingDifferences")) { getShardsLocalResult = op.Do(); } Debug.Assert(getShardsLocalResult.Result == StoreResult.Success); IEnumerable <IStoreShardMap> shardMaps = shardMapName == null ? getShardsLocalResult.StoreShardMaps : getShardsLocalResult.StoreShardMaps.Where(s => s.Name == shardMapName); IEnumerable <Tuple <IStoreShardMap, IStoreShard> > shardInfos = shardMaps .Select(sm => new Tuple <IStoreShardMap, IStoreShard>( sm, getShardsLocalResult.StoreShards.SingleOrDefault(s => s.ShardMapId == sm.Id))); foreach (Tuple <IStoreShardMap, IStoreShard> shardInfo in shardInfos) { IStoreShardMap ssmLocal = shardInfo.Item1; IStoreShard ssLocal = shardInfo.Item2; RecoveryToken token = new RecoveryToken(); listOfTokens.Add(token); this.StoreShardMaps[token] = shardInfo; this.Locations[token] = location; this.Inconsistencies[token] = new Dictionary <ShardRange, MappingDifference>(); DefaultStoreShard dss = new DefaultStoreShard( ssLocal.Id, ssLocal.Version, ssLocal.ShardMapId, ssLocal.Location, ssLocal.Status); // First get all local mappings. IStoreResults lsmMappings; using (IStoreOperationLocal op = this.Manager.StoreOperationFactory.CreateGetMappingsByRangeLocalOperation( this.Manager, location, "DetectMappingDifferences", ssmLocal, dss, null, true)) { lsmMappings = op.Do(); if (lsmMappings.Result == StoreResult.ShardMapDoesNotExist) { // The shard needs to be re-attached. We are ignoring these errors in // DetectMappingDifferences, since corruption is more profound than // just inconsistent mappings. // Alternatively, this shard belongs to a different shard map manager. // Either way, we can't do anything about it here. continue; } } // Next build up a set of relevant global mappings. // This is the union of those mappings that are associated with this local shard // and those mappings which intersect with mappings found in the local shard. // We will partition these mappings based on ranges. IDictionary <ShardRange, IStoreMapping> relevantGsmMappings = new Dictionary <ShardRange, IStoreMapping>(); IStoreResults gsmMappingsByMap; using (IStoreOperationGlobal op = this.Manager.StoreOperationFactory.CreateGetMappingsByRangeGlobalOperation( this.Manager, "DetectMappingDifferences", ssmLocal, dss, null, ShardManagementErrorCategory.Recovery, false, true /* ignore failures */)) { gsmMappingsByMap = op.Do(); } if (gsmMappingsByMap.Result == StoreResult.ShardMapDoesNotExist) { // The shard map is not properly attached to this GSM. // This is beyond what we can handle resolving mappings. continue; } foreach (IStoreMapping gsmMapping in gsmMappingsByMap.StoreMappings) { ShardKey min = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MinValue); ShardKey max = null; switch (ssmLocal.MapType) { case ShardMapType.Range: max = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MaxValue); break; default: Debug.Assert(ssmLocal.MapType == ShardMapType.List); max = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MinValue).GetNextKey(); break; } ShardRange range = new ShardRange(min, max); relevantGsmMappings[range] = gsmMapping; } // Next, for each of the mappings in lsmMappings, we need to augment // the gsmMappingsByMap by intersecting ranges. foreach (IStoreMapping lsmMapping in lsmMappings.StoreMappings) { ShardKey min = ShardKey.FromRawValue(ssmLocal.KeyType, lsmMapping.MinValue); IStoreResults gsmMappingsByRange; if (ssmLocal.MapType == ShardMapType.Range) { ShardKey max = ShardKey.FromRawValue(ssmLocal.KeyType, lsmMapping.MaxValue); ShardRange range = new ShardRange(min, max); using (IStoreOperationGlobal op = this.Manager.StoreOperationFactory.CreateGetMappingsByRangeGlobalOperation( this.Manager, "DetectMappingDifferences", ssmLocal, null, range, ShardManagementErrorCategory.Recovery, false, true /* ignore failures */)) { gsmMappingsByRange = op.Do(); } if (gsmMappingsByRange.Result == StoreResult.ShardMapDoesNotExist) { // The shard was not properly attached. // This is more than we can deal with in mapping resolution. continue; } } else { Debug.Assert(ssmLocal.MapType == ShardMapType.List); using (IStoreOperationGlobal op = this.Manager.StoreOperationFactory.CreateFindMappingByKeyGlobalOperation( this.Manager, "DetectMappingDifferences", ssmLocal, min, CacheStoreMappingUpdatePolicy.OverwriteExisting, ShardManagementErrorCategory.Recovery, false, true /* ignore failures */)) { gsmMappingsByRange = op.Do(); if (gsmMappingsByRange.Result == StoreResult.MappingNotFoundForKey || gsmMappingsByRange.Result == StoreResult.ShardMapDoesNotExist) { // * No intersections being found is fine. Skip to the next mapping. // * The shard was not properly attached. // This is more than we can deal with in mapping resolution. continue; } } } foreach (IStoreMapping gsmMapping in gsmMappingsByRange.StoreMappings) { ShardKey retrievedMin = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MinValue); ShardRange retrievedRange = null; switch (ssmLocal.MapType) { case ShardMapType.Range: ShardKey retrievedMax = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MaxValue); retrievedRange = new ShardRange(retrievedMin, retrievedMax); break; default: Debug.Assert(ssmLocal.MapType == ShardMapType.List); retrievedMax = ShardKey.FromRawValue(ssmLocal.KeyType, gsmMapping.MinValue).GetNextKey(); retrievedRange = new ShardRange(retrievedMin, retrievedMax); break; } relevantGsmMappings[retrievedRange] = gsmMapping; } } IList <MappingComparisonResult> comparisonResults = null; switch (ssmLocal.MapType) { case ShardMapType.Range: comparisonResults = MappingComparisonUtils.CompareRangeMappings( ssmLocal, relevantGsmMappings.Values, lsmMappings.StoreMappings); break; default: Debug.Assert(ssmLocal.MapType == ShardMapType.List); comparisonResults = MappingComparisonUtils.ComparePointMappings( ssmLocal, relevantGsmMappings.Values, lsmMappings.StoreMappings); break; } // Now we have 2 sets of mappings. Each submapping generated from this function is // 1.) in the GSM only: report. // 2.) in the LSM only: report. // 3.) in both but with different version number: report. // 4.) in both with the same version number: skip. foreach (MappingComparisonResult r in comparisonResults) { switch (r.MappingLocation) { case MappingLocation.MappingInShardMapOnly: case MappingLocation.MappingInShardOnly: break; default: Debug.Assert(r.MappingLocation == MappingLocation.MappingInShardMapAndShard); if (r.ShardMapManagerMapping.Id == r.ShardMapping.Id) { // No conflict found, skip to the next range. continue; } break; } // Store the inconsistency for later reporting. this.Inconsistencies[token][r.Range] = new MappingDifference( type: MappingDifferenceType.Range, location: r.MappingLocation, shardMap: r.ShardMap, mappingForShard: r.ShardMapping, mappingForShardMap: r.ShardMapManagerMapping); } } return(listOfTokens); }
/// <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> /// <returns>The store operation.</returns> public virtual IStoreOperationGlobal CreateReplaceMappingsGlobalOperation( ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable<IStoreMapping> mappingsToRemove, IEnumerable<IStoreMapping> mappingsToAdd) { return new ReplaceMappingsGlobalOperation( shardMapManager, operationName, shardMap, shard, mappingsToRemove, mappingsToAdd); }
/// <summary> /// Request to get all shard mappings from LSM for a particular shard map /// and optional shard and range. /// </summary> /// <param name="shardMap">Shard map whose mappings are being requested.</param> /// <param name="shard">Optional shard for which mappings are being requested.</param> /// <param name="range">Optional range for which mappings are being requested.</param> /// <returns>Xml formatted request.</returns> internal static XElement GetAllShardMappingsLocal( IStoreShardMap shardMap, IStoreShard shard, ShardRange range) { return new XElement( @"GetAllShardMappingsLocal", StoreOperationRequestBuilder.s_lsmVersion, StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap), StoreObjectFormatterXml.WriteIStoreShard("Shard", shard), StoreObjectFormatterXml.WriteShardRange(range)); }
/// <summary> /// Initializes a new instance /// </summary> public StubUpdateShardOperation(ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) : base(shardMapManager, shardMap, shardOld, shardNew) { this.InitializeStub(); }
/// <summary> /// Asynchronously performs validation that the local representation is as /// up-to-date as the representation on the backing data store. /// </summary> /// <param name="conn">Connection used for validation.</param> /// <param name="manager">ShardMapManager reference.</param> /// <param name="shardMap">Shard map for the shard.</param> /// <param name="shard">Shard to validate.</param> /// <returns>A task to await validation completion</returns> internal static async Task ValidateShardAsync( SqlConnection conn, ShardMapManager manager, IStoreShardMap shardMap, IStoreShard shard ) { Stopwatch stopwatch = Stopwatch.StartNew(); SqlResults lsmResult = new SqlResults(); XElement xeValidate = StoreOperationRequestBuilder.ValidateShardLocal(shardMap.Id, shard.Id, shard.Version); using (SqlCommand cmd = conn.CreateCommand()) using (XmlReader input = xeValidate.CreateReader()) { cmd.CommandText = StoreOperationRequestBuilder.SpValidateShardLocal; cmd.CommandType = CommandType.StoredProcedure; SqlUtils.AddCommandParameter( cmd, "@input", SqlDbType.Xml, ParameterDirection.Input, 0, new SqlXml(input)); SqlParameter resultParam = SqlUtils.AddCommandParameter( cmd, "@result", SqlDbType.Int, ParameterDirection.Output, 0, 0); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { await lsmResult.FetchAsync(reader); } // Output parameter will be used to specify the outcome. lsmResult.Result = (StoreResult)resultParam.Value; } stopwatch.Stop(); Tracer.TraceInfo( TraceSourceConstants.ComponentNames.Shard, "ValidateShardAsync", "Complete; Shard: {0}; Connection: {1}; Result: {2}; Duration: {3}", shard.Location, conn.ConnectionString, lsmResult.Result, stopwatch.Elapsed); if (lsmResult.Result != StoreResult.Success) { if (lsmResult.Result == StoreResult.ShardMapDoesNotExist) { manager.Cache.DeleteShardMap(shardMap); } // Possible errors are: // StoreResult.ShardMapDoesNotExist // StoreResult.ShardDoesNotExist // StoreResult.ShardVersionMismatch // StoreResult.StoreVersionMismatch // StoreResult.MissingParametersForStoredProcedure throw StoreOperationErrorHandler.OnValidationErrorLocal( lsmResult, shardMap, shard.Location, "ValidateShardAsync", StoreOperationRequestBuilder.SpValidateShardLocal); } }
/// <summary> /// Initializes a new instance /// </summary> public StubAddShardOperation(ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shard) : base(shardMapManager, shardMap, shard) { this.InitializeStub(); }
/// <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> public virtual IStoreOperationLocal CreateReplaceMappingsLocalOperation( ShardMapManager shardMapManager, ShardLocation location, string operationName, IStoreShardMap shardMap, IStoreShard shard, IEnumerable<ShardRange> rangesToRemove, IEnumerable<IStoreMapping> mappingsToAdd) { return new ReplaceMappingsLocalOperation( shardMapManager, location, operationName, shardMap, shard, rangesToRemove, mappingsToAdd); }
/// <summary> /// Request to update shard in given shard map in GSM. /// </summary> /// <param name="operationId">Operation Id</param> /// <param name="operationCode">Operation code.</param> /// <param name="undo">Whether this is an undo request.</param> /// <param name="shardMap">Shard map for which operation is being requested.</param> /// <param name="shardOld">Shard to update.</param> /// <param name="shardNew">Updated shard.</param> /// <returns>Xml formatted request.</returns> internal static XElement UpdateShardGlobal( Guid operationId, StoreOperationCode operationCode, bool undo, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) { return new XElement( "BulkOperationShardsGlobal", StoreOperationRequestBuilder.OperationId(operationId), StoreOperationRequestBuilder.OperationCode(operationCode), StoreOperationRequestBuilder.Undo(undo), StoreOperationRequestBuilder.StepsCount(1), StoreOperationRequestBuilder.s_gsmVersion, StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap), new XElement("Steps", new XElement("Step", StoreOperationRequestBuilder.StepKind(StoreOperationStepKind.Update), new XAttribute("Id", 1), StoreObjectFormatterXml.WriteIStoreShard("Shard", shardOld), new XElement("Update", StoreObjectFormatterXml.WriteIStoreShard("Shard", shardNew))))); }
internal RemoveShardOperationFailAfterLocalTarget( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shard) : base(shardMapManager, shardMap, shard) { }
/// <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="shard">Shard object.</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 OnShardMapErrorGlobal( IStoreResults result, IStoreShardMap shardMap, IStoreShard shard, ShardManagementErrorCategory errorCategory, string operationName, string storedProcName) { switch (result.Result) { case StoreResult.ShardMapDoesNotExist: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardMapDoesNotExist, Errors._Store_ShardMap_DoesNotExistGlobal, shardMap.Name, storedProcName, operationName, shard != null ? shard.Location.ToString() : "*"); case StoreResult.ShardExists: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardAlreadyExists, Errors._Store_Shard_AlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardLocationExists: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardLocationAlreadyExists, Errors._Store_Shard_LocationAlreadyExistsGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardDoesNotExist: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardDoesNotExist, Errors._Store_Shard_DoesNotExistGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardVersionMismatch: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardVersionMismatch, Errors._Store_Shard_VersionMismatchGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.ShardHasMappings: return new ShardManagementException( errorCategory, ShardManagementErrorCode.ShardHasMappings, Errors._Store_Shard_HasMappingsGlobal, shard.Location, shardMap.Name, storedProcName, operationName); case StoreResult.StoreVersionMismatch: case StoreResult.MissingParametersForStoredProcedure: default: return StoreOperationErrorHandler.OnCommonErrorGlobal( result, operationName, storedProcName); } }
internal UpdateShardOperationFailAfterLocalTarget( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shardOld, IStoreShard shardNew) : base(shardMapManager, shardMap, shardOld, shardNew) { }
internal AddShardOperationFailAfterLocalSource( ShardMapManager shardMapManager, IStoreShardMap shardMap, IStoreShard shard) : base(shardMapManager, shardMap, 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> /// <returns>The store operation.</returns> public virtual IStoreOperationGlobal CreateGetMappingsByRangeGlobalOperation( ShardMapManager shardMapManager, string operationName, IStoreShardMap shardMap, IStoreShard shard, ShardRange range, ShardManagementErrorCategory errorCategory, bool cacheResults, bool ignoreFailure) { return new GetMappingsByRangeGlobalOperation( shardMapManager, operationName, shardMap, shard, range, errorCategory, cacheResults, ignoreFailure); }