从天蓝色弹性池中的分片地图中删除分片时遇到麻烦
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操作 获取更新的实例。 有人可以帮帮我吗?
答案 0 :(得分:0)
这可能不再相关,但仅供参考: 异常指向目录中的一种并发冲突。要解决这个问题,您必须更改
shardMap.DeleteShard(shard);
类似于:
var shard = _shardMap.GetShard(pointMapping.Shard.Location);
_shardMap.DeleteShard(shard);
您可以忘记Thread.Sleep,它立即生效。