Shubhendu Tripathi has uploaded a new change for review. Change subject: gluster: DAO for volume snapshot scheduling ......................................................................
gluster: DAO for volume snapshot scheduling Introduced DAO for gluster volume snapshot scheduling Change-Id: Ie44116df49acc302bfc1b745c00535c1fb0174ad Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com> --- 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/gluster/GlusterVolumeSnapshotScheduleDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoDBFacadeImpl.java M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/gluster_volume_snapshot_sp.sql 7 files changed, 273 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/36486/1 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 bafed5e..cb249fa 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 @@ -133,6 +133,7 @@ import org.ovirt.engine.core.dao.gluster.GlusterServerServiceDao; import org.ovirt.engine.core.dao.gluster.GlusterServiceDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; +import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotScheduleDao; import org.ovirt.engine.core.dao.network.HostNetworkQosDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotConfigDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotDao; @@ -902,6 +903,15 @@ } /** + * Returns the singleton instance of {@link GlusterVolumeSnapshotScheduleDao} + * + * @return the dao + */ + public GlusterVolumeSnapshotScheduleDao getGlusterVolumeSnapshotScheduleDao() { + return getDao(GlusterVolumeSnapshotScheduleDao.class); + } + + /** * Returns the singleton instance of {@link GlusterVolumeDao}. * * @return the dao diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDao.java new file mode 100644 index 0000000..f4c1e56 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDao.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.dao.gluster; + +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotSchedule; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.DAO; +import org.ovirt.engine.core.dao.SearchDAO; + +public interface GlusterVolumeSnapshotScheduleDao extends DAO, SearchDAO<GlusterVolumeSnapshotSchedule> { + public void save(GlusterVolumeSnapshotSchedule schedule); + + public GlusterVolumeSnapshotSchedule getByVolumeId(Guid volumeId); + + public void removeByVolumeId(Guid volumeId); + + @Override + public List<GlusterVolumeSnapshotSchedule> getAllWithQuery(String query); + + public void updateScheduleByVolumeId(Guid volumeId, GlusterVolumeSnapshotSchedule schedule); +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoDBFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoDBFacadeImpl.java new file mode 100644 index 0000000..a037013 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoDBFacadeImpl.java @@ -0,0 +1,81 @@ +package org.ovirt.engine.core.dao.gluster; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Date; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotSchedule; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotScheduleRecurrence; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.BaseDAODbFacade; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +public class GlusterVolumeSnapshotScheduleDaoDBFacadeImpl extends BaseDAODbFacade implements GlusterVolumeSnapshotScheduleDao { + + private static final RowMapper<GlusterVolumeSnapshotSchedule> snapshotScheduleRowMapper = + new GlusterVolumeSnapshotScheduleRowMapper(); + + @Override + public void save(GlusterVolumeSnapshotSchedule schedule) { + getCallsHandler().executeModification("InsertGlusterVolumeSnapshotSchedule", + createFullParameterMapper(schedule)); + } + + @Override + public GlusterVolumeSnapshotSchedule getByVolumeId(Guid volumeId) { + GlusterVolumeSnapshotSchedule schedule = + getCallsHandler().executeRead("GetGlusterVolumeSnapshotScheduleByVolumeId", snapshotScheduleRowMapper, + getCustomMapSqlParameterSource().addValue("volume_id", volumeId)); + + return schedule; + } + + @Override + public void removeByVolumeId(Guid volumeId) { + getCallsHandler().executeModification("DeleteGlusterVolumeSnapshotScheduleByVolumeId", + getCustomMapSqlParameterSource().addValue("volume_id", volumeId)); + } + + @Override + public List<GlusterVolumeSnapshotSchedule> getAllWithQuery(String query) { + List<GlusterVolumeSnapshotSchedule> schedules = jdbcTemplate.query(query, snapshotScheduleRowMapper); + return schedules; + } + + @Override + public void updateScheduleByVolumeId(Guid volumeId, GlusterVolumeSnapshotSchedule schedule) { + getCallsHandler().executeModification("UpdateGlusterVolumeSnapshotScheduleByVolumeId", + createFullParameterMapper(schedule)); + } + + private static final class GlusterVolumeSnapshotScheduleRowMapper implements RowMapper<GlusterVolumeSnapshotSchedule> { + @Override + public GlusterVolumeSnapshotSchedule mapRow(ResultSet rs, int rowNum) throws SQLException { + GlusterVolumeSnapshotSchedule schedule = new GlusterVolumeSnapshotSchedule(); + + schedule.setClusterId(getGuidDefaultEmpty(rs, "cluster_id")); + schedule.setVolumeId(getGuidDefaultEmpty(rs, "volume_id")); + schedule.setRecurrence(GlusterVolumeSnapshotScheduleRecurrence.from(rs.getString("recurrence"))); + schedule.setInterval(rs.getInt("interval")); + schedule.setStartDate(rs.getTimestamp("start_date") == null ? null : new Date(rs.getTimestamp("start_date") + .getTime())); + schedule.setExecutionTime(rs.getTime("execution_time")); + schedule.setDays(rs.getString("days")); + schedule.setEndByDate(rs.getTimestamp("end_by")); + + return schedule; + } + } + + protected MapSqlParameterSource createFullParameterMapper(GlusterVolumeSnapshotSchedule schedule) { + return getCustomMapSqlParameterSource().addValue("volume_id", schedule.getVolumeId()) + .addValue("recurrence", schedule.getRecurrence().toString()) + .addValue("interval", schedule.getInterval()) + .addValue("start_date", schedule.getStartDate()) + .addValue("execution_time", schedule.getExecutionTime()) + .addValue("days", schedule.getDays()) + .addValue("end_by", schedule.getEndByDate()); + } +} diff --git a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties index 704c0ea..71a6e1e 100644 --- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties +++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties @@ -60,6 +60,7 @@ GlusterBrickDao=org.ovirt.engine.core.dao.gluster.GlusterBrickDaoDbFacadeImpl GlusterVolumeSnapshotDao=org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotDaoDbFacadeImpl GlusterVolumeSnapshotConfigDao=org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotConfigDaoDbFacadeImpl +GlusterVolumeSnapshotScheduleDao=org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotScheduleDaoDBFacadeImpl GlusterOptionDao=org.ovirt.engine.core.dao.gluster.GlusterOptionDaoDbFacadeImpl ImageStorageDomainMapDao=org.ovirt.engine.core.dao.ImageStorageDomainMapDaoDbFacadeImpl VmAndTemplatesGenerationsDAO=org.ovirt.engine.core.dao.VmAndTemplatesGenerationsDbFacadeImpl diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoTest.java new file mode 100644 index 0000000..127ca4e --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeSnapshotScheduleDaoTest.java @@ -0,0 +1,83 @@ +package org.ovirt.engine.core.dao.gluster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.sql.Time; +import java.util.Date; + +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotSchedule; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotScheduleRecurrence; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.BaseDAOTestCase; + +public class GlusterVolumeSnapshotScheduleDaoTest extends BaseDAOTestCase { + + private static final Guid CLUSTER_ID = new Guid("ae956031-6be2-43d6-bb8f-5191c9253314"); + private static final Guid VOLUME_ID_1 = new Guid("0c3f45f6-3fe9-4b35-a30c-be0d1a835ea8"); + private static final Guid VOLUME_ID_2 = new Guid("b2cb2f73-fab3-4a42-93f0-d5e4c069a43e"); + + private GlusterVolumeSnapshotScheduleDao dao; + private GlusterVolumeSnapshotSchedule existingSchedule; + private GlusterVolumeSnapshotSchedule newSchedule; + + @Override + public void setUp() throws Exception { + super.setUp(); + dao = dbFacade.getGlusterVolumeSnapshotScheduleDao(); + existingSchedule = dao.getByVolumeId(VOLUME_ID_1); + } + + @Test + public void testSaveAndGetByVolumeId() { + GlusterVolumeSnapshotSchedule schedule = dao.getByVolumeId(VOLUME_ID_2); + assertNull(schedule); + + newSchedule = insertSnapshotSchedule(); + schedule = dao.getByVolumeId(VOLUME_ID_2); + assertNotNull(schedule); + assertEquals(schedule, newSchedule); + } + + private GlusterVolumeSnapshotSchedule insertSnapshotSchedule() { + GlusterVolumeSnapshotSchedule schedule = new GlusterVolumeSnapshotSchedule(); + schedule.setClusterId(CLUSTER_ID); + schedule.setVolumeId(VOLUME_ID_2); + schedule.setInterval(0); + schedule.setRecurrence(GlusterVolumeSnapshotScheduleRecurrence.DAILY); + schedule.setExecutionTime(new Time(10, 30, 0)); + schedule.setEndByDate(null); + dao.save(schedule); + return schedule; + } + + @Test + public void testGetByVolumeId() { + GlusterVolumeSnapshotSchedule schedule = dao.getByVolumeId(VOLUME_ID_1); + assertNotNull(schedule); + assertEquals(schedule, existingSchedule); + } + + @Test + public void testRemoveByVolumeId() { + dao.removeByVolumeId(VOLUME_ID_1); + GlusterVolumeSnapshotSchedule schedule = dao.getByVolumeId(VOLUME_ID_1); + assertNull(schedule); + } + + @Test + public void testUpdateShceduleByVolumeId() { + GlusterVolumeSnapshotSchedule schedule = dao.getByVolumeId(VOLUME_ID_1); + schedule.setRecurrence(GlusterVolumeSnapshotScheduleRecurrence.HOURLY); + schedule.setStartDate(new Date()); + schedule.setInterval(0); + + dao.updateScheduleByVolumeId(VOLUME_ID_1, schedule); + + GlusterVolumeSnapshotSchedule fetchedSchedule = dao.getByVolumeId(VOLUME_ID_1); + assertNotNull(fetchedSchedule); + assertEquals(fetchedSchedule, schedule); + } +} diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index dbe871b..6c3ac96 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -6859,6 +6859,25 @@ </row> </table> + <table name="gluster_volume_snapshot_schedules"> + <column>volume_id</column> + <column>recurrence</column> + <column>interval</column> + <column>start_date</column> + <column>execution_time</column> + <column>days</column> + <column>end_by</column> + <row> + <value>0c3f45f6-3fe9-4b35-a30c-be0d1a835ea8</value> + <value>INTERVAL</value> + <value>10</value> + <null/> + <null/> + <null/> + <null/> + </row> + </table> + <table name="gluster_volume_bricks"> <column>id</column> <column>volume_id</column> diff --git a/packaging/dbscripts/gluster_volume_snapshot_sp.sql b/packaging/dbscripts/gluster_volume_snapshot_sp.sql index 9d1168c..92bd635 100644 --- a/packaging/dbscripts/gluster_volume_snapshot_sp.sql +++ b/packaging/dbscripts/gluster_volume_snapshot_sp.sql @@ -249,3 +249,61 @@ AND param_name = v_param_name; END; $procedure$ LANGUAGE plpgsql; + +Create or replace FUNCTION InsertGlusterVolumeSnapshotSchedule(v_volume_id UUID, + v_recurrence VARCHAR(128), + v_interval INTEGER, + v_start_date TIMESTAMP WITH TIME ZONE, + v_execution_time TIME, + v_days VARCHAR(256), + v_end_by TIMESTAMP WITH TIME ZONE) + RETURNS VOID + AS $procedure$ +BEGIN + INSERT INTO gluster_volume_snapshot_schedules (volume_id, recurrence, interval, + start_date, execution_time, days, end_by) + VALUES (v_volume_id, v_recurrence, v_interval, + v_start_date, v_execution_time, v_days, v_end_by); +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION GetGlusterVolumeSnapshotScheduleByVolumeId(v_volume_id UUID) + RETURNS SETOF gluster_volume_snapshot_schedules_view STABLE + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM gluster_volume_snapshot_schedules_view + WHERE volume_id = v_volume_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION DeleteGlusterVolumeSnapshotScheduleByVolumeId(v_volume_id UUID) + RETURNS VOID + AS $procedure$ +BEGIN + DELETE FROM gluster_volume_snapshot_schedules + WHERE volume_id = v_volume_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION UpdateGlusterVolumeSnapshotScheduleByVolumeId(v_volume_id UUID, + v_recurrence VARCHAR(128), + v_interval INTEGER, + v_start_date TIMESTAMP WITH TIME ZONE, + v_execution_time TIME, + v_days VARCHAR(256), + v_end_by TIMESTAMP WITH TIME ZONE) + RETURNS VOID + AS $procedure$ +BEGIN + UPDATE gluster_volume_snapshot_schedules + SET recurrence = v_recurrence, + interval = v_interval, + start_date = v_start_date, + execution_time = v_execution_time, + days = v_days, + end_by = v_end_by, + _update_date = LOCALTIMESTAMP + WHERE volume_id = v_volume_id; +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/36486 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie44116df49acc302bfc1b745c00535c1fb0174ad Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches