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