在 Azure 弹性池中从分片映射中删除分片时遇到问题
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 中删除了分片,我就会得到以下内容:
分片 '[数据源=*** Database=Test21]' 属于分片映射 'UserIdShardMap' 已在商店中更新。执行存储时出错 过程 '__ShardManagement.spBulkOperationShardsGlobalBegin' for 操作"删除分片"。如果另一个并发用户,则可能会发生这种情况 更新分片。对分片位置执行 GetShard 操作 以获取更新的实例。 请问谁能帮我?
这可能不再相关,但供参考: 异常指向目录中的一种并发冲突。要绕过它,您必须改变
shardMap.DeleteShard(shard);
像这样:
var shard = _shardMap.GetShard(pointMapping.Shard.Location);
_shardMap.DeleteShard(shard);
你可以忘记Thread.Sleep,这是立即生效的。