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); }
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); }