Ramesh N has uploaded a new change for review. Change subject: restapi: update API for Gluster Volume and Brick ......................................................................
restapi: update API for Gluster Volume and Brick Rest APIs for updating gluster volume and brick. Only the status of brick and volume can be changed with this feature. Change-Id: Ia67e8e0ae7c2c583e99ac98ac176df6b3bdcbcb6 Signed-off-by: Ramesh Nachimuthu <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterStatus.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterBrickResource.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapper.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapperTest.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapperTest.java 11 files changed, 140 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/25819/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterStatus.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterStatus.java index 59442be..0745fa7 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterStatus.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterStatus.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.common.businessentities.gluster; + /** * Enum of Gluster Statuses * @@ -21,4 +22,8 @@ * When the gluster status cannot be determined due to host being non-responsive */ UNKNOWN; + + public static GlusterStatus fromValue(String v) { + return valueOf(v.toUpperCase()); + } } diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterBrickResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterBrickResource.java index 611d236..278fb6c 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterBrickResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterBrickResource.java @@ -1,7 +1,6 @@ package org.ovirt.engine.api.resource.gluster; import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -15,19 +14,16 @@ import org.ovirt.engine.api.resource.ActionResource; import org.ovirt.engine.api.resource.ApiMediaType; import org.ovirt.engine.api.resource.MeasurableResource; +import org.ovirt.engine.api.resource.UpdatableResource; /** * Resource interface for the "clusters/{cluster_id}/glustervolumes/{volume_id}/bricks/{brick_id}" resource */ @Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) -public interface GlusterBrickResource extends MeasurableResource{ +public interface GlusterBrickResource extends UpdatableResource<GlusterBrick>, MeasurableResource{ @Path("{action: (replace)}/{oid}") public ActionResource getActionSubresource(@PathParam("action") String action, @PathParam("oid") String oid); - - @GET - @Formatted - public GlusterBrick get(); /** * Replaces this brick with a new one. The property {@link Action#getNewBrick()} is required. diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java index c538942..2a3dc43 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java @@ -1,7 +1,6 @@ package org.ovirt.engine.api.resource.gluster; import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -15,15 +14,13 @@ import org.ovirt.engine.api.resource.ActionResource; import org.ovirt.engine.api.resource.ApiMediaType; import org.ovirt.engine.api.resource.MeasurableResource; +import org.ovirt.engine.api.resource.UpdatableResource; /** * Resource interface for the "clusters/{cluster_id}/glustervolumes/{volume_id}" resource */ @Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) -public interface GlusterVolumeResource extends MeasurableResource { - @GET - @Formatted - public GlusterVolume get(); +public interface GlusterVolumeResource extends UpdatableResource<GlusterVolume>, MeasurableResource { @Path("{action: (start|stop|rebalance|stoprebalance|setOption|resetOption|resetAllOptions)}/{oid}") public ActionResource getActionSubresource(@PathParam("action") String action, @PathParam("oid") String oid); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResource.java index 2b3b19a..67670a0 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResource.java @@ -2,6 +2,9 @@ import static org.ovirt.engine.api.restapi.resource.gluster.BackendGlusterBricksResource.SUB_COLLECTIONS; +import java.util.ArrayList; +import java.util.List; + import javax.ws.rs.Path; import javax.ws.rs.core.Response; @@ -13,7 +16,9 @@ import org.ovirt.engine.api.restapi.resource.BackendStatisticsResource; import org.ovirt.engine.api.restapi.resource.BrickStatisticalQuery; import org.ovirt.engine.api.restapi.types.Mapper; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.gluster.GlusterVolumeBricksParameters; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeReplaceBrickActionParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterTaskOperation; @@ -117,5 +122,32 @@ return inject(new BackendStatisticsResource<GlusterBrick, GlusterBrickEntity>(GlusterBrickEntity.class, guid, query)); } + @Override + public GlusterBrick update(GlusterBrick incomingBrick) { + validateParameters(incomingBrick, "id", "status"); + QueryIdResolver<Guid> brickResolver = + new QueryIdResolver<Guid>(VdcQueryType.GetGlusterBrickById, IdQueryParameters.class); + GlusterBrickEntity entity = getEntity(brickResolver, true); + return performUpdate(incomingBrick, + entity, + map(entity), + brickResolver, + VdcActionType.UpdateGlusterVolumeBricks, + new UpdateParametersProvider()); + } + + protected class UpdateParametersProvider implements ParametersProvider<GlusterBrick, GlusterBrickEntity> { + @Override + public VdcActionParametersBase getParameters(GlusterBrick incoming, GlusterBrickEntity entity) { + GlusterBrickEntity updated = getMapper(GlusterBrick.class, GlusterBrickEntity.class).map(incoming, + entity); + List<GlusterBrickEntity> bricks = new ArrayList<GlusterBrickEntity>(); + bricks.add(updated); + + GlusterVolumeBricksParameters updateParams = + new GlusterVolumeBricksParameters(asGuid(getVolumeId()), bricks); + return updateParams; + } + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java index 4ab7f18..3d77940 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java @@ -12,11 +12,13 @@ import org.ovirt.engine.api.restapi.resource.AbstractBackendActionableResource; import org.ovirt.engine.api.restapi.resource.BackendStatisticsResource; import org.ovirt.engine.api.restapi.resource.VolumeStatisticalQuery; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeActionParameters; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeOptionParameters; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeRebalanceParameters; import org.ovirt.engine.core.common.action.gluster.ResetGlusterVolumeOptionsParameters; +import org.ovirt.engine.core.common.action.gluster.UpdateGlusterVolumeParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -144,4 +146,28 @@ guid, query)); } + + @Override + public GlusterVolume update(GlusterVolume incomingVolume) { + validateParameters(incomingVolume, "id", "status"); + QueryIdResolver<Guid> volumeResolver = new QueryIdResolver<Guid>(VdcQueryType.GetGlusterVolumeById, IdQueryParameters.class); + GlusterVolumeEntity entity = getEntity(volumeResolver, true); + return performUpdate(incomingVolume, + entity, + map(entity), + volumeResolver, + VdcActionType.UpdateGlusterVolume, + new UpdateParametersProvider()); + } + + protected class UpdateParametersProvider implements ParametersProvider<GlusterVolume, GlusterVolumeEntity> { + @Override + public VdcActionParametersBase getParameters(GlusterVolume incoming, GlusterVolumeEntity entity) { + GlusterVolumeEntity updated = getMapper(GlusterVolume.class, GlusterVolumeEntity.class).map(incoming, + entity); + UpdateGlusterVolumeParameters updateParams = new UpdateGlusterVolumeParameters(updated); + return updateParams; + } + } + } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResourceTest.java index 219343e..a6f691c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterBrickResourceTest.java @@ -15,6 +15,7 @@ import javax.ws.rs.core.UriInfo; import org.junit.Test; +import org.ovirt.engine.api.common.util.StatusUtils; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.GlusterBrick; @@ -25,6 +26,7 @@ import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResourceTest; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.gluster.GlusterVolumeBricksParameters; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeReplaceBrickActionParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -58,6 +60,29 @@ control.replay(); verifyModel(resource.get(), 0); + } + + @Test + public void testUpdate() throws Exception { + setupParentExpectations(); + resource.setParent(bricksResourceMock); + //setUpGetEntityExpectations(2); + setUpGetEntityExpectationsAllContent(2, false); + setUriInfo(setUpActionExpectations(VdcActionType.UpdateGlusterVolumeBricks, + GlusterVolumeBricksParameters.class, + new String[] { }, + new Object[] { }, + true, + true)); + + verifyModelWithDetails(resource.update(createModel()), 0); + } + + private GlusterBrick createModel() { + GlusterBrick brick = new GlusterBrick(); + brick.setId(brickId.toString()); + brick.setStatus(StatusUtils.create("DOWN")); + return brick; } @Test @@ -243,7 +268,6 @@ }).anyTimes(); } - private void setupParentExpectations() { volumeResourceMock = control.createMock(BackendGlusterVolumeResource.class); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResourceTest.java index acf9f6b..4c8878f 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResourceTest.java @@ -12,6 +12,7 @@ import javax.ws.rs.core.UriInfo; import org.junit.Test; +import org.ovirt.engine.api.common.util.StatusUtils; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.GlusterVolume; @@ -24,6 +25,7 @@ import org.ovirt.engine.core.common.action.gluster.GlusterVolumeOptionParameters; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeRebalanceParameters; import org.ovirt.engine.core.common.action.gluster.ResetGlusterVolumeOptionsParameters; +import org.ovirt.engine.core.common.action.gluster.UpdateGlusterVolumeParameters; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -50,6 +52,22 @@ verifyModel(resource.get(), 0); } + + @Test + public void testUpdate() throws Exception { + setUpGetEntityExpectations(2); + setupParentExpectations(); + resource.setParent(volumesResourceMock); + setUriInfo(setUpActionExpectations(VdcActionType.UpdateGlusterVolume, + UpdateGlusterVolumeParameters.class, + new String[] { "VolumeId" }, + new Object[] { GUIDS[0] }, + true, + true)); + + verifyModel(resource.update(createModel()), 0); + } + @Test public void testGetNotFound() throws Exception { @@ -268,4 +286,15 @@ } }).anyTimes(); } + + private GlusterVolume createModel() { + GlusterVolume volume = new GlusterVolume(); + volume.setId(GUIDS[0].toString()); + volume.setName("testVol1"); + volume.setCluster(new Cluster()); + volume.getCluster().setId(clusterId.toString()); + volume.setVolumeType(org.ovirt.engine.api.model.GlusterVolumeType.DISTRIBUTE.toString()); + volume.setStatus(StatusUtils.create("DOWN")); + return volume; + } } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapper.java index b10cef3..ad69ad1 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapper.java @@ -6,6 +6,7 @@ import org.ovirt.engine.api.model.GlusterState; import org.ovirt.engine.api.model.GlusterVolume; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; import org.ovirt.engine.core.compat.Guid; /** @@ -31,6 +32,11 @@ if(fromBrick.isSetBrickDir()) { brick.setBrickDirectory(fromBrick.getBrickDir()); } + + if(fromBrick.isSetStatus()) { + brick.setStatus(GlusterStatus.fromValue(fromBrick.getStatus().getState())); + } + return brick; } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapper.java index 201dd22..d5db1c5 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapper.java @@ -12,6 +12,7 @@ import org.ovirt.engine.api.model.Options; import org.ovirt.engine.api.model.TransportType; import org.ovirt.engine.api.model.TransportTypes; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity; import org.ovirt.engine.core.compat.Guid; @@ -54,6 +55,10 @@ volume.setStripeCount(fromVolume.getStripeCount()); } + if(fromVolume.isSetStatus()) { + volume.setStatus(GlusterStatus.fromValue(fromVolume.getStatus().getState())); + } + if (fromVolume.isSetOptions()) { Options options = fromVolume.getOptions(); if (options.isSetOptions()) { diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapperTest.java index 14ffeeb..f551e54 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterBrickMapperTest.java @@ -1,6 +1,7 @@ package org.ovirt.engine.api.restapi.types; import org.junit.Test; +import org.ovirt.engine.api.common.util.StatusUtils; import org.ovirt.engine.api.model.GlusterBrick; import org.ovirt.engine.api.model.GlusterState; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; @@ -12,6 +13,11 @@ super(GlusterBrick.class, GlusterBrickEntity.class, GlusterBrickEntity.class); } + protected GlusterBrick postPopulate(GlusterBrick model) { + model.setStatus(StatusUtils.create(GlusterStatus.DOWN.name().toLowerCase())); + return model; + } + @Override protected void verify(GlusterBrick model, GlusterBrick transform) { assertNotNull(transform); diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapperTest.java index 99a1081..2c4e368 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/GlusterVolumeMapperTest.java @@ -3,6 +3,7 @@ import java.util.List; import org.junit.Test; +import org.ovirt.engine.api.common.util.StatusUtils; import org.ovirt.engine.api.model.GlusterState; import org.ovirt.engine.api.model.GlusterVolume; import org.ovirt.engine.api.model.GlusterVolumeType; @@ -27,7 +28,7 @@ List<String> transportTypes = model.getTransportTypes().getTransportTypes(); transportTypes.clear(); transportTypes.add(TransportType.TCP.name().toLowerCase()); - + model.setStatus(StatusUtils.create(GlusterStatus.DOWN.name().toLowerCase())); return model; } -- To view, visit http://gerrit.ovirt.org/25819 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia67e8e0ae7c2c583e99ac98ac176df6b3bdcbcb6 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ramesh N <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
