Allon Mureinik has posted comments on this change.
Change subject: backend,webadmin: Enable virtual drive size extension
......................................................................
Patch Set 9: (21 inline comments)
This patch is really hard to review - it combines both (good!) refactors and
new logic.
Is there any chance of separating 'em?
Also, see inline.
....................................................
File backend/manager/dbscripts/images_sp.sql
Line 96: AS $procedure$
Line 97: BEGIN
Line 98: UPDATE images
Line 99: SET size = v_size,
Line 100: lastModified = v_lastModified
_update_date should probably also be set, see UpdateImage.
Line 101: WHERE image_group_id = v_image_group_id;
Line 102: END; $procedure$
Line 103: LANGUAGE plpgsql;
Line 104:
....................................................
File backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
Line 180: select
fn_db_add_config_value('MultipleGatewaysSupported','true','3.3');
Line 181: select fn_db_add_config_value('ExtendImageSize','false','3.0');
Line 182: select fn_db_add_config_value('ExtendImageSize','false','3.1');
Line 183: select fn_db_add_config_value('ExtendImageSize','false','3.2');
Line 184: select fn_db_add_config_value('ExtendImageSize','true','3.3');
why do we need this as well as the action map entry?
Line 185:
Line 186: -- by default use no proxy
Line 187: select fn_db_add_config_value('SpiceProxyDefault','','general');
Line 188:
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
Line 46: }
Line 47:
Line 48: @Override
Line 49: protected void endWithFailure() {
Line 50: super.endWithFailure(); //To change body of overridden
methods use File | Settings | File Templates.
why do you need this?
Line 51: }
Line 52:
Line 53: protected void performPlugCommand(VDSCommandType commandType,
Line 54: Disk disk, VmDevice vmDevice) {
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
Line 357:
Line 358: @Override
Line 359: protected void endWithFailure() {
Line 360: super.endWithFailure(); //To change body of overridden
methods use File | Settings | File Templates.
Line 361: }
why do you need this?
Line 362:
Line 363: @Override
Line 364: protected void endSuccessfully() {
Line 365: super.endSuccessfully(); //To change body of overridden
methods use File | Settings | File Templates.
Line 362:
Line 363: @Override
Line 364: protected void endSuccessfully() {
Line 365: super.endSuccessfully(); //To change body of overridden
methods use File | Settings | File Templates.
Line 366: }
why do you need this?
Line 367:
Line 368: private void createDiskBasedOnImage() {
Line 369: if(!getParameters().getDiskInfo().isWipeAfterDeleteSet()) {
Line 370: StorageType storageType =
getStorageDomain().getStorageType();
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
Line 44: implements QuotaStorageDependent {
Line 45:
Line 46: private List<PermissionSubject> listPermissionSubjects;
Line 47: private Map<Guid, List<Disk>> otherVmDisks = new HashMap<Guid,
List<Disk>>();
Line 48: private List<VM> vmsDiskPluggedTo;
The name sounds a bit funny.
How about vmsPluggedToDisk? (and in the getter too)
Line 49: private Disk oldDisk;
Line 50:
Line 51: public UpdateVmDiskCommand(T parameters) {
Line 52: super(parameters);
Line 76: }
Line 77: }
Line 78: if (shouldResizeDiskImage()) {
Line 79: exclusiveLock.put(getOldDisk().getId().toString(),
Line 80:
LockMessagesMatchUtil.makeLockingPair(LockingGroup.DISK,
VdcBllMessages.ACTION_TYPE_FAILED_DISKS_LOCKED));
If you're editing a bootable disk, you'll lock it both as shared and exclusive.
Is this intentional?
Line 81: }
Line 82: return exclusiveLock.isEmpty() ? null : exclusiveLock;
Line 83: }
Line 84:
Line 424: }
Line 425:
Line 426: private boolean shouldResizeDiskImage() {
Line 427: return getNewDisk().getDiskStorageType() ==
DiskStorageType.IMAGE &&
Line 428: getNewDisk().getSize() != getOldDisk().getSize();
what about failing if you try to resize a direct LUN?
Line 429: }
Line 430:
Line 431: private boolean shouldUpdatePropertiesOtherThanSize() {
Line 432: return shouldUpdateDiskProperties() ||
shouldUpdateImageProperties();
Line 438: getOldDisk().getPropagateErrors().getValue() !=
getNewDisk().getPropagateErrors().getValue() ||
Line 439: getOldDisk().isWipeAfterDelete() !=
getNewDisk().isWipeAfterDelete() ||
Line 440: getOldDisk().isShareable() !=
getNewDisk().isShareable() ||
Line 441:
!StringUtils.equalsIgnoreCase(getOldDisk().getDiskDescription(),
getNewDisk().getDiskDescription()) ||
Line 442:
!StringUtils.equalsIgnoreCase(getOldDisk().getDiskAlias(),
getNewDisk().getDiskAlias());
why ignore case?
Line 443: }
Line 444:
Line 445: private boolean shouldUpdateImageProperties() {
Line 446: return (getOldDisk().getDiskStorageType() ==
DiskStorageType.IMAGE) &&
....................................................
File
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
Line 51: import static org.mockito.Mockito.doReturn;
Line 52: import static org.mockito.Mockito.mock;
Line 53: import static org.mockito.Mockito.spy;
Line 54: import static org.mockito.Mockito.when;
Line 55: import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
Please fix your auto-formatter - the order was OK beforehand...
Line 56:
Line 57: @RunWith(MockitoJUnitRunner.class)
Line 58: public class UpdateVmDiskCommandTest {
Line 59:
....................................................
File
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java
Line 8: /**
Line 9: * <code>ImageDAO</code> defines a type for performing CRUD operations
on instances of {@link Image}.
Line 10: */
Line 11: public interface ImageDao extends GenericDao<Image, Guid>,
StatusAwareDao<Guid, ImageStatus> {
Line 12: public void updateQuotaForImageAndSnapshots(Guid imageGroupId,
NGuid quotaId);
why is this related to the patch?
Line 13:
Line 14: public void updateImageVmSnapshotId(Guid id, Guid vmSnapshotId);
....................................................
File
backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
Line 8: ExportError=Error exporting VM
Line 9: GeneralException=General Exception
Line 10: HostIdMismatch=Host id not found or does not match manager host id
Line 11: ImageDeleteError=Could not remove all files
Line 12: ImageDoesNotExistInDomainError=Image does not exist in domain
what's the deal with adding all the \r ?
Line 13: ImageIsNotEmpty=Image is not empty
Line 14: ImageMissingFromVm=Image missing from VM
Line 15: ImagePathError=Image path does not exist or cannot be accessed/created
Line 16: ImagesActionError=Error images action
....................................................
File
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ExtendVmDiskSizeVDSCommand.java
Line 19: );
Line 20:
Line 21: ProceedProxyReturnValue();
Line 22:
Line 23: if(getVDSReturnValue().getSucceeded()) {
formatting
Line 24: setReturnValue(result.getImageSize());
Line 25: }
Line 26: }
Line 27:
....................................................
Commit Message
Line 5: CommitDate: 2013-07-07 17:32:08 +0300
Line 6:
Line 7: backend,webadmin: Enable virtual drive size extension
Line 8:
Line 9: This patch provides the user the ability to extend virtual
s/virtual/a virtual/
Line 10: disk size online (when VM is running or paused) and offline
Line 11: (when VM is down or suspended).
Line 12:
Line 13: This functionality is exposed through the REST API and UI:
Line 6:
Line 7: backend,webadmin: Enable virtual drive size extension
Line 8:
Line 9: This patch provides the user the ability to extend virtual
Line 10: disk size online (when VM is running or paused) and offline
are you sure qemu supports extending when the VM is paused?
Line 11: (when VM is down or suspended).
Line 12:
Line 13: This functionality is exposed through the REST API and UI:
Line 14: in UI -
Line 11: (when VM is down or suspended).
Line 12:
Line 13: This functionality is exposed through the REST API and UI:
Line 14: in UI -
Line 15: go to "Virtual Machines" tab and pickup VM
s/pickup/choose/
Line 16: go to the "Disks" sub tab and pickup the disk
Line 17: click on "Edit" and insert value into "Extend size by(GB)" input
Line 18: field
Line 19:
....................................................
File
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
Line 224: }
Line 225:
Line 226: public AbstractDiskModel() {
Line 227: setSizeExtend(new EntityModel());
Line 228: getSizeExtend().setEntity(String.valueOf(0));
why not just "0" ?
Line 229:
Line 230: setIsAttachDisk(new EntityModel());
Line 231: getIsAttachDisk().setEntity(false);
Line 232: getIsAttachDisk().getEntityChangedEvent().addListener(this);
Line 785: }
Line 786: }
Line 787:
Line 788: protected boolean isVmDown() {
Line 789: return getVm() != null && getVm().getStatus() ==
VMStatus.Down;
don't you mean to use getVm().getStatus().isDownOrHibernating()?
Line 790: }
....................................................
File
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java
Line 152: }
Line 153:
Line 154: private boolean isExtendImageSizeAllowed() {
Line 155: return (Boolean) AsyncDataProvider.getConfigValuePreConverted(
Line 156: ConfigurationValues.ExtendImageSize,
getVm().getVdsGroupCompatibilityVersion().toString()) &&
can't this be done with the action map?
Line 157: VdcActionUtils.CanExecute(Arrays.asList(getVm()), VM.class,
VdcActionType.ExtendImageSize);
Line 158: }
....................................................
File
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
Line 724:
Line 725: protected void updateExtendImageSizeEnabled() {
Line 726: isExtendImageSizeEnabled = (Boolean)
AsyncDataProvider.getConfigValuePreConverted(
Line 727: ConfigurationValues.ExtendImageSize,
getEntity().getVdsGroupCompatibilityVersion().toString()) &&
Line 728: VdcActionUtils.CanExecute(Arrays.asList(getEntity()),
VM.class, VdcActionType.ExtendImageSize);
here too - can't the action map be used?
Line 729: }
Line 730:
Line 731: @Override
Line 732: protected String getListName() {
....................................................
File
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/NonNegativeLongNumberValidation.java
Line 1: package org.ovirt.engine.ui.uicommonweb.validation;
Line 2:
Line 3: import org.ovirt.engine.ui.uicompat.ConstantsManager;
Line 4:
Line 5: public class NonNegativeLongNumberValidation implements IValidation {
Can this be added as a @Valid annotation on the command's parameter class
too/instead?
Line 6:
Line 7: @Override
Line 8: public ValidationResult validate(Object value) {
Line 9: Long longValue = null;
--
To view, visit http://gerrit.ovirt.org/14975
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Ie702348a68a26ac02a01f66aaa1ea42c2c675ebb
Gerrit-PatchSet: 9
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Sergey Gotliv <[email protected]>
Gerrit-Reviewer: A Burden <[email protected]>
Gerrit-Reviewer: Alissa Bonas <[email protected]>
Gerrit-Reviewer: Allon Mureinik <[email protected]>
Gerrit-Reviewer: Cheryn Tan <[email protected]>
Gerrit-Reviewer: Daniel Erez <[email protected]>
Gerrit-Reviewer: Federico Simoncelli <[email protected]>
Gerrit-Reviewer: Liron Ar <[email protected]>
Gerrit-Reviewer: Maor Lipchuk <[email protected]>
Gerrit-Reviewer: Sergey Gotliv <[email protected]>
Gerrit-Reviewer: Tal Nisan <[email protected]>
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches