Eli Mesika has uploaded a new change for review. Change subject: core: using JPA for engine backup awareness ......................................................................
core: using JPA for engine backup awareness Change-Id: Ia0aa9c4d0c8c0a5f7b40a022d7670f30c5fd5b77 Signed-off-by: emesika <emes...@redhat.com> --- M backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java M packaging/dbscripts/engine_backup_log_sp.sql 7 files changed, 139 insertions(+), 69 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/40091/1 diff --git a/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml b/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml index c172996..ade0ab2 100644 --- a/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml +++ b/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml @@ -6,10 +6,11 @@ <provider>org.hibernate.ejb.HibernatePersistence</provider> <non-jta-data-source>java:/ENGINEDataSource</non-jta-data-source> <class>org.ovirt.engine.core.common.businessentities.Bookmark</class> + <class>org.ovirt.engine.core.common.businessentities.EngineBackupLog</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> <property name="jboss.entity.manager.jndi.name" value="java:/ovirtEM"/> <property name="jboss.entity.manager.factory.jndi.name" value="java:/ovirtEMF"/> </properties> </persistence-unit> -</persistence> \ No newline at end of file +</persistence> diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java index 9990dbe..c60befc 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java @@ -3,15 +3,37 @@ import org.ovirt.engine.core.common.utils.ToStringBuilder; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; import java.io.Serializable; import java.util.Date; import java.util.Objects; -public class EngineBackupLog extends IVdcQueryable implements Serializable { +@Entity +@Table(name = "engine_backup_log") +@IdClass(EngineBackupLogId.class) +@NamedQueries({ + @NamedQuery(name = "EngineBackupLog.getLatest", query = "select e from EngineBackupLog e where e.dbName = :dbName and passed = true order by doneAt DESC") +}) +public class EngineBackupLog extends IVdcQueryable implements Serializable, BusinessEntity<EngineBackupLogId> { + @Id + @Column(name="db_name") private String dbName; + + @Id + @Column(name="done_at") private Date doneAt; + + @Column(name="is_passed") private boolean passed; + + @Column(name="output_message") private String outputMessage; public String getDbName() { @@ -84,4 +106,16 @@ .append("outputMessage", outputMessage) .build(); } + + @Override public EngineBackupLogId getId() { + EngineBackupLogId key = new EngineBackupLogId(); + key.setDbName(dbName); + key.setDoneAt(doneAt); + return key; + } + + @Override public void setId(EngineBackupLogId id) { + dbName = id.getDbName(); + doneAt = id.getDoneAt(); + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java new file mode 100644 index 0000000..5f1b2e1 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java @@ -0,0 +1,49 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.io.Serializable; +import java.util.Date; + +public class EngineBackupLogId implements Serializable { + private static final long serialVersionUID = 1740373688528083410L; + private String dbName; + private Date doneAt; + + public String getDbName() { + return dbName; + } + + public void setDbName(String dbName) { + this.dbName = dbName; + } + + public Date getDoneAt() { + return doneAt; + } + + public void setDoneAt(Date doneAt) { + this.doneAt = doneAt; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + dbName.hashCode(); + result = prime * result + doneAt.hashCode(); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + EngineBackupLog other = (EngineBackupLog)obj; + return (dbName.equals(other.getDbName()) && doneAt.equals(other.getDoneAt())); + } + + +} + + diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java index 8a10670..4938c1c 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java @@ -1,13 +1,12 @@ package org.ovirt.engine.core.dao; import org.ovirt.engine.core.common.businessentities.EngineBackupLog; +import org.ovirt.engine.core.common.businessentities.EngineBackupLogId; -public interface EngineBackupLogDao extends DAO { +public interface EngineBackupLogDao extends GenericDao<EngineBackupLog, EngineBackupLogId> { /** * Gets the last successful engine backup record */ EngineBackupLog getLastSuccessfulEngineBackup(String dbName); - - void save(EngineBackupLog engineBackupLog); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java index c50f2b8..72c5531 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java @@ -1,49 +1,28 @@ package org.ovirt.engine.core.dao; import org.ovirt.engine.core.common.businessentities.EngineBackupLog; -import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.ovirt.engine.core.common.businessentities.EngineBackupLogId; +import org.ovirt.engine.core.dao.jpa.AbstractJpaDao; import javax.inject.Named; import javax.inject.Singleton; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.util.List; @Named @Singleton -public class EngineBackupLogDaoDbFacadeImpl extends BaseDAODbFacade implements EngineBackupLogDao { +public class EngineBackupLogDaoDbFacadeImpl extends AbstractJpaDao<EngineBackupLog, EngineBackupLogId> implements EngineBackupLogDao { - private static class EngineBackupLogRowMapper implements RowMapper<EngineBackupLog> { - public static final EngineBackupLogRowMapper INSTANCE = new EngineBackupLogRowMapper(); - - @Override - public EngineBackupLog mapRow(ResultSet rs, int rowNum) throws SQLException { - EngineBackupLog entity = new EngineBackupLog(); - entity.setDbName(rs.getString("db_name")); - entity.setDoneAt(DbFacadeUtils.fromDate(rs.getTimestamp("done_at"))); - entity.setPassed(rs.getBoolean("is_passed")); - entity.setOutputMessage(rs.getString("output_message")); - return entity; - } + protected EngineBackupLogDaoDbFacadeImpl() { + super(EngineBackupLog.class); } @Override public EngineBackupLog getLastSuccessfulEngineBackup(String dbName) { - return getCallsHandler().executeRead("GetLastSuccessfulEngineBackup", EngineBackupLogRowMapper.INSTANCE, - getCustomMapSqlParameterSource().addValue("db_name", dbName)); - } - - - @Override - public void save(EngineBackupLog engineBackupLog) { - - MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() - .addValue("db_name", engineBackupLog.getDbName()) - .addValue("done_at", engineBackupLog.getDoneAt()) - .addValue("status", engineBackupLog.isPassed() ? 1 : -1) - .addValue("output_message", engineBackupLog.getOutputMessage()); - - getCallsHandler().executeModification("LogEngineBackupEvent", parameterSource); + List<EngineBackupLog> logs = multipleResults(entityManager.createNamedQuery("EngineBackupLog.getLatest", EngineBackupLog.class).setParameter("dbName", dbName)); + if (logs != null && logs.size() > 0) { + return logs.get(0); + } else { + return null; + } } } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java index f0756db..c2451cd 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java @@ -3,8 +3,10 @@ import org.junit.Before; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.EngineBackupLog; +import org.ovirt.engine.core.common.businessentities.EngineBackupLogId; import java.util.Calendar; +import java.util.Date; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; @@ -12,10 +14,11 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -public class EngineBackupLogDaoTest extends BaseDAOTestCase { +public class EngineBackupLogDaoTest extends BaseHibernateDaoTestCase<EngineBackupLogDao, EngineBackupLog, EngineBackupLogId> { private EngineBackupLogDao dao; private EngineBackupLog existingEngineBackupLog; + private EngineBackupLog newEntity; private final static String DB_NAME = "engine"; private final static String NON_EXISTING_DB_NAME = "invalid"; @@ -23,8 +26,13 @@ @Before public void setUp() throws Exception { super.setUp(); - dao = dbFacade.getEngineBackupLogDao(); + existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME); + newEntity = new EngineBackupLog(); + newEntity.setDbName("asd"); + newEntity.setOutputMessage("asd"); + newEntity.setDoneAt(new Date()); + newEntity.setPassed(true); } @Test @@ -41,7 +49,6 @@ @Test public void testAddingNewUnsuccessfulBackupEvent() { - existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME); EngineBackupLog engineBackupLog = new EngineBackupLog(); engineBackupLog.setDbName(DB_NAME); engineBackupLog.setDoneAt(Calendar.getInstance().getTime()); @@ -55,7 +62,6 @@ @Test public void testAddingNewSuccessfulBackupEvent() { - existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME); EngineBackupLog engineBackupLog = new EngineBackupLog(); engineBackupLog.setDbName(DB_NAME); engineBackupLog.setDoneAt(Calendar.getInstance().getTime()); @@ -68,4 +74,29 @@ assertTrue(entry.isPassed()); } + @Override protected EngineBackupLogDao getDao() { + return dao; + } + + @Override protected EngineBackupLog getExistingEntity() { + return existingEngineBackupLog; + } + + @Override protected EngineBackupLog getNonExistentEntity() { + return newEntity; + } + + @Override protected int getAllEntitiesCount() { + return 1; + } + + @Override protected EngineBackupLog modifyEntity(EngineBackupLog entity) { + entity.setOutputMessage("test"); + return entity; + } + + @Override protected void verifyEntityModification(EngineBackupLog result) { + assertEquals("test", result.getOutputMessage()); + + } } diff --git a/packaging/dbscripts/engine_backup_log_sp.sql b/packaging/dbscripts/engine_backup_log_sp.sql index a2a6608..a639dd8 100644 --- a/packaging/dbscripts/engine_backup_log_sp.sql +++ b/packaging/dbscripts/engine_backup_log_sp.sql @@ -1,28 +1,3 @@ -CREATE OR REPLACE FUNCTION InsertEngineBackupHistory(v_db_name VARCHAR(64), - v_done_at TIMESTAMP WITH TIME ZONE , - v_is_passed BOOLEAN, - v_output_message TEXT) - -RETURNS VOID - AS $procedure$ -BEGIN -INSERT INTO engine_backup_log(db_name, done_at,is_passed, output_message) - VALUES(v_db_name, v_done_at, v_is_passed, v_output_message); -END; $procedure$ -LANGUAGE plpgsql; - -CREATE OR REPLACE FUNCTION GetLastSuccessfulEngineBackup(v_db_name VARCHAR(64)) -RETURNS SETOF engine_backup_log STABLE - AS $procedure$ -BEGIN - RETURN QUERY SELECT * - FROM engine_backup_log - WHERE db_name = v_db_name and is_passed - ORDER BY db_name, done_at DESC - LIMIT 1; -END; $procedure$ -LANGUAGE plpgsql; - -- The following SP is used by engine-backup to report engine-backup activity -- v_status can be : -- -1 backup failed @@ -37,7 +12,8 @@ AS $procedure$ BEGIN IF v_status = -1 THEN - PERFORM InsertEngineBackupHistory(v_db_name, v_done_at, false, v_output_message); + INSERT INTO engine_backup_log((db_name, done_at,is_passed, output_message) + VALUES(v_db_name, v_done_at, false, v_output_message); INSERT INTO audit_log(log_time, log_type_name, log_type, severity, message) VALUES(v_done_at, 'ENGINE_BACKUP_FAILED', 9026, 2, v_output_message); @@ -46,7 +22,8 @@ INSERT INTO audit_log(log_time, log_type_name, log_type, severity, message) VALUES(v_done_at, 'ENGINE_BACKUP_STARTED', 9024, 0, v_output_message); ELSIF v_status = 1 THEN - PERFORM InsertEngineBackupHistory(v_db_name, v_done_at, true, v_output_message); + INSERT INTO engine_backup_log((db_name, done_at,is_passed, output_message) + VALUES(v_db_name, v_done_at, true, v_output_message); -- Clean alerts PERFORM DeleteBackupRelatedAlerts(); -- To view, visit https://gerrit.ovirt.org/40091 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia0aa9c4d0c8c0a5f7b40a022d7670f30c5fd5b77 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <emes...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches