/// <summary>
 /// Creates request to update a mapping in given shard map.
 /// </summary>
 /// <param name="operationCode">Operation code.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">Undo start state.</param>
 /// <param name="root">Xml representation of the object.</param>
 /// <param name="originalShardVersionRemoves">Original shard version for removes.</param>
 /// <param name="originalShardVersionAdds">Original shard version for adds.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateUpdateMappingOperation(
     StoreOperationCode operationCode,
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     XElement root,
     Guid originalShardVersionRemoves,
     Guid originalShardVersionAdds)
 {
     return(new UpdateMappingOperation(
                shardMapManager,
                operationId,
                undoStartState,
                operationCode,
                StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
                StoreObjectFormatterXml.ReadIStoreMapping(
                    root.Element("Steps").Element("Step").Element("Mapping"),
                    root.Element("Removes").Element("Shard")),
                StoreObjectFormatterXml.ReadIStoreMapping(
                    root.Element("Steps").Element("Step").Element("Update").Element("Mapping"),
                    root.Element("Adds").Element("Shard")),
                root.Element("PatternForKill").Value,
                StoreObjectFormatterXml.ReadLock(root.Element("Steps").Element("Step").Element("Lock")),
                originalShardVersionRemoves,
                originalShardVersionAdds));
 }
 /// <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));
 }
Exemplo n.º 3
0
        /// <summary>
        /// Given an operation code, returns the corresponding operation name.
        /// </summary>
        /// <param name="operationCode">Operation code.</param>
        /// <returns>Operation name corresponding to given operation code.</returns>
        internal static string OperationNameFromStoreOperationCode(StoreOperationCode operationCode)
        {
            switch (operationCode)
            {
            case StoreOperationCode.AddShard:
                return("CreateShard");

            case StoreOperationCode.RemoveShard:
                return("DeleteShard");

            case StoreOperationCode.UpdateShard:
                return("UpdateShard");

            case StoreOperationCode.AddPointMapping:
                return("AddPointMapping");

            case StoreOperationCode.RemovePointMapping:
                return("RemovePointMapping");

            case StoreOperationCode.UpdatePointMapping:
                return("UpdatePointMapping");

            case StoreOperationCode.UpdatePointMappingWithOffline:
                return("UpdatePointMappingMarkOffline");

            case StoreOperationCode.AddRangeMapping:
                return("AddRangeMapping");

            case StoreOperationCode.RemoveRangeMapping:
                return("RemoveRangeMapping");

            case StoreOperationCode.UpdateRangeMapping:
                return("UpdateRangeMapping");

            case StoreOperationCode.UpdateRangeMappingWithOffline:
                return("UpdateRangeMappingMarkOffline");

            case StoreOperationCode.SplitMapping:
                return("SplitMapping");

            case StoreOperationCode.MergeMappings:
                return("MergeMappings");

            case StoreOperationCode.AttachShard:
                return("AttachShard");

            default:
                Debug.Fail("Unexpected operation code found.");
                return(String.Empty);
            }
        }
 /// <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 from which to remove mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 /// <param name="lockOwnerId">Id of lock owner.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateRemoveMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping,
     Guid lockOwnerId)
 {
     return(new RemoveMappingOperation(
                shardMapManager,
                operationCode,
                shardMap,
                mapping,
                lockOwnerId));
 }
 /// <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>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateReplaceMappingsOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     Tuple <IStoreMapping, Guid>[] mappingsSource,
     Tuple <IStoreMapping, Guid>[] mappingsTarget)
 {
     return(new ReplaceMappingsOperation(
                shardMapManager,
                operationCode,
                shardMap,
                mappingsSource,
                mappingsTarget));
 }
 /// <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))
 {
 }
 /// <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))
 {
 }
Exemplo n.º 8
0
 /// <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>
 /// 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))
 {
 }
Exemplo n.º 10
0
 /// <summary>
 /// Constructs an instance of StoreOperation.
 /// </summary>
 /// <param name="shardMapManager">ShardMapManager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="opCode">Operation code.</param>
 /// <param name="originalShardVersionRemoves">Original shard version for removes.</param>
 /// <param name="originalShardVersionAdds">Original shard version for adds.</param>
 protected StoreOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     StoreOperationCode opCode,
     Guid originalShardVersionRemoves,
     Guid originalShardVersionAdds
     )
 {
     this.Id             = operationId;
     this.OperationCode  = opCode;
     this.Manager        = shardMapManager;
     this.UndoStartState = undoStartState;
     _operationState     = StoreOperationState.DoBegin;
     _maxDoState         = StoreOperationState.DoBegin;
     this.OriginalShardVersionRemoves = originalShardVersionRemoves;
     this.OriginalShardVersionAdds    = originalShardVersionAdds;
 }
Exemplo n.º 11
0
 /// <summary>
 /// Constructs an instance of StoreOperation.
 /// </summary>
 /// <param name="shardMapManager">ShardMapManager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">State from which Undo operation starts.</param>
 /// <param name="opCode">Operation code.</param>
 /// <param name="originalShardVersionRemoves">Original shard version for removes.</param>
 /// <param name="originalShardVersionAdds">Original shard version for adds.</param>
 protected StoreOperation(
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     StoreOperationCode opCode,
     Guid originalShardVersionRemoves,
     Guid originalShardVersionAdds
     )
 {
     this.Id = operationId;
     this.OperationCode = opCode;
     this.Manager = shardMapManager;
     this.UndoStartState = undoStartState;
     _operationState = StoreOperationState.DoBegin;
     _maxDoState = StoreOperationState.DoBegin;
     this.OriginalShardVersionRemoves = originalShardVersionRemoves;
     this.OriginalShardVersionAdds = originalShardVersionAdds;
 }
 /// <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>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateUpdateMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mappingSource,
     IStoreMapping mappingTarget,
     string patternForKill,
     Guid lockOwnerId)
 {
     return(new UpdateMappingOperation(
                shardMapManager,
                operationCode,
                shardMap,
                mappingSource,
                mappingTarget,
                patternForKill,
                lockOwnerId));
 }
 /// <summary>
 /// Creates request to add a mapping in given shard map.
 /// </summary>
 /// <param name="operationCode">Operation code.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">Undo start state.</param>
 /// <param name="root">Xml representation of the object.</param>
 /// <param name="originalShardVersionAdds">Original shard version.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateAddMappingOperation(
     StoreOperationCode operationCode,
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     XElement root,
     Guid originalShardVersionAdds)
 {
     return(new AddMappingOperation(
                shardMapManager,
                operationId,
                undoStartState,
                operationCode,
                StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
                StoreObjectFormatterXml.ReadIStoreMapping(
                    root.Element("Steps").Element("Step").Element("Mapping"),
                    root.Element("Adds").Element("Shard")),
                originalShardVersionAdds));
 }
Exemplo n.º 14
0
 /// <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 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;
 }
Exemplo n.º 16
0
        /// <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 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>
        /// <param name="originalShardVersionRemoves">Original shard version for removes.</param>
        /// <param name="originalShardVersionAdds">Original shard version for adds.</param>
        /// <param name="killConnection">Whether to kill open connections.</param>
        internal UpdateMappingOperation(
            ShardMapManager shardMapManager,
            Guid operationId,
            StoreOperationState undoStartState,
            StoreOperationCode operationCode,
            IStoreShardMap shardMap,
            IStoreMapping mappingSource,
            IStoreMapping mappingTarget,
            string patternForKill,
            Guid lockOwnerId,
            Guid originalShardVersionRemoves,
            Guid originalShardVersionAdds,
            bool killConnection) :
            base(
                shardMapManager,
                operationId,
                undoStartState,
                operationCode,
                originalShardVersionRemoves,
                originalShardVersionAdds)
        {
            _shardMap      = shardMap;
            _mappingSource = mappingSource;
            _mappingTarget = mappingTarget;
            _lockOwnerId   = lockOwnerId;

            _errorCategory = (operationCode == StoreOperationCode.UpdateRangeMapping ||
                              operationCode == StoreOperationCode.UpdateRangeMappingWithOffline) ?
                             ShardManagementErrorCategory.RangeShardMap :
                             ShardManagementErrorCategory.ListShardMap;

            _updateLocation = _mappingSource.StoreShard.Id != _mappingTarget.StoreShard.Id;

            _fromOnlineToOffline = operationCode == StoreOperationCode.UpdatePointMappingWithOffline ||
                                   operationCode == StoreOperationCode.UpdateRangeMappingWithOffline;

            _patternForKill = patternForKill;

            _killConnection = killConnection;
        }
 /// <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>
 /// 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>
        /// Creates request to replace a set of mappings with new set in given shard map.
        /// </summary>
        /// <param name="operationCode">Operation code.</param>
        /// <param name="shardMapManager">Shard map manager object.</param>
        /// <param name="operationId">Operation Id.</param>
        /// <param name="undoStartState">Undo start state.</param>
        /// <param name="root">Xml representation of the object.</param>
        /// <param name="originalShardVersionAdds">Original shard Id of source.</param>
        /// <returns>The store operation.</returns>
        public virtual IStoreOperation CreateReplaceMappingsOperation(
            StoreOperationCode operationCode,
            ShardMapManager shardMapManager,
            Guid operationId,
            StoreOperationState undoStartState,
            XElement root,
            Guid originalShardVersionAdds)
        {
            XElement removeShard = root.Element("Removes").Element("Shard");
            XElement addShard    = root.Element("Adds").Element("Shard");

            return(new ReplaceMappingsOperation(
                       shardMapManager,
                       operationId,
                       undoStartState,
                       operationCode,
                       StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
                       root.Element("Steps").Elements("Step").Where(e => e.Attribute("Kind").Value == "1").Select(
                           xe => new
            {
                Index = Int32.Parse(xe.Attribute("Id").Value),
                Mapping = StoreObjectFormatterXml.ReadIStoreMapping(xe.Element("Mapping"), removeShard),
                Lock = StoreObjectFormatterXml.ReadLock(xe.Element("Lock"))
            })
                       .OrderBy(el => el.Index)
                       .Select(el => new Tuple <IStoreMapping, Guid>(el.Mapping, el.Lock))
                       .ToArray(),
                       root.Element("Steps").Elements("Step").Where(e => e.Attribute("Kind").Value == "3").Select(
                           xe => new
            {
                Index = Int32.Parse(xe.Attribute("Id").Value),
                Mapping = StoreObjectFormatterXml.ReadIStoreMapping(xe.Element("Mapping"), addShard),
                Lock = StoreObjectFormatterXml.ReadLock(xe.Element("Lock"))
            })
                       .OrderBy(el => el.Index)
                       .Select(el => new Tuple <IStoreMapping, Guid>(el.Mapping, el.Lock))
                       .ToArray(),
                       originalShardVersionAdds));
        }
 /// <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;
 }
 /// <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;
 }
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubAddMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mapping)
     : base(shardMapManager, operationCode, shardMap, mapping)
 {
     this.InitializeStub();
 }
 /// <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)))));
 }
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubUpdateMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mappingSource, IStoreMapping mappingTarget, string patternForKill, Guid lockOwnerId)
     : base(shardMapManager, operationCode, shardMap, mappingSource, mappingTarget, patternForKill, lockOwnerId)
 {
     this.InitializeStub();
 }
 /// <summary>
 /// Sets the stub of StoreOperationFactory.CreateUpdateMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mappingSource, IStoreMapping mappingTarget, String patternForKill, Guid lockOwnerId)
 /// </summary>
 public override IStoreOperation CreateUpdateMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mappingSource, IStoreMapping mappingTarget, string patternForKill, Guid lockOwnerId)
 {
     Func<ShardMapManager, StoreOperationCode, IStoreShardMap, IStoreMapping, IStoreMapping, string, Guid, IStoreOperation> func1 = this.CreateUpdateMappingOperationShardMapManagerStoreOperationCodeIStoreShardMapIStoreMappingIStoreMappingStringGuid;
     if (func1 != null)
         return func1(shardMapManager, operationCode, shardMap, mappingSource, mappingTarget, patternForKill, lockOwnerId);
     if (this.___callBase)
         return base.CreateUpdateMappingOperation(shardMapManager, operationCode, shardMap, mappingSource, mappingTarget, patternForKill, lockOwnerId);
     return this.InstanceBehavior.Result<StubStoreOperationFactory, IStoreOperation>(this, "CreateUpdateMappingOperation");
 }
 /// <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 from which to remove mapping.</param>
 /// <param name="mapping">Mapping to add.</param>
 /// <param name="lockOwnerId">Id of lock owner.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateRemoveMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping,
     Guid lockOwnerId)
 {
     return new RemoveMappingOperation(
         shardMapManager,
         operationCode,
         shardMap,
         mapping,
         lockOwnerId);
 }
 /// <summary>
 /// Given an operation code, returns the corresponding operation name.
 /// </summary>
 /// <param name="operationCode">Operation code.</param>
 /// <returns>Operation name corresponding to given operation code.</returns>
 internal static string OperationNameFromStoreOperationCode(StoreOperationCode operationCode)
 {
     switch (operationCode)
     {
         case StoreOperationCode.AddShard:
             return "CreateShard";
         case StoreOperationCode.RemoveShard:
             return "DeleteShard";
         case StoreOperationCode.UpdateShard:
             return "UpdateShard";
         case StoreOperationCode.AddPointMapping:
             return "AddPointMapping";
         case StoreOperationCode.RemovePointMapping:
             return "RemovePointMapping";
         case StoreOperationCode.UpdatePointMapping:
             return "UpdatePointMapping";
         case StoreOperationCode.UpdatePointMappingWithOffline:
             return "UpdatePointMappingMarkOffline";
         case StoreOperationCode.AddRangeMapping:
             return "AddRangeMapping";
         case StoreOperationCode.RemoveRangeMapping:
             return "RemoveRangeMapping";
         case StoreOperationCode.UpdateRangeMapping:
             return "UpdateRangeMapping";
         case StoreOperationCode.UpdateRangeMappingWithOffline:
             return "UpdateRangeMappingMarkOffline";
         case StoreOperationCode.SplitMapping:
             return "SplitMapping";
         case StoreOperationCode.MergeMappings:
             return "MergeMappings";
         case StoreOperationCode.AttachShard:
             return "AttachShard";
         default:
             Debug.Fail("Unexpected operation code found.");
             return String.Empty;
     }
 }
 internal UpdateMappingOperationFailAfterLocalTarget(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mappingSource,
     IStoreMapping mappingTarget,
     string patternForKill,
     Guid lockOwnerId)
     : base(shardMapManager,
         operationCode,
         shardMap,
         mappingSource,
         mappingTarget,
         patternForKill,
         lockOwnerId)
 {
 }
 internal RemoveMappingOperationFailAfterLocalTarget(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping,
     Guid lockOwnerId)
     : base(shardMapManager,
     operationCode,
     shardMap,
     mapping,
     lockOwnerId)
 {
 }
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubReplaceMappingsOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, Tuple<IStoreMapping, Guid>[] mappingsSource, Tuple<IStoreMapping, Guid>[] mappingsTarget)
     : base(shardMapManager, operationCode, shardMap, mappingsSource, mappingsTarget)
 {
     this.InitializeStub();
 }
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubReplaceMappingsOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, Tuple <IStoreMapping, Guid>[] mappingsSource, Tuple <IStoreMapping, Guid>[] mappingsTarget)
     : base(shardMapManager, operationCode, shardMap, mappingsSource, mappingsTarget)
 {
     this.InitializeStub();
 }
 /// <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>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateUpdateMappingOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mappingSource,
     IStoreMapping mappingTarget,
     string patternForKill,
     Guid lockOwnerId)
 {
     return new UpdateMappingOperation(
         shardMapManager,
         operationCode,
         shardMap,
         mappingSource,
         mappingTarget,
         patternForKill,
         lockOwnerId);
 }
 public override IStoreOperation CreateUpdateMappingOperation(StoreOperationCode operationCode, ShardMapManager shardMapManager, Guid operationId, StoreOperationState undoStartState, XElement root, Guid originalShardVersionRemoves, Guid originalShardVersionAdds)
 {
     Func<StoreOperationCode, ShardMapManager, Guid, StoreOperationState, XElement, Guid, Guid, IStoreOperation> func1 = this.CreateUpdateMappingOperationStoreOperationCodeShardMapManagerGuidStoreOperationStateXElementGuidGuid;
     if (func1 != null)
         return func1(operationCode, shardMapManager, operationId, undoStartState, root, originalShardVersionRemoves, originalShardVersionAdds);
     if (this.___callBase)
         return base.CreateUpdateMappingOperation(operationCode, shardMapManager, operationId, undoStartState, root, originalShardVersionRemoves, originalShardVersionAdds);
     return this.InstanceBehavior.Result<StubStoreOperationFactory, IStoreOperation>(this, "CreateUpdateMappingOperation");
 }
 /// <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>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateReplaceMappingsOperation(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     Tuple<IStoreMapping, Guid>[] mappingsSource,
     Tuple<IStoreMapping, Guid>[] mappingsTarget)
 {
     return new ReplaceMappingsOperation(
         shardMapManager,
         operationCode,
         shardMap,
         mappingsSource,
         mappingsTarget);
 }
 /// <summary>
 /// Sets the stub of StoreOperationFactory.CreateReplaceMappingsOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, Tuple`2&lt;IStoreMapping,Guid&gt;[] mappingsSource, Tuple`2&lt;IStoreMapping,Guid&gt;[] mappingsTarget)
 /// </summary>
 public override IStoreOperation CreateReplaceMappingsOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, Tuple<IStoreMapping, Guid>[] mappingsSource, Tuple<IStoreMapping, Guid>[] mappingsTarget)
 {
     Func<ShardMapManager, StoreOperationCode, IStoreShardMap, Tuple<IStoreMapping, Guid>[], Tuple<IStoreMapping, Guid>[], IStoreOperation> func1 = this.CreateReplaceMappingsOperationShardMapManagerStoreOperationCodeIStoreShardMapTupleOfIStoreMappingGuidArrayTupleOfIStoreMappingGuidArray;
     if (func1 != null)
         return func1(shardMapManager, operationCode, shardMap, mappingsSource, mappingsTarget);
     if (this.___callBase)
         return base.CreateReplaceMappingsOperation(shardMapManager, operationCode, shardMap, mappingsSource, mappingsTarget);
     return this.InstanceBehavior.Result<StubStoreOperationFactory, IStoreOperation>(this, "CreateReplaceMappingsOperation");
 }
 /// <summary>
 /// Creates request to add a mapping in given shard map.
 /// </summary>
 /// <param name="operationCode">Operation code.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">Undo start state.</param>
 /// <param name="root">Xml representation of the object.</param>
 /// <param name="originalShardVersionAdds">Original shard version.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateAddMappingOperation(
     StoreOperationCode operationCode,
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     XElement root,
     Guid originalShardVersionAdds)
 {
     return new AddMappingOperation(
         shardMapManager,
         operationId,
         undoStartState,
         operationCode,
         StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
         StoreObjectFormatterXml.ReadIStoreMapping(
             root.Element("Steps").Element("Step").Element("Mapping"),
             root.Element("Adds").Element("Shard")),
         originalShardVersionAdds);
 }
Exemplo n.º 39
0
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubRemoveMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mapping, Guid lockOwnerId)
     : base(shardMapManager, operationCode, shardMap, mapping, lockOwnerId)
 {
     this.InitializeStub();
 }
 /// <summary>
 /// Creates request to update a mapping in given shard map.
 /// </summary>
 /// <param name="operationCode">Operation code.</param>
 /// <param name="shardMapManager">Shard map manager object.</param>
 /// <param name="operationId">Operation Id.</param>
 /// <param name="undoStartState">Undo start state.</param>
 /// <param name="root">Xml representation of the object.</param>
 /// <param name="originalShardVersionRemoves">Original shard version for removes.</param>
 /// <param name="originalShardVersionAdds">Original shard version for adds.</param>
 /// <returns>The store operation.</returns>
 public virtual IStoreOperation CreateUpdateMappingOperation(
     StoreOperationCode operationCode,
     ShardMapManager shardMapManager,
     Guid operationId,
     StoreOperationState undoStartState,
     XElement root,
     Guid originalShardVersionRemoves,
     Guid originalShardVersionAdds)
 {
     return new UpdateMappingOperation(
         shardMapManager,
         operationId,
         undoStartState,
         operationCode,
         StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
         StoreObjectFormatterXml.ReadIStoreMapping(
             root.Element("Steps").Element("Step").Element("Mapping"),
             root.Element("Removes").Element("Shard")),
         StoreObjectFormatterXml.ReadIStoreMapping(
             root.Element("Steps").Element("Step").Element("Update").Element("Mapping"),
             root.Element("Adds").Element("Shard")),
         root.Element("PatternForKill").Value,
         StoreObjectFormatterXml.ReadLock(root.Element("Steps").Element("Step").Element("Lock")),
         originalShardVersionRemoves,
         originalShardVersionAdds);
 }
 /// <summary>
 /// Request to add shard to 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="mapping">Mapping to add.</param>
 /// <returns>Xml formatted request.</returns>
 internal static XElement AddShardMappingGlobal(
     Guid operationId,
     StoreOperationCode operationCode,
     bool undo,
     IStoreShardMap shardMap,
     IStoreMapping mapping)
 {
     return new XElement(
         "BulkOperationShardMappingsGlobal",
         StoreOperationRequestBuilder.OperationId(operationId),
         StoreOperationRequestBuilder.OperationCode(operationCode),
         StoreOperationRequestBuilder.Undo(undo),
         StoreOperationRequestBuilder.StepsCount(1),
         StoreOperationRequestBuilder.s_gsmVersion,
         StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap),
         new XElement("Removes",
             StoreObjectFormatterXml.WriteIStoreShard("Shard", mapping.StoreShard)),
         new XElement("Adds",
             StoreObjectFormatterXml.WriteIStoreShard("Shard", mapping.StoreShard)),
         new XElement("Steps",
             new XElement("Step",
                 new XAttribute("Id", 1),
                 StoreOperationRequestBuilder.Validate(true),
                 StoreOperationRequestBuilder.StepKind(StoreOperationStepKind.Add),
                 StoreObjectFormatterXml.WriteIStoreMapping("Mapping", mapping))));
 }
 /// <summary>
 /// Adds OperationCode attribute.
 /// </summary>
 /// <param name="operationCode">Code of operation.</param>
 /// <returns>XAttribute for the operationCode.</returns>
 private static XAttribute OperationCode(StoreOperationCode operationCode)
 {
     return new XAttribute("OperationCode", (int)operationCode);
 }
 internal NTimeFailingAddMappingOperation(
     int failureCountMax,
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping)
     : base(shardMapManager, operationCode, shardMap, mapping)
 {
     _failureCountMax = failureCountMax;
     _currentFailureCount = 0;
 }
 /// <summary>
 /// Request to update mapping 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="patternForKill">Pattern to use for kill connection.</param>
 /// <param name="shardMap">Shard map for which operation is being requested.</param>
 /// <param name="mappingSource">Shard to update.</param>
 /// <param name="mappingTarget">Updated shard.</param>
 /// <param name="lockOwnerId">Lock owner.</param>
 /// <returns>Xml formatted request.</returns>
 internal static XElement UpdateShardMappingGlobal(
     Guid operationId,
     StoreOperationCode operationCode,
     bool undo,
     string patternForKill,
     IStoreShardMap shardMap,
     IStoreMapping mappingSource,
     IStoreMapping mappingTarget,
     Guid lockOwnerId)
 {
     return new XElement(
         "BulkOperationShardMappingsGlobal",
         StoreOperationRequestBuilder.OperationId(operationId),
         StoreOperationRequestBuilder.OperationCode(operationCode),
         StoreOperationRequestBuilder.Undo(undo),
         StoreOperationRequestBuilder.StepsCount(1),
         StoreOperationRequestBuilder.s_gsmVersion,
         new XElement("PatternForKill", patternForKill),
         StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap),
         new XElement("Removes",
             StoreObjectFormatterXml.WriteIStoreShard("Shard", mappingSource.StoreShard)),
         new XElement("Adds",
             StoreObjectFormatterXml.WriteIStoreShard("Shard", mappingTarget.StoreShard)),
         new XElement("Steps",
             new XElement("Step",
                 new XAttribute("Id", 1),
                 StoreOperationRequestBuilder.Validate(false),
                 StoreOperationRequestBuilder.StepKind(StoreOperationStepKind.Update),
                 StoreObjectFormatterXml.WriteLock(lockOwnerId),
                 StoreObjectFormatterXml.WriteIStoreMapping("Mapping", mappingSource),
                 new XElement("Update",
                     StoreObjectFormatterXml.WriteIStoreMapping("Mapping", mappingTarget)))));
 }
 internal ReplaceMappingsOperationFailAfterLocalTarget(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     Tuple<IStoreMapping, Guid>[] mappingsSource,
     Tuple<IStoreMapping, Guid>[] mappingsTarget)
     : base(shardMapManager,
     operationCode,
     shardMap,
     mappingsSource,
     mappingsTarget)
 {
 }
        /// <summary>
        /// Request to replace mappings 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="mappingsSource">Original mappings.</param>
        /// <param name="mappingsTarget">New mappings.</param>
        /// <returns>Xml formatted request.</returns>
        internal static XElement ReplaceShardMappingsGlobal(
            Guid operationId,
            StoreOperationCode operationCode,
            bool undo,
            IStoreShardMap shardMap,
            Tuple<IStoreMapping, Guid>[] mappingsSource,
            Tuple<IStoreMapping, Guid>[] mappingsTarget)
        {
            Debug.Assert(mappingsSource.Length > 0);
            Debug.Assert(mappingsTarget.Length > 0);

            return new XElement(
                "BulkOperationShardMappingsGlobal",
                StoreOperationRequestBuilder.OperationId(operationId),
                StoreOperationRequestBuilder.OperationCode(operationCode),
                StoreOperationRequestBuilder.Undo(undo),
                StoreOperationRequestBuilder.StepsCount(mappingsSource.Length + mappingsTarget.Length),
                StoreOperationRequestBuilder.s_gsmVersion,
                StoreObjectFormatterXml.WriteIStoreShardMap("ShardMap", shardMap),
                new XElement("Removes",
                    StoreObjectFormatterXml.WriteIStoreShard("Shard", mappingsSource[0].Item1.StoreShard)),
                new XElement("Adds",
                    StoreObjectFormatterXml.WriteIStoreShard("Shard", mappingsTarget[0].Item1.StoreShard)),
                new XElement("Steps",
                    mappingsSource.Select((mapping, i) =>
                        new XElement("Step",
                            StoreOperationRequestBuilder.Validate(false),
                            StoreOperationRequestBuilder.StepKind(StoreOperationStepKind.Remove),
                            new XAttribute("Id", i + 1),
                            StoreObjectFormatterXml.WriteLock(mapping.Item2),
                            StoreObjectFormatterXml.WriteIStoreMapping("Mapping", mapping.Item1))),
                    mappingsTarget.Select((mapping, i) =>
                        new XElement("Step",
                            StoreOperationRequestBuilder.Validate(false),
                            StoreOperationRequestBuilder.StepKind(StoreOperationStepKind.Add),
                            new XAttribute("Id", mappingsSource.Length + i + 1),
                            StoreObjectFormatterXml.WriteLock(mapping.Item2),
                            StoreObjectFormatterXml.WriteIStoreMapping("Mapping", mapping.Item1)))));
        }
 internal AddMappingOperationFailAfterLocalTarget(
     ShardMapManager shardMapManager,
     StoreOperationCode operationCode,
     IStoreShardMap shardMap,
     IStoreMapping mapping)
     : base(shardMapManager,
     operationCode,
     shardMap,
     mapping)
 {
 }
        /// <summary>
        /// Creates request to replace a set of mappings with new set in given shard map.
        /// </summary>
        /// <param name="operationCode">Operation code.</param>
        /// <param name="shardMapManager">Shard map manager object.</param>
        /// <param name="operationId">Operation Id.</param>
        /// <param name="undoStartState">Undo start state.</param>
        /// <param name="root">Xml representation of the object.</param>
        /// <param name="originalShardVersionAdds">Original shard Id of source.</param>
        /// <returns>The store operation.</returns>
        public virtual IStoreOperation CreateReplaceMappingsOperation(
            StoreOperationCode operationCode,
            ShardMapManager shardMapManager,
            Guid operationId,
            StoreOperationState undoStartState,
            XElement root,
            Guid originalShardVersionAdds)
        {
            XElement removeShard = root.Element("Removes").Element("Shard");
            XElement addShard = root.Element("Adds").Element("Shard");

            return new ReplaceMappingsOperation(
                shardMapManager,
                operationId,
                undoStartState,
                operationCode,
                StoreObjectFormatterXml.ReadIStoreShardMap(root.Element("ShardMap")),
                root.Element("Steps").Elements("Step").Where(e => e.Attribute("Kind").Value == "1").Select(
                     xe => new
                     {
                         Index = Int32.Parse(xe.Attribute("Id").Value),
                         Mapping = StoreObjectFormatterXml.ReadIStoreMapping(xe.Element("Mapping"), removeShard),
                         Lock = StoreObjectFormatterXml.ReadLock(xe.Element("Lock"))
                     })
                .OrderBy(el => el.Index)
                .Select(el => new Tuple<IStoreMapping, Guid>(el.Mapping, el.Lock))
                .ToArray(),
                root.Element("Steps").Elements("Step").Where(e => e.Attribute("Kind").Value == "3").Select(
                    xe => new
                    {
                        Index = Int32.Parse(xe.Attribute("Id").Value),
                        Mapping = StoreObjectFormatterXml.ReadIStoreMapping(xe.Element("Mapping"), addShard),
                        Lock = StoreObjectFormatterXml.ReadLock(xe.Element("Lock"))
                    })
                .OrderBy(el => el.Index)
                .Select(el => new Tuple<IStoreMapping, Guid>(el.Mapping, el.Lock))
                .ToArray(),
                originalShardVersionAdds);
        }
 /// <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);
 }
 /// <summary>
 /// Initializes a new instance
 /// </summary>
 public StubAddMappingOperation(ShardMapManager shardMapManager, StoreOperationCode operationCode, IStoreShardMap shardMap, IStoreMapping mapping)
     : base(shardMapManager, operationCode, shardMap, mapping)
 {
     this.InitializeStub();
 }