Skip to content

Commit

Permalink
restapi: incorrect href for parent href
Browse files Browse the repository at this point in the history
If User send REST API request  for ovirt-engine/api/disks/{diskid}/disksnapshots?include_active&include_template he will get this  incorrect href back <parent href="/ovirt-engine/api/disks/{diskid}" id="{parentid}"/>.
Now it will get correct output that will look like this <parent href="/ovirt-engine/api/disks/{diskid}/disksnapshots/{parentid}" id="{parentid}"/>.

Bug-Url: https://bugzilla.redhat.com/2013697
Signed-off-by: Artiom Divak <adivak@redhat.com>
  • Loading branch information
ArtiomDivak committed Aug 4, 2022
1 parent 995f4a0 commit 3faeb4c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package org.ovirt.engine.api.restapi.resource;

import java.util.List;

import javax.ws.rs.core.Response;

import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.DiskSnapshot;
import org.ovirt.engine.api.resource.DiskSnapshotResource;
import org.ovirt.engine.api.restapi.resource.utils.DiskResourceUtils;
import org.ovirt.engine.api.restapi.types.Mapper;
import org.ovirt.engine.core.common.action.ActionType;
import org.ovirt.engine.core.common.action.RemoveDiskSnapshotsParameters;
import org.ovirt.engine.core.common.queries.DiskSnapshotsQueryParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.QueryType;
import org.ovirt.engine.core.compat.Guid;
Expand All @@ -26,19 +31,28 @@ protected BackendDiskSnapshotResource(String id, BackendDiskSnapshotsResource pa

@Override
public DiskSnapshot get() {
List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities =
getBackendCollection(org.ovirt.engine.core.common.businessentities.storage.Disk.class, QueryType.GetAllDiskSnapshots,
new DiskSnapshotsQueryParameters(diskId, true, true));
DiskSnapshot diskSnapshot = performGet(QueryType.GetDiskSnapshotByImageId,
new IdQueryParameters(guid), Disk.class);
diskSnapshot.setDisk(new Disk());
diskSnapshot.getDisk().setId(diskId.toString());
diskSnapshot.getDisk().setHref(backendDiskSnapshotsResource.buildParentHref(diskId.toString(), false));
diskSnapshot.setHref(backendDiskSnapshotsResource.buildHref(diskId.toString(), diskSnapshot.getId().toString()));
if (diskSnapshot.getParent() != null) {
diskSnapshot.getParent().setHref(backendDiskSnapshotsResource.buildHref(diskId.toString(),
Mapper<org.ovirt.engine.core.common.businessentities.storage.Disk, DiskSnapshot> mapper =
getMapper(org.ovirt.engine.core.common.businessentities.storage.Disk.class, DiskSnapshot.class);
org.ovirt.engine.core.common.businessentities.storage.Disk
parentDisk = DiskResourceUtils.getDiskIdFromDiskSnapshotId(entities, diskSnapshot, mapper);
diskSnapshot.getParent().setHref(backendDiskSnapshotsResource.buildHref(parentDisk.getId().toString(),
diskSnapshot.getParent().getId()));
}
return diskSnapshot;
}



@Override
public Response remove() {
get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.ovirt.engine.api.model.DiskSnapshots;
import org.ovirt.engine.api.resource.DiskSnapshotResource;
import org.ovirt.engine.api.resource.DiskSnapshotsResource;
import org.ovirt.engine.api.restapi.resource.utils.DiskResourceUtils;
import org.ovirt.engine.api.restapi.types.Mapper;
import org.ovirt.engine.api.restapi.util.ParametersHelper;
import org.ovirt.engine.core.common.queries.DiskSnapshotsQueryParameters;
import org.ovirt.engine.core.common.queries.QueryType;
Expand Down Expand Up @@ -36,13 +38,20 @@ public DiskSnapshots list() {
protected DiskSnapshots mapCollection(List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities) {
DiskSnapshots collection = new DiskSnapshots();
for (org.ovirt.engine.core.common.businessentities.storage.Disk disk : entities) {
DiskSnapshot diskSnapshot = getMapper(org.ovirt.engine.core.common.businessentities.storage.Disk.class, DiskSnapshot.class).map(disk, null);
Mapper<org.ovirt.engine.core.common.businessentities.storage.Disk, DiskSnapshot> mapper =
getMapper(org.ovirt.engine.core.common.businessentities.storage.Disk.class, DiskSnapshot.class);
DiskSnapshot diskSnapshot = mapper.map(disk, null);
diskSnapshot.setDisk(new Disk());
diskSnapshot.getDisk().setId(this.diskId.toString());
collection.getDiskSnapshots().add(addLinks(populate(diskSnapshot, disk), Disk.class));
diskSnapshot.setHref(buildHref(diskId.toString(), diskSnapshot.getId().toString()));
diskSnapshot.setHref(buildHref(diskId.toString(), diskSnapshot.getId()));
getBackendCollection(QueryType.GetDiskSnapshotByImageId,
new DiskSnapshotsQueryParameters(diskId, includeActive(), includeTemplate()));
if (diskSnapshot.getParent() != null) {
diskSnapshot.getParent().setHref(buildParentHref(diskId.toString(), false));
org.ovirt.engine.core.common.businessentities.storage.Disk
parentDisk = DiskResourceUtils.getDiskIdFromDiskSnapshotId(entities, diskSnapshot, mapper);
diskSnapshot.getParent().setHref(buildHref(parentDisk.getId().toString(),
diskSnapshot.getParent().getId()));
}
}
return collection;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
package org.ovirt.engine.api.restapi.resource.utils;

import java.util.List;

import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.DiskSnapshot;
import org.ovirt.engine.api.restapi.types.Mapper;

public class DiskResourceUtils {

public static boolean isLunDisk(Disk disk) {
return disk.isSetLunStorage() && disk.getLunStorage().isSetLogicalUnits() &&
disk.getLunStorage().getLogicalUnits().isSetLogicalUnits();
}

public static org.ovirt.engine.core.common.businessentities.storage.Disk getDiskIdFromDiskSnapshotId
(List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities, DiskSnapshot diskSnapshot,
Mapper<org.ovirt.engine.core.common.businessentities.storage.Disk, DiskSnapshot> mapper) {
return entities.stream().filter(tempDisk -> diskSnapshot.getParent().getId().equals(mapper
.map(tempDisk, null).getId())).findFirst().orElse(null);
}

}

0 comments on commit 3faeb4c

Please sign in to comment.