无法从Azure弹性池中删除分片

时间:2018-05-07 11:08:12

标签: c# azure azure-elastic-sharding

从天蓝色弹性池中的分片地图中删除分片时遇到麻烦

var isMapKeyExists = shardMap.TryGetMappingForKey(tenantId, out PointMapping<int> pointMapping);
            if(pointMapping.Status == MappingStatus.Online)
            {
                pointMapping = shardMap.MarkMappingOffline(pointMapping);
            }

            if (isMapKeyExists)
            {
                shardMap.DeleteMapping(pointMapping);

                Thread.Sleep(TimeSpan.FromSeconds(30));

                if (enableDedicatedDb)
                {
                    shardMap.DeleteShard(shard);
                }
            }

首先我刚从shardMap中删除了映射,但是一旦我从shardMap中删除了deleteShard,我得到以下内容:

  

Shard&#39; [DataSource = ***   数据库= Test21]&#39;属于碎片地图&#39; UserIdShardMap&#39;   已在商店更新。执行存储时发生错误   程序&#39; __ ShardManagement.spBulkOperationShardsGlobalBegin&#39;对于   操作&#39; DeleteShard&#39;。如果另一个并发用户,可能会发生   更新分片。对分片位置执行GetShard操作   获取更新的实例。   有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

这可能不再相关,但仅供参考: 异常指向目录中的一种并发冲突。要解决这个问题,您必须更改

shardMap.DeleteShard(shard);

类似于:

var shard = _shardMap.GetShard(pointMapping.Shard.Location);
_shardMap.DeleteShard(shard);

您可以忘记Thread.Sleep,它立即生效。