Не удается удалить осколок из Azure Elastic Pool
Проблемы с удалением осколка с карты осколка в лазурном бассейне Elastic
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, но как только я получаю deleteShard из shardMap, я получаю следующее:
Shard '[DataSource = *** Database = Test21]', принадлежащий карте шардов 'UserIdShardMap', обновлен в хранилище. Произошла ошибка при выполнении хранимой процедуры "__ShardManagement.spBulkOperationShardsGlobalBegin" для операции "DeleteShard". Это может произойти, если другой одновременный пользователь обновит шард. Выполните операцию GetShard для местоположения сегмента, чтобы получить обновленный экземпляр. Может ли кто-нибудь помочь мне с этим, пожалуйста?
1 ответ
Это, вероятно, уже не актуально, но для справки: исключение указывает на своего рода нарушение параллелизма в каталоге. Чтобы обойти это, вы должны изменить
shardMap.DeleteShard(shard);
что-то вроде:
var shard = _shardMap.GetShard(pointMapping.Shard.Location);
_shardMap.DeleteShard(shard);
Вы можете забыть о Thread.Sleep, это вступает в силу немедленно.