public static ChaosEvent FromNativeEvent(NativeTypes.FABRIC_CHAOS_EVENT nativeEvent) { switch (nativeEvent.Kind) { case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_STARTED: return(StartedEvent.FromNative(nativeEvent.Value)); case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_EXECUTING_FAULTS: return(ExecutingFaultsEvent.FromNative(nativeEvent.Value)); case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_STOPPED: return(StoppedEvent.FromNative(nativeEvent.Value)); case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_TEST_ERROR: return(TestErrorEvent.FromNative(nativeEvent.Value)); case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_VALIDATION_FAILED: return(ValidationFailedEvent.FromNative(nativeEvent.Value)); case NativeTypes.FABRIC_CHAOS_EVENT_KIND.FABRIC_CHAOS_EVENT_KIND_WAITING: return(WaitingEvent.FromNative(nativeEvent.Value)); default: return(null); } }
public static ChaosEvent GetEventFromBytes(byte[] data) { ChaosEvent e = null; ChaosEventType type = (ChaosEventType)BitConverter.ToInt32(data, 0); switch (type) { case ChaosEventType.Started: { e = new StartedEvent(); } break; case ChaosEventType.Stopped: { e = new StoppedEvent(); } break; case ChaosEventType.ExecutingFaults: { e = new ExecutingFaultsEvent(); } break; case ChaosEventType.ValidationFailed: { e = new ValidationFailedEvent(); } break; case ChaosEventType.TestError: { e = new TestErrorEvent(); } break; case ChaosEventType.Waiting: { e = new WaitingEvent(); } break; } if (e != null) { byte[] eventData = new byte[data.Length - 4]; Array.Copy(data, 4, eventData, 0, eventData.Length); e.FromBytes(eventData); } return(e); }
private async Task <IList <StateTransitionAction> > GetGeneratedActionsAsync(CancellationToken token) { Guid activityId = Guid.NewGuid(); TestabilityTrace.TraceSource.WriteInfo("StartTrek", "Just before taking snapshot, datetimeutc={0}", DateTime.UtcNow); ClusterStateSnapshot taskSnapshot = await this.GetStateSnapshotAsync(token).ConfigureAwait(false); IList <StateTransitionAction> ragActions = new List <StateTransitionAction>(); if (taskSnapshot != null) { ragActions = this.rootActionGenerator.GetNextActions(taskSnapshot, activityId); List <string> faultsInCurrentIteration = new List <string>(ragActions.Count); foreach (var a in ragActions) { faultsInCurrentIteration.Add(a.ToString()); } TestabilityTrace.TraceSource.WriteInfo("StartTrek", "Just before creating ExecutingFaultsEvent, datetimeutc={0}", DateTime.UtcNow); var execFaultsEvent = new ExecutingFaultsEvent(DateTime.UtcNow, faultsInCurrentIteration); await this.StateManager.RegisterChaosEventAndUpdateChaosStatusAsync( new ExecutingFaultsEvent(DateTime.UtcNow, faultsInCurrentIteration), ChaosStatus.Running, this.partition, token, () => { FabricEvents.Events.ChaosExecutingFaults(TraceType, execFaultsEvent.TimeStampUtc.Ticks, execFaultsEvent.Faults.Count, string.Join(FASConstants.FaultStringDelimeter, execFaultsEvent.Faults)); }).ConfigureAwait(false); } else { // GetStateSnapshot must have failed hence we need to retry the entire iteration. } return(ragActions); }