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

Reply via email to