public async Task InvokeDataLossAsync(
            InvokeDataLossDescription invokeDataLossDescription,
            TimeSpan timeout,
            CancellationToken cancellationToken)
        {
            this.ThrowIfNotReady();

            TestabilityTrace.TraceSource.WriteInfo(
                TraceType,
                "{0} - Processing {1} PartitionSelector: {2}, DataLossMode: {3}",
                invokeDataLossDescription.OperationId,
                ActionType.InvokeDataLoss,
                invokeDataLossDescription.PartitionSelector,
                invokeDataLossDescription.DataLossMode);

            try
            {
                await this.MessageProcessor.ProcessDataLossCommandAsync(
                    invokeDataLossDescription.OperationId,
                    invokeDataLossDescription.PartitionSelector,
                    invokeDataLossDescription.DataLossMode,
                    timeout,
                    null);
            }
            catch (Exception e)
            {
                TestabilityTrace.TraceSource.WriteWarning(TraceType, "{0} - Exception occurred: {1}", invokeDataLossDescription.OperationId, e.Message);
                FaultAnalysisServiceUtility.ThrowTransientExceptionIfRetryable(e);

                throw;
            }

            TestabilityTrace.TraceSource.WriteInfo(TraceType, "{0} - Intent saved for {1}", invokeDataLossDescription.OperationId, ActionType.InvokeDataLoss);
        }
        NativeCommon.IFabricAsyncOperationContext NativeFaultAnalysisService.IFabricFaultAnalysisService.BeginStartPartitionDataLoss(IntPtr invokeDataLossDescription, uint timeoutInMilliseconds, NativeCommon.IFabricAsyncOperationCallback callback)
        {
            var managedDataLossDescription = InvokeDataLossDescription.CreateFromNative(invokeDataLossDescription);

            TimeSpan managedTimeout = TimeSpan.FromMilliseconds(timeoutInMilliseconds);

            return(Utility.WrapNativeAsyncMethodImplementation(
                       (cancellationToken) =>
                       this.InvokeDataLossAsync(
                           managedDataLossDescription,
                           managedTimeout,
                           cancellationToken),
                       callback,
                       "FaultAnalysisServiceBroker.InvokeDataLossAsync",
                       ThreadErrorMessageSetter));
        }
 private Task InvokeDataLossAsync(InvokeDataLossDescription dataLossDescription, TimeSpan timeout, CancellationToken cancellationToken)
 {
     return(this.service.InvokeDataLossAsync(dataLossDescription, timeout, cancellationToken));
 }