Allon Mureinik has posted comments on this change.

Change subject: core: Add space validation when creating snapshot
......................................................................


Patch Set 4: Code-Review-1

(13 comments)

http://gerrit.ovirt.org/#/c/29258/4/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java:

Line 30:     /** A map from the ids of each domain being validated to its 
validator */
Line 31:     private Map<Guid, StorageDomainValidator> domainValidators;
Line 32: 
Line 33:     /** A map from the domain id to its relevant disks */
Line 34:     private Map<Guid, List<DiskImage>> domainsDisksMap = null;
This breaks the design of the class. The class is supposed to only be stateful 
by it's domain, and have the disks passed as parameters to the validation (see, 
in analogy, StorageDomainValidator#hasSpaceForNewDisks(Collection<DiskImage>)
Line 35: 
Line 36:     /**
Line 37:      * Constructor from Guids
Line 38:      * @param sdIds A {@link Collection} of storage domain IDs to be 
validated


Line 49:         if (null == domainsDisksMap) {
Line 50:             return new HashMap<>();
Line 51:         }
Line 52:         return domainsDisksMap;
Line 53:     }
See above.
Line 54: 
Line 55:     private void setDomainsDisksMap(List<DiskImage> disksList) {
Line 56:         domainsDisksMap = new HashMap<>();
Line 57:         for (DiskImage disk : disksList) {


Line 51:         }
Line 52:         return domainsDisksMap;
Line 53:     }
Line 54: 
Line 55:     private void setDomainsDisksMap(List<DiskImage> disksList) {
As noted above, this shouldn't be a set method, but maybe a list2map kind of 
method.
Line 56:         domainsDisksMap = new HashMap<>();
Line 57:         for (DiskImage disk : disksList) {
Line 58:             List<Guid> domainIds = disk.getStorageIds();
Line 59:             for (Guid domainId : domainIds) {


Line 61:                 if (null == domainDisksList) {
Line 62:                     domainDisksList = new ArrayList<>();
Line 63:                     domainsDisksMap.put(domainId, domainDisksList);
Line 64:                 }
Line 65:                 domainDisksList.add(disk);
Please use MultiValueMapUtils
Line 66:             }
Line 67:         }
Line 68:     }
Line 69: 


Line 97:      * Validates that all the domains have enough space for the request
Line 98:      * @return {@link ValidationResult#VALID} if all the domains have 
enough free space, or a {@link ValidationResult} with the first low-on-space 
domain encountered.
Line 99:      */
Line 100:     public ValidationResult allDomainsHaveSpaceForNewDisks(final 
List<DiskImage> disksList) {
Line 101:         setDomainsDisksMap(disksList);
As noted above, this should be a local variable.
Line 102:         return validOrFirstFailure(new ValidatorPredicate() {
Line 103:             @Override
Line 104:             public ValidationResult evaluate(StorageDomainValidator 
validator) {
Line 105:                 List disksForDomain = 
getDomainsDisksMap().get(validator.getDomainId());


Line 101:         setDomainsDisksMap(disksList);
Line 102:         return validOrFirstFailure(new ValidatorPredicate() {
Line 103:             @Override
Line 104:             public ValidationResult evaluate(StorageDomainValidator 
validator) {
Line 105:                 List disksForDomain = 
getDomainsDisksMap().get(validator.getDomainId());
Instead of adding things to the validation API, juts change the predicate to 
receive the MapEntry instead of its value.
Line 106:                 return validator.hasSpaceForNewDisks(disksForDomain);
Line 107:             }
Line 108:         });
Line 109:     }


Line 106:                 return validator.hasSpaceForNewDisks(disksForDomain);
Line 107:             }
Line 108:         });
Line 109:     }
Line 110:     
TWS
Line 111:     /** @return The lazy-loaded validator for the given map entry */
Line 112:     protected StorageDomainValidator 
getStorageDomainValidator(Map.Entry<Guid, StorageDomainValidator> entry) {
Line 113:         if (entry.getValue() == null) {
Line 114:             entry.setValue(new 
StorageDomainValidator(getStorageDomainDAO().getForStoragePool(entry.getKey(), 
storagePoolId)));


Line 108:         });
Line 109:     }
Line 110:     
Line 111:     /** @return The lazy-loaded validator for the given map entry */
Line 112:     protected StorageDomainValidator 
getStorageDomainValidator(Map.Entry<Guid, StorageDomainValidator> entry) {
why?
Line 113:         if (entry.getValue() == null) {
Line 114:             entry.setValue(new 
StorageDomainValidator(getStorageDomainDAO().getForStoragePool(entry.getKey(), 
storagePoolId)));
Line 115:         }
Line 116: 


http://gerrit.ovirt.org/#/c/29258/4/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java:

Line 31:     }
Line 32: 
Line 33:     public Guid getDomainId() {
Line 34:         return storageDomain.getId();
Line 35:     }
See comment on MultipleStorageDomainsValidator
Line 36: 
Line 37:     public ValidationResult isDomainExistAndActive() {
Line 38:         if (storageDomain == null) {
Line 39:             return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_EXIST);


http://gerrit.ovirt.org/#/c/29258/4/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
File 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java:

Line 269:     @Test
Line 270:     public void testAllDomainsHaveSpaceForNewDisksFailure() {
Line 271:         setUpGeneralValidations();
Line 272:         setUpDiskValidations();
Line 273:         List disksList = getNonEmptyDiskList();
Generics?
Line 274:         doReturn(disksList).when(cmd).getDisksList();
Line 275:         doReturn(new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN)).when(multipleStorageDomainsValidator)
Line 276:                 .allDomainsHaveSpaceForNewDisks(disksList);
Line 277:         assertFalse(cmd.canDoAction());


Line 277:         assertFalse(cmd.canDoAction());
Line 278:         
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
Line 279:         assertTrue(cmd.getReturnValue()
Line 280:                 .getCanDoActionMessages()
Line 281:                 
.contains(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN.name()));
Please replace this assert (and the previous one) with a CanDoActionTestUtils 
call.
Line 282:     }
Line 283: 
Line 284:     @Test
Line 285:     public void testAllDomainsHaveSpaceForNewDisksSuccess() {


Line 287:         setUpDiskValidations();
Line 288:         List disksList = getNonEmptyDiskList();
Line 289:         doReturn(disksList).when(cmd).getDisksList();
Line 290:         
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
Line 291:         assertTrue(cmd.canDoAction());
Please replace this assert with a CanDoActionTestUtils call.
Line 292:         
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
Line 293:     }
Line 294: 
Line 295:     private void setUpDiskValidations() {


http://gerrit.ovirt.org/#/c/29258/4/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
File 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java:

Line 46: 
Line 47:     private Guid spId;
Line 48: 
Line 49:     private static Guid sdId1;
Line 50:     private static Guid sdId2;
why?!
Line 51: 
Line 52:     private StorageDomain domain1;
Line 53:     private StorageDomain domain2;
Line 54: 


-- 
To view, visit http://gerrit.ovirt.org/29258
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I0a5b5df695d30a34fbdef31da2320b322e27466b
Gerrit-PatchSet: 4
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Vered Volansky <vvola...@redhat.com>
Gerrit-Reviewer: Allon Mureinik <amure...@redhat.com>
Gerrit-Reviewer: Daniel Erez <de...@redhat.com>
Gerrit-Reviewer: Tal Nisan <tni...@redhat.com>
Gerrit-Reviewer: Vered Volansky <vvola...@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

Reply via email to