문제는 제공된 샘플 코드입니다 (이 도메인에서, 일반적으로 유용한 샘플의 부족 ...)에서
감사합니다. 또한 즉각적인 만족 (혼란이 너무 오래 기다리지 않고 발생하는 것을보기 위해)을 위해서는 문서 샘플보다 적극적이어야합니다 (발견 한 것처럼 다시 작동하지는 않습니다 ...) .
var startTimeUtc = DateTime.UtcNow;
var stabilizationTimeout = TimeSpan.FromSeconds(30.0);
var timeToRun = TimeSpan.FromMinutes(60.0);
var maxConcurrentFaults = 7;
var timeBetweenFaults = new TimeSpan(0, 0, 10);
var timeBetweenIterations = new TimeSpan(0, 0, 10);
Dictionary<string, string> _context = new Dictionary<string, string>();
//Aggressive chaos...
var clusterHealthPolicy = new System.Fabric.Health.ClusterHealthPolicy()
{
MaxPercentUnhealthyApplications = 90,
MaxPercentUnhealthyNodes = 100
};
var parameters = new ChaosParameters(
stabilizationTimeout,
maxConcurrentFaults,
true, /* EnableMoveReplicaFault */
timeToRun,
_context,
timeBetweenIterations,
timeBetweenFaults,
clusterHealthPolicy);
참고 : 당신은 더 나은
(이와 샘플 코드의 IMPL 교체)
이 시도 ... ChaosParameters 생성자에 대한 다른 오버로드를 사용하여 제공 : 나는 당신이 새로운 정적 비동기 작업 반환 함수에서 이것을하는 것이 좋습니다 ...
전체 (작동 중) 샘플 :
public static async Task RunChaos()
{
var clusterConnectionString = "localhost:19000";
using (var client = new FabricClient(clusterConnectionString))
{
var startTimeUtc = DateTime.UtcNow;
var stabilizationTimeout = TimeSpan.FromSeconds(30.0);
var timeToRun = TimeSpan.FromMinutes(60.0);
var maxConcurrentFaults = 7;
var timeBetweenFaults = new TimeSpan(0, 0, 10);
var timeBetweenIterations = new TimeSpan(0, 0, 10);
Dictionary<string, string> _context = new Dictionary<string, string>();
//Aggressive chaos...
var clusterHealthPolicy = new System.Fabric.Health.ClusterHealthPolicy()
{
MaxPercentUnhealthyApplications = 90,
MaxPercentUnhealthyNodes = 100
};
var parameters = new ChaosParameters(
stabilizationTimeout,
maxConcurrentFaults,
true, /* EnableMoveReplicaFault */
timeToRun,
_context,
timeBetweenIterations,
timeBetweenFaults,
clusterHealthPolicy);
var token = new System.Threading.CancellationToken();
try
{
await client.TestManager.StartChaosAsync(parameters, new TimeSpan(0, 30, 0), token);
}
catch (FabricChaosAlreadyRunningException)
{
Console.WriteLine("An instance of Chaos is already running in the cluster.");
}
var filter = new ChaosReportFilter(startTimeUtc, DateTime.MaxValue);
var eventSet = new HashSet<ChaosEvent>(new ChaosEventComparer());
while (true)
{
var report = await client.TestManager.GetChaosReportAsync(filter);
foreach (var chaosEvent in report.History)
{
if (eventSet.Add(chaosEvent))
{
Console.WriteLine(chaosEvent);
}
}
// When Chaos stops, a StoppedEvent is created.
// If a StoppedEvent is found, exit the loop.
var lastEvent = report.History.LastOrDefault();
if (lastEvent is StoppedEvent)
{
break;
}
Task.Delay(TimeSpan.FromSeconds(1.0)).GetAwaiter().GetResult();
}
}
}
클러스터의 현재 상태를 추가 할 수 있습니까? 어떤 경고가있는 경우 "considerwarningaserror"로 카오스는 일을 건강하지 못한 것으로 간주하고 이동하지 않습니다. – masnider
"ConsiderWarningsAsError"를 true로 설정하고 모든 엔티티가 정상임을 확인했지만이 코드를 실행할 때마다 여전히 동일한 문제가 표시됩니다. 이걸 진단하는 데 도움이 될만한 로그가 있습니까? –
하늘색 서비스 패브릭 클러스터와 비슷한 문제가 발생하면서 어디서나이 문제가 발생 했습니까? – Kramer00