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
