Ravi Nori has uploaded a new change for review.

Change subject: core : Introduce engine_sessions table and DAO
......................................................................

core : Introduce engine_sessions table and DAO

Introduce engine sessions table to hold the session
information for authenticated users and the dao to
manipulate the table

Change-Id: I4b4d9cfc3edc6084fc0436ecfd09c82d5ae57f5e
Bug-Url: https://bugzilla.redhat.com/1092744
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineSession.java
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/EngineSessionDAO.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAODbFacadeImpl.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/EngineSessionDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
A packaging/dbscripts/engine_sessions_sp.sql
A packaging/dbscripts/upgrade/03_06_0530_add_engine_sessions.sql
10 files changed, 546 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/35148/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineSession.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineSession.java
new file mode 100644
index 0000000..7b2d4a3
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineSession.java
@@ -0,0 +1,144 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import org.ovirt.engine.core.common.utils.ObjectUtils;
+import org.ovirt.engine.core.compat.Guid;
+
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+
+public class EngineSession implements Serializable {
+    private static final long serialVersionUID = 6964615561527013329L;
+
+
+    private String engineSessionId;
+
+    private Guid userId;
+
+    @Size(min = 1, max = BusinessEntitiesDefinitions.USER_LOGIN_NAME_SIZE)
+    private String userName;
+
+    private String role;
+
+    private Collection<Guid> groupIds;
+
+    private String authRecord;
+
+    private String principalRecord;
+
+    private Date sessionExpiration;
+
+    /**
+     * Session id assigned by engine for the user's session
+     */
+    public String getEngineSessionId() {
+        return engineSessionId;
+    }
+
+    public void setEngineSessionId(String engineSessionId) {
+        this.engineSessionId = engineSessionId;
+    }
+
+    /**
+     * Identifier assigned by the engine to this user for internal use only.
+     */
+    public Guid getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Guid userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    /**
+     * Comma delimited list of group identifiers.
+     */
+    public Collection<Guid> getGroupIds() {
+        if (groupIds == null) {
+            groupIds = Collections.emptyList();
+        }
+        return new ArrayList<Guid>(groupIds);
+    }
+
+    public void setGroupIds(Collection<Guid> groupIds) {
+        this.groupIds = groupIds;
+    }
+
+    public String getAuthRecord() {
+        return authRecord;
+    }
+
+    public void setAuthRecord(String authRecord) {
+        this.authRecord = authRecord;
+    }
+
+    public String getPrincipalRecord() {
+        return principalRecord;
+    }
+
+    public void setPrincipalRecord(String principalRecord) {
+        this.principalRecord = principalRecord;
+    }
+
+    /**
+     * The hard timeout for session expiration
+     */
+    public Date getSessionExpiration() {
+        return sessionExpiration;
+    }
+
+    public void setSessionExpiration(Date sessionExpiration) {
+        this.sessionExpiration = sessionExpiration;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((engineSessionId == null) ? 0 : 
engineSessionId.hashCode());
+        result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+        result = prime * result + ((userName == null) ? 0 : 
userName.hashCode());
+        result = prime * result + ((authRecord == null) ? 0 : 
authRecord.hashCode());
+        result = prime * result + ((principalRecord == null) ? 0 : 
principalRecord.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        EngineSession other = (EngineSession) obj;
+        return  ObjectUtils.objectsEqual(engineSessionId, 
other.engineSessionId)
+                && ObjectUtils.objectsEqual(userId, other.userId)
+                && ObjectUtils.objectsEqual(userName, other.userName)
+                && ObjectUtils.objectsEqual(authRecord, other.authRecord)
+                && ObjectUtils.objectsEqual(principalRecord, 
other.principalRecord);
+
+    }
+}
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 b2e410c..2ce6206 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
@@ -17,6 +17,7 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskImageDynamic;
 import org.ovirt.engine.core.common.businessentities.DwhHistoryTimekeeping;
+import org.ovirt.engine.core.common.businessentities.EngineSession;
 import org.ovirt.engine.core.common.businessentities.Image;
 import org.ovirt.engine.core.common.businessentities.IscsiBond;
 import org.ovirt.engine.core.common.businessentities.MacPool;
@@ -72,6 +73,7 @@
 import org.ovirt.engine.core.dao.DiskImageDAO;
 import org.ovirt.engine.core.dao.DiskImageDynamicDAO;
 import org.ovirt.engine.core.dao.DiskLunMapDao;
+import org.ovirt.engine.core.dao.EngineSessionDAO;
 import org.ovirt.engine.core.dao.EventDAO;
 import org.ovirt.engine.core.dao.ExternalVariableDao;
 import org.ovirt.engine.core.dao.GenericDao;
@@ -204,6 +206,7 @@
             put(VmJob.class, VmJobDao.class);
             put(MacPool.class, MacPoolDao.class);
             put(DiskProfile.class, DiskProfileDao.class);
+            put(EngineSession.class, EngineSessionDAO.class);
         }
     };
 
@@ -635,6 +638,15 @@
     }
 
     /**
+     * Returns the singleton instance of {@link EngineSessionDAO}.
+     *
+     * @return the dao
+     */
+    public EngineSessionDAO getEngineSessionDao() {
+        return getDao(EngineSessionDAO.class);
+    }
+
+    /**
      * Returns the singleton instance of {@link ProviderDao}.
      *
      * @return the dao
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAO.java
new file mode 100644
index 0000000..3b5ae8a
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAO.java
@@ -0,0 +1,42 @@
+package org.ovirt.engine.core.dao;
+
+import org.ovirt.engine.core.common.businessentities.EngineSession;
+
+import java.util.List;
+
+/**
+ * <code>EngineSessionDAO</code> defines a type which performs CRUD operations 
on instances of {@link 
org.ovirt.engine.core.common.businessentities.EngineSession}.
+ *
+ *
+ */
+public interface EngineSessionDAO extends DAO {
+    /**
+     * Retrieves the session with the specified id.
+     *
+     * @param id the task id
+     * @return the task
+     */
+    EngineSession get(String id);
+
+    /**
+     * Retrieves all sessions.
+     *
+     * @return the list of sessions
+     */
+    List<EngineSession> getAll();
+
+    /**
+     * Saves or updates the specified session
+     *
+     * @param session the session
+     */
+    void saveOrUpdate(EngineSession session);
+
+    /**
+     * Removes the session with the specified id.
+     *
+     * @param id
+     */
+    int remove(String id);
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAODbFacadeImpl.java
new file mode 100644
index 0000000..14eb2e9
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineSessionDAODbFacadeImpl.java
@@ -0,0 +1,103 @@
+package org.ovirt.engine.core.dao;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.EngineSession;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource;
+import org.ovirt.engine.core.dal.dbbroker.DbEngineDialect;
+import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * <code>EngineSessionDAODbFacadeImpl</code> provides an implementation of 
{@link org.ovirt.engine.core.dao.EngineSessionDAO} using code refactored from
+ * {@code DbFacade}.
+ */
+public class EngineSessionDAODbFacadeImpl extends BaseDAODbFacade implements 
EngineSessionDAO {
+    private static final Logger log = 
LoggerFactory.getLogger(EngineSessionDAODbFacadeImpl.class);
+
+    private static class EngineSessionRowMapper implements 
RowMapper<EngineSession> {
+        public static final EngineSessionRowMapper instance = new 
EngineSessionRowMapper();
+
+        @Override
+        public EngineSession mapRow(ResultSet rs, int rowNum) throws 
SQLException {
+            EngineSession session = new EngineSession();
+            session.setEngineSessionId(rs.getString("id"));
+            session.setUserId(getGuidDefaultEmpty(rs, "user_id"));
+            session.setUserName(rs.getString("user_name"));
+            session.setAuthRecord(rs.getString("auth_record"));
+            session.setPrincipalRecord(rs.getString("principal_record"));
+            session.setGroupIds(convertToGuidList(rs.getString("group_ids"), 
','));
+            session.setRole(rs.getString("role"));
+            
session.setSessionExpiration(DbFacadeUtils.fromDate(rs.getTimestamp("session_expiration")));
+            return session;
+        }
+
+        private LinkedList<Guid> convertToGuidList(String str, char delimiter) 
{
+            LinkedList<Guid> results = new LinkedList<>();
+            if (str != null) {
+                for (String id : str.split(String.format(" *%s *", 
delimiter))) {
+                    results.add(Guid.createGuidFromString(id));
+                }
+            }
+            return results;
+        }
+    }
+
+    private static class EngineSessionParameterSource extends 
CustomMapSqlParameterSource {
+
+        public EngineSessionParameterSource(DbEngineDialect dialect, 
EngineSession session) {
+            super(dialect);
+            addValue("id", session.getEngineSessionId());
+            addValue("user_id", session.getUserId());
+            addValue("user_name", session.getUserName());
+            addValue("auth_record", session.getAuthRecord());
+            addValue("principal_record", session.getPrincipalRecord());
+            addValue("group_ids", StringUtils.join(session.getGroupIds(), 
","));
+            addValue("role", session.getRole());
+            addValue("session_expiration", session.getSessionExpiration());
+        }
+    }
+
+    @Override
+    public EngineSession get(String id) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("id", id);
+
+        return getCallsHandler().executeRead("GetEngineSessionById", 
EngineSessionRowMapper.instance, parameterSource);
+    }
+
+    @Override
+    public List<EngineSession> getAll() {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource();
+
+        return getCallsHandler().executeReadList("GetAllFromEngineSessions", 
EngineSessionRowMapper.instance, parameterSource);
+    }
+
+    private EngineSessionParameterSource 
getEngineSessionParameterSource(EngineSession session) {
+        return new EngineSessionParameterSource(dialect, session);
+    }
+
+    @Override
+    public void saveOrUpdate(EngineSession session) {
+        EngineSessionParameterSource parameterSource = 
getEngineSessionParameterSource(session);
+        getCallsHandler().executeModification("InsertOrUpdateEngineSession", 
parameterSource);
+    }
+
+
+    @Override
+    public int remove(String id) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("id", id);
+
+        return 
getCallsHandler().executeModificationReturnResult("DeleteEngineSession", 
parameterSource);
+    }
+
+}
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 8d96e8a..d4b42a7 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
@@ -1,6 +1,7 @@
 BookmarkDAO=org.ovirt.engine.core.dao.BookmarkDAODbFacadeImpl
 CommandEntityDao=org.ovirt.engine.core.dao.CommandEntityDaoDbFacadeImpl
 DbUserDAO=org.ovirt.engine.core.dao.DbUserDAODbFacadeImpl
+EngineSessionDAO=org.ovirt.engine.core.dao.EngineSessionDAODbFacadeImpl
 VdsDAO=org.ovirt.engine.core.dao.VdsDAODbFacadeImpl
 VdsStaticDAO=org.ovirt.engine.core.dao.VdsStaticDAODbFacadeImpl
 VdsDynamicDAO=org.ovirt.engine.core.dao.VdsDynamicDAODbFacadeImpl
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineSessionDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineSessionDAOTest.java
new file mode 100644
index 0000000..d2a5d6a
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineSessionDAOTest.java
@@ -0,0 +1,115 @@
+package org.ovirt.engine.core.dao;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ovirt.engine.core.common.businessentities.EngineSession;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * <code>EngineSessionDAOTest</code> performs tests against the {@link 
org.ovirt.engine.core.dao.EngineSessionDAO} type.
+ *
+ *
+ */
+public class EngineSessionDAOTest extends BaseDAOTestCase {
+    private static final int SESSION_COUNT = 1;
+    private EngineSessionDAO dao;
+    private EngineSession newEngineSession;
+    private EngineSession existingEngineSession;
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+
+        dao = dbFacade.getEngineSessionDao();
+
+        // create some test data
+        newEngineSession = new EngineSession();
+        newEngineSession.setEngineSessionId(Guid.newGuid().toString());
+        newEngineSession.setUserId(Guid.newGuid());
+        newEngineSession.setSessionExpiration(new Date());
+        newEngineSession.setRole("");
+        newEngineSession.setPrincipalRecord("");
+        newEngineSession.setAuthRecord("");
+        newEngineSession.setGroupIds(new 
LinkedList<Guid>(Arrays.asList(FixturesTool.EXISTING_GROUP_ID)));
+        newEngineSession.setUserName("");
+
+        existingEngineSession = 
dao.get(FixturesTool.EXISTING_SESSION_ID.toString());
+    }
+
+    /**
+     * Ensures that if the id is invalid then no EngineSession is returned.
+     */
+    @Test
+    public void testGetWithInvalidId() {
+        EngineSession result = dao.get(Guid.newGuid().toString());
+
+        assertNull(result);
+    }
+
+    /**
+     * Ensures that, if the id is valid, then retrieving a EngineSession works 
as expected.
+     */
+    @Test
+    public void testGet() {
+        EngineSession result = 
dao.get(existingEngineSession.getEngineSessionId());
+
+        assertNotNull(result);
+        assertEquals(existingEngineSession, result);
+    }
+
+    /**
+     * Ensures that finding all EngineSessions works as expected.
+     */
+    @Test
+    public void testGetAll() {
+        List<EngineSession> result = dao.getAll();
+
+        assertEquals(SESSION_COUNT, result.size());
+    }
+
+    /**
+     * Ensures that removing a ad_group works as expected.
+     */
+    @Test
+    public void testRemove() {
+        EngineSession result = 
dao.get(existingEngineSession.getEngineSessionId());
+        assertNotNull(result);
+
+        assertEquals(dao.remove(existingEngineSession.getEngineSessionId()), 
1);
+        result = dao.get(existingEngineSession.getEngineSessionId());
+
+        assertNull(result);
+        assertEquals(dao.remove(existingEngineSession.getEngineSessionId()), 
0);
+
+    }
+
+    @Test
+    public void testSaveOrUpdate() {
+        List<EngineSession> sessions = dao.getAll();
+        assertNotNull(sessions);
+        int sessionsNumber = sessions.size();
+        dao.saveOrUpdate(existingEngineSession);
+        sessions = dao.getAll();
+        assertEquals(sessionsNumber, sessions.size());
+        EngineSession sessionFromDb = 
dao.get(existingEngineSession.getEngineSessionId());
+        assertNotNull(sessionFromDb);
+        assertEquals(sessionFromDb, existingEngineSession);
+        dao.saveOrUpdate(newEngineSession);
+        sessions = dao.getAll();
+        assertNotNull(sessions);
+        assertEquals(sessionsNumber + 1, sessions.size());
+        sessionFromDb = dao.get(newEngineSession.getEngineSessionId());
+        assertEquals(sessionFromDb, newEngineSession);
+    }
+
+}
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
index 0e0cc66..2f29812 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
@@ -400,6 +400,16 @@
     protected static final Guid EXISTING_TASK_ID = new 
Guid("340fd52b-3400-4cdd-8d3f-C9d03704b0aa");
 
     /**
+     * Predefined engine session id
+     */
+    protected static final Guid EXISTING_SESSION_ID = new 
Guid("c61a1dec-6b5f-11e4-80d9-3c970e14c386");
+
+    /**
+     * Predefined engine group id
+     */
+    protected static final Guid EXISTING_GROUP_ID = new 
Guid("cd854d52-b6bf-4d74-81cd-0345d8266939");
+
+    /**
      * ID of an existing snapshot
      */
     protected static final Guid EXISTING_SNAPSHOT_ID = new 
Guid("a7bb24df-9fdf-4bd6-b7a9-f5ce52da0f89");
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 19d1f73..3d32f3a 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -210,6 +210,18 @@
         </row>
     </table>
 
+    <table name="engine_sessions">
+        <column>id</column>
+        <column>user_id</column>
+        <column>user_name</column>
+        <column>session_expiration</column>
+        <row>
+            <value>c61a1dec-6b5f-11e4-80d9-3c970e14c386</value>
+            <value>9bf7c640-b620-456f-a550-0348f366544a</value>
+            <value>userportal2</value>
+            <value>2010-12-01 14:13:07</value>
+        </row>
+    </table>
 
     <table name="storage_server_connections">
         <column>id</column>
diff --git a/packaging/dbscripts/engine_sessions_sp.sql 
b/packaging/dbscripts/engine_sessions_sp.sql
new file mode 100644
index 0000000..e2ca5d3
--- /dev/null
+++ b/packaging/dbscripts/engine_sessions_sp.sql
@@ -0,0 +1,96 @@
+----------------------------------------------------------------
+-- [engine_sessions] Table
+--
+Create or replace FUNCTION InsertEngineSession(v_id VARCHAR(255),
+       v_user_id UUID,
+        v_user_name VARCHAR(255),
+        v_auth_record VARCHAR(255),
+        v_principal_record VARCHAR(255),
+        v_group_ids VARCHAR(2048),
+        v_role VARCHAR(255),
+        v_session_expiration timestamp WITH TIME ZONE)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+INSERT INTO engine_sessions(id, user_id, user_name, auth_record, 
principal_record, group_ids, role, session_expiration)
+        VALUES(v_id, v_user_id, v_user_name, v_auth_record, 
v_principal_record, v_group_ids, v_role, v_session_expiration);
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION UpdateEngineSession(v_id VARCHAR(255),
+        v_user_id UUID,
+        v_user_name VARCHAR(255),
+        v_auth_record VARCHAR(255),
+        v_principal_record VARCHAR(255),
+        v_group_ids VARCHAR(2048),
+        v_role VARCHAR(255),
+        v_session_expiration timestamp WITH TIME ZONE)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+      UPDATE engine_sessions
+      SET user_id = v_user_id,
+          user_name = v_user_name,
+          auth_record = v_auth_record,
+          principal_record = v_principal_record,
+          group_ids = v_group_ids,
+          role = v_role,
+          session_expiration = v_session_expiration
+      WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION InsertOrUpdateEngineSession(v_id VARCHAR(255),
+        v_user_id UUID,
+        v_user_name VARCHAR(255),
+        v_auth_record VARCHAR(255),
+        v_principal_record VARCHAR(255),
+        v_group_ids VARCHAR(2048),
+        v_role VARCHAR(255),
+        v_session_expiration timestamp WITH TIME ZONE)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+      IF NOT EXISTS (SELECT 1 from engine_sessions where engine_sessions.id = 
v_id) THEN
+            PERFORM InsertEngineSession(v_id, v_user_id, v_user_name, 
v_auth_record, v_principal_record, v_group_ids, v_role, v_session_expiration);
+      ELSE
+            PERFORM UpdateEngineSession(v_id, v_user_id, v_user_name, 
v_auth_record, v_principal_record, v_group_ids, v_role, v_session_expiration);
+      END IF;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetAllFromEngineSessions() RETURNS SETOF 
engine_sessions STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM engine_sessions;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetEngineSessionById(v_id VARCHAR(255)) RETURNS 
SETOF engine_sessions STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM engine_sessions
+   WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION DeleteEngineSession(v_id VARCHAR(255))
+RETURNS integer
+   AS $procedure$
+DECLARE
+deleted_rows int;
+BEGIN
+   DELETE FROM engine_sessions
+   WHERE id = v_id;
+   GET DIAGNOSTICS deleted_rows = ROW_COUNT;
+   RETURN deleted_rows;
+
+END; $procedure$
+LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/upgrade/03_06_0530_add_engine_sessions.sql 
b/packaging/dbscripts/upgrade/03_06_0530_add_engine_sessions.sql
new file mode 100644
index 0000000..251fc7b
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_06_0530_add_engine_sessions.sql
@@ -0,0 +1,11 @@
+CREATE TABLE engine_sessions (
+    id character varying(255) NOT NULL,
+    user_id uuid NOT NULL,
+    user_name character varying(255) NOT NULL,
+    auth_record character varying(255),
+    principal_record character varying(255),
+    group_ids text,
+    role character varying(255),
+    session_expiration timestamp with time zone,
+    CONSTRAINT pk_engine_sessions PRIMARY KEY(id)
+);


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b4d9cfc3edc6084fc0436ecfd09c82d5ae57f5e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to