Beispiel #1
0
        /// <summary>
        /// start an application upgrade
        /// </summary>
        /// <param name="fromPackage">from package</param>
        /// <param name="toPackage">to package</param>
        /// <param name="isRolling">specify if rolling</param>
        /// <param name="mode">monitor mode</param>
        /// <param name="timeout">timeout for upgrade start</param>
        /// <returns>true if upgrade started</returns>
        public bool TryApplicationUpgrade(PackageSettings fromPackage, PackageSettings toPackage, bool isRolling, UpgradeMonitor mode, TimeSpan timeout)
        {
            this.LastException = null;

            try
            {
                ApplicationUpgradeDescription upgradeDescription = new ApplicationUpgradeDescription();

                // we use the "from" package's address
                upgradeDescription.ApplicationName = new Uri(fromPackage.ApplicationAddress);

                // we use the "to" package's version
                upgradeDescription.TargetApplicationTypeVersion = toPackage.ApplicationVersion;

                // split parameters if any are specified
                NameValueCollection upgradeParams = Control64.GetApplicationParameters(toPackage);
                if (upgradeParams != null && upgradeParams.Count > 0)
                {
                    upgradeDescription.ApplicationParameters.Add(upgradeParams);
                }

                RollingUpgradePolicyDescription policy = new RollingUpgradePolicyDescription();
                policy.ForceRestart = true;
                policy.UpgradeMode = RollingUpgradeMode.UnmonitoredManual;

                if (isRolling)
                {
                    switch (mode)
                    {
                        case UpgradeMonitor.Auto:
                            policy.UpgradeMode = RollingUpgradeMode.UnmonitoredAuto;
                            break;
                        case UpgradeMonitor.Manual:
                            policy.UpgradeMode = RollingUpgradeMode.UnmonitoredManual;
                            break;
                    }

                    policy.UpgradeReplicaSetCheckTimeout = timeout;
                }

                upgradeDescription.UpgradePolicyDescription = policy;
                this.fc.ApplicationManager.UpgradeApplicationAsync(upgradeDescription, Defaults.UpgradeTimeout, CancellationToken.None).Wait();

                return true;
            }
            catch (Exception e)
            {
                this.LastException = e;

                if (e is AggregateException)
                {
                    if (e is FabricException)
                    {
                        log.Error("Upgrade failed: " + e.InnerException.Message);
                        return false;
                    }

                    log.Error("UpgradeApplication Aggregate failure, err={0}", e.InnerException.Message);
                }
                else
                {
                    log.Error("UpgradeApplication failed, err={0}", e.Message);
                }
            }

            return false;
        }
Beispiel #2
0
        /// <summary>
        /// start an application upgrade
        /// </summary>
        /// <param name="fromPackage">from package</param>
        /// <param name="toPackage">to package</param>
        /// <param name="isRolling">specify if rolling</param>
        /// <param name="mode">monitor mode</param>
        /// <param name="timeout">timeout for upgrade start</param>
        /// <returns>true if upgrade started</returns>
        public bool TryApplicationUpgrade(PackageSettings fromPackage, PackageSettings toPackage, bool isRolling, UpgradeMonitor mode, TimeSpan timeout)
        {
            this.LastException = null;

            try
            {
                ApplicationUpgradeDescription upgradeDescription = new ApplicationUpgradeDescription();

                // we use the "from" package's address
                upgradeDescription.ApplicationName = new Uri(fromPackage.ApplicationAddress);

                // we use the "to" package's version
                upgradeDescription.TargetApplicationTypeVersion = toPackage.ApplicationVersion;

                // split parameters if any are specified
                NameValueCollection upgradeParams = Control64.GetApplicationParameters(toPackage);
                if (upgradeParams != null && upgradeParams.Count > 0)
                {
                    upgradeDescription.ApplicationParameters.Add(upgradeParams);
                }

                RollingUpgradePolicyDescription policy = new RollingUpgradePolicyDescription();
                policy.ForceRestart = true;
                policy.UpgradeMode  = RollingUpgradeMode.UnmonitoredManual;

                if (isRolling)
                {
                    switch (mode)
                    {
                    case UpgradeMonitor.Auto:
                        policy.UpgradeMode = RollingUpgradeMode.UnmonitoredAuto;
                        break;

                    case UpgradeMonitor.Manual:
                        policy.UpgradeMode = RollingUpgradeMode.UnmonitoredManual;
                        break;
                    }

                    policy.UpgradeReplicaSetCheckTimeout = timeout;
                }

                upgradeDescription.UpgradePolicyDescription = policy;
                this.fc.ApplicationManager.UpgradeApplicationAsync(upgradeDescription, Defaults.UpgradeTimeout, CancellationToken.None).Wait();

                return(true);
            }
            catch (Exception e)
            {
                this.LastException = e;

                if (e is AggregateException)
                {
                    if (e is FabricException)
                    {
                        log.Error("Upgrade failed: " + e.InnerException.Message);
                        return(false);
                    }

                    log.Error("UpgradeApplication Aggregate failure, err={0}", e.InnerException.Message);
                }
                else
                {
                    log.Error("UpgradeApplication failed, err={0}", e.Message);
                }
            }

            return(false);
        }