Beispiel #1
0
        /// <summary>
        /// <para>1. list all package</para>
        /// <para>2. for each package: if operation is 'install' and provisionState is 'success' and no installation lock</para>
        /// <para>      Update operation to null</para>
        /// </summary>
        private bool UpdateArmSettingsForSuccessInstallation()
        {
            var batchUpdateLock = SiteExtensionBatchUpdateStatusLock.CreateLock(_environment.SiteExtensionSettingsPath);

            bool isAnyUpdate = false;

            bool islocked = batchUpdateLock.TryLockOperation(() =>
            {
                var tracer           = _traceFactory.GetTracer();
                string[] packageDirs = FileSystemHelpers.GetDirectories(_environment.SiteExtensionSettingsPath);
                foreach (var dir in packageDirs)
                {
                    var dirInfo = new DirectoryInfo(dir);   // arm setting folder name is same as package id
                    SiteExtensionStatus armSettings = new SiteExtensionStatus(_environment.SiteExtensionSettingsPath, dirInfo.Name, tracer);
                    if (string.Equals(armSettings.Operation, Constants.SiteExtensionOperationInstall, StringComparison.OrdinalIgnoreCase) &&
                        string.Equals(armSettings.ProvisioningState, Constants.SiteExtensionProvisioningStateSucceeded, StringComparison.OrdinalIgnoreCase))
                    {
                        try
                        {
                            armSettings.Operation = null;
                            isAnyUpdate           = true;
                        }
                        catch (Exception ex)
                        {
                            tracer.TraceError(ex);
                            // no-op
                        }
                    }
                }
            }, TimeSpan.FromSeconds(5));

            return(islocked && isAnyUpdate);
        }
        /// <summary>
        /// <para>1. list all package</para>
        /// <para>2. for each package: if operation is 'install' and provisionState is 'success' and no installation lock</para>
        /// <para>      Update operation to null</para>
        /// </summary>
        private bool UpdateArmSettingsForSuccessInstallation()
        {
            var tracer = _traceFactory.GetTracer();

            using (tracer.Step("Checking if there is any installation finished recently, if there is one, update its status."))
            {
                var batchUpdateLock = SiteExtensionBatchUpdateStatusLock.CreateLock(_environment.SiteExtensionSettingsPath);

                bool isAnyUpdate = false;

                try
                {
                    batchUpdateLock.LockOperation(() =>
                    {
                        string[] packageDirs = FileSystemHelpers.GetDirectories(_environment.SiteExtensionSettingsPath);
                        foreach (var dir in packageDirs)
                        {
                            var dirInfo = new DirectoryInfo(dir);   // arm setting folder name is same as package id
                            SiteExtensionStatus armSettings = new SiteExtensionStatus(_environment.SiteExtensionSettingsPath, dirInfo.Name, tracer);
                            if (string.Equals(armSettings.Operation, Constants.SiteExtensionOperationInstall, StringComparison.OrdinalIgnoreCase) &&
                                string.Equals(armSettings.ProvisioningState, Constants.SiteExtensionProvisioningStateSucceeded, StringComparison.OrdinalIgnoreCase))
                            {
                                try
                                {
                                    armSettings.Operation = null;
                                    isAnyUpdate           = true;
                                    tracer.Trace("Updated {0}", dir);
                                }
                                catch (Exception ex)
                                {
                                    tracer.TraceError(ex);
                                    // no-op
                                }
                            }
                        }
                    }, "Updating SiteExtension success status", TimeSpan.FromSeconds(5));

                    return(isAnyUpdate);
                }
                catch (LockOperationException)
                {
                    return(false);
                }
            }
        }