Ori Liel has uploaded a new change for review. Change subject: restapi: #868626 - All-Content Header ......................................................................
restapi: #868626 - All-Content Header Added header 'All-Content' (values: 'true'/'false') that states whether the entity fetched should contain all possible information, or only the basice inforamtion (which is most of the information, but there's still a difference). For example, for VMs, supplying All-Content:false or not supplying All-Content header at all, will result in VM being fetched without payload and ballooning information. https://bugzilla.redhat.com/868626 Change-Id: I9ecfe2f374599eafecf9c683038b3eacfd4bca50 Signed-off-by: Ori Liel <[email protected]> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendReadOnlyDevicesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQuotasResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendReadOnlyDeviceResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBricksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumesResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java 16 files changed, 108 insertions(+), 17 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/18/9018/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResource.java index c38882c..fe7bd8c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResource.java @@ -57,7 +57,11 @@ public Tags list() { Tags ret = new Tags(); for (tags tag : getCollection()) { - ret.getTags().add(addLinks(populate(map(tag), tag))); + Tag model = map(tag); + if (isPopulate()) { + populate(model, tag); + } + ret.getTags().add(addLinks(model)); } return ret; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendReadOnlyDevicesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendReadOnlyDevicesResource.java index 21cc3e8..6dc6b4f 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendReadOnlyDevicesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendReadOnlyDevicesResource.java @@ -60,7 +60,10 @@ C collection = instantiate(collectionType); List<D> list = getList(collection); for (Q entity : entities) { - D candidate = populate(map(entity), entity); + D candidate = map(entity); + if (isPopulate()) { + populate(candidate, entity); + } if (validate(candidate)) { if (addLinks) { candidate = addLinks(candidate); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java index ca542d4..3f32a1b 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java @@ -98,7 +98,11 @@ List<R> collection = new ArrayList<R>(); for (Q entity : entities) { - collection.add(addLinks(populate(map(entity), entity))); + R model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java index 3475be8..118a8f2 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java @@ -33,7 +33,11 @@ protected R performGet(VdcQueryType query, VdcQueryParametersBase params, Class<? extends BaseResource> suggestedParentType) { Q entity = getEntity(entityType, query, params, id, true); - return addLinks(populate(map(entity, null), entity), suggestedParentType); + R model = map(entity, null); + if (isPopulate()) { + populate(model, entity); + } + return addLinks(model, suggestedParentType); } protected Q getEntity(EntityIdResolver entityResolver, boolean notFoundAs404) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java index 722c72c..b0bf0fe 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java @@ -77,7 +77,11 @@ private DataCenters mapCollection(List<storage_pool> entities) { DataCenters collection = new DataCenters(); for (storage_pool entity : entities) { - collection.getDataCenters().add(addLinks(populate(map(entity), entity))); + DataCenter model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getDataCenters().add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicResource.java index 5814a10..a6b1af8 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicResource.java @@ -42,7 +42,7 @@ @Override public HostNIC get() { - return parent.lookupNic(id); + return parent.lookupNic(id, isPopulate()); } @Override @@ -135,7 +135,7 @@ } performAction(VdcActionType.UpdateNetworkToVdsInterface, params); - return parent.lookupNic(id); + return parent.lookupNic(id, true); } private org.ovirt.engine.core.common.businessentities.Network getNewNetwork(HostNIC nic) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java index 6fe6486..ee4fa97 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java @@ -65,7 +65,10 @@ networkIds.put(nwk.getname(), nwk.getId().toString()); } for (VdsNetworkInterface iface : ifaces) { - HostNIC hostNic = populate(map(iface, ifaces), iface); + HostNIC hostNic = map(iface, ifaces); + if (isPopulate()) { + populate(hostNic, iface); + } if (networkIds.containsKey(iface.getNetworkName())) { hostNic.getNetwork().setId(networkIds.get(iface.getNetworkName())); hostNic.getNetwork().setName(null); @@ -101,11 +104,14 @@ return inject(new BackendHostNicResource(id, this)); } - public HostNIC lookupNic(String id) { + public HostNIC lookupNic(String id, boolean populate) { List<VdsNetworkInterface> ifaces = getCollection(); for (VdsNetworkInterface iface : ifaces) { if (iface.getId().toString().equals(id)) { - HostNIC hostNic = populate(map(iface, ifaces), iface); + HostNIC hostNic = map(iface, ifaces); + if (populate) { + populate(hostNic, iface); + } for(org.ovirt.engine.core.common.businessentities.Network nwk : getClusterNetworks()){ if(nwk.getname().equals(iface.getNetworkName())) { hostNic.getNetwork().setId(nwk.getId().toString()); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java index 323977f..ecb4d8f 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java @@ -132,7 +132,11 @@ private Hosts mapCollection(List<VDS> entities) { Hosts collection = new Hosts(); for (VDS entity : entities) { - collection.getHosts().add(addLinks(populate(map(entity), entity))); + Host model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getHosts().add(addLinks(model)); } return collection; } @@ -162,7 +166,11 @@ private Hosts mapGlusterOnlyCollection(List<VDS> entities) { Hosts collection = new Hosts(); for (VDS entity : entities) { - collection.getHosts().add(addLinks(populate(map(entity), entity), GLUSTERONLY_MODE_COLLECTIONS_TO_HIDE)); + Host model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getHosts().add(addLinks(model, GLUSTERONLY_MODE_COLLECTIONS_TO_HIDE)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQuotasResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQuotasResource.java index 34c7e3c..b18d63b 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQuotasResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQuotasResource.java @@ -59,7 +59,11 @@ protected Quotas mapCollection(List<org.ovirt.engine.core.common.businessentities.Quota> entities) { Quotas collection = new Quotas(); for (org.ovirt.engine.core.common.businessentities.Quota entity : entities) { - collection.getQuotas().add(addLinks(populate(map(entity), entity))); + Quota model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getQuotas().add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendReadOnlyDeviceResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendReadOnlyDeviceResource.java index 7cc0b63..feb73bd 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendReadOnlyDeviceResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendReadOnlyDeviceResource.java @@ -26,7 +26,11 @@ if (entity == null) { return notFound(); } - return addLinks(populate(map(entity), entity)); + D model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + return addLinks(model); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java index 151b00f..aba8b77 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java @@ -31,6 +31,7 @@ import org.ovirt.engine.api.restapi.resource.validation.Validator; public class BackendResource extends BaseBackendResource { + public static final String POPULATE = "All-Content"; protected static final int NO_LIMIT = -1; private static final String CORRELATION_ID = "Correlation-Id"; private static final String ASYNC_CONSTRAINT = "async"; @@ -246,4 +247,16 @@ protected <E> void validateEnums(Class<E> validatedClass, E instance) { getValidator(validatedClass).validateEnums(instance); } + + /** + * @return true if request header contains [Populate='true'] + */ + protected boolean isPopulate() { + List<String> populates = httpHeaders.getRequestHeader(POPULATE); + if (populates != null && populates.size() > 0) { + return Boolean.valueOf(populates.get(0)); + } else { + return false; + } + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java index b1e842b..c0870b3 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java @@ -104,7 +104,11 @@ protected VmPools mapCollection(List<vm_pools> entities) { VmPools collection = new VmPools(); for (vm_pools entity : entities) { - collection.getVmPools().add(addLinks(populate(map(entity), entity))); + VmPool model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getVmPools().add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBricksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBricksResource.java index 84611ea..6b9d49e 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBricksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBricksResource.java @@ -49,7 +49,11 @@ private GlusterBricks mapCollection(List<GlusterBrickEntity> entities) { GlusterBricks collection = new GlusterBricks(); for (GlusterBrickEntity entity : entities) { - collection.getGlusterBricks().add(addLinks(populate(map(entity), entity))); + GlusterBrick model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getGlusterBricks().add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumesResource.java index 6bb0082..97052f1 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumesResource.java @@ -62,7 +62,11 @@ private GlusterVolumes mapCollection(List<GlusterVolumeEntity> entities) { GlusterVolumes collection = new GlusterVolumes(); for (GlusterVolumeEntity entity : entities) { - collection.getGlusterVolumes().add(addLinks(populate(map(entity), entity))); + GlusterVolume model = map(entity); + if (isPopulate()) { + populate(model, entity); + } + collection.getGlusterVolumes().add(addLinks(model)); } return collection; } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java index d4f4548..75103cf 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java @@ -93,6 +93,7 @@ protected HttpHeaders httpHeaders; protected List<Locale> locales; protected List<String> accepts; + protected List<String> populates; protected MessageBundle messageBundle; protected IMocksControl control; @@ -112,6 +113,9 @@ expect(httpHeaders.getAcceptableLanguages()).andReturn(locales).anyTimes(); accepts = new ArrayList<String>(); expect(httpHeaders.getRequestHeader("Accept")).andReturn(accepts).anyTimes(); + populates = new ArrayList<String>(); + populates.add("true"); + expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes(); List<String> filterValue = new ArrayList<String>(); filterValue.add("false"); expect(httpHeaders.getRequestHeader(USER_FILTER_HEADER)).andReturn(filterValue).anyTimes(); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java index 65a93d8..35614eb 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java @@ -5,6 +5,7 @@ import java.util.List; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -64,6 +65,7 @@ import static org.ovirt.engine.api.restapi.resource.BackendVmsResourceTest.setUpEntityExpectations; import static org.ovirt.engine.api.restapi.resource.BackendVmsResourceTest.setUpStatisticalEntityExpectations; import static org.ovirt.engine.api.restapi.resource.BackendVmsResourceTest.verifyModelSpecific; +import static org.easymock.EasyMock.expect; public class BackendVmResourceTest extends AbstractBackendSubResourceTest<VM, org.ovirt.engine.core.common.businessentities.VM, BackendVmResource> { @@ -123,6 +125,25 @@ } @Test + public void testGetNoPopulate() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpGetEntityExpectations(1); + HttpHeaders httpHeaders = control.createMock(HttpHeaders.class); + expect(httpHeaders.getAcceptableLanguages()).andReturn(locales).anyTimes(); + expect(httpHeaders.getRequestHeader("Accept")).andReturn(accepts).anyTimes(); + populates = new ArrayList<String>(); + populates.add("false"); + expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes(); + List<String> filters = new ArrayList<String>(); + filters.add("false"); + expect(httpHeaders.getRequestHeader(USER_FILTER_HEADER)).andReturn(filters).anyTimes(); + resource.setHttpHeaders(httpHeaders); + control.replay(); + VM response = resource.get(); + verifyModel(response, 0); + } + + @Test public void testGetIncludeStatistics() throws Exception { try { accepts.add("application/xml; detail=statistics"); -- To view, visit http://gerrit.ovirt.org/9018 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9ecfe2f374599eafecf9c683038b3eacfd4bca50 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ori Liel <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
