Dhandapani Gopal has uploaded a new change for review. Change subject: engine:[WIP] Storage device listing feature ......................................................................
engine:[WIP] Storage device listing feature -TODO: VDSM Dependency Change-Id: I98f632a7aadfc57964d42e90b6a25c604330ab41 Signed-off-by: Dhandapani <[email protected]> --- A backend/manager/dbscripts/storage_device_sp.sql A backend/manager/dbscripts/upgrade/03_02_0050_add_storage_device_list_table.sql A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ContentType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceStatus.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDeviceList.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDaoDbFacadeImpl.java A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDeviceDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListReturnForXmlRpc.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 17 files changed, 1,255 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/10058/1 diff --git a/backend/manager/dbscripts/storage_device_sp.sql b/backend/manager/dbscripts/storage_device_sp.sql new file mode 100644 index 0000000..a0ae2c1 --- /dev/null +++ b/backend/manager/dbscripts/storage_device_sp.sql @@ -0,0 +1,128 @@ +/* ---------------------------------------------------------------- + Stored procedures for database operations on Storage Device +----------------------------------------------------------------*/ + +Create or replace FUNCTION InsertStorageDevice(v_id UUID, v_vds_id UUID, + v_device_name VARCHAR(1000), + v_container VARCHAR(1000), + v_content_type VARCHAR(32), + v_flag_list VARCHAR(1000), + v_fs_size INTEGER, + v_fs_size_free INTEGER, + v_fs_type VARCHAR(256), + v_fs_uuid UUID, + v_uuid UUID, + v_members VARCHAR(1000), + model VARCHAR(1000), + mount_point VARCHAR(1000), + origin VARCHAR(256), + parent VARCHAR(256), + partitions VARCHAR(256), + size INTEGER, + free_size INTEGER, + start_size INTEGER, + end_size INTEGER, + status VARCHAR(256), + table_type VARCHAR(256), + type VARCHAR(256), + vendor VARCHAR(256)) + RETURNS VOID + AS $procedure$ +BEGIN + INSERT INTO storage_device_list (id, vds_id, device_name, container, + content_type, flag_list, fs_size, fs_size_free, fs_type, + fs_uuid, uuid, members, model, mount_point, origin, parent, + partitions, size, free_size, start_size, end_size, status, table_type, type, vendor) + VALUES (v_id, v_vds_id, v_device_name, v_container, + v_content_type, v_flag_list, v_fs_size, v_fs_size_free, v_fs_type, + v_fs_uuid, v_uuid, v_members, v_model, v_mount_point, v_origin, v_parent, + v_partitions, v_size, v_free_size, v_start_size, v_end_size, v_status, v_table_type, v_type, v_vendor); +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION UpdateStorageDevice(v_id UUID, v_vds_id UUID, + v_device_name VARCHAR(1000), + v_container VARCHAR(1000), + v_content_type VARCHAR(32), + v_flag_list VARCHAR(1000), + v_fs_size INTEGER, + v_fs_size_free INTEGER, + v_fs_type VARCHAR(256), + v_fs_uuid UUID, + v_uuid UUID, + v_members VARCHAR(1000), + model VARCHAR(1000), + mount_point VARCHAR(1000), + origin VARCHAR(256), + parent VARCHAR(256), + partitions VARCHAR(256), + size INTEGER, + free_size INTEGER, + start_size INTEGER, + end_size INTEGER, + status VARCHAR(256), + table_type VARCHAR(256), + type VARCHAR(256), + vendor VARCHAR(256)) + RETURNS VOID + AS $procedure$ +BEGIN + UPDATE storage_device_list + SET vds_id = v_vds_id, + device_name = v_device_name, + container = v_container, + content_type = v_content_type, + flag_list = v_flag_list, + fs_size = v_fs_size, + fs_size_free = v_fs_size_free, + fs_type = v_fs_type, + fs_uuid = v_fs_uuid, + uuid = v_uuid, + members = v_members, + model = v_model, + mount_point = v_mount_point, + origin = v_origin, + parent = v_parent, + partitions = v_partitions, + size = v_size, + free_size = v_free_size, + start_size = v_start_size, + end_size = v_end_size, + status = v_status, + table_type = v_table_type, + type = v_type, + vendor = v_vendor + _update_date = LOCALTIMESTAMP + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION GetStorageDeviceById(v_id UUID) + RETURNS SETOF storage_device_list + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM storage_device_list + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION GetStorageDevicesByHostId(v_vds_id UUID) + RETURNS SETOF storage_device_list + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM storage_device_list + WHERE vds_id = v_vds_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION DeleteStorageDeviceByGuid(v_id UUID) + RETURNS VOID + AS $procedure$ +BEGIN + DELETE FROM storage_device_list + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; diff --git a/backend/manager/dbscripts/upgrade/03_02_0050_add_storage_device_list_table.sql b/backend/manager/dbscripts/upgrade/03_02_0050_add_storage_device_list_table.sql new file mode 100644 index 0000000..e0be92e --- /dev/null +++ b/backend/manager/dbscripts/upgrade/03_02_0050_add_storage_device_list_table.sql @@ -0,0 +1,46 @@ +Create or replace FUNCTION __temp_fn_db_add_storage_device_list() returns void +AS $procedure$ +BEGIN + +-- Add storage_device_list table which reflects the meta data of a Storage Device +if (not exists (select 1 from INFORMATION_SCHEMA.TABLES where table_name='storage_device_list')) then + begin + CREATE TABLE storage_device_list + ( + id UUID NOT NULL, + vds_id uuid NOT NULL references vds_static (vds_id) on delete cascade, + device_name VARCHAR(1000) NOT NULL, + container VARCHAR(1000), + content_type VARCHAR(32) NOT NULL, + flag_list VARCHAR(1000), + fs_size NUMERIC NOT NULL DEFAULT 0, + fs_size_free NUMERIC NOT NULL DEFAULT 0, + fs_type VARCHAR(256), + fs_uuid UUID, + uuid UUID, + members VARCHAR(1000), + model VARCHAR(1000), + mount_point VARCHAR(1000), + origin VARCHAR(256), + parent VARCHAR(256), + partitions VARCHAR(256), + size NUMERIC NOT NULL DEFAULT 0, + free_size NUMERIC NOT NULL DEFAULT 0, + start_size NUMERIC NOT NULL DEFAULT 0, + end_size NUMERIC NOT NULL DEFAULT 0, + status VARCHAR(256) NOT NULL, + table_type VARCHAR(256), + type VARCHAR(256), + vendor VARCHAR(256), + _create_date TIMESTAMP WITH TIME ZONE NOT NULL default LOCALTIMESTAMP, + _update_date TIMESTAMP WITH TIME ZONE, + CONSTRAINT pk_storage_device_list PRIMARY KEY(id) + ) WITH OIDS; + end; +end if; + +END; $procedure$ +LANGUAGE plpgsql; + +select __temp_fn_db_add_storage_device_list(); +drop function __temp_fn_db_add_storage_device_list(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ContentType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ContentType.java new file mode 100644 index 0000000..bb0aff4 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ContentType.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.core.common.businessentities; + +/** + * Enum for Device Type. + * @see StorageDeviceList + */ +public enum ContentType { + /** + * Can be used for data storage i.e. Bricks can be created on this device. + */ + DATA, + /** + * Is a boot disk. Bricks should not be created on it. + */ + BOOT, + /** + * Swap disk. Bricks should not be created on it. + */ + SWAP, + /** + * Device type not known. + */ + UNKNOWN +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceStatus.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceStatus.java new file mode 100644 index 0000000..578c8b2 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceStatus.java @@ -0,0 +1,41 @@ +package org.ovirt.engine.core.common.businessentities; + + +/** + * Enum for Device Status. + * @see StorageDeviceList + */ +public enum DeviceStatus { + /** + * Device has been formatted and mounted + */ + MOUNTED, + /** + * Not yet fully initialized. Either not partitioned, or not formatted, or not mounted + */ + UNINITIALIZED, + /** + * Device is currently initializing i.e. Partitioning, formatting or mounting in progress + */ + INITIALIZING, + /** + * Device has been formatted, but not yet mounted + */ + FORMATTED, + /** + * Device has been partitioned, but not yet formatted + */ + PARTED, + /** + * Device unusable + */ + UNUSABLE, + /** + * Device format is unsupported + */ + FORMAT_UNSUPPORTED, + /** + * Device is not accessible due to IO errors + */ + NA +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceType.java new file mode 100644 index 0000000..1e7774d --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DeviceType.java @@ -0,0 +1,13 @@ +package org.ovirt.engine.core.common.businessentities; + +/** + * Enum for Device Type. + * @see StorageDeviceList + */ +public enum DeviceType { + BLOCK, + MD, + LVM_VG, + LVM_LV, + LVM_LV_SNAPSHOT +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDeviceList.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDeviceList.java new file mode 100644 index 0000000..58f31b2 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDeviceList.java @@ -0,0 +1,407 @@ +package org.ovirt.engine.core.common.businessentities; + + +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.common.validation.group.CreateEntity; +import org.ovirt.engine.core.common.validation.group.RemoveEntity; +import org.ovirt.engine.core.compat.Guid; + +/** + * class representing a storage device List. + * @see DeviceStatus + * @see ContentType + * @see DeviceType + */ +public class StorageDeviceList extends IVdcQueryable implements BusinessEntity<Guid> { + private static final long serialVersionUID = 5124373011638326818L; + + @NotNull(message = "VALIDATION.STORAGE.DEVICE.ID.NOT_NULL", groups = { RemoveEntity.class }) + private Guid deviceId; + + @NotNull(message = "VALIDATION.STORAGE.DEVICE.HOST.ID.NOT_NULL", groups = { CreateEntity.class }) + private Guid hostId; + + @NotNull(message = "VALIDATION.STORAGE.DEVICE.NAME.NOT_NULL", groups = {CreateEntity.class}) + private String name; + + private Guid fsId; + + private DeviceType type; + private ContentType contentType; + private String model; + private String fsType; + private String hostName; + private String mountPoint; + private double space = 0.0; + private double freeSpace = 0.0; + private double fsSize = 0.0; + private double fsFreeSize = 0.0; + private DeviceStatus status; + private String vendor; + private List<String> partitionNames; + private String container; + private List<String> members; + private List<String> flagList; + private String origin; + private String parent; + private double startSize = 0.0; + private double endSize = 0.0; + private String tableType; + private Guid deviceUuid; + + + public StorageDeviceList() { + } + + public StorageDeviceList(Guid deviceId, + String name, + DeviceType type, + ContentType contentType, + String model, + String fsType, + Guid hostId, + String hostName, + String mountPoint, + double space, + double freeSpace, + double fsSpace, + double fsFreeSpace, + DeviceStatus status, + String vendor, + String container, + List<String> partitionNames, + List<String> members, + List<String> flagList, + String origin, + String parent, + double startSize, + double endSize, + String tableType, + Guid deviceUuid, + Guid fsId) { + setId(deviceId); + setName(name); + setType(type); + setContentType(contentType); + setModel(model); + setFsType(fsType); + setHostId(hostId); + setHostName(hostName); + setMountPoint(mountPoint); + setSpace(space); + setFreeSpace(freeSpace); + setFsSize(fsSpace); + setFsFreeSize(fsFreeSpace); + setStatus(status); + setVendor(vendor); + setContainer(container); + setPartitionNames(partitionNames); + setMembers(members); + setFlagList(flagList); + setOrigin(origin); + setParent(parent); + setStartSize(startSize); + setEndSize(endSize); + setTableType(tableType); + setDeviceUuid(deviceUuid); + setFsId(fsId); + } + + public double getSpace() { + return space; + } + + public double getFreeSpace() { + return (getSpace() - getfreeSpace()); + } + + public void setSpace(double space) { + this.space = space; + } + + public boolean isUninitialized() { + return getStatus() == DeviceStatus.UNINITIALIZED; + } + + public boolean isInitialized() { + return getStatus() == DeviceStatus.MOUNTED; + } + + public boolean isReady() { + return (getStatus() == DeviceStatus.MOUNTED && getContentType() == ContentType.DATA); + } + + public DeviceStatus getStatus() { + return status; + } + + public void setStatus(DeviceStatus status) { + this.status = status; + } + + public double getfreeSpace() { + return freeSpace; + } + + public void setFreeSpace(double freeSpace) { + this.freeSpace = freeSpace; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public void setMountPoint(String mountPoint) { + this.mountPoint = mountPoint; + } + + public String getMountPoint() { + return mountPoint; + } + + public ContentType getContentType() { + return contentType; + } + + public void setContentType(ContentType contentType) { + this.contentType = contentType; + } + + public String getFsType() { + return fsType; + } + + public void setFsType(String fsType) { + this.fsType = fsType; + } + + public String getQualifiedName() { + return getHostName() + ":" + getName(); + } + + public String getQualifiedBrickName(String volumeName) { + return getHostName() + ":" + getMountPoint() + "/" + volumeName; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (!(obj instanceof StorageDeviceList)) { + return false; + } + + StorageDeviceList device = (StorageDeviceList) obj; + + String oldMountPoint = (getMountPoint() == null ? "" : getMountPoint()); + String oldFsType = (getFsType() == null ? "" : getFsType()); + + String newMountPoint = (device.getMountPoint() == null ? "" : getMountPoint()); + String newFsType = (device.getFsType() == null ? "" : getFsType()); + + String oldModel = (getModel() == null ? "" : getModel()); + String newModel = (device.getModel() == null ? "" : getModel()); + + if (getName().equals(device.getName()) && getHostName().equals(device.getHostName()) + && oldMountPoint.equals(newMountPoint) && getStatus() == device.getStatus() + && getSpace() == device.getSpace() && getfreeSpace() == device.getfreeSpace() + && oldFsType.equals(newFsType) && getType() == device.getType() + && getContentType() == device.getContentType() && getFsSize() == device.getFsSize() + && getFsFreeSize() == device.getFsFreeSize() && oldModel.equals(newModel)) { + return true; + } + + return false; + } + + public void copyFrom(StorageDeviceList newDevice) { + setName(newDevice.getName()); + setId(newDevice.getId()); + setMountPoint(newDevice.getMountPoint()); + setHostName(newDevice.getHostName()); + setStatus(newDevice.getStatus()); + setFsType(newDevice.getFsType()); + setType(newDevice.getType()); + setSpace(newDevice.getSpace()); + setFreeSpace(newDevice.getfreeSpace()); + setFsSize(newDevice.getFsSize()); + setFsFreeSize(newDevice.getFsFreeSize()); + setContentType(newDevice.getContentType()); + setModel(newDevice.getModel()); + setHostId(newDevice.getHostId()); + setVendor(newDevice.getVendor()); + setContainer(newDevice.getContainer()); + setMembers(newDevice.getMembers()); + setPartitionNames(newDevice.getPartitionNames()); + setFlagList(newDevice.getFlagList()); + setOrigin(newDevice.getOrigin()); + setParent(newDevice.getParent()); + setStartSize(newDevice.getStartSize()); + setEndSize(newDevice.getEndSize()); + setTableType(newDevice.getTableType()); + setDeviceUuid(newDevice.getDeviceUuid()); + setFsId(newDevice.getFsId()); + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setId(Guid deviceId) { + this.deviceId = deviceId; + } + + public Guid getId() { + return deviceId; + } + + public void setType(DeviceType type) { + this.type = type; + } + + public DeviceType getType() { + return type; + } + + public void setModel(String model) { + this.model = model; + } + + public String getModel() { + return model; + } + + public void setHostId(Guid hostId) { + this.hostId = hostId; + } + + public Guid getHostId() { + return hostId; + } + + public void setVendor(String vendor) { + this.vendor = vendor; + } + + public String getVendor() { + return vendor; + } + + public void setContainer(String container) { + this.container = container; + } + + public String getContainer() { + return container; + } + + public void setMembers(List<String> members) { + this.members = members; + } + + public List<String> getMembers() { + return members; + } + + public List<String> getPartitionNames() { + return partitionNames; + } + + public void setPartitionNames(List<String> partitionNames) { + this.partitionNames = partitionNames; + } + + public Guid getFsId() { + return fsId; + } + + public void setFsId(Guid fsId) { + this.fsId = fsId; + } + + public double getFsSize() { + return fsSize; + } + + public void setFsSize(double fsSize) { + this.fsSize = fsSize; + } + + public double getFsFreeSize() { + return fsFreeSize; + } + + public void setFsFreeSize(double fsFreeSize) { + this.fsFreeSize = fsFreeSize; + } + + public List<String> getFlagList() { + return flagList; + } + + public void setFlagList(List<String> flagList) { + this.flagList = flagList; + } + + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } + + public double getStartSize() { + return startSize; + } + + public void setStartSize(double startSize) { + this.startSize = startSize; + } + + public double getEndSize() { + return endSize; + } + + public void setEndSize(double endSize) { + this.endSize = endSize; + } + + public String getTableType() { + return tableType; + } + + public void setTableType(String tableType) { + this.tableType = tableType; + } + + public Guid getDeviceUuid() { + return deviceUuid; + } + + public void setDeviceUuid(Guid deviceUuid) { + this.deviceUuid = deviceUuid; + } +} + diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 13479ac..8013d7e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -140,6 +140,7 @@ GetGlusterVolumeAdvancedDetails("org.ovirt.engine.core.vdsbroker.gluster"), GlusterVolumesList("org.ovirt.engine.core.vdsbroker.gluster"), GetGlusterVolumeProfileInfo("org.ovirt.engine.core.vdsbroker.gluster"), + StorageDeviceList("org.ovirt.engine.core.vdsbroker.irsbroker"), ; String packageName; diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java index 787b238..18922ad 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java @@ -74,6 +74,7 @@ import org.ovirt.engine.core.dao.RoleGroupMapDAO; import org.ovirt.engine.core.dao.SnapshotDao; import org.ovirt.engine.core.dao.StepDao; +import org.ovirt.engine.core.dao.StorageDeviceDao; import org.ovirt.engine.core.dao.StorageDomainDAO; import org.ovirt.engine.core.dao.StorageDomainDynamicDAO; import org.ovirt.engine.core.dao.StorageDomainStaticDAO; @@ -858,6 +859,15 @@ return getDao(GlusterOptionDao.class); } + /** + * Returns the singleton instance of {@link StorageDeviceDao}. + * + * @return the dao + */ + public StorageDeviceDao getStorageDeviceDao() { + return getDao(StorageDeviceDao.class); + } + public void setOnStartConnectionTimeout(int onStartConnectionTimeout) { this.onStartConnectionTimeout = onStartConnectionTimeout; } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDao.java new file mode 100644 index 0000000..ab8d2b0 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDao.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.dao; + +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.StorageDeviceList; +import org.ovirt.engine.core.compat.Guid; + +public interface StorageDeviceDao extends DAO, MassOperationsDao<StorageDeviceList, Guid> { + + public StorageDeviceList getById(Guid deviceId); + + public void save(StorageDeviceList device); + + public void updateStorageDevice(StorageDeviceList device); + + public List<StorageDeviceList> getStorageDevicesOfHost(Guid hostId); + + public void remove(Guid id); +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDaoDbFacadeImpl.java new file mode 100644 index 0000000..b954811 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDeviceDaoDbFacadeImpl.java @@ -0,0 +1,143 @@ +package org.ovirt.engine.core.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.ContentType; +import org.ovirt.engine.core.common.businessentities.DeviceStatus; +import org.ovirt.engine.core.common.businessentities.DeviceType; +import org.ovirt.engine.core.common.businessentities.StorageDeviceList; +import org.ovirt.engine.core.common.utils.EnumUtils; +import org.ovirt.engine.core.compat.Guid; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.simple.ParameterizedRowMapper; + + + +public class StorageDeviceDaoDbFacadeImpl extends MassOperationsGenericDaoDbFacade<StorageDeviceList, Guid> implements StorageDeviceDao { + + public StorageDeviceDaoDbFacadeImpl() { + super("StorageDevice"); + setProcedureNameForGet("GetStorageDeviceById"); + } + + private static final ParameterizedRowMapper<StorageDeviceList> deviceRowMapper = new StorageDeviceRowMapper(); + + + @Override + public List<StorageDeviceList> getStorageDevicesOfHost(Guid hostId) { + List<StorageDeviceList> devices = + getCallsHandler().executeReadList("GetStorageDevicesByHostId", + deviceRowMapper, + getCustomMapSqlParameterSource().addValue("vds_id", hostId)); + return devices; + } + + @Override + public void remove(Guid deviceId) { + getCallsHandler().executeModification("DeleteStorageDeviceByGuid", + createIdParameterMapper(deviceId)); + } + + public StorageDeviceList getById(Guid deviceId) { + StorageDeviceList device = + getCallsHandler().executeRead("GetStorageDeviceById", + deviceRowMapper, + createIdParameterMapper(deviceId)); + return device; + } + + @Override + public void save(StorageDeviceList device) { + getCallsHandler().executeModification("InsertStorageDevice", createFullParametersMapper(device)); + } + + @Override + public void updateStorageDevice(StorageDeviceList device) { + getCallsHandler().executeModification("UpdateStorageDevice", createFullParametersMapper(device)); + } + + protected MapSqlParameterSource createFullParametersMapper(StorageDeviceList device) { + return getCustomMapSqlParameterSource() + .addValue("id", device.getId()) + .addValue("vds_id", device.getHostId()) + .addValue("device_name", device.getName()) + .addValue("container", device.getContainer()) + .addValue("content_type", EnumUtils.nameOrNull(device.getContentType())) + .addValue("flag_list", device.getFlagList()) + .addValue("fs_size", device.getFsSize()) + .addValue("fs_size_free", device.getFsFreeSize()) + .addValue("fs_type", device.getFsType()) + .addValue("fs_uuid", device.getFsId()) + .addValue("uuid", device.getDeviceUuid()) + .addValue("members", device.getMembers()) + .addValue("model", device.getModel()) + .addValue("mount_point", device.getMountPoint()) + .addValue("origin", device.getOrigin()) + .addValue("parent", device.getParent()) + .addValue("partitions", device.getPartitionNames()) + .addValue("size", device.getSpace()) + .addValue("free_size", device.getFreeSpace()) + .addValue("start_size", device.getStartSize()) + .addValue("end_size", device.getEndSize()) + .addValue("status", EnumUtils.nameOrNull(device.getStatus())) + .addValue("table_type", device.getTableType()) + .addValue("type", EnumUtils.nameOrNull(device.getType())) + .addValue("vendor", device.getVendor()); + } + + protected static class StorageDeviceRowMapper implements ParameterizedRowMapper<StorageDeviceList> { + @Override + public StorageDeviceList mapRow(ResultSet rs, int rowNum) throws SQLException { + StorageDeviceList deviceEntity = new StorageDeviceList(); + deviceEntity.setFsId(Guid.createGuidFromString(rs.getString("fs_id"))); + deviceEntity.setId(Guid.createGuidFromString(rs.getString("device_id"))); + deviceEntity.setName(rs.getString("name")); + deviceEntity.setType(DeviceType.valueOf(rs.getString("type"))); + deviceEntity.setContentType(ContentType.valueOf(rs.getString("content_type"))); + deviceEntity.setFsType(rs.getString("fs_type")); + deviceEntity.setModel(rs.getString("model")); + deviceEntity.setHostId(Guid.createGuidFromString(rs.getString("host_id"))); + deviceEntity.setMountPoint(rs.getString("mount_point")); + deviceEntity.setSpace(rs.getDouble("size")); + deviceEntity.setFreeSpace(rs.getDouble("free_size")); + deviceEntity.setFsSize(rs.getDouble("fs_size")); + deviceEntity.setFsFreeSize(rs.getDouble("fs_free_size")); + deviceEntity.setStatus(DeviceStatus.valueOf(rs.getString("status"))); + deviceEntity.setVendor(rs.getString("vendor")); + String partitions = rs.getString("partitions"); + if (partitions != null) { + deviceEntity.setPartitionNames(Arrays.asList(partitions.split("\\s*,\\s*"))); + } + deviceEntity.setContainer(rs.getString("container")); + String members = rs.getString("members"); + if (members != null) { + deviceEntity.setMembers(Arrays.asList(members.split("\\s*,\\s*"))); + } + String flagList = rs.getString("flag_list"); + if (flagList != null) { + deviceEntity.setFlagList(Arrays.asList(flagList.split("\\s*,\\s*"))); + } + deviceEntity.setOrigin(rs.getString("origin")); + deviceEntity.setParent(rs.getString("parent")); + deviceEntity.setStartSize(rs.getDouble("start_size")); + deviceEntity.setEndSize(rs.getDouble("end_size")); + deviceEntity.setTableType(rs.getString("table_type")); + deviceEntity.setDeviceUuid(Guid.createGuidFromString(rs.getString("uuid"))); + return deviceEntity; + } + } + + @Override + protected MapSqlParameterSource createIdParameterMapper(Guid id) { + return getCustomMapSqlParameterSource().addValue("id", id); + } + + @Override + protected ParameterizedRowMapper<StorageDeviceList> createEntityRowMapper() { + return deviceRowMapper; + } +} + diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDeviceDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDeviceDaoTest.java new file mode 100644 index 0000000..c4ea864 --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDeviceDaoTest.java @@ -0,0 +1,106 @@ +package org.ovirt.engine.core.dao; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.ContentType; +import org.ovirt.engine.core.common.businessentities.DeviceStatus; +import org.ovirt.engine.core.common.businessentities.DeviceType; +import org.ovirt.engine.core.common.businessentities.StorageDeviceList; +import org.ovirt.engine.core.compat.Guid; + +/** + * Tests for Storage Device DAO + */ +public class StorageDeviceDaoTest extends BaseDAOTestCase { + + private static final Guid HOST_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6"); + private static final Guid CLUSTER_ID = new Guid("ae956031-6be2-43d6-bb8f-5191c9253314"); + + private static final Guid EXISTING_DEVICE_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); + private static final Guid DEVICE_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d2"); + private static final String DEVICE_NAME = "sda"; + private StorageDeviceDao dao; + private StorageDeviceList newStorageDevice; + private StorageDeviceList existingStorageDevice; + private List<StorageDeviceList> existingStorageDevicesOfHost; + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + dao = dbFacade.getStorageDeviceDao(); + existingStorageDevice = dao.getById(EXISTING_DEVICE_ID); + existingStorageDevicesOfHost = dao.getStorageDevicesOfHost(HOST_ID); + } + + @Test + public void testSaveAndGetById() { + StorageDeviceList storageDevice = dao.getById(DEVICE_ID); + assertNull(storageDevice); + newStorageDevice = insertTestStorageDevice(); + storageDevice = dao.getById(newStorageDevice.getId()); + assertNotNull(storageDevice); + assertEquals(newStorageDevice, storageDevice); + } + + private StorageDeviceList insertTestStorageDevice() { + StorageDeviceList storageDevice = new StorageDeviceList(); + storageDevice.setId(Guid.NewGuid()); + storageDevice.setName(DEVICE_NAME); + storageDevice.setHostId(HOST_ID); + storageDevice.setFsSize(1024.36); + storageDevice.setFsFreeSize(2048.25); + storageDevice.setFsType("ext4"); + storageDevice.setMountPoint("/dev"); + storageDevice.setPartitionNames(Arrays.asList("sda1", "sda2", "sda3")); + storageDevice.setSpace(25868987); + storageDevice.setStatus(DeviceStatus.MOUNTED); + storageDevice.setType(DeviceType.BLOCK); + storageDevice.setVendor("ATA"); + dao.save(storageDevice); + return storageDevice; + } + + @Test + public void testGetById() { + StorageDeviceList storageDevice = dao.getById(EXISTING_DEVICE_ID); + assertNotNull(storageDevice); + assertEquals(existingStorageDevice, storageDevice); + } + + @Test + public void testUpdateStorageDevice() { + StorageDeviceList storageDeviceBefore = dao.getById(DEVICE_ID); + storageDeviceBefore.setContentType(ContentType.DATA); + dao.updateStorageDevice(storageDeviceBefore); + + StorageDeviceList storageDeviceAfter = dao.getById(DEVICE_ID); + assertNotNull(storageDeviceAfter); + assertEquals(storageDeviceBefore, storageDeviceAfter); + } + + @Test + public void testGetStorageDevicesOfHost() { + List<StorageDeviceList> storageDeviceList = dao.getStorageDevicesOfHost(HOST_ID); + assertNotNull(storageDeviceList); + assertEquals(existingStorageDevicesOfHost, storageDeviceList); + } + + @Test + public void testRemove() { + dao.remove(EXISTING_DEVICE_ID); + List<StorageDeviceList> deviceList = dao.getStorageDevicesOfHost(HOST_ID); + assertTrue(deviceList.size() == 1); + assertFalse(deviceList.contains(EXISTING_DEVICE_ID)); + } + +} diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 78a9406..cb33137 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -3841,6 +3841,89 @@ <value>RDMA</value> </row> </table> + <table name="storage_device_list"> + <column>id</column> + <column>vds_id</column> + <column>device_name</column> + <column>container</column> + <column>content_type</column> + <column>flag_list</column> + <column>fs_size</column> + <column>fs_size_free</column> + <column>fs_type</column> + <column>fs_uuid</column> + <column>uuid</column> + <column>members</column> + <column>model</column> + <column>mount_point</column> + <column>origin</column> + <column>parent</column> + <column>partitions</column> + <column>size</column> + <column>free_size</column> + <column>start_size</column> + <column>end_size</column> + <column>status</column> + <column>table_type</column> + <column>type</column> + <column>vendor</column> + + <!-- Storage Device for b399944a-81ab-4ec5-8266-e19ba7c3c9d1 --> + <row> + <value>b399944a-81ab-4ec5-8266-e19ba7c3c9d1</value> + <value>afce7a39-8e8c-4819-ba9c-796d316592e6</value> + <value>sda</value> + <value></value> + <value>DATA</value> + <value></value> + <value>1526.35</value> + <value>30624</value> + <value>ext4</value> + <value></value> + <value></value> + <value></value> + <value>ST320LT007-9ZV142</value> + <value>/dev</value> + <value></value> + <value></value> + <value>sda1,sda2</value> + <value>568978</value> + <value>65987</value> + <value></value> + <value></value> + <value>MOUNTED</value> + <value></value> + <value>BLOCK</value> + <value>ATA</value> + </row> + <row> + <value>b399944a-81ab-4ec5-8266-e19ba7c3c9d3</value> + <value>afce7a39-8e8c-4819-ba9c-796d316592e6</value> + <value>sda1</value> + <value></value> + <value>DATA</value> + <value></value> + <value>526.35</value> + <value>1024</value> + <value>ext4</value> + <value></value> + <value></value> + <value></value> + <value>ST320LT007-9ZV142</value> + <value>/dev</value> + <value></value> + <value>sda</value> + <value></value> + <value>1024</value> + <value>2048</value> + <value></value> + <value></value> + <value>MOUNTED</value> + <value></value> + <value>BLOCK</value> + <value>ATA</value> + </row> + </table> <table name="object_column_white_list"> <column>object_name</column> <column>column_name</column> diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListReturnForXmlRpc.java new file mode 100644 index 0000000..b7d1695 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListReturnForXmlRpc.java @@ -0,0 +1,192 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.ovirt.engine.core.common.businessentities.ContentType; +import org.ovirt.engine.core.common.businessentities.DeviceStatus; +import org.ovirt.engine.core.common.businessentities.DeviceType; +import org.ovirt.engine.core.common.businessentities.StorageDeviceList; +import org.ovirt.engine.core.compat.Guid; + +@SuppressWarnings("unchecked") +public class StorageDeviceListReturnForXmlRpc extends StatusReturnForXmlRpc { + private static final String DEVICES = "devices"; + private static final String STORAGE_DEVICE_LIST = "storage-device-list"; + private static final String CONTAINER = "container"; + private static final String CONTENT_TYPE ="contentType"; + private static final String FLAG_LIST = "flagList"; + private static final String FS_SIZE = "fsSize"; + private static final String FS_FREE_SIZE = "fsSizeFree"; + private static final String FS_TYPE = "fsType"; + private static final String FS_UUID ="fsUuid"; + private static final String MEMBERS = "members"; + private static final String MODEL = "model"; + private static final String MOUNT_POINT = "mountPoint"; + private static final String DEVICE_NAME = "name"; + private static final String ORIGIN = "origin"; + private static final String PARENT = "parent"; + private static final String PARTITIONS = "partitions"; + private static final String SIZE = "size"; + private static final String SIZE_FREE = "sizeFree"; + private static final String START_SIZE = "startSize"; + private static final String END_SIZE = "endSize"; + private static final String STATUS = "status"; + private static final String TABLE_TYPE = "tableType"; + private static final String TYPE ="type"; + private static final String UUID = "uuid"; + private static final String VENDOR = "vendor"; + + private Map<String, StorageDeviceList> devices = new HashMap<String, StorageDeviceList>(); + + public StorageDeviceListReturnForXmlRpc(Map<String, Object> innerMap) { + super(innerMap); + + if(mStatus.mCode != 0) { + return; + } + + Map<String, Object> deviceListMap = (Map<String, Object>) innerMap.get(STORAGE_DEVICE_LIST); + + for (Entry<String, Object> entry : deviceListMap.entrySet()) { + devices.put(entry.getKey(), populateDevice((Map<String, Object>)entry.getValue())); + } + } + + private StorageDeviceList populateDevice(Map<String, Object> deviceMap) { + StorageDeviceList device = new StorageDeviceList(); + if (deviceMap.containsKey(CONTAINER)) { + device.setContainer((String) deviceMap.get(CONTAINER)); + } + + if (deviceMap.containsKey(CONTENT_TYPE)) { + String contentType = (String) deviceMap.get(CONTENT_TYPE); + if (contentType.equals(ContentType.DATA)) { + device.setContentType(ContentType.DATA); + } else if (contentType.equals(ContentType.BOOT)) { + device.setContentType(ContentType.BOOT); + } else if (contentType.equals(ContentType.SWAP)) { + device.setContentType(ContentType.SWAP); + } else if (contentType.equals(ContentType.UNKNOWN)) { + device.setContentType(ContentType.UNKNOWN); + } + } + + if (deviceMap.containsKey(FLAG_LIST)) { + device.setFlagList(Arrays.asList((String) deviceMap.get(FLAG_LIST))); + } + + if (deviceMap.containsKey(FS_SIZE)) { + device.setFsSize(Double.parseDouble((String) deviceMap.get(FS_SIZE))); + } + if (deviceMap.containsKey(FS_FREE_SIZE)) { + device.setFsFreeSize(Double.parseDouble((String) deviceMap.get(FS_FREE_SIZE))); + } + if (deviceMap.containsKey(FS_TYPE)) { + device.setFsType((String) deviceMap.get(FS_TYPE)); + } + if (deviceMap.containsKey(FS_UUID)) { + device.setFsId(new Guid((String) deviceMap.get(FS_UUID))); + } + + if (deviceMap.containsKey(MEMBERS)) { + device.setMembers(new ArrayList<String>(Arrays.asList(((String) deviceMap.get(MEMBERS)).split(",")))); + } + + if (deviceMap.containsKey(MODEL)) { + device.setModel((String) deviceMap.get(MODEL)); + } + + if (deviceMap.containsKey(MOUNT_POINT)) { + device.setMountPoint((String) deviceMap.get(MOUNT_POINT)); + } + + if (deviceMap.containsKey(DEVICE_NAME)) { + device.setName((String) deviceMap.get(DEVICE_NAME)); + } + + if (deviceMap.containsKey(ORIGIN)) { + device.setOrigin((String) deviceMap.get(ORIGIN)); + } + + if (deviceMap.containsKey(PARENT)) { + device.setParent((String) deviceMap.get(PARENT)); + } + + if (deviceMap.containsKey(PARTITIONS)) { + device.setPartitionNames(new ArrayList<String>(Arrays.asList(((String) deviceMap.get(PARTITIONS)).split(",")))); + } + + if (deviceMap.containsKey(SIZE)) { + device.setSpace(Double.parseDouble((String) deviceMap.get(PARENT))); + } + + if (deviceMap.containsKey(SIZE_FREE)) { + device.setFreeSpace(Double.parseDouble((String) deviceMap.get(SIZE_FREE))); + } + + if (deviceMap.containsKey(START_SIZE)) { + device.setStartSize(Double.parseDouble((String) deviceMap.get(START_SIZE))); + } + + if (deviceMap.containsKey(END_SIZE)) { + device.setEndSize(Double.parseDouble((String) deviceMap.get(END_SIZE))); + } + + if (deviceMap.containsKey(STATUS)) { + String status = (String) deviceMap.get(STATUS); + if (status.equals(DeviceStatus.UNINITIALIZED)) { + device.setStatus(DeviceStatus.UNINITIALIZED); + } else if (status.equals(DeviceStatus.NA)) { + device.setStatus(DeviceStatus.NA); + } else if (status.equals(DeviceStatus.UNUSABLE)) { + device.setStatus(DeviceStatus.UNUSABLE); + } else if (status.equals(DeviceStatus.FORMAT_UNSUPPORTED)) { + device.setStatus(DeviceStatus.FORMAT_UNSUPPORTED); + } else if (status.equals(DeviceStatus.MOUNTED)) { + device.setStatus(DeviceStatus.MOUNTED); + } else if (status.equals(DeviceStatus.FORMATTED)) { + device.setStatus(DeviceStatus.FORMATTED); + } else if (status.equals(DeviceStatus.PARTED)) { + device.setStatus(DeviceStatus.PARTED); + } else if (status.equals(DeviceStatus.PARTED)) { + device.setStatus(DeviceStatus.PARTED); + } + } + + if (deviceMap.containsKey(TABLE_TYPE)) { + device.setTableType((String) deviceMap.get(TABLE_TYPE)); + } + + if (deviceMap.containsKey(TYPE)) { + String deviceType = (String) deviceMap.get(TYPE); + if (deviceType.equals(DeviceType.MD)) { + device.setType(DeviceType.MD); + } else if (deviceType.equals(DeviceType.LVM_VG)) { + device.setType(DeviceType.LVM_VG); + } else if (deviceType.equals(DeviceType.LVM_LV)) { + device.setType(DeviceType.LVM_LV); + } else if (deviceType.equals(DeviceType.BLOCK)) { + device.setType(DeviceType.BLOCK); + } else if (deviceType.equals(DeviceType.LVM_LV_SNAPSHOT)) { + device.setType(DeviceType.LVM_LV_SNAPSHOT); + } + } + + if (deviceMap.containsKey(UUID)) { + device.setDeviceUuid(new Guid((String) deviceMap.get(UUID))); + } + + if (deviceMap.containsKey(VENDOR)) { + device.setVendor((String) deviceMap.get(VENDOR)); + } + return device; + } + + public Map<String, StorageDeviceList> getStorageDeviceList() { + return devices; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListVDSCommand.java new file mode 100644 index 0000000..99bc1ac --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StorageDeviceListVDSCommand.java @@ -0,0 +1,25 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; +import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand; + +public class StorageDeviceListVDSCommand<P extends VdsIdVDSCommandParametersBase> extends VdsBrokerCommand<P> { + private StorageDeviceListReturnForXmlRpc result; + + public StorageDeviceListVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return result.mStatus; + } + + @Override + protected void ExecuteVdsBrokerCommand() { + result = getBroker().storageDeviceList(); + ProceedProxyReturnValue(); + setReturnValue(result.getStorageDeviceList()); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 6eab845..e701349 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -12,6 +12,7 @@ import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeStatusReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.StorageDeviceListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; @@ -243,4 +244,6 @@ GlusterVolumesListReturnForXmlRpc glusterVolumesList(Guid clusterId); GlusterVolumeProfileInfoReturnForXmlRpc glusterVolumeProfileInfo(Guid clusterId, String volumeName); + + StorageDeviceListReturnForXmlRpc storageDeviceList(); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index e42f931..f1fbaf8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -232,4 +232,6 @@ public Map<String, Object> glusterVolumeStatus(String volumeName, String brickName, String volumeStatusOption); public Map<String, Object> glusterVolumeProfileInfo(String volumeName); + + public Map<String, Object> storageDeviceList(); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index e4e2360..595f46b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -14,6 +14,7 @@ import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeStatusReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.StorageDeviceListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcRunTimeException; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; @@ -1192,4 +1193,15 @@ throw new XmlRpcRunTimeException(ute); } } + + @Override + public StorageDeviceListReturnForXmlRpc storageDeviceList() { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.storageDeviceList(); + StorageDeviceListReturnForXmlRpc wrapper = new StorageDeviceListReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } } -- To view, visit http://gerrit.ovirt.org/10058 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I98f632a7aadfc57964d42e90b6a25c604330ab41 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Dhandapani Gopal <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
