Пример #1
0
            internal static ReadOnlyCollection <UpgradeDomainStatus> GetChangedUpgradeDomainsFromNative(NativeClient.IFabricUpgradeProgressResult previousProgress, NativeClient.IFabricUpgradeProgressResult upgradeProgress)
            {
                uint   count   = 0;
                IntPtr pointer = upgradeProgress.GetChangedUpgradeDomains(previousProgress, out count);

                ReadOnlyCollection <UpgradeDomainStatus> returnValue = UpgradeDomainHelper.CreateUpgradeDomainsFromNative(count, pointer);

                if (previousProgress != null)
                {
                    GC.KeepAlive(previousProgress);
                }

                GC.KeepAlive(upgradeProgress);

                return(returnValue);
            }
Пример #2
0
            internal static FabricUpgradeProgress CreateFromNative(NativeClient.IFabricUpgradeProgressResult3 nativeResult)
            {
                if (nativeResult == null)
                {
                    return(null);
                }

                var progress = new FabricUpgradeProgress(nativeResult);

                progress.TargetCodeVersion   = NativeTypes.FromNativeString(nativeResult.get_TargetCodeVersion());
                progress.TargetConfigVersion = NativeTypes.FromNativeString(nativeResult.get_TargetConfigVersion());

                switch (nativeResult.get_UpgradeState())
                {
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLBACK_IN_PROGRESS:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLBACK_COMPLETED:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLBACK_PENDING:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLFORWARD_PENDING:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLFORWARD_IN_PROGRESS:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_ROLLFORWARD_COMPLETED:
                case NativeTypes.FABRIC_UPGRADE_STATE.FABRIC_UPGRADE_STATE_FAILED:
                    progress.UpgradeState = (FabricUpgradeState)nativeResult.get_UpgradeState();
                    break;

                default:
                    progress.UpgradeState = FabricUpgradeState.Invalid;
                    break;
                }

                uint   count   = 0;
                IntPtr pointer = nativeResult.GetUpgradeDomains(out count);

                progress.UpgradeDomains = UpgradeDomainHelper.CreateUpgradeDomainsFromNative(count, pointer);

                switch (nativeResult.get_RollingUpgradeMode())
                {
                case NativeTypes.FABRIC_ROLLING_UPGRADE_MODE.FABRIC_ROLLING_UPGRADE_MODE_UNMONITORED_AUTO:
                case NativeTypes.FABRIC_ROLLING_UPGRADE_MODE.FABRIC_ROLLING_UPGRADE_MODE_UNMONITORED_MANUAL:
                case NativeTypes.FABRIC_ROLLING_UPGRADE_MODE.FABRIC_ROLLING_UPGRADE_MODE_MONITORED:
                    progress.RollingUpgradeMode = (RollingUpgradeMode)nativeResult.get_RollingUpgradeMode();
                    break;

                default:
                    progress.RollingUpgradeMode = RollingUpgradeMode.Invalid;
                    break;
                }

                progress.NextUpgradeDomain = NativeTypes.FromNativeString(nativeResult.get_NextUpgradeDomain());

                IntPtr upgradeProgressPtr = nativeResult.get_UpgradeProgress();

                if (upgradeProgressPtr != IntPtr.Zero)
                {
                    unsafe
                    {
                        var castedProgressPtr = (NativeTypes.FABRIC_UPGRADE_PROGRESS *)upgradeProgressPtr;
                        progress.UpgradeDescription           = FabricUpgradeDescription.FromNative(castedProgressPtr->UpgradeDescription);
                        progress.UpgradeDuration              = TimeSpan.FromSeconds(castedProgressPtr->UpgradeDurationInSeconds);
                        progress.CurrentUpgradeDomainDuration = TimeSpan.FromSeconds(castedProgressPtr->CurrentUpgradeDomainDurationInSeconds);
                        progress.UnhealthyEvaluations         = HealthEvaluation.FromNativeList(castedProgressPtr->UnhealthyEvaluations);
                        progress.CurrentUpgradeDomainProgress = UpgradeDomainProgress.FromNative(castedProgressPtr->CurrentUpgradeDomainProgress);

                        if (castedProgressPtr->Reserved != IntPtr.Zero)
                        {
                            var castedProgressEx1Ptr = (NativeTypes.FABRIC_UPGRADE_PROGRESS_EX1 *)castedProgressPtr->Reserved;
                            progress.StartTimestampUtc   = NativeTypes.FromNullableNativeFILETIME(castedProgressEx1Ptr->StartTimestampUtc);
                            progress.FailureTimestampUtc = NativeTypes.FromNullableNativeFILETIME(castedProgressEx1Ptr->FailureTimestampUtc);

                            if (progress.FailureTimestampUtc.HasValue)
                            {
                                switch (castedProgressEx1Ptr->FailureReason)
                                {
                                case NativeTypes.FABRIC_UPGRADE_FAILURE_REASON.FABRIC_UPGRADE_FAILURE_REASON_INTERRUPTED:
                                case NativeTypes.FABRIC_UPGRADE_FAILURE_REASON.FABRIC_UPGRADE_FAILURE_REASON_HEALTH_CHECK:
                                case NativeTypes.FABRIC_UPGRADE_FAILURE_REASON.FABRIC_UPGRADE_FAILURE_REASON_UPGRADE_DOMAIN_TIMEOUT:
                                case NativeTypes.FABRIC_UPGRADE_FAILURE_REASON.FABRIC_UPGRADE_FAILURE_REASON_OVERALL_UPGRADE_TIMEOUT:
                                case NativeTypes.FABRIC_UPGRADE_FAILURE_REASON.FABRIC_UPGRADE_FAILURE_REASON_PROCESSING_FAILURE:
                                    progress.FailureReason = (UpgradeFailureReason)castedProgressEx1Ptr->FailureReason;
                                    break;

                                default:
                                    progress.FailureReason = UpgradeFailureReason.None;
                                    break;
                                }

                                progress.UpgradeDomainProgressAtFailure = UpgradeDomainProgress.FromNative(
                                    castedProgressEx1Ptr->UpgradeDomainProgressAtFailure);
                            }
                        }
                    }
                }

                GC.KeepAlive(nativeResult);
                return(progress);
            }