Sahina Bose has uploaded a new change for review.

Change subject: dal: geo-rep status change to keep track of change
......................................................................

dal: geo-rep status change to keep track of change

Added a status changed at property to keep track of
when the status was last changed

Change-Id: I2037c60c56423cee339f66710f02bf887e0469d6
Bug-Url: https://bugzilla.redhat.com/1138116
Signed-off-by: Sahina Bose <[email protected]>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSession.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSessionDetails.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoTest.java
M packaging/dbscripts/gluster_georep_sp.sql
A packaging/dbscripts/upgrade/03_06_0380_add_status_change_to_gluster_georep.sql
6 files changed, 73 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/33075/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSession.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSession.java
index acdb6d4..c6abfe1 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSession.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSession.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.common.businessentities.gluster;
 
 import java.util.ArrayList;
+import java.util.Date;
 
 import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus;
 import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
@@ -20,6 +21,7 @@
     private Guid sessionId;
     private Guid slaveVolumeId;
     private GeoRepSessionStatus status;
+    private Date lastStatusChange;
     private ArrayList<GlusterGeoRepSessionDetails> sessionDetails;
 
     public Guid getMasterVolumeId() {
@@ -98,6 +100,14 @@
         this.sessionId = id;
     }
 
+    public Date getLastStatusChange() {
+        return lastStatusChange;
+    }
+
+    public void setLastStatusChange(Date lastStatusChange) {
+        this.lastStatusChange = lastStatusChange;
+    }
+
     public ArrayList<GlusterGeoRepSessionDetails> getSessionDetails() {
         return sessionDetails;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSessionDetails.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSessionDetails.java
index d714388..2d2c29d 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSessionDetails.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepSessionDetails.java
@@ -23,6 +23,7 @@
     private Long deletesPending;
     private Long filesSkipped;
     private Date updatedAt;
+    private Date lastStatusChange;
 
     public Long getFilesSynced() {
         return filesSynced;
@@ -128,6 +129,14 @@
         this.sessionId = id;
     }
 
+    public Date getLastStatusChange() {
+        return lastStatusChange;
+    }
+
+    public void setLastStatusChange(Date lastStatusChange) {
+        this.lastStatusChange = lastStatusChange;
+    }
+
     @Override
     public boolean equals(Object obj) {
         return (obj != null) &&
@@ -143,8 +152,7 @@
                 ObjectUtils.objectsEqual(getFilesPending(), 
((GlusterGeoRepSessionDetails) obj).getFilesPending()) &&
                 ObjectUtils.objectsEqual(getFilesSkipped(), 
((GlusterGeoRepSessionDetails) obj).getFilesSkipped()) &&
                 ObjectUtils.objectsEqual(getBytesPending(), 
((GlusterGeoRepSessionDetails) obj).getBytesPending()) &&
-                ObjectUtils.objectsEqual(getDeletesPending(), 
((GlusterGeoRepSessionDetails) obj).getDeletesPending()) &&
-                ObjectUtils.objectsEqual(getUpdatedAt(), 
((GlusterGeoRepSessionDetails) obj).getUpdatedAt());
+                ObjectUtils.objectsEqual(getDeletesPending(), 
((GlusterGeoRepSessionDetails) obj).getDeletesPending());
     }
 
     @Override
@@ -163,7 +171,6 @@
         result = prime * result + ((filesSkipped == null) ? 0 : 
filesSkipped.hashCode());
         result = prime * result + ((bytesPending == null) ? 0 : 
bytesPending.hashCode());
         result = prime * result + ((deletesPending == null) ? 0 : 
deletesPending.hashCode());
-        result = prime * result + ((updatedAt == null) ? 0 : 
updatedAt.hashCode());
         return result;
     }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoDbFacadeImpl.java
index 0054cbc..9ebf9cc 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoDbFacadeImpl.java
@@ -12,6 +12,7 @@
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSessionDetails;
 import org.ovirt.engine.core.common.utils.EnumUtils;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils;
 import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper;
 import org.ovirt.engine.core.dao.MassOperationsGenericDaoDbFacade;
 import org.springframework.jdbc.core.RowMapper;
@@ -45,6 +46,7 @@
             entity.setSlaveVolumeId(getGuid(rs, "slave_volume_id"));
             entity.setSlaveVolumeName(rs.getString("slave_volume_name"));
             entity.setStatus(GeoRepSessionStatus.from(rs.getString("status")));
+            
entity.setLastStatusChange(DbFacadeUtils.fromDate(rs.getTimestamp("status_change_date")));
             return entity;
         }
     }
@@ -78,6 +80,8 @@
             entity.setBytesPending(rs.getLong("bytes_pending"));
             entity.setDeletesPending(rs.getLong("deletes_pending"));
             entity.setFilesSkipped(rs.getLong("files_skipped"));
+            
entity.setLastStatusChange(DbFacadeUtils.fromDate(rs.getTimestamp("status_change_date")));
+            
entity.setUpdatedAt(DbFacadeUtils.fromDate(rs.getTimestamp("_update_date")));
             return entity;
         }
     }
@@ -164,7 +168,9 @@
                 .addValue("files_pending", 
geoRepSessionDetails.getFilesPending())
                 .addValue("bytes_pending", 
geoRepSessionDetails.getBytesPending())
                 .addValue("deletes_pending", 
geoRepSessionDetails.getDeletesPending())
-                .addValue("files_skipped", 
geoRepSessionDetails.getFilesSkipped());
+                .addValue("files_skipped", 
geoRepSessionDetails.getFilesSkipped())
+                .addValue("status_change_date", 
geoRepSessionDetails.getLastStatusChange())
+                .addValue("update_date", geoRepSessionDetails.getUpdatedAt());
     }
 
 
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoTest.java
index b93c72e..d1d3d44 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterGeoRepDaoTest.java
@@ -1,11 +1,15 @@
 package org.ovirt.engine.core.dao.gluster;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
+import org.apache.commons.lang.time.DateUtils;
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.gluster.GeoRepCrawlStatus;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GeoRepSessionStatus;
@@ -49,6 +53,8 @@
         sessionDetails.setBytesPending(129832972545904L);
         sessionDetails.setFilesSynced(2343958349L);
         sessionDetails.setFilesSkipped(0L);
+        sessionDetails.setLastStatusChange(DateUtils.addMinutes(new Date(), 
-5));
+        sessionDetails.setUpdatedAt(new Date());
         return sessionDetails;
     }
 
@@ -123,7 +129,19 @@
         List<GlusterGeoRepSessionDetails> fetchedSessionDetails = 
dao.getGeoRepSessionDetails(FixturesTool.GLUSTER_GEOREP_SESSION_ID);
         assertEquals(updatedBytesPending, 
fetchedSessionDetails.get(0).getBytesPending());
         assertEquals(updatedFilesPending, 
fetchedSessionDetails.get(0).getFilesPending());
+        
System.out.println(getGlusterGeoRepSessionDetails().getLastStatusChange());
+        System.out.println(fetchedSessionDetails.get(0).getLastStatusChange());
+        assertEquals(0, 
DateUtils.truncatedCompareTo(getGlusterGeoRepSessionDetails().getLastStatusChange(),
+                fetchedSessionDetails.get(0).getLastStatusChange(), 
Calendar.MILLISECOND));
         assertEquals("NEW", 
fetchedSessionDetails.get(0).getCheckPointStatus());
+
+        sessionDetails.setStatus(GeoRepSessionStatus.FAULTY);
+        dao.updateDetails(sessionDetails);
+        GlusterGeoRepSessionDetails fetchedSessionDetail = 
dao.getGeoRepSessionDetails(FixturesTool.GLUSTER_GEOREP_SESSION_ID,
+                sessionDetails.getMasterBrickId());
+        
System.out.println(getGlusterGeoRepSessionDetails().getLastStatusChange());
+        System.out.println( fetchedSessionDetail.getLastStatusChange());
+        
assertNotEquals(getGlusterGeoRepSessionDetails().getLastStatusChange(), 
fetchedSessionDetail.getLastStatusChange());
     }
 
     @Test
diff --git a/packaging/dbscripts/gluster_georep_sp.sql 
b/packaging/dbscripts/gluster_georep_sp.sql
index 281b60c..257ab1c 100644
--- a/packaging/dbscripts/gluster_georep_sp.sql
+++ b/packaging/dbscripts/gluster_georep_sp.sql
@@ -46,16 +46,18 @@
                                                             v_files_pending 
BIGINT,
                                                             v_bytes_pending 
BIGINT,
                                                             v_deletes_pending 
BIGINT,
-                                                            v_files_skipped 
BIGINT)
+                                                            v_files_skipped 
BIGINT,
+                                                            
v_status_change_date TIMESTAMP,
+                                                            v_update_date 
TIMESTAMP)
 RETURNS VOID
 AS $procedure$
 BEGIN
     INSERT INTO gluster_georep_session_details(session_id, master_brick_id, 
slave_host_name,
     slave_host_uuid, status, checkpoint_status, crawl_status, files_synced, 
files_pending,
-    bytes_pending, deletes_pending, files_skipped)
+    bytes_pending, deletes_pending, files_skipped, status_change_date, 
_update_date)
     VALUES (v_session_id, v_master_brick_id, v_slave_host_name,
     v_slave_host_uuid, v_status, v_checkpoint_status, v_crawl_status, 
v_files_synced, v_files_pending,
-    v_bytes_pending, v_deletes_pending, v_files_skipped);
+    v_bytes_pending, v_deletes_pending, v_files_skipped, v_status_change_date, 
v_update_date);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -73,7 +75,16 @@
                                                             v_files_skipped 
BIGINT)
 RETURNS VOID
 AS $procedure$
+DECLARE
+       v_last_status VARCHAR(20);
+       v_last_status_change_date TIMESTAMP;
 BEGIN
+       SELECT status, status_change_date INTO v_last_status, 
v_last_status_change_date from gluster_georep_session_details
+       WHERE session_id = v_session_id AND master_brick_id = v_master_brick_id;
+       
+       /*IF v_last_status is distinct from v_status THEN
+               v_last_status_change_date = LOCALTIMESTAMP;
+       END IF;*/
     UPDATE gluster_georep_session_details
     SET slave_host_name = v_slave_host_name,
     slave_host_uuid = v_slave_host_uuid,
@@ -84,7 +95,9 @@
     files_pending = v_files_pending,
     bytes_pending = v_bytes_pending,
     deletes_pending = v_deletes_pending,
-    files_skipped = v_files_skipped
+    files_skipped = v_files_skipped,
+    status_change_date = v_last_status_change_date,
+    _update_date = LOCALTIMESTAMP
     WHERE session_id = v_session_id AND master_brick_id = v_master_brick_id;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -96,7 +109,8 @@
 AS $procedure$
 BEGIN
     UPDATE gluster_georep_config
-    SET config_value = v_config_value
+    SET config_value = v_config_value,
+    _update_date = LOCALTIMESTAMP
     WHERE session_id = v_session_id AND config_key = v_config_key;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -107,7 +121,7 @@
 AS $procedure$
 BEGIN
     RETURN QUERY SELECT session_id, master_volume_id, session_key, 
slave_host_uuid,
-    slave_host_name, slave_volume_id, slave_volume_name, status,
+    slave_host_name, slave_volume_id, slave_volume_name, status, 
status_change_date,
     _create_date, _update_date
     FROM  gluster_georep_session
     WHERE session_id = v_session_id;
@@ -120,7 +134,7 @@
 AS $procedure$
 BEGIN
     RETURN QUERY SELECT session_id, master_volume_id, session_key, 
slave_host_uuid,
-    slave_host_name, slave_volume_id, slave_volume_name, status,
+    slave_host_name, slave_volume_id, slave_volume_name, status, 
status_change_date,
     _create_date, _update_date
     FROM  gluster_georep_session
     WHERE master_volume_id = v_master_volume_id order by slave_volume_name asc;
@@ -132,7 +146,7 @@
 AS $procedure$
 BEGIN
     RETURN QUERY SELECT session_id, master_volume_id, session_key, 
slave_host_uuid,
-    slave_host_name, slave_volume_id, slave_volume_name, status,
+    slave_host_name, slave_volume_id, slave_volume_name, status, 
status_change_date,
     _create_date, _update_date
     FROM  gluster_georep_session
     WHERE session_key = v_session_key;
@@ -145,7 +159,8 @@
 AS $procedure$
 BEGIN
     UPDATE gluster_georep_session
-    SET status = v_status
+    SET status = v_status,
+    _update_date = LOCALTIMESTAMP
     WHERE session_id = v_session_id;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -156,7 +171,7 @@
 BEGIN
     RETURN QUERY SELECT session_id, master_brick_id, slave_host_uuid,
     slave_host_name, status, checkpoint_status, crawl_status, files_synced, 
files_pending,
-    bytes_pending, deletes_pending, files_skipped, _update_date
+    bytes_pending, deletes_pending, files_skipped, status_change_date, 
_update_date
     FROM  gluster_georep_session_details
     WHERE session_id = v_session_id order by slave_host_name asc;
 END; $procedure$
@@ -169,7 +184,7 @@
 BEGIN
     RETURN QUERY SELECT session_id, master_brick_id, slave_host_uuid,
     slave_host_name, status, checkpoint_status, crawl_status, files_synced, 
files_pending,
-    bytes_pending, deletes_pending, files_skipped, _update_date
+    bytes_pending, deletes_pending, files_skipped, status_change_date, 
_update_date
     FROM  gluster_georep_session_details
     WHERE session_id = v_session_id AND master_brick_id = v_master_brick_id;
 END; $procedure$
diff --git 
a/packaging/dbscripts/upgrade/03_06_0380_add_status_change_to_gluster_georep.sql
 
b/packaging/dbscripts/upgrade/03_06_0380_add_status_change_to_gluster_georep.sql
new file mode 100644
index 0000000..da610f6
--- /dev/null
+++ 
b/packaging/dbscripts/upgrade/03_06_0380_add_status_change_to_gluster_georep.sql
@@ -0,0 +1,2 @@
+ALTER TABLE gluster_georep_session ADD COLUMN status_change_date TIMESTAMP 
WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP;
+ALTER TABLE gluster_georep_session_details ADD COLUMN status_change_date 
TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP;


-- 
To view, visit http://gerrit.ovirt.org/33075
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2037c60c56423cee339f66710f02bf887e0469d6
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to