void HandleRebuildResult(ReplayResult result, RebuildProjectionVersion @event) { if (result.IsSuccess) { var finalize = new FinalizeProjectionVersionRequest(@event.ProjectionVersionRequest.Id, @event.ProjectionVersionRequest.Version); commandPublisher.Publish(finalize); } else if (result.ShouldRetry) { RequestTimeout(new RebuildProjectionVersion(@event.ProjectionVersionRequest, DateTime.UtcNow.AddSeconds(30))); } else { log.Error(() => result.Error); if (result.IsTimeout) { var timedout = new TimeoutProjectionVersionRequest(@event.ProjectionVersionRequest.Id, @event.ProjectionVersionRequest.Version, @event.ProjectionVersionRequest.Timebox); commandPublisher.Publish(timedout); } else { var cancel = new CancelProjectionVersionRequest(@event.ProjectionVersionRequest.Id, @event.ProjectionVersionRequest.Version, result.Error); commandPublisher.Publish(cancel); } } }
/// <inheritdoc /> public bool Validate(IScenario scenario, ReplayResult result = null) { // var otherJson = JsonConvert.SerializeObject(scenario.Results, Formatting.Indented); // var thisJson = JsonConvert.SerializeObject(_scenario.Value.Results, Formatting.Indented); if (result != null) { result.Output = JsonConvert.SerializeObject(_scenario.Value.Results.Select(r => r.Result)); } var expectedResults = scenario.Results.Select(r => JToken.Parse(r.Result)).ToList(); var thisResults = _scenario.Value.Results.Select(r => JToken.Parse(r.Result)).ToList(); if (expectedResults.Count != thisResults.Count) { _log.Warn($"Output has {thisResults.Count} results, expected {expectedResults.Count}"); return(false); } var jdp = new JsonDiffPatch(); for (var i = 0; i < thisResults.Count; ++i) { var diff = jdp.Diff(expectedResults[i], thisResults[i]); if (diff == null) { continue; } _log.Warn($"Mismatch for \n {scenario.Results[i].GraphQl} : \n {diff.ToString()}"); if (result != null) { result.Difference = diff.ToString(); } return(false); } return(true); }
public void Handle(RebuildProjectionVersion @event) { ReplayResult result = projectionPlayer.Rebuild(@event.ProjectionVersionRequest.Version, @event.ProjectionVersionRequest.Timebox.RebuildFinishUntil); HandleRebuildResult(result, @event); }