Juan Hernandez has uploaded a new change for review.

Change subject: [WIP] Move logic out of stored procedures
......................................................................

[WIP] Move logic out of stored procedures

If one day we want to be able to use a database other than PostgreSQL we
need to move SQL code out of the stored procedures. This patch is an
example of moving the SQL code related to the Data Center entity to the
corresponding DAO.

Change-Id: I8b030d3a2ee645a58245231b2c03e6abb3927f0c
Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com>
---
M backend/manager/dbscripts/storages_sp.sql
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDAODbFacade.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/modules/org/ovirt/engine/core/dal/main/module.xml
4 files changed, 386 insertions(+), 330 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/13347/1

diff --git a/backend/manager/dbscripts/storages_sp.sql 
b/backend/manager/dbscripts/storages_sp.sql
index 3952922..680b6e2 100644
--- a/backend/manager/dbscripts/storages_sp.sql
+++ b/backend/manager/dbscripts/storages_sp.sql
@@ -3,86 +3,6 @@
 --
 
 
-Create or replace FUNCTION Insertstorage_pool(v_description VARCHAR(4000),
-       v_id UUID,
-       v_name VARCHAR(40),
-       v_storage_pool_type INTEGER,
-       v_status INTEGER,
-       v_master_domain_version INTEGER,
-       v_spm_vds_id UUID ,
-       v_compatibility_version VARCHAR(40),
-       v_quota_enforcement_type INTEGER)
-RETURNS VOID
-   AS $procedure$
-BEGIN
-INSERT INTO storage_pool(description, id, name, 
storage_pool_type,status,master_domain_version,spm_vds_id,compatibility_version,quota_enforcement_type)
-       VALUES(v_description, v_id, v_name, 
v_storage_pool_type,v_status,v_master_domain_version,v_spm_vds_id,v_compatibility_version,v_quota_enforcement_type);
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION Updatestorage_pool(v_description VARCHAR(4000),
-       v_id UUID,
-       v_name VARCHAR(40),
-       v_storage_pool_type INTEGER,
-       v_status INTEGER,
-        v_storage_pool_format_type VARCHAR(50),
-       v_master_domain_version INTEGER,
-       v_spm_vds_id UUID ,
-       v_compatibility_version VARCHAR(40),
-       v_quota_enforcement_type INTEGER)
-RETURNS VOID
-
-       --The [storage_pool] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
-   AS $procedure$
-BEGIN
-      UPDATE storage_pool
-      SET description = v_description,name = v_name,storage_pool_type = 
v_storage_pool_type,
-      status = v_status,storage_pool_format_type = 
v_storage_pool_format_type,master_domain_version = v_master_domain_version,
-      spm_vds_id = v_spm_vds_id,compatibility_version = 
v_compatibility_version,
-      _update_date = 
LOCALTIMESTAMP,quota_enforcement_type=v_quota_enforcement_type
-      WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
-Create or replace FUNCTION Updatestorage_pool_partial(v_description 
VARCHAR(4000),
-       v_id UUID,
-       v_name VARCHAR(40),
-       v_storage_pool_type INTEGER,
-       v_storage_pool_format_type VARCHAR(50),
-       v_compatibility_version VARCHAR(40),
-       v_quota_enforcement_type INTEGER)
-RETURNS VOID
-
-       --The [storage_pool] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
-   AS $procedure$
-BEGIN
-      UPDATE storage_pool
-      SET description = v_description,name = v_name,storage_pool_type = 
v_storage_pool_type,
-      storage_pool_format_type = 
v_storage_pool_format_type,compatibility_version = v_compatibility_version,
-      _update_date = LOCALTIMESTAMP,quota_enforcement_type = 
v_quota_enforcement_type
-      WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
-Create or replace FUNCTION Updatestorage_pool_status(
-        v_id UUID,
-        v_status INTEGER)
-RETURNS VOID
-
-   AS $procedure$
-BEGIN
-      UPDATE storage_pool
-      SET
-      status = v_status,
-      _update_date = LOCALTIMESTAMP
-      WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
 Create or replace FUNCTION IncreaseStoragePoolMasterVersion(
         v_id UUID)
 RETURNS INTEGER
@@ -99,162 +19,7 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
-Create or replace FUNCTION Deletestorage_pool(v_id UUID)
-RETURNS VOID
-   AS $procedure$
-   DECLARE
-   v_val  UUID;
-BEGIN
 
-         -- Get (and keep) a shared lock with "right to upgrade to exclusive"
-    select vm_guid INTO v_val FROM vm_static where vm_guid in (select vm_guid 
from vms where storage_pool_id = v_id) FOR UPDATE;
-    DELETE
-    FROM   snapshots
-    WHERE  vm_id IN (
-        SELECT vm_guid
-        FROM   vms
-        WHERE  storage_pool_id = v_id);
-    delete FROM vm_static where vm_guid in (select vm_guid from vms where 
storage_pool_id = v_id);
-
-       -- Get (and keep) a shared lock with "right to upgrade to exclusive"
-       -- in order to force locking parent before children
-   select   id INTO v_val FROM storage_pool  WHERE id = v_id     FOR UPDATE;
-
-   DELETE FROM storage_pool
-   WHERE id = v_id;
-
-       -- delete StoragePool permissions --
-   DELETE FROM permissions where object_id = v_id;
-
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION GetAllFromstorage_pool(v_user_id UUID, 
v_is_filtered BOOLEAN) RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE (NOT v_is_filtered OR EXISTS (SELECT 1
-                                       FROM   
user_storage_pool_permissions_view
-                                       WHERE  user_id = v_user_id AND 
entity_id = id));
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION GetAllByStatus(v_status INTEGER) RETURNS SETOF 
storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE status = v_status;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-Create or replace FUNCTION Getstorage_poolByid(v_id UUID, v_user_id UUID, 
v_is_filtered BOOLEAN) RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE id = v_id
-   AND (NOT v_is_filtered OR EXISTS (SELECT 1
-                                     FROM   user_storage_pool_permissions_view
-                                     WHERE  user_id = v_user_id AND entity_id 
= v_id));
-
-
-
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION Getstorage_poolByName(v_name VARCHAR(40))
-RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE name = v_name;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION Getstorage_poolsByType(v_storage_pool_type INTEGER)
-RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE storage_pool_type = v_storage_pool_type;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION 
Getstorage_poolsByStorageDomainId(v_storage_domain_id UUID)
-RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT storage_pool.*
-   FROM storage_pool
-   inner join storage_pool_iso_map on storage_pool.id = 
storage_pool_iso_map.storage_pool_id
-   WHERE storage_pool_iso_map.storage_id = v_storage_domain_id;
-
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION Getstorage_poolsByVdsId(v_vdsId UUID)
-RETURNS SETOF storage_pool
-   AS $procedure$
-   DECLARE
-   v_clusterId  UUID;
-BEGIN
-select   vds_group_id INTO v_clusterId FROM Vds_static WHERE vds_id = v_vdsId;
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE storage_pool.id in(select storage_pool_id
-      FROM vds_groups
-      WHERE vds_group_id = v_clusterId);
-
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-
-
-Create or replace FUNCTION Getstorage_poolsByVdsGroupId(v_clusterId UUID)
-RETURNS SETOF storage_pool
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM storage_pool
-   WHERE storage_pool.id in(select storage_pool_id
-      FROM vds_groups
-      WHERE vds_group_id = v_clusterId);
-
-END; $procedure$
-LANGUAGE plpgsql;
 
 
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDAODbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDAODbFacade.java
index 79c7769..fbaaf68 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDAODbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDAODbFacade.java
@@ -2,16 +2,25 @@
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.List;
 
+import org.apache.log4j.Logger;
+import org.ovirt.engine.core.common.businessentities.Identifiable;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.NGuid;
+import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource;
 import org.ovirt.engine.core.dal.dbbroker.DbEngineDialect;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.SimpleJdbcCallsHandler;
+import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
 
 public abstract class BaseDAODbFacade {
+    // The log:
+    private static final Logger log = Logger.getLogger(BaseDAODbFacade.class);
 
     protected JdbcTemplate jdbcTemplate;
     protected DbEngineDialect dialect;
@@ -91,4 +100,70 @@
     public void setDbFacade(DbFacade dbFacade) {
         this.dbFacade = dbFacade;
     }
+
+    /**
+     * Replace the arguments with values acceptable for the JDBC driver. For
+     * example, enumerated values are replaced with their numeric value,
+     * versions are replaced with the corresponding string, etc.
+     */
+    private void fixArgs(Object[] args) {
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] instanceof NGuid) {
+                args[i] = ((NGuid) args[i]).getUuid();
+            }
+            else if (args[i] instanceof Identifiable) {
+                args[i] = ((Identifiable) args[i]).getValue();
+            }
+            else if (args[i] instanceof Version) {
+                args[i] = args[i].toString();
+            }
+        }
+    }
+
+    /**
+     * Sends the SQL statement and the values of the arguments to the log.
+     */
+    private void logSql(String sql, Object... args) {
+        // This should be changed to DEBUG once we are confident that plain
+        // JDBC works correctly:
+        if (log.isInfoEnabled()) {
+            log.info("Running SQL statement \"" + sql + "\".");
+            for (int i = 0; i < args.length; i++) {
+                Object arg = args[i];
+                if (arg != null) {
+                    log.info("Parameter " + i + " is \"" + args[i] + "\".");
+                }
+                else {
+                    log.info("Parameter " + i + " is null.");
+                }
+            }
+        }
+    }
+
+    public <T> List<T> retrieveList(String sql, RowMapper<T> mapper, Object... 
args) throws DataAccessException {
+        logSql(sql, args);
+        fixArgs(args);
+        return jdbcTemplate.query(sql, mapper, args);
+    }
+
+    public <T> T retrieveOne(String sql, RowMapper<T> mapper, Object... args) 
throws DataAccessException {
+        List<T> list = retrieveList(sql, mapper, args);
+        if (list.isEmpty()) {
+            return null;
+        }
+        if (list.size() > 1) {
+            log.warn("Expected 1 result, but SQL statement returned \"" + 
list.size() + "\".");
+        }
+        return list.get(0);
+    }
+
+    public Guid retrieveGuid(String sql, Object... args) throws 
DataAccessException {
+        return retrieveOne(sql, createGuidMapper(), args);
+    }
+
+    public int update(String sql, Object... args) throws DataAccessException {
+        logSql(sql, args);
+        fixArgs(args);
+        return jdbcTemplate.update(sql, args);
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java
index f8b7d0a..3014a67 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java
@@ -2,6 +2,7 @@
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Date;
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
@@ -15,7 +16,6 @@
 import org.ovirt.engine.core.compat.Version;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
-import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 
 /**
  * <code>StoragePoolDAODbFacadeImpl</code> provides a concrete implementation 
of {@link StoragePoolDAO} based on code
@@ -23,7 +23,6 @@
  */
 @SuppressWarnings("synthetic-access")
 public class StoragePoolDAODbFacadeImpl extends BaseDAODbFacade implements 
StoragePoolDAO {
-
     private static final class StoragePoolRawMapper implements 
ParameterizedRowMapper<storage_pool> {
         @Override
         public storage_pool mapRow(ResultSet rs, int rowNum)
@@ -48,155 +47,363 @@
     }
 
     private static final ParameterizedRowMapper<storage_pool> mapper = new 
StoragePoolRawMapper();
-
     private static StorageFormatType getStorageFormatTypeForPool(ResultSet rs) 
throws SQLException {
         return 
StorageFormatType.forValue(rs.getString("storage_pool_format_type"));
     }
 
     @Override
     public storage_pool get(Guid id) {
-        return get(id, null, false);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "storage_pool.id = ?"
+        ;
+        return retrieveOne(sql, mapper, id);
     }
 
     @Override
-    public storage_pool get(Guid id, Guid userID, boolean isFiltered) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", id).addValue("user_id", 
userID).addValue("is_filtered", isFiltered);
-        return getCallsHandler().executeRead("Getstorage_poolByid", mapper, 
parameterSource);
+    public storage_pool get(Guid dataCenterId, Guid userId, boolean 
isFiltered) {
+        if (isFiltered) {
+            String sql =
+                "select " +
+                    "storage_pool.* " +
+                "from " +
+                    "storage_pool " +
+                "join " +
+                    "user_storage_pool_permissions_view " +
+                "on " +
+                    "storage_pool.id = 
user_storage_pool_permissions_view.entity_id " +
+                "where " +
+                    "storage_pool.id = ? and " +
+                    "user_storage_pool_permissions_view.user_id = ?"
+            ;
+            return retrieveOne(sql, mapper, dataCenterId, userId);
+        }
+        else {
+            return get(dataCenterId);
+        }
     }
 
     @Override
     public storage_pool getByName(String name) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("name", name);
-        return getCallsHandler().executeRead("Getstorage_poolByName", mapper, 
parameterSource);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "storage_pool.name = ?"
+            ;
+        return retrieveOne(sql, mapper, name);
     }
 
     @Override
-    public storage_pool getForVds(Guid vds) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("vdsId", vds);
-        return getCallsHandler().executeRead("Getstorage_poolsByVdsId", 
mapper, parameterSource);
+    public storage_pool getForVds(Guid hostId) {
+        // First retrieve the id of the cluster:
+        String sql =
+            "select " +
+                "vds_static.vds_group_id " +
+            "from " +
+                "vds_static " +
+            "where " +
+                "vds_static.vds_id = ?"
+        ;
+        Guid clusterId = retrieveOne(sql, createGuidMapper(), hostId);
+
+        // Now retrieve the data center:
+        return getForVdsGroup(clusterId);
     }
 
     @Override
-    public storage_pool getForVdsGroup(Guid id) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("clusterId", id);
-        return getCallsHandler().executeRead("Getstorage_poolsByVdsGroupId", 
mapper,
-                parameterSource);
+    public storage_pool getForVdsGroup(Guid clusterId) {
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "storage_pool.id in (" +
+                    "select " +
+                        "vds_groups.storage_pool_id " +
+                    "from " +
+                        "vds_groups " +
+                    "where " +
+                        "vds_groups.vds_group_id = ?" +
+                ")"
+        ;
+        return retrieveOne(sql, mapper, clusterId);
     }
 
     @Override
     public List<storage_pool> getAll() {
-        return getAll(null, false);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool"
+        ;
+        return retrieveList(sql, mapper);
     }
 
     @Override
     public List<storage_pool> getAllByStatus(StoragePoolStatus status) {
-        MapSqlParameterSource parameterSource =
-                getCustomMapSqlParameterSource().addValue("status", 
status.getValue());
-
-        return getCallsHandler().executeReadList("GetAllByStatus", mapper, 
parameterSource);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "storage_pool.status = ?"
+        ;
+        return retrieveList(sql, mapper, status);
     }
 
     @Override
-    public List<storage_pool> getAll(Guid userID, boolean isFiltered) {
-        MapSqlParameterSource parameterSource =
-                getCustomMapSqlParameterSource().addValue("user_id", 
userID).addValue("is_filtered", isFiltered);
-        return getCallsHandler().executeReadList("GetAllFromstorage_pool", 
mapper, parameterSource);
+    public List<storage_pool> getAll(Guid userId, boolean isFiltered) {
+        if (isFiltered) {
+            String sql =
+                "select " +
+                    "storage_pool.* " +
+                "from " +
+                    "storage_pool " +
+                "join " +
+                    "user_storage_pool_permissions_view " +
+                "on " +
+                    "storage_pool.id = 
user_storage_pool_permissions_view.entity_id" +
+                "where " +
+                    "user_storage_pool_permissions_view.user_id = ?"
+            ;
+            return retrieveList(sql, mapper, userId);
+        }
+        else {
+            return getAll();
+        }
     }
 
     @Override
     public List<storage_pool> getAllOfType(StorageType type) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("storage_pool_type", type);
-        return getCallsHandler().executeReadList("Getstorage_poolsByType", 
mapper, parameterSource);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "storage_pool.storage_pool_type = ?"
+        ;
+        return retrieveList(sql, mapper, type);
     }
 
     @Override
-    public List<storage_pool> getAllForStorageDomain(Guid id) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("storage_domain_id", id);
-        return 
getCallsHandler().executeReadList("Getstorage_poolsByStorageDomainId", mapper,
-                parameterSource);
+    public List<storage_pool> getAllForStorageDomain(Guid storageDomainId) {
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "inner join " +
+                "storage_pool_iso_map " +
+            "on " +
+                "storage_pool.id = storage_pool_iso_map.storage_pool_id " +
+            "where " +
+                "storage_pool_iso_map.storage_id = ?"
+        ;
+        return retrieveList(sql, mapper, storageDomainId);
     }
 
     @Override
     public List<storage_pool> getAllWithQuery(String query) {
-        return new SimpleJdbcTemplate(jdbcTemplate).query(query, mapper);
+        return retrieveList(query, mapper);
     }
 
     @Override
     public void save(storage_pool pool) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("description", pool.getdescription())
-                .addValue("id", pool.getId())
-                .addValue("name", pool.getname())
-                .addValue("storage_pool_type", pool.getstorage_pool_type())
-                .addValue("status", pool.getstatus())
-                .addValue("master_domain_version",
-                        pool.getmaster_domain_version())
-                .addValue("spm_vds_id", pool.getspm_vds_id())
-                .addValue("quota_enforcement_type", 
pool.getQuotaEnforcementType())
-                .addValue("compatibility_version",
-                        pool.getcompatibility_version());
-
-        getCallsHandler().executeModification("Insertstorage_pool",
-                parameterSource);
+        String sql =
+            "insert into storage_pool(" +
+                "description, " +
+                "id, " +
+                "name, " +
+                "storage_pool_type, " +
+                "status, " +
+                "master_domain_version, " +
+                "spm_vds_id, " +
+                "compatibility_version, " +
+                "quota_enforcement_type" +
+            ") " +
+            "values (" +
+                "?, ?, ?, ?, ?, ?, ?, ?, ?" +
+            ")"
+        ;
+        update(
+            sql,
+            pool.getdescription(),
+            pool.getId(),
+            pool.getname(),
+            pool.getstorage_pool_type(),
+            pool.getstatus(),
+            pool.getmaster_domain_version(),
+            pool.getspm_vds_id(),
+            pool.getcompatibility_version(),
+            pool.getQuotaEnforcementType()
+        );
     }
 
     @Override
     public void update(storage_pool pool) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("description", pool.getdescription())
-                .addValue("id", pool.getId())
-                .addValue("name", pool.getname())
-                .addValue("storage_pool_type", pool.getstorage_pool_type())
-                .addValue("status", pool.getstatus())
-                .addValue("storage_pool_format_type", 
pool.getStoragePoolFormatType())
-                .addValue("master_domain_version",
-                        pool.getmaster_domain_version())
-                .addValue("spm_vds_id", pool.getspm_vds_id())
-                .addValue("compatibility_version",
-                        pool.getcompatibility_version())
-                .addValue("quota_enforcement_type",
-                        pool.getQuotaEnforcementType().getValue());
-
-        getCallsHandler().executeModification("Updatestorage_pool", 
parameterSource);
+        String sql =
+            "update storage_pool set " +
+                "description = ?, " +
+                "name = ?, " +
+                "storage_pool_type = ?, " +
+                "status = ?, " +
+                "storage_pool_format_type = ?, " +
+                "master_domain_version = ?, " +
+                "spm_vds_id = ?, " +
+                "compatibility_version = ?, " +
+                "_update_date = ?, " +
+                "quota_enforcement_type = ? " +
+            "where " +
+                "id = ?"
+        ;
+        update(
+            sql,
+            pool.getdescription(),
+            pool.getname(),
+            pool.getstorage_pool_type(),
+            pool.getstatus(),
+            pool.getStoragePoolFormatType(),
+            pool.getmaster_domain_version(),
+            pool.getspm_vds_id(),
+            pool.getcompatibility_version(),
+            new Date(),
+            pool.getQuotaEnforcementType(),
+            pool.getId()
+        );
     }
 
     @Override
     public void updatePartial(storage_pool pool) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("description", pool.getdescription())
-                .addValue("id", pool.getId())
-                .addValue("name", pool.getname())
-                .addValue("storage_pool_type", pool.getstorage_pool_type())
-                .addValue("storage_pool_format_type", 
pool.getStoragePoolFormatType())
-                .addValue("compatibility_version",
-                        pool.getcompatibility_version())
-                .addValue("quota_enforcement_type",
-                        pool.getQuotaEnforcementType().getValue());
-
-        getCallsHandler().executeModification("Updatestorage_pool_partial", 
parameterSource);
+        String sql =
+            "update storage_pool set " +
+                "description = ?, " +
+                "name = ?, " +
+                "storage_pool_type = ?, " +
+                "storage_pool_format_type = ?, " +
+                "compatibility_version = ?, " +
+                "_update_date = ?, " +
+                "quota_enforcement_type = ? " +
+             "where " +
+                 "id = ? "
+        ;
+        update(
+            sql,
+            pool.getdescription(),
+            pool.getname(),
+            pool.getstorage_pool_type(),
+            pool.getStoragePoolFormatType(),
+            pool.getcompatibility_version(),
+            new Date(),
+            pool.getQuotaEnforcementType(),
+            pool.getId()
+        );
     }
 
     @Override
     public void updateStatus(Guid id, StoragePoolStatus status) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", id)
-                .addValue("status", status);
-        getCallsHandler().executeModification("Updatestorage_pool_status", 
parameterSource);
-
+        String sql =
+            "update storage_pool set " +
+                "status = ?, " +
+                "_update_date = ? " +
+            "where " +
+                "id = ?"
+        ;
+        update(
+            sql,
+            status,
+            new Date(),
+            id
+        );
     }
 
     @Override
     public void remove(Guid id) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", id);
+        // We will need this:
+        String sql = null;
 
-        getCallsHandler().executeModification("Deletestorage_pool", 
parameterSource);
+        // Get (and keep) a shared lock with "right to upgrade to exclusive":
+        sql =
+            "select " +
+                "vm_guid " +
+            "from " +
+                "vm_static " +
+            "where " +
+                "vm_guid in (" +
+                    "select " +
+                        "vm_guid " +
+                    "from " +
+                        "vms " +
+                    "where " +
+                        "storage_pool_id = ?" +
+                ")" +
+            "for update"
+        ;
+        retrieveGuid(sql, id);
+        sql =
+            "delete from snapshots "+
+            "where " +
+                "vm_id in (" +
+                    "select " +
+                        "vm_guid " +
+                    "from " +
+                        "vms " +
+                    "where " +
+                        "storage_pool_id = ?" +
+                ")"
+        ;
+        update(sql, id);
+        sql =
+            "delete from vm_static " +
+            "where " +
+                "vm_guid in (" +
+                    "select " +
+                        "vm_guid " +
+                    "from " +
+                        "vms " +
+                    "where " +
+                        "storage_pool_id = ?" +
+                 ")"
+        ;
+        update(sql, id);
+
+        // Get (and keep) a shared lock with "right to upgrade to exclusive"
+        // in order to force locking parent before children:
+        sql =
+            "select " +
+                "id " +
+            "from " +
+                "storage_pool " +
+            "where " +
+                "id = ? " +
+            "for update"
+        ;
+        retrieveGuid(sql, id);
+
+        sql =
+            "delete from storage_pool " +
+            "where " +
+                "id = ?"
+        ;
+        update(sql, id);
+
+        // Delete StoragePool permissions:
+        sql =
+            "delete from permissions " +
+            "where " +
+                "object_id = ?"
+        ;
+        update(sql, id);
     }
 
     @Override
@@ -222,11 +429,19 @@
 
     @Override
     public List<storage_pool> getDataCentersByClusterService(boolean 
supportsVirtService, boolean supportsGlusterService) {
-        final MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource();
-        parameterSource
-            .addValue("supports_virt_service", supportsVirtService)
-            .addValue("supports_gluster_service", supportsGlusterService);
-        return 
getCallsHandler().executeReadList("GetStoragePoolsByClusterService", mapper, 
parameterSource);
+        String sql =
+            "select " +
+                "storage_pool.* " +
+            "from " +
+                "storage_pool " +
+            "join " +
+                "vds_groups " +
+            "on " +
+                "storage_pool.id = vds_groups.id " +
+            "where " +
+                "(? and vds_groups.virt_service) or " +
+                "(? and vds_groups.gluster_service)"
+        ;
+        return retrieveList(sql, mapper, supportsVirtService, 
supportsGlusterService);
     }
-
 }
diff --git 
a/backend/manager/modules/dal/src/main/modules/org/ovirt/engine/core/dal/main/module.xml
 
b/backend/manager/modules/dal/src/main/modules/org/ovirt/engine/core/dal/main/module.xml
index 3ebd787..b79204d 100644
--- 
a/backend/manager/modules/dal/src/main/modules/org/ovirt/engine/core/dal/main/module.xml
+++ 
b/backend/manager/modules/dal/src/main/modules/org/ovirt/engine/core/dal/main/module.xml
@@ -10,6 +10,7 @@
       <module name="javax.api"/>
       <module name="org.apache.commons.collections"/>
       <module name="org.apache.commons.lang"/>
+      <module name="org.apache.log4j"/>
       <module name="org.ovirt.engine.core.common"/>
       <module name="org.ovirt.engine.core.compat"/>
       <module name="org.ovirt.engine.core.dependencies"/>


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8b030d3a2ee645a58245231b2c03e6abb3927f0c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to