コード例 #1
0
        protected override void ProcessRecord()
        {
            var clusterConnection = this.GetClusterConnection();

            NodeTransitionDescription description = this.CreateDescription();

            try
            {
                clusterConnection.StartNodeTransitionAsync(
                    description,
                    this.GetTimeout(),
                    this.GetCancellationToken()).Wait();
            }
            catch (AggregateException aggregateException)
            {
                aggregateException.Handle((ae) =>
                {
                    this.ThrowTerminatingError(
                        ae,
                        Constants.StartNodeTransitionCommandErrorId,
                        clusterConnection);
                    return(true);
                });
            }
        }
コード例 #2
0
        public StartNodeTransitionRequest(IFabricClient fabricClient, NodeTransitionDescription description, TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(description, "description");

            this.Description = description;

            this.RetryErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_NOT_READY);
            this.RetryErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_RECONFIGURATION_PENDING);

            this.SucceedErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_TEST_COMMAND_OPERATION_ID_ALREADY_EXISTS);
        }
コード例 #3
0
        NativeCommon.IFabricAsyncOperationContext NativeFaultAnalysisService.IFabricFaultAnalysisService.BeginStartNodeTransition(IntPtr description, uint timeoutInMilliseconds, NativeCommon.IFabricAsyncOperationCallback callback)
        {
            TestabilityTrace.TraceSource.WriteInfo(TraceType, "In FaultAnalysisServiceBroker.BeginStartNodeTransition");

            var managedDescription = NodeTransitionDescription.CreateFromNative(description);

            TimeSpan managedTimeout = TimeSpan.FromMilliseconds(timeoutInMilliseconds);

            TestabilityTrace.TraceSource.WriteInfo(
                TraceType,
                "In FaultAnalysisServiceBroker.BeginStartNodeTransition values are: {0} | {1} | {2} | {3}", managedDescription.NodeTransitionType, managedDescription.OperationId, managedDescription.NodeName, managedDescription.NodeInstanceId);

            return(Utility.WrapNativeAsyncMethodImplementation(
                       (cancellationToken) =>
                       this.StartNodeTransitionAsync(
                           managedDescription,
                           managedTimeout,
                           cancellationToken),
                       callback,
                       "FaultAnalysisServiceBroker.StartNodeTransitionAsync",
                       ThreadErrorMessageSetter));
        }
コード例 #4
0
        public async Task StartNodeTransitionAsync(
            NodeTransitionDescription description,
            TimeSpan timeout,
            CancellationToken cancellationToken)
        {
            this.ThrowIfNotReady();

            TestabilityTrace.TraceSource.WriteInfo(
                TraceType,
                "FaultAnalysisServiceImpl StartNodeTransitionAsync operationId={0} NodeTransitionType={1} - {2}:{3}",
                description.OperationId,
                description.NodeTransitionType,
                description.NodeName,
                description.NodeInstanceId);
            try
            {
                if (description.NodeTransitionType == NodeTransitionType.Start)
                {
                    NodeStartDescription translatedDescription = (NodeStartDescription)description;
                    await this.MessageProcessor.ProcessStartNodeCommandAsync(
                        translatedDescription.OperationId,
                        translatedDescription.NodeName,
                        translatedDescription.NodeInstanceId,
                        timeout,
                        null).ConfigureAwait(false);
                }
                else if (description.NodeTransitionType == NodeTransitionType.Stop)
                {
                    NodeStopDescription translatedDescription = (NodeStopDescription)description;
                    if (translatedDescription.StopDurationInSeconds < this.minStopDurationInSeconds ||
                        translatedDescription.StopDurationInSeconds > this.maxStopDurationInSeconds)
                    {
                        TestabilityTrace.TraceSource.WriteWarning(
                            TraceType,
                            "Duration in seconds '{0}' is out of range.  Min='{1}' Max='{2}'",
                            translatedDescription.StopDurationInSeconds,
                            this.minStopDurationInSeconds,
                            this.maxStopDurationInSeconds);
                        throw FaultAnalysisServiceUtility.CreateException(
                                  TraceType,
                                  Interop.NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_INVALID_DURATION,
                                  "StopDurationInSeconds is out of range");
                    }

                    await this.MessageProcessor.ProcessStopNodeCommandAsync(
                        translatedDescription.OperationId,
                        translatedDescription.NodeName,
                        translatedDescription.NodeInstanceId,
                        translatedDescription.StopDurationInSeconds,
                        timeout,
                        null).ConfigureAwait(false);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
            catch (Exception e)
            {
                TestabilityTrace.TraceSource.WriteWarning(TraceType, "{0} - Exception occurred: {1}", description.OperationId, e.Message);
                FaultAnalysisServiceUtility.ThrowTransientExceptionIfRetryable(e);

                throw;
            }

            TestabilityTrace.TraceSource.WriteInfo(TraceType, "{0} - Intent saved for {1}", description.OperationId, ActionType.StartNode);
        }
コード例 #5
0
 private Task StartNodeTransitionAsync(NodeTransitionDescription description, TimeSpan timeout, CancellationToken cancellationToken)
 {
     return(this.service.StartNodeTransitionAsync(description, timeout, cancellationToken));
 }