Не удается удалить осколок из Azure Elastic Pool - PullRequest
0 голосов
/ 07 мая 2018

Проблемы с удалением осколка с карты осколков в лазурном Эластичном пуле

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, я получаю следующее:

Осколок '[DataSource = *** База данных = Test21] 'принадлежащая карте шардов' UserIdShardMap ' был обновлен в магазине. Произошла ошибка при выполнении сохраненного процедура '__ShardManagement.spBulkOperationShardsGlobalBegin' для операция «DeleteShard». Это может произойти, если другой одновременный пользователь обновляет осколок. Выполните операцию GetShard для местоположения шарда получить обновленный экземпляр. Может ли кто-нибудь помочь мне с этим, пожалуйста?

1 Ответ

0 голосов
/ 05 ноября 2018

Это, вероятно, больше не актуально, но для справки: исключение указывает на своего рода нарушение параллелизма в каталоге. Чтобы обойти это, вы должны изменить

shardMap.DeleteShard(shard);

что-то вроде:

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

Вы можете забыть о Thread.Sleep, это вступает в силу немедленно.

...