Liron Aravot has posted comments on this change.
Change subject: core,ui: support multiple concurrent disks migration
......................................................................
Patch Set 5: (15 inline comments)
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
Line 119: if (vm != null) {
Line 120: return vm;
Line 121: }
Line 122:
Line 123: vm = getVmDAO().get(getParameters().getVmId());
super.getVm() will do dao call...
Line 124: if (vm != null) {
Line 125: setVm(vm);
Line 126: setVmId(vm.getId());
Line 127: }
Line 152: if (storageDomainsMap.containsKey(storageDomainId)) {
Line 153: return storageDomainsMap.get(storageDomainId);
Line 154: }
Line 155:
Line 156: storage_domains storageDomain =
getStorageDomainDao().getForStoragePool(storageDomainId, storagePoolId);
why not by id? we should have index on that column..
Line 157: storageDomainsMap.put(storageDomainId, storageDomain);
Line 158:
Line 159: return storageDomain;
Line 160: }
Line 222:
Line 223: return true;
Line 224: }
Line 225:
Line 226: protected boolean isImageNotLocked() {
name is a bit misleading...
Line 227: return ImagesHandler.checkImagesLocked(getVm(),
getReturnValue().getCanDoActionMessages());
Line 228: }
Line 229:
Line 230: private boolean isLiveMigrationEnabled() {
Line 253:
Line 254: if (!ImagesHandler.BlankImageTemplateId.equals(templateId)) {
Line 255: DiskImage templateImage =
getDiskImageDao().get(templateId);
Line 256: if
(!templateImage.getstorage_ids().contains(sourceDomainId)) {
Line 257:
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_TEMPLATE_NOT_FOUND_ON_DESTINATION_DOMAIN);
failCanDo..
Line 258: return false;
Line 259: }
Line 260: }
Line 261:
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java
Line 30:
Line 31: private List<VdcReturnValueBase> vdcReturnValues = new
ArrayList<VdcReturnValueBase>();
Line 32: private List<MoveDiskParameters> moveParametersList = new
ArrayList<MoveDiskParameters>();
Line 33: private Map<Guid, List<LiveMigrateDiskParameters>>
vmsLiveMigrateParametersMap =
Line 34: new HashMap<Guid, List<LiveMigrateDiskParameters>>();
do we need a map? seems to me like we are just iternating over it and the vm id
is a member of the LiveMigrateDiskParameters as well..
Line 35:
Line 36: public MoveDisksCommand(Guid commandId) {
Line 37: super(commandId);
Line 38: }
Line 44: @Override
Line 45: protected void executeCommand() {
Line 46: if (!moveParametersList.isEmpty()) {
Line 47:
vdcReturnValues.addAll(Backend.getInstance().RunMultipleActions(VdcActionType.MoveOrCopyDisk,
Line 48: new
ArrayList<VdcActionParametersBase>(getMoveDisksParametersList()), false));
1. do we need to create new arraylist here?
2. do we really need the getter? this member is accessed internally only..
Line 49: }
Line 50:
Line 51: if (!vmsLiveMigrateParametersMap.isEmpty()) {
Line 52:
vdcReturnValues.addAll(Backend.getInstance().RunMultipleActions(VdcActionType.LiveMigrateVmDisks,
Line 49: }
Line 50:
Line 51: if (!vmsLiveMigrateParametersMap.isEmpty()) {
Line 52:
vdcReturnValues.addAll(Backend.getInstance().RunMultipleActions(VdcActionType.LiveMigrateVmDisks,
Line 53: new
ArrayList<VdcActionParametersBase>(getLiveMigrateDisksParametersList()),
false));
same question regarding the arraylist...
by the way- if the two if's are true, we will create two arraylists..
Line 54: }
Line 55:
Line 56: handleChildReturnValue();
Line 57: setSucceeded(true);
Line 59:
Line 60: private void handleChildReturnValue() {
Line 61: for (VdcReturnValueBase vdcReturnValue : vdcReturnValues) {
Line 62:
getReturnValue().getCanDoActionMessages().addAll(vdcReturnValue.getCanDoActionMessages());
Line 63:
getReturnValue().setCanDoAction(getReturnValue().getCanDoAction() &&
vdcReturnValue.getCanDoAction());
i think that those action happen here a lot of times, though it's uneeded..
i'd perform the set and add operations only in case
vdcReturnValue.getCanDoAction() == false, otherwise they are needless...we
could also skip the getReturnValue().setCanDoAction if it false,,
Line 64: }
Line 65: }
Line 66:
Line 67: @Override
Line 94:
Line 95: List<VM> allVms =
getVmDAO().getVmsListForDisk(diskImage.getId());
Line 96: VM vm = !allVms.isEmpty() ? allVms.get(0) : null;
Line 97:
Line 98: if (vm == null || isVmDown(vm)) {
vm can't be null...
Line 99: moveParametersList.add(moveDiskParameters);
Line 100: }
Line 101: else if (isVmRunning(vm)) {
Line 102: MultiValueMapUtils.addToMap(vm.getId(),
Line 97:
Line 98: if (vm == null || isVmDown(vm)) {
Line 99: moveParametersList.add(moveDiskParameters);
Line 100: }
Line 101: else if (isVmRunning(vm)) {
we can't garunatee that the vm runs when we execute, so is this check help us
somehow?
Line 102: MultiValueMapUtils.addToMap(vm.getId(),
Line 103:
createLiveMigrateDiskParameters(moveDiskParameters, vm.getId()),
Line 104: vmsLiveMigrateParametersMap);
Line 105: }
Line 111:
Line 112: return true;
Line 113: }
Line 114:
Line 115: private boolean isVmRunning(VM vm) {
don't we have such method on VmHandler? maybe it can be added there?
Line 116: return vm.getStatus() == VMStatus.Up &&
Line 117: vm.getRunOnVds() != null &&
!vm.getRunOnVds().equals(Guid.Empty);
Line 118: }
Line 119:
Line 116: return vm.getStatus() == VMStatus.Up &&
Line 117: vm.getRunOnVds() != null &&
!vm.getRunOnVds().equals(Guid.Empty);
Line 118: }
Line 119:
Line 120: private boolean isVmDown(VM vm) {
don't we have such method on VmHandler? maybe it can be added there?
Line 121: return vm.getStatus() == VMStatus.Down;
Line 122: }
Line 123:
Line 124: private LiveMigrateDiskParameters
createLiveMigrateDiskParameters(MoveDiskParameters moveDiskParameters, Guid
vmId) {
Line 130: }
Line 131:
Line 132: protected List<MoveDiskParameters> getMoveDisksParametersList() {
Line 133: for (MoveDiskParameters moveDiskParameters :
moveParametersList) {
Line 134:
moveDiskParameters.setSessionId(getParameters().getSessionId());
I'd separate or rename the method as it's not a true 'getter'.
why do we set the session it only on move disk and not on live migrate?
Line 135: }
Line 136:
Line 137: return moveParametersList;
Line 138: }
Line 137: return moveParametersList;
Line 138: }
Line 139:
Line 140: protected List<LiveMigrateVmDisksParameters>
getLiveMigrateDisksParametersList() {
Line 141: List<LiveMigrateVmDisksParameters>
liveMigrateDisksParametersList = new ArrayList<LiveMigrateVmDisksParameters>();
arraylist is created and returned from here..and a new arraylist is created
from it..line 53..
Line 142:
Line 143: for (Map.Entry<Guid, List<LiveMigrateDiskParameters>> entry :
vmsLiveMigrateParametersMap.entrySet()) {
Line 144: LiveMigrateVmDisksParameters liveMigrateDisksParameters =
Line 145: new
LiveMigrateVmDisksParameters(entry.getValue(), entry.getKey());
Line 142:
Line 143: for (Map.Entry<Guid, List<LiveMigrateDiskParameters>> entry :
vmsLiveMigrateParametersMap.entrySet()) {
Line 144: LiveMigrateVmDisksParameters liveMigrateDisksParameters =
Line 145: new
LiveMigrateVmDisksParameters(entry.getValue(), entry.getKey());
Line 146:
why do we need to create each time new parameters when we already have the
parameters in the map?
Line 147:
liveMigrateDisksParameters.setParentCommand(VdcActionType.MoveDisks);
Line 148:
liveMigrateDisksParameters.setSessionId(getParameters().getSessionId());
Line 149:
Line 150:
liveMigrateDisksParametersList.add(liveMigrateDisksParameters);
--
To view, visit http://gerrit.ovirt.org/10154
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Iadcffa5748b58b1af40535b0447487dde6c2d6cb
Gerrit-PatchSet: 5
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
Gerrit-Reviewer: Allon Mureinik <[email protected]>
Gerrit-Reviewer: Daniel Erez <[email protected]>
Gerrit-Reviewer: Liron Aravot <[email protected]>
Gerrit-Reviewer: Maor Lipchuk <[email protected]>
Gerrit-Reviewer: Tal Nisan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches