Имитация запроса токена отмены в RunAsync () в ServiceFabric - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь использовать FabricClient API для симуляции постепенного сбоя (например, перезапуск раздела / реплики / экземпляра), но по какой-то причине служба продолжает восстанавливаться.

Единственный раз, когда это в конце концов удается, это когда я вручную удаляю службу из пользовательского интерфейса кластера, а затем вижу, что она застряла, так как RunAsyc застрял.(Я написал специальный фиктивный сервис, который не учитывает маркер отмены.)

Это мои попытки:

foreach (var service in Services)
        {
            var partitions = FabricClient.QueryManager.GetPartitionListAsync(service.ServiceName).Result;
            foreach (var partition in partitions)
            {
                var operationGuid = Guid.NewGuid();
                restartOperationsIds.Add(operationGuid);
                var partitionId = partition.PartitionInformation.Id;

                FabricClient.FaultManager.RestartReplicaAsync(
                    ReplicaSelector.PrimaryOf(PartitionSelector.PartitionIdOf(service.ServiceName, partitionId)),
                    CompletionMode.Verify, CancellationToken.None);

                FabricClient.TestManager.StartPartitionRestartAsync(operationGuid,
                    PartitionSelector.PartitionIdOf(service.ServiceName, partitionId),
                    RestartPartitionMode.AllReplicasOrInstances, TimeSpan.FromMinutes(2));
            }
        }

RestartReplicaAsync ничего не делает, в то время как StartPartitionRestartAsync вызываетслужба должна появиться, чтобы перезапустить, но затем она снова успешна.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Токен отмены отменяется в нескольких сценариях, и большинство этих сценариев в основном из соображений обслуживания, они могут быть:

  • Обновления: служба закрыта для обновления, RunAsync () будетвызывается при перезапуске.
  • Уменьшение масштаба: реплики удаляются с уменьшением масштаба, и RunAsync не вызывается
  • Балансировка нагрузки: когда SF требуется перемещать службы, вызывается RunAsync.
  • УзелДеактивация (Restart \ RemoveData): SF перемещает службы на другие узлы, вызывая отмену для постепенного завершения работы.
  • Удалить приложение \ Служба: при удалении службы или приложения из кластера.

Есть некоторые другие события, когда службы принудительно отключаются, и токен не вызывается, например, когда вы звоните Restart-ServiceFabricDeployedCodePackage Restart-ServiceFabricPartition или Restart-ServiceFabricNode

0 голосов
/ 29 января 2019

Вероятно, что другая реплика станет первичной, без необходимости что-либо делать.Перезапуск раздела приводит к перезапуску всех реплик, а не только основных.

(Не уверен, что вы пытаетесь сделать с этим. Но если вы хотите провести некоторое контролируемое тестирование хаоса, полезно знать,что есть задачи PowerShell , которые могут вам помочь.)

...