예제 #1
0
        new internal static unsafe MonitoredRollingApplicationUpgradePolicyDescription FromNative(IntPtr policyPtr)
        {
            if (policyPtr == IntPtr.Zero)
            {
                return(null);
            }

            var castedPtr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION *)policyPtr;

            var monitoringPolicy = new MonitoredRollingApplicationUpgradePolicyDescription();

            if (castedPtr->Reserved != IntPtr.Zero)
            {
                var castedEx1Ptr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION_EX1 *)castedPtr->Reserved;
                if (castedEx1Ptr->MonitoringPolicy != IntPtr.Zero)
                {
                    monitoringPolicy.MonitoringPolicy = RollingUpgradeMonitoringPolicy.FromNative(castedEx1Ptr->MonitoringPolicy);
                }

                if (castedEx1Ptr->HealthPolicy != IntPtr.Zero)
                {
                    monitoringPolicy.HealthPolicy = ApplicationHealthPolicy.FromNative(castedEx1Ptr->HealthPolicy);
                }
            }

            monitoringPolicy.FromNativeHelper(policyPtr);

            return(monitoringPolicy);
        }
        new internal static unsafe MonitoredRollingFabricUpgradePolicyDescription FromNative(IntPtr policyPtr)
        {
            if (policyPtr == IntPtr.Zero)
            {
                return(null);
            }

            var castedPtr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION *)policyPtr;

            var monitoringPolicy = new MonitoredRollingFabricUpgradePolicyDescription();

            if (castedPtr->Reserved != IntPtr.Zero)
            {
                var castedEx1Ptr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION_EX1 *)castedPtr->Reserved;
                if (castedEx1Ptr->MonitoringPolicy != IntPtr.Zero)
                {
                    monitoringPolicy.MonitoringPolicy = RollingUpgradeMonitoringPolicy.FromNative(castedEx1Ptr->MonitoringPolicy);
                }

                if (castedEx1Ptr->HealthPolicy != IntPtr.Zero)
                {
                    monitoringPolicy.HealthPolicy = ClusterHealthPolicy.FromNative(castedEx1Ptr->HealthPolicy);
                }

                if (castedEx1Ptr->Reserved != IntPtr.Zero)
                {
                    var castedEx2Ptr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION_EX2 *)castedEx1Ptr->Reserved;
                    monitoringPolicy.EnableDeltaHealthEvaluation = NativeTypes.FromBOOLEAN(castedEx2Ptr->EnableDeltaHealthEvaluation);

                    if (castedEx2Ptr->UpgradeHealthPolicy != IntPtr.Zero)
                    {
                        monitoringPolicy.UpgradeHealthPolicy = ClusterUpgradeHealthPolicy.FromNative(castedEx2Ptr->UpgradeHealthPolicy);
                    }

                    if (castedEx2Ptr->Reserved != IntPtr.Zero)
                    {
                        var castedEx3Ptr = (NativeTypes.FABRIC_ROLLING_UPGRADE_POLICY_DESCRIPTION_EX3 *)castedEx2Ptr->Reserved;

                        if (castedEx3Ptr->ApplicationHealthPolicyMap != IntPtr.Zero)
                        {
                            monitoringPolicy.ApplicationHealthPolicyMap.FromNative(castedEx3Ptr->ApplicationHealthPolicyMap);
                        }
                    }
                }
            }

            monitoringPolicy.FromNativeHelper(policyPtr);

            return(monitoringPolicy);
        }
 // For unit tests
 internal static bool AreEqual(RollingUpgradeMonitoringPolicy left, RollingUpgradeMonitoringPolicy right)
 {
     if (left != null && right != null)
     {
         return
             (left.FailureAction == right.FailureAction &&
              left.HealthCheckWaitDuration == right.HealthCheckWaitDuration &&
              left.HealthCheckStableDuration == right.HealthCheckStableDuration &&
              left.HealthCheckRetryTimeout == right.HealthCheckRetryTimeout &&
              left.UpgradeTimeout == right.UpgradeTimeout &&
              left.UpgradeDomainTimeout == right.UpgradeDomainTimeout);
     }
     else
     {
         return(left == null && right == null);
     }
 }
        internal static unsafe RollingUpgradeMonitoringPolicy FromNative(IntPtr nativePolicyPtr)
        {
            if (nativePolicyPtr == IntPtr.Zero)
            {
                return(null);
            }

            var managedPolicy = new RollingUpgradeMonitoringPolicy();
            var nativePolicy  = (NativeTypes.FABRIC_ROLLING_UPGRADE_MONITORING_POLICY *)nativePolicyPtr;

            managedPolicy.FailureAction           = (UpgradeFailureAction)nativePolicy->FailureAction;
            managedPolicy.HealthCheckWaitDuration = FromNativeTimeInSeconds(nativePolicy->HealthCheckWaitDurationInSeconds);
            managedPolicy.HealthCheckRetryTimeout = FromNativeTimeInSeconds(nativePolicy->HealthCheckRetryTimeoutInSeconds);
            managedPolicy.UpgradeTimeout          = FromNativeTimeInSeconds(nativePolicy->UpgradeTimeoutInSeconds);
            managedPolicy.UpgradeDomainTimeout    = FromNativeTimeInSeconds(nativePolicy->UpgradeDomainTimeoutInSeconds);

            if (nativePolicy->Reserved != IntPtr.Zero)
            {
                var ex1Ptr = (NativeTypes.FABRIC_ROLLING_UPGRADE_MONITORING_POLICY_EX1 *)nativePolicy->Reserved;
                managedPolicy.HealthCheckStableDuration = FromNativeTimeInSeconds(ex1Ptr->HealthCheckStableDurationInSeconds);
            }

            return(managedPolicy);
        }
예제 #5
0
        internal UInt32 FromUpdateDescription(UpgradeUpdateDescriptionBase updateDescription)
        {
            UInt32 flags = 0;

            var monitoringPolicy = new RollingUpgradeMonitoringPolicy();

            if (updateDescription.UpgradeMode.HasValue)
            {
                flags           |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_UPGRADE_MODE;
                this.UpgradeMode = updateDescription.UpgradeMode.Value;
            }

            if (updateDescription.ForceRestart.HasValue)
            {
                flags            |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_FORCE_RESTART;
                this.ForceRestart = updateDescription.ForceRestart.Value;
            }

            if (updateDescription.UpgradeReplicaSetCheckTimeout.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_REPLICA_SET_CHECK_TIMEOUT;
                this.UpgradeReplicaSetCheckTimeout = updateDescription.UpgradeReplicaSetCheckTimeout.Value;
            }

            if (updateDescription.FailureAction.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_FAILURE_ACTION;
                monitoringPolicy.FailureAction = updateDescription.FailureAction.Value;
            }

            if (updateDescription.HealthCheckWaitDuration.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_HEALTH_CHECK_WAIT;
                monitoringPolicy.HealthCheckWaitDuration = updateDescription.HealthCheckWaitDuration.Value;
            }

            if (updateDescription.HealthCheckStableDuration.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_HEALTH_CHECK_STABLE;
                monitoringPolicy.HealthCheckStableDuration = updateDescription.HealthCheckStableDuration.Value;
            }

            if (updateDescription.HealthCheckRetryTimeout.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_HEALTH_CHECK_RETRY;
                monitoringPolicy.HealthCheckRetryTimeout = updateDescription.HealthCheckRetryTimeout.Value;
            }

            if (updateDescription.UpgradeTimeout.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_UPGRADE_TIMEOUT;
                monitoringPolicy.UpgradeTimeout = updateDescription.UpgradeTimeout.Value;
            }

            if (updateDescription.UpgradeDomainTimeout.HasValue)
            {
                flags |= (UInt32)NativeTypes.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS.FABRIC_ROLLING_UPGRADE_UPDATE_FLAGS_UPGRADE_DOMAIN_TIMEOUT;
                monitoringPolicy.UpgradeDomainTimeout = updateDescription.UpgradeDomainTimeout.Value;
            }

            // Flags will determine whether any values are actually used
            //
            this.MonitoringPolicy = monitoringPolicy;

            return(flags);
        }