Я пытаюсь использовать 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 вызываетслужба должна появиться, чтобы перезапустить, но затем она снова успешна.