Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }