Martin Mucha has uploaded a new change for review. Change subject: core: storing iops into db ......................................................................
core: storing iops into db Change-Id: Ica0f0b45c4ee9d35b75bd38c39387e4fd517a48e Signed-off-by: Martin Mucha <mmu...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageDynamic.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDynamicDAODbFacadeImpl.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M packaging/dbscripts/disk_image_dynamic_sp.sql A packaging/dbscripts/upgrade/03_06_0950_add_read_write_ioops_per_disc.sql 6 files changed, 213 insertions(+), 28 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/38759/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageDynamic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageDynamic.java index 09c4aa1..109ff92 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageDynamic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageDynamic.java @@ -21,6 +21,11 @@ private Double flushLatency; + private Integer writeOps; + private Integer readOps; + private Integer readBytes; + private Integer writtenBytes; + public DiskImageDynamic() { } @@ -83,6 +88,10 @@ result = prime * result + ((readLatency == null) ? 0 : readLatency.hashCode()); result = prime * result + ((writeLatency == null) ? 0 : writeLatency.hashCode()); result = prime * result + ((flushLatency == null) ? 0 : flushLatency.hashCode()); + result = prime * result + ((readBytes == null) ? 0 : readBytes.hashCode()); + result = prime * result + ((writtenBytes == null) ? 0 : writtenBytes.hashCode()); + result = prime * result + ((readOps == null) ? 0 : readOps.hashCode()); + result = prime * result + ((writeOps == null) ? 0 : writeOps.hashCode()); return result; } @@ -104,7 +113,11 @@ && ObjectUtils.objectsEqual(writeRate, other.writeRate) && ObjectUtils.objectsEqual(readLatency, other.readLatency) && ObjectUtils.objectsEqual(writeLatency, other.writeLatency) - && ObjectUtils.objectsEqual(flushLatency, other.flushLatency)); + && ObjectUtils.objectsEqual(flushLatency, other.flushLatency) + && ObjectUtils.objectsEqual(readBytes, other.readBytes) + && ObjectUtils.objectsEqual(writtenBytes, other.writtenBytes) + && ObjectUtils.objectsEqual(readOps, other.readOps) + && ObjectUtils.objectsEqual(writeOps, other.writeOps)); } @Override @@ -121,4 +134,36 @@ public int compareTo(DiskImageDynamic o) { return BusinessEntityComparator.<DiskImageDynamic, Guid>newInstance().compare(this, o); } + + public Integer getWriteOps() { + return writeOps; + } + + public void setWriteOps(Integer writeOps) { + this.writeOps = writeOps; + } + + public Integer getReadOps() { + return readOps; + } + + public void setReadOps(Integer readOps) { + this.readOps = readOps; + } + + public Integer getReadBytes() { + return readBytes; + } + + public void setReadBytes(Integer readBytes) { + this.readBytes = readBytes; + } + + public Integer getWrittenBytes() { + return writtenBytes; + } + + public void setWrittenBytes(Integer writtenBytes) { + this.writtenBytes = writtenBytes; + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDynamicDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDynamicDAODbFacadeImpl.java index 5ef5272..ad2679b 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDynamicDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDynamicDAODbFacadeImpl.java @@ -28,6 +28,10 @@ entity.setId(getGuidDefaultEmpty(rs, "image_id")); entity.setread_rate((Integer) rs.getObject("read_rate")); entity.setwrite_rate((Integer) rs.getObject("write_rate")); + entity.setWriteOps((Integer) rs.getObject("vm_disk_write_ops")); + entity.setReadOps((Integer) rs.getObject("vm_disk_read_ops")); + entity.setReadBytes((Integer) rs.getObject("vm_disk_read_bytes")); + entity.setWrittenBytes((Integer) rs.getObject("vm_disk_written_bytes")); entity.setactual_size(rs.getLong("actual_size")); entity.setReadLatency(rs.getObject("read_latency_seconds") != null ? rs.getDouble("read_latency_seconds") : null); @@ -37,6 +41,10 @@ : null); return entity; } + } + + private static Integer returnZeroIfNull(Integer value) { + return value == null ? Integer.valueOf(0) : value; } public DiskImageDynamicDAODbFacadeImpl() { @@ -57,6 +65,10 @@ .addValue("read_rate", entity.getread_rate()) .addValue("write_rate", entity.getwrite_rate()) .addValue("actual_size", entity.getactual_size()) + .addValue("vm_disk_read_ops", returnZeroIfNull(entity.getReadOps())) + .addValue("vm_disk_write_ops", returnZeroIfNull(entity.getWriteOps())) + .addValue("vm_disk_read_bytes", returnZeroIfNull(entity.getReadBytes())) + .addValue("vm_disk_written_bytes", returnZeroIfNull(entity.getWrittenBytes())) .addValue("read_latency_seconds", entity.getReadLatency()) .addValue("write_latency_seconds", entity.getWriteLatency()) .addValue("flush_latency_seconds", entity.getFlushLatency()); @@ -80,9 +92,13 @@ .addValue("read_rate", diskImageDynamic.getread_rate()) .addValue("write_rate", diskImageDynamic.getwrite_rate()) .addValue("actual_size", diskImageDynamic.getactual_size()) + .addValue("vm_disk_read_ops", returnZeroIfNull(diskImageDynamic.getReadOps())) + .addValue("vm_disk_write_ops", returnZeroIfNull(diskImageDynamic.getWriteOps())) + .addValue("vm_disk_read_bytes", returnZeroIfNull(diskImageDynamic.getReadBytes())) + .addValue("vm_disk_written_bytes", returnZeroIfNull(diskImageDynamic.getWrittenBytes())) .addValue("read_latency_seconds", diskImageDynamic.getReadLatency()) - .addValue("write_latency_seconds", diskImageDynamic.getWriteLatency()) - .addValue("flush_latency_seconds", diskImageDynamic.getFlushLatency()); + .addValue("write_latency_seconds", diskImageDynamic.getWriteLatency()) + .addValue("flush_latency_seconds", diskImageDynamic.getFlushLatency()); return paramValue; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java index 0838862..61d2306 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Random; import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; @@ -1308,7 +1309,12 @@ diskData.setread_rate(AssignIntValue(disk, VdsProperties.vm_disk_read_rate)); diskData.setwrite_rate(AssignIntValue(disk, VdsProperties.vm_disk_write_rate)); - if (disk.containsKey(VdsProperties.disk_actual_size)) { + diskData.setReadOps(AssignIntValue(disk, VdsProperties.vm_disk_readOps)); + diskData.setWriteOps(AssignIntValue(disk, VdsProperties.vm_disk_writeOps)); + diskData.setReadBytes(AssignIntValue(disk, VdsProperties.vm_disk_readBytes)); + diskData.setWrittenBytes(AssignIntValue(disk, VdsProperties.vm_disk_writtenBytes)); + + if (disk.containsKey(VdsProperties.disk_actual_size)) { Long size = AssignLongValue(disk, VdsProperties.disk_actual_size); diskData.setactual_size(size != null ? size * 512 : 0); } else if (disk.containsKey(VdsProperties.disk_true_size)) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 4442363..ad4cc74 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -205,6 +205,16 @@ public static final String vm_disk_name = "name"; public static final String vm_disk_read_rate = "readRate"; public static final String vm_disk_write_rate = "writeRate"; + + //Write operations + public static final String vm_disk_writeOps = "writeOps"; + //Read operations + public static final String vm_disk_readOps = "readOps"; + //Bytes read + public static final String vm_disk_readBytes = "readBytes"; + //Bytes written + public static final String vm_disk_writtenBytes = "writtenBytes"; + public static final String vm_disk_read_latency = "readLatency"; public static final String vm_disk_write_latency = "writeLatency"; public static final String vm_disk_flush_latency = "flushLatency"; diff --git a/packaging/dbscripts/disk_image_dynamic_sp.sql b/packaging/dbscripts/disk_image_dynamic_sp.sql index 13e463f..d51ac35 100644 --- a/packaging/dbscripts/disk_image_dynamic_sp.sql +++ b/packaging/dbscripts/disk_image_dynamic_sp.sql @@ -9,7 +9,11 @@ Create or replace FUNCTION Insertdisk_image_dynamic(v_image_id UUID, v_read_rate INTEGER , - v_write_rate INTEGER , + v_write_rate INTEGER, + v_vm_disk_read_ops INTEGER, + v_vm_disk_write_ops INTEGER, + v_vm_disk_read_bytes INTEGER, + v_vm_disk_written_bytes INTEGER, v_actual_size BIGINT, v_read_latency_seconds numeric(18,9), v_write_latency_seconds numeric(18,9), @@ -18,8 +22,29 @@ RETURNS VOID AS $procedure$ BEGIN -INSERT INTO disk_image_dynamic(image_id, read_rate, write_rate, actual_size, read_latency_seconds, write_latency_seconds, flush_latency_seconds) - VALUES(v_image_id, v_read_rate, v_write_rate, v_actual_size, v_read_latency_seconds, v_write_latency_seconds, v_flush_latency_seconds); + INSERT INTO disk_image_dynamic( + image_id, + read_rate, + write_rate, + vm_disk_read_ops, + vm_disk_write_ops, + vm_disk_read_bytes, + vm_disk_written_bytes, + actual_size, + read_latency_seconds, + write_latency_seconds, + flush_latency_seconds) + VALUES (v_image_id, + v_read_rate, + v_write_rate, + v_vm_disk_read_ops, + v_vm_disk_write_ops, + v_vm_disk_read_bytes, + v_vm_disk_written_bytes, + v_actual_size, + v_read_latency_seconds, + v_write_latency_seconds, + v_flush_latency_seconds); END; $procedure$ LANGUAGE plpgsql; @@ -28,44 +53,123 @@ Create or replace FUNCTION Updatedisk_image_dynamic(v_image_id UUID, - v_read_rate INTEGER , - v_write_rate INTEGER , - v_actual_size BIGINT , - v_read_latency_seconds numeric(18,9) , - v_write_latency_seconds numeric(18,9) , + v_read_rate INTEGER, + v_write_rate INTEGER, + v_vm_disk_read_ops INTEGER, + v_vm_disk_write_ops INTEGER, + v_vm_disk_read_bytes INTEGER, + v_vm_disk_written_bytes INTEGER, + v_actual_size BIGINT, + v_read_latency_seconds numeric(18,9), + v_write_latency_seconds numeric(18,9), v_flush_latency_seconds numeric(18,9)) RETURNS VOID --The [disk_image_dynamic] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated AS $procedure$ BEGIN - UPDATE disk_image_dynamic - SET read_rate = v_read_rate,write_rate = v_write_rate,actual_size = v_actual_size,read_latency_seconds = v_read_latency_seconds,write_latency_seconds = v_write_latency_seconds,flush_latency_seconds = v_flush_latency_seconds, _update_date = LOCALTIMESTAMP - WHERE image_id = v_image_id; + UPDATE + disk_image_dynamic + SET + read_rate = v_read_rate, + write_rate = v_write_rate, + vm_disk_read_ops = v_vm_disk_read_ops, + vm_disk_write_ops = v_vm_disk_write_ops, + vm_disk_read_bytes = v_vm_disk_read_bytes, + vm_disk_written_bytes = v_vm_disk_written_bytes, + actual_size = v_actual_size, + read_latency_seconds = v_read_latency_seconds, + write_latency_seconds = v_write_latency_seconds, + flush_latency_seconds = v_flush_latency_seconds, + _update_date = LOCALTIMESTAMP + WHERE + image_id = v_image_id; END; $procedure$ LANGUAGE plpgsql; Create or replace FUNCTION Updatedisk_image_dynamic_by_disk_id_and_vm_id(v_image_group_id UUID, v_vm_id UUID, - v_read_rate INTEGER , - v_write_rate INTEGER , - v_actual_size BIGINT , - v_read_latency_seconds numeric(18,9) , - v_write_latency_seconds numeric(18,9) , + v_read_rate INTEGER, + v_write_rate INTEGER, + v_vm_disk_read_ops INTEGER, + v_vm_disk_write_ops INTEGER, + v_vm_disk_read_bytes INTEGER, + v_vm_disk_written_bytes INTEGER, + v_actual_size BIGINT, + v_read_latency_seconds numeric(18,9), + v_write_latency_seconds numeric(18,9), v_flush_latency_seconds numeric(18,9)) RETURNS VOID --The [disk_image_dynamic] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated AS $procedure$ BEGIN - UPDATE disk_image_dynamic - SET read_rate = v_read_rate,write_rate = v_write_rate,actual_size = v_actual_size,read_latency_seconds = v_read_latency_seconds,write_latency_seconds = v_write_latency_seconds,flush_latency_seconds = v_flush_latency_seconds, _update_date = LOCALTIMESTAMP - WHERE image_id in (SELECT distinct image_guid - FROM images - WHERE image_group_id = v_image_group_id and active = true) - AND EXISTS (SELECT 1 FROM vm_device vmd - WHERE vmd.vm_id = v_vm_id AND vmd.device_id = v_image_group_id AND vmd.snapshot_id is NULL); + UPDATE + disk_image_dynamic + SET + read_rate = v_read_rate, + write_rate = v_write_rate, + vm_disk_read_ops = v_vm_disk_read_ops, + vm_disk_write_ops = v_vm_disk_write_ops, + vm_disk_read_bytes = v_vm_disk_read_bytes, + vm_disk_written_bytes = v_vm_disk_written_bytes, + actual_size = v_actual_size, + read_latency_seconds = v_read_latency_seconds, + write_latency_seconds = v_write_latency_seconds, + flush_latency_seconds = v_flush_latency_seconds, + _update_date = LOCALTIMESTAMP + WHERE + image_id in + (SELECT distinct image_guid + FROM + images + WHERE + image_group_id = v_image_group_id and + active = true + ) AND + EXISTS(SELECT 1 + FROM + vm_device vmd + WHERE + vmd.vm_id = v_vm_id AND + vmd.device_id = v_image_group_id AND + vmd.snapshot_id is NULL + ); +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Getdisk_image_dynamic_by_disk_id_and_vm_id(v_image_group_id UUID, v_vm_id UUID) +RETURNS VOID + + --The [disk_image_dynamic] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated + AS $procedure$ +BEGIN + SELECT + did.image_id, + did.read_rate, + did.write_rate, + did.vm_disk_read_ops, + did.vm_disk_write_ops, + did.vm_disk_read_bytes, + did.vm_disk_written_bytes, + did.actual_size, + did.read_latency_seconds, + did.write_latency_seconds, + did.flush_latency_seconds, + did._update_date + FROM + disk_image_dynamic did + join images im on did.image_id = im.image_guid, + vm_device vmd + WHERE + im.image_group_id = v_image_group_id and + im.active = true and + + vmd.vm_id = v_vm_id AND + vmd.device_id = v_image_group_id AND + vmd.snapshot_id is NULL; END; $procedure$ LANGUAGE plpgsql; @@ -123,4 +227,4 @@ $$ LANGUAGE plpgsql; CREATE TRIGGER delete_disk_image_dynamic_for_image BEFORE DELETE ON IMAGES FOR EACH ROW -EXECUTE PROCEDURE fn_image_deleted(); \ No newline at end of file +EXECUTE PROCEDURE fn_image_deleted(); diff --git a/packaging/dbscripts/upgrade/03_06_0950_add_read_write_ioops_per_disc.sql b/packaging/dbscripts/upgrade/03_06_0950_add_read_write_ioops_per_disc.sql new file mode 100644 index 0000000..f50ea3a --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0950_add_read_write_ioops_per_disc.sql @@ -0,0 +1,4 @@ +SELECT fn_db_add_column('disk_image_dynamic', 'vm_disk_read_ops', ' INTEGER NOT NULL DEFAULT 0'); +SELECT fn_db_add_column('disk_image_dynamic', 'vm_disk_write_ops', ' INTEGER NOT NULL DEFAULT 0'); +SELECT fn_db_add_column('disk_image_dynamic', 'vm_disk_read_bytes', ' INTEGER NOT NULL DEFAULT 0'); +SELECT fn_db_add_column('disk_image_dynamic', 'vm_disk_written_bytes', ' INTEGER NOT NULL DEFAULT 0'); -- To view, visit https://gerrit.ovirt.org/38759 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ica0f0b45c4ee9d35b75bd38c39387e4fd517a48e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Mucha <mmu...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches