Maor Lipchuk has posted comments on this change. Change subject: core: perform ovf update for domain when it's deactivated ......................................................................
Patch Set 6: (19 comments) http://gerrit.ovirt.org/#/c/33158/6//COMMIT_MSG Commit Message: Line 12: Line 13: Ovf stores are created for a domain according to the config Line 14: value StorageDomainOvfStoreCount on each OvfDataUpdater run, so the same Line 15: case should be supported on deactivation of domain (OVF stores will be Line 16: created if needed). remove redundant spaces Line 17: Line 18: Change-Id: I54cc929937d3b14dc49a2edab9e763cbe603a9c3 Line 19: Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1138124 http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java: Line 736: } Line 737: Line 738: protected boolean hasParentCommand() { Line 739: return getParameters().getParentCommand() != VdcActionType.Unknown; Line 740: } This is only used for the OVF, won't it be more appropriate to put it in some OVF handler instead of CommandBase? Line 741: Line 742: private boolean internalCanDoAction() { Line 743: boolean returnValue = false; Line 744: try { http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java: Line 18: import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; Line 19: import org.ovirt.engine.core.dao.StorageDomainOvfInfoDao; Line 20: Line 21: @InternalCommandAttribute Line 22: @NonTransactiveCommandAttribute I think it will be better it will extend StorageDomainCommandBase as CreateOvfVolumeForStorageDomainCommand is Line 23: public class CreateOvfStoresForStorageDomainCommand<T extends CreateOvfStoresForStorageDomainCommandParameters> extends CommandBase<T> { Line 24: Line 25: public CreateOvfStoresForStorageDomainCommand(T parameters) { Line 26: this(parameters, null); Line 41: parameters.setParentParameters(getParameters().getParentParameters()); Line 42: } else { Line 43: parameters.setParentCommand(getActionType()); Line 44: parameters.setParentParameters(getParameters()); Line 45: } Please extract this to a seperate method, called getCreateOvfVolumeForStorageDomainParameters (same as you done for createProcessOvfUpdateForDomainParams) Line 46: Line 47: VdcReturnValueBase vdcReturnValueBase = Line 48: runInternalAction(VdcActionType.CreateOvfVolumeForStorageDomain, Line 49: parameters); Line 113: private ProcessOvfUpdateForStorageDomainCommandParameters createProcessOvfUpdateForDomainParams() { Line 114: ProcessOvfUpdateForStorageDomainCommandParameters params = new ProcessOvfUpdateForStorageDomainCommandParameters(getParameters().getStoragePoolId(), getParameters().getStorageDomainId()); Line 115: params.setSkipDomainChecks(getParameters().isSkipDomainChecks()); Line 116: params.setParentCommand(getParameters().getParentCommand()); Line 117: params.setSkipDomainChecks(getParameters().isSkipDomainChecks()); This set was done already in line 115 Line 118: params.setParentParameters(getParameters().getParentParameters()); Line 119: return params; Line 120: } Line 121: http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java: Line 53 Line 54 Line 55 Line 56 Line 57 What about uploadStreamCommand, doesn't it need to verify the storage pool is up, what if the Data Center will be in a problematic state? http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java: Line 20: ArrayList<VdcActionParametersBase> parameters, Line 21: boolean isInternal, CommandContext commandContext) { Line 22: MultipleActionsRunner runner; Line 23: switch (actionType) { Line 24: case DeactivateStorageDomainWithOvfUpdate: { can this (and the GUI part) be seperated into a different patch? to make the patch be more readable Line 25: runner = new DeactivateStorageDomainsMultipleActionRunner(actionType, parameters, commandContext, isInternal); Line 26: break; Line 27: } Line 28: case AttachStorageDomainToPool: { http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java: Line 55: getParameters().getStoragePoolId())); Line 56: changeDomainStatusWithCompensation(map, StorageDomainStatus.Unknown, StorageDomainStatus.Locked); Line 57: Line 58: if (shouldPerformOvfUpdate()) { Line 59: Backend.getInstance().runInternalAction(VdcActionType.ProcessOvfUpdateForStoragePool, new StoragePoolParametersBase(getStoragePoolId())); use runInternalAction (remove Backend.getInstance()) Line 60: Line 61: VdcReturnValueBase tmpRetValue = runInternalActionWithTasksContext(VdcActionType.ProcessOvfUpdateForStorageDomain, Line 62: createProcessOvfUpdateForDomainParams(), getLock()); Line 63: getReturnValue().getVdsmTaskIdList().addAll(tmpRetValue.getInternalVdsmTaskIdList()); Line 112: Line 113: List<Guid> createdTasks = new LinkedList<>(); Line 114: Line 115: for (VdcActionParametersBase parametersBase : getParameters().getImagesParameters()) { Line 116: if (parametersBase.getCommandType() == VdcActionType.AddImageFromScratch) { Please move this if before the for loop, and get the type from the first image. This way it is confusing. Line 117: CreateOvfStoresForStorageDomainCommandParameters parameters = new CreateOvfStoresForStorageDomainCommandParameters(getParameters().getStoragePoolId(), Line 118: getParameters().getStorageDomainId(), 0); Line 119: parameters.getImagesParameters().addAll(getParameters().getImagesParameters()); Line 120: parameters.setParentParameters(getParameters()); Line 154: waitForTasksToBeCleared(); Line 155: executeDeactivateCommnad(); Line 156: } catch (Exception e) { Line 157: setSucceeded(false); Line 158: log.errorFormat("Error when attempting to deactivate storage domain {0}", getStorageDomainId(), e); This should be changed to log.error instead of log.errorFormat (after rebase) Line 159: compensate(); Line 160: } Line 161: } Line 162: }); Line 166: } Line 167: Line 168: protected void waitForTasksToBeCleared() throws InterruptedException { Line 169: while (true) { Line 170: Thread.sleep(3000); please use TimeUnit.SECONDS.sleep(x), it is more readable that way Line 171: List<Guid> tasks = getDbFacade().getAsyncTaskDao().getAsyncTaskIdsByEntity(getStorageDomainId()); Line 172: if (tasks.isEmpty()) { Line 173: return; Line 174: } Line 169: while (true) { Line 170: Thread.sleep(3000); Line 171: List<Guid> tasks = getDbFacade().getAsyncTaskDao().getAsyncTaskIdsByEntity(getStorageDomainId()); Line 172: if (tasks.isEmpty()) { Line 173: return; Please add a log here Line 174: } Line 175: } Line 176: } http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java: Line 8: private Guid vmSnapshotId; Line 9: private Guid storageDomainId; Line 10: private Boolean plugDiskToVm; Line 11: private boolean shouldRemainIllegalOnFailedExecution; Line 12: private boolean skipDomainCheck; /s/skipDomainCheck/skipDomainValidation Line 13: Line 14: public AddDiskParameters() { Line 15: storageDomainId = Guid.Empty; Line 16: } http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java: Line 3: import org.ovirt.engine.core.compat.Guid; Line 4: Line 5: public class CreateOvfStoresForStorageDomainCommandParameters extends StorageDomainParametersBase { Line 6: private int storesCount; Line 7: private boolean skipDomainChecks; /s/skipDomainChecks/skipDomainValidation Line 8: Line 9: public CreateOvfStoresForStorageDomainCommandParameters() { Line 10: } Line 11: http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java: Line 2: Line 3: import org.ovirt.engine.core.compat.Guid; Line 4: Line 5: public class CreateOvfVolumeForStorageDomainCommandParameters extends StorageDomainParametersBase { Line 6: private boolean skipDomainChecks; /s/skipDomainChecks/skipDomainValidation Line 7: Line 8: public CreateOvfVolumeForStorageDomainCommandParameters() { Line 9: super(); Line 10: } http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java: Line 1: package org.ovirt.engine.core.common.action; Line 2: Line 3: import org.ovirt.engine.core.compat.Guid; Line 4: Line 5: public class ProcessOvfUpdateForStorageDomainCommandParameters extends StorageDomainParametersBase { Why add a new class, why not using the same parameter class as CreateOvfVolumeForStorageDomainCommandParameters.java and just rename it differently? Line 6: private boolean skipDomainChecks; Line 7: Line 8: public ProcessOvfUpdateForStorageDomainCommandParameters() { Line 9: super(); http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java: Line 6: private static final long serialVersionUID = 6248101174739394633L; Line 7: Line 8: private boolean runSilent; Line 9: private boolean inactive; Line 10: private boolean skipChecks; /s/skipChecks/skipValidation Line 11: Line 12: public boolean isInactive() { Line 13: return inactive; Line 14: } http://gerrit.ovirt.org/#/c/33158/6/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties File backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties: Line 455 Line 456 Line 457 Line 458 Line 459 why removing this? Line 456 Line 457 Line 458 Line 459 Line 460 why removing this? -- To view, visit http://gerrit.ovirt.org/33158 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I54cc929937d3b14dc49a2edab9e763cbe603a9c3 Gerrit-PatchSet: 6 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> Gerrit-Reviewer: Allon Mureinik <amure...@redhat.com> Gerrit-Reviewer: Maor Lipchuk <mlipc...@redhat.com> Gerrit-Reviewer: automat...@ovirt.org Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches