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); }); } }
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); }
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)); }
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); }
private Task StartNodeTransitionAsync(NodeTransitionDescription description, TimeSpan timeout, CancellationToken cancellationToken) { return(this.service.StartNodeTransitionAsync(description, timeout, cancellationToken)); }