我正在尝试使用FabricClient API来模拟正常故障(例如分区/副本/实例重新启动),但是由于某些原因,该服务一直在恢复。
唯一成功的方法是从群集UI手动删除服务,然后我发现它被卡住了,因为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导致服务似乎重新启动,但是随后又成功了。
答案 0 :(得分:1)
取消令牌在某些情况下被取消,而大多数情况下主要是出于维护原因,它们可能是:
在某些其他事件中,服务被强制关闭,并且未调用令牌,例如,当您调用Restart-ServiceFabricDeployedCodePackage
Restart-ServiceFabricPartition
或Restart-ServiceFabricNode
答案 1 :(得分:0)
很可能另一个副本成为主要副本,而您无需执行任何操作。重新启动分区将导致重新启动所有副本,而不仅仅是主副本。
(不确定您要完成的工作。但是,如果您想进行一些受控的混沌测试,很高兴知道有PowerShell tasks可以为您提供帮助。)