protected override void Run() { Description = String.Format(Messages.ACTION_GET_DISK_SPACE_REQUIREMENTS_DESCRIPTION, Host.Name); string result; // get required disk space long requiredDiskSpace = updateSize; try { var args = new Dictionary <string, string>(); args.Add("size", updateSize.ToString()); result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_required_space", args); requiredDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_required_space on {0} failed with {1}", Host.Name, failure.Message); requiredDiskSpace = 0; } // get available disk space long availableDiskSpace = 0; try { result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_avail_host_disk_space", new Dictionary <string, string>()); availableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_avail_host_disk_space on {0} failed with {1}", Host.Name, failure.Message); } // get reclaimable disk space (excluding current patch) long reclaimableDiskSpace = 0; try { var args = new Dictionary <string, string>(); if (currentPatch != null) { args.Add("exclude", currentPatch.uuid); } result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args); reclaimableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message); } var operation = Actions.DiskSpaceRequirements.OperationTypes.upload; DiskSpaceRequirements = new DiskSpaceRequirements(operation, Host, updateName, requiredDiskSpace, availableDiskSpace, reclaimableDiskSpace); log.WarnFormat("Cleanup message: \r\n{0}", DiskSpaceRequirements.GetSpaceRequirementsMessage()); }
protected override void Run() { SafeToExit = false; Description = String.Format(Messages.ACTION_CHECK_DISK_SPACE_DESCRIPTION, Host.Name); if (!IsEnoughDiskSpace()) { DiskSpaceRequirements diskSpaceRequirements = null; var getDiskSpaceRequirementsAction = new GetDiskSpaceRequirementsAction(Host, fileName, fileSize, true); try { getDiskSpaceRequirementsAction.RunExternal(Session); diskSpaceRequirements = getDiskSpaceRequirementsAction.DiskSpaceRequirements; } catch (Failure failure) { log.WarnFormat("Getting disk space requirements on {0} failed with: {1}", Host.Name, failure.Message); } Exception = new NotEnoughSpaceException(Host.Name, fileName, diskSpaceRequirements); } }
public NotEnoughSpaceException(string host, string fileName, DiskSpaceRequirements diskSpaceRequirements) { this.host = host; this.fileName = fileName; DiskSpaceRequirements = diskSpaceRequirements; }
private void TryUploading() { // reset progress bar and action progress description UpdateActionProgress(null); // Check if we can upload the patches to the masters if it is necessary. // This check is only available for Cream or greater hosts. // If we can upload (i.e. there is enough disk space) then start the upload. // Otherwise display error. canUpload = true; diskSpaceRequirements = null; var diskSpaceActions = new List<AsyncAction>(); foreach (Host master in SelectedMasters.Where(master => Helpers.CreamOrGreater(master.Connection))) { AsyncAction action = null; switch (SelectedUpdateType) { case UpdateType.NewRetail: if (CanUploadUpdateOnHost(SelectedNewPatchPath, master)) action = new CheckDiskSpaceForPatchUploadAction(master, SelectedNewPatchPath, true); break; case UpdateType.Existing: if (SelectedExistingPatch != null && !PatchExistsOnPool(SelectedExistingPatch, master)) action = new CheckDiskSpaceForPatchUploadAction(master, SelectedExistingPatch, true); break; } if (action != null) { action.Changed += delegate { Program.Invoke(Program.MainWindow, () => UpdateActionDescription(action)); }; diskSpaceActions.Add(action); } } if (diskSpaceActions.Count == 0) { StartUploading(); return; } using (var multipleAction = new MultipleAction(Connection, "", "", "", diskSpaceActions, true, true, true)) { multipleAction.Completed += delegate { Program.Invoke(Program.MainWindow, () => { if (multipleAction.Exception is NotEnoughSpaceException) { canUpload = false; diskSpaceRequirements = (multipleAction.Exception as NotEnoughSpaceException).DiskSpaceRequirements; } UpdateButtons(); OnPageUpdated(); if (canUpload) StartUploading(); }); }; multipleAction.RunAsync(); } }
protected override void Run() { Description = String.Format(Messages.ACTION_GET_DISK_SPACE_REQUIREMENTS_DESCRIPTION, Host.Name); long requiredDiskSpace = updateSize; string result; // get available disk space long availableDiskSpace = 0; try { result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_avail_host_disk_space", new Dictionary<string, string>()); availableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_avail_host_disk_space on {0} failed with {1}", Host.Name, failure.Message); } // get reclaimable disk space (excluding current patch) long reclaimableDiskSpace = 0; try { var args = new Dictionary<string, string>(); if (currentPatch != null) args.Add("exclude", currentPatch.uuid); result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args); reclaimableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message); } var operation = Actions.DiskSpaceRequirements.OperationTypes.upload; DiskSpaceRequirements = new DiskSpaceRequirements(operation, Host, updateName, requiredDiskSpace, availableDiskSpace, reclaimableDiskSpace); log.WarnFormat("Cleanup message: \r\n{0}", DiskSpaceRequirements.GetSpaceRequirementsMessage()); }
private Problem FindProblem(string errorcode, string found, string required) { long requiredSpace = 0; long foundSpace = 0; long reclaimableDiskSpace = 0; DiskSpaceRequirements diskSpaceReq; switch (errorcode) { case "UPDATE_PRECHECK_FAILED_WRONG_SERVER_VERSION": return new WrongServerVersion(this, Host); case "UPDATE_PRECHECK_FAILED_CONFLICT_PRESENT": return new ConflictingUpdatePresent(this, found, Host); case "UPDATE_PRECHECK_FAILED_PREREQUISITE_MISSING": return new PrerequisiteUpdateMissing(this, found, Host); case "PATCH_PRECHECK_FAILED_WRONG_SERVER_VERSION": return new WrongServerVersion(this, required, Host); case "PATCH_PRECHECK_FAILED_OUT_OF_SPACE": System.Diagnostics.Trace.Assert(Helpers.CreamOrGreater(Host.Connection)); // If not Cream or greater, we shouldn't get this error long.TryParse(found, out foundSpace); long.TryParse(required, out requiredSpace); // get reclaimable disk space (excluding current patch) try { var args = new Dictionary<string, string> { { "exclude", Patch.uuid } }; var resultReclaimable = Host.call_plugin(Host.Connection.Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args); reclaimableDiskSpace = Convert.ToInt64(resultReclaimable); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message); } diskSpaceReq = new DiskSpaceRequirements(DiskSpaceRequirements.OperationTypes.install, Host, Patch.Name, requiredSpace, foundSpace, reclaimableDiskSpace); return new HostOutOfSpaceProblem(this, Host, Patch, diskSpaceReq); case "UPDATE_PRECHECK_FAILED_OUT_OF_SPACE": System.Diagnostics.Trace.Assert(Helpers.ElyOrGreater(Host.Connection)); // If not Ely or greater, we shouldn't get this error long.TryParse(found, out foundSpace); long.TryParse(required, out requiredSpace); diskSpaceReq = new DiskSpaceRequirements(DiskSpaceRequirements.OperationTypes.install, Host, Update.Name, requiredSpace, foundSpace, 0); return new HostOutOfSpaceProblem(this, Host, Update, diskSpaceReq); case "OUT_OF_SPACE": if (Helpers.CreamOrGreater(Host.Connection)) { var action = new GetDiskSpaceRequirementsAction(Host, Patch, true); try { action.RunExternal(action.Session); } catch { log.WarnFormat("Could not get disk space requirements"); } if (action.Succeeded) return new HostOutOfSpaceProblem(this, Host, Patch, action.DiskSpaceRequirements); } break; } return null; }
public HostOutOfSpaceProblem(Check check, Host host, Pool_patch patch, DiskSpaceRequirements diskSpaceReq) : base(check, host) { this.patch = patch; this.diskSpaceReq = diskSpaceReq; }
protected override void Run() { Description = String.Format(Messages.ACTION_GET_DISK_SPACE_REQUIREMENTS_DESCRIPTION, Host.Name); string result; // get required disk space long requiredDiskSpace = updateSize; if (!Helpers.ElyOrGreater(Host)) // for ElyOrGreater we don't need to call get_required_space, because it will always return updateSize { try { var args = new Dictionary <string, string>(); args.Add("size", updateSize.ToString()); result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_required_space", args); requiredDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_required_space on {0} failed with {1}", Host.Name, failure.Message); requiredDiskSpace = 0; } } // get available disk space long availableDiskSpace = 0; try { result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_avail_host_disk_space", new Dictionary <string, string>()); availableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_avail_host_disk_space on {0} failed with {1}", Host.Name, failure.Message); } // get reclaimable disk space (excluding current patch) long reclaimableDiskSpace = 0; if (availableDiskSpace < requiredDiskSpace && !Helpers.ElyOrGreater(Host)) // for ElyOrGreater we shouldn't call get_reclaimable_disk_space { try { var args = new Dictionary <string, string>(); if (currentPatch != null) { args.Add("exclude", currentPatch.uuid); } result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args); reclaimableDiskSpace = Convert.ToInt64(result); } catch (Failure failure) { log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message); } } DiskSpaceRequirements = new DiskSpaceRequirements(operation, Host, updateName, requiredDiskSpace, availableDiskSpace, reclaimableDiskSpace); if (availableDiskSpace < requiredDiskSpace) { log.WarnFormat("Cleanup message: \r\n{0}", DiskSpaceRequirements.GetSpaceRequirementsMessage()); } }
public HostOutOfSpaceProblem(Check check, Host host, DiskSpaceRequirements diskSpaceReq) : base(check, host) { this.diskSpaceReq = diskSpaceReq; }
public HostOutOfSpaceProblem(Check check, Host host, Pool_update update, DiskSpaceRequirements diskSpaceReq) : base(check, host) { this.update = update; this.diskSpaceReq = diskSpaceReq; }