Не удается удалить осколок из 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, это вступает в силу немедленно.

Другие вопросы по тегам