Ramesh N has uploaded a new change for review.

Change subject: engine: Infrastrucutre changes for Start Remove Brick
......................................................................

engine: Infrastrucutre changes for Start Remove Brick

 Infrastructure changes to enable Start Remove Brick in gluster.

Change-Id: I95d27f571e32c5a91823511fbf5964ec79282afa
Signed-off-by: Ramesh Nachimuthu <[email protected]>
---
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
M packaging/dbscripts/gluster_volumes_sp.sql
7 files changed, 183 insertions(+), 40 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/19912/1

diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
index 5b6e267..a986800 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
@@ -43,6 +43,13 @@
     void removeAll(Collection<ID> ids);
 
     /**
+     * Calls a remove stored procedure multiple times in a batch
+     *
+     * @param entities
+     */
+    void removeAllInBatch(Collection<T> entities);
+
+    /**
      * Calls an update stored procedure multiple timse in a batch
      *
      * @param procedureName
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
index c0e8928..dbc687e 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
@@ -31,8 +31,7 @@
     @Override
     /**
      * Enables to send update procedure name as a parameter that overrides the 
default
-     * one.
-     * In case this parameter is null the default procedure is used.
+     * one. In case this parameter is null the default procedure is used.
      */
     public void updateAll(String procedureName, Collection<T> entities) {
         if (procedureName == null) {
@@ -44,9 +43,8 @@
     }
 
     /**
-     * Enables to send update procedure name as a parameter that overrides the 
default
-     * one.
-     * In case this parameter is null the default procedure is used.
+     * Enables to send update procedure name as a parameter that overrides the 
default one. In case this parameter is
+     * null the default procedure is used.
      */
     protected void updateAllInBatch(String procedureName,
             Collection<T> paramValues,
@@ -62,6 +60,21 @@
         }
     }
 
+    /**
+     * Enables to send remove procedure name as a parameter that overrides the 
default one. In case this parameter is
+     * null, default procedure is used.
+     */
+    protected void removeAllInBatch(String procedureName, Collection<T> 
paramValue, MapSqlParameterMapper<T> mapper) {
+        getCallsHandler().executeStoredProcAsBatch(procedureName == null ? 
getProcedureNameForRemove() : procedureName,
+                paramValue,
+                mapper);
+    }
+
+    @Override
+    public void removeAllInBatch(Collection<T> entities) {
+        removeAllInBatch(getProcedureNameForRemove(), entities, 
getBatchMapper());
+    }
+
     @Override
     public void saveAll(Collection<T> entities) {
         for (T entity : entities) {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
index 1258690..f4ecd54 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.dao.gluster;
 
+import java.util.Collection;
 import java.util.List;
 
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
@@ -31,4 +32,8 @@
     public List<GlusterBrickEntity> getGlusterVolumeBricksByServerId(Guid 
serverId);
 
     public GlusterBrickEntity getBrickByServerIdAndDirectory(Guid serverId, 
String brickDirectory);
+
+    public void updateBrickTask(Guid brickId, Guid taskId);
+
+    public void updateBrickTasksInBatch(Collection<GlusterBrickEntity> bricks);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
index e2ebc82..3056a3e 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
@@ -10,7 +10,6 @@
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
 import org.ovirt.engine.core.common.utils.EnumUtils;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.compat.NotImplementedException;
 import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper;
 import org.ovirt.engine.core.dao.MassOperationsGenericDaoDbFacade;
 import org.springframework.jdbc.core.RowMapper;
@@ -57,15 +56,13 @@
     public void updateBrickStatus(Guid brickId, GlusterStatus status) {
         getCallsHandler().executeModification("UpdateGlusterVolumeBrickStatus",
                 getCustomMapSqlParameterSource()
-                .addValue("id", brickId)
-                .addValue("status", EnumUtils.nameOrNull(status)));
+                        .addValue("id", brickId)
+                        .addValue("status", EnumUtils.nameOrNull(status)));
     }
 
     @Override
     public void updateBrickStatuses(List<GlusterBrickEntity> bricks) {
-        for(GlusterBrickEntity brick : bricks) {
-            updateBrickStatus(brick.getId(), brick.getStatus());
-        }
+        updateAllInBatch("UpdateGlusterVolumeBrickStatus", bricks, 
getBatchMapper());
     }
 
     @Override
@@ -89,7 +86,6 @@
                 "GetBricksByGlusterVolumeGuid", brickRowMapper,
                 getCustomMapSqlParameterSource().addValue("volume_id", 
volumeId));
     }
-
 
     private MapSqlParameterSource createBrickParams(GlusterBrickEntity brick) {
         return getCustomMapSqlParameterSource().addValue("id", brick.getId())
@@ -120,6 +116,7 @@
             brick.setBrickDirectory(rs.getString("brick_dir"));
             brick.setBrickOrder(rs.getInt("brick_order"));
             brick.setStatus(GlusterStatus.valueOf(rs.getString("status")));
+            brick.getAsyncTask().setTaskId(getGuid(rs, "task_id"));
             return brick;
         }
 
@@ -161,10 +158,38 @@
         return brickRowMapper;
     }
 
-    @SuppressWarnings("deprecation")
     @Override
     public MapSqlParameterMapper<GlusterBrickEntity> getBatchMapper() {
-        // TODO: Implement this
-        throw new NotImplementedException("Unsupported operation");
+        return new MapSqlParameterMapper<GlusterBrickEntity>() {
+            @Override
+            public MapSqlParameterSource map(GlusterBrickEntity entity) {
+                MapSqlParameterSource paramValue =
+                        new MapSqlParameterSource()
+                                .addValue("volume_id", entity.getVolumeId())
+                                .addValue("server_id", entity.getServerId())
+                                .addValue("brick_dir", 
entity.getBrickDirectory())
+                                .addValue("status", entity.getStatus().name())
+                                .addValue("id", entity.getId().toString())
+                                .addValue("brick_order", 
entity.getBrickOrder())
+                                .addValue("task_id",
+                                        entity.getAsyncTask() != null ? 
entity.getAsyncTask().getTaskId().toString()
+                                                : "");
+
+                return paramValue;
+            }
+        };
+    }
+
+    @Override
+    public void updateBrickTask(Guid brickId, Guid taskId) {
+        
getCallsHandler().executeModification("UpdateGlusterVolumeBrickAsyncTask",
+                getCustomMapSqlParameterSource().
+                        addValue("id", brickId).
+                        addValue("task_id", taskId));
+    }
+
+    @Override
+    public void updateBrickTasksInBatch(Collection<GlusterBrickEntity> bricks) 
{
+        
getCallsHandler().executeStoredProcAsBatch("UpdateGlusterVolumeBrickAsyncTask", 
bricks, getBatchMapper());
     }
 }
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 7fde9b0..ef25235 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
@@ -426,11 +426,37 @@
 
     public static final Guid GLUSTER_SERVER_UUID2 = new 
Guid("da9e2f09-2835-4530-9bf5-576c52b11942");
 
+    public static final Guid GLUSTER_SERVER_UUID3 = new 
Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
+
+    public static final Guid GLUSTER_BRICK_SERVER1 = new 
Guid("23f6d691-5dfb-472b-86dc-9e1d2d3c18f3");
+
     public static final Guid GLUSTER_SERVER_UUID_NEW = new 
Guid("da9e2f09-2835-4530-9bf5-576c52b11943");
 
     public static final Guid EXISTING_VDSM_TASK_ID = new 
Guid("140fd52b-3400-4cdd-8d3f-C9d03704b0aa");
 
     /**
+     * Gluster volume UUID(s)
+     */
+    public static final Guid GLUSTER_VOLUME_UUID1 = new 
Guid("0c3f45f6-3fe9-4b35-a30c-be0d1a835ea8");
+
+    /**
+     * Gluster brick UUID(s)
+     */
+    public static final Guid GLUSTER_BRICK_UUID1 = new 
Guid("6ccdc294-d77b-4929-809d-8afe7634b47d");
+
+    public static final Guid GLUSTER_BRICK_UUID2 = new 
Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a754");
+
+    /**
+     * Gluster brick directories
+     */
+    public static final String GLUSTER_BRICK_DIR1 = 
"/export/test-vol-distribute-1/dir1";
+
+    /**
+     * Gluster Async task UUID(s)
+     */
+    public static final Guid GLUSTER_ASYNC_TASK_ID1 = new 
Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a763");
+
+    /**
      * A test provider that exists.
      */
     public static final String PROVIDER_NAME = "provider";
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
index 2ebe324..f026188 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
@@ -9,20 +9,15 @@
 import java.util.List;
 
 import org.junit.Test;
+import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTask;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dao.BaseDAOTestCase;
+import org.ovirt.engine.core.dao.FixturesTool;
 
 public class GlusterBrickDaoTest extends BaseDAOTestCase {
-    private static final Guid SERVER_ID = new 
Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
-    private static final Guid EXISTING_VOL_ID = new 
Guid("0c3f45f6-3fe9-4b35-a30c-be0d1a835ea8");
-    private static final Guid EXISTING_BRICK_ID = new 
Guid("6ccdc294-d77b-4929-809d-8afe7634b47d");
-
-    private static final Guid BRICK_SERVER_ID = new 
Guid("23f6d691-5dfb-472b-86dc-9e1d2d3c18f3");
-    private static final String BRICK_DIRECTORY = 
"/export/test-vol-distribute-1/dir1";
-
     private GlusterBrickDao dao;
     private VdsStatic server;
 
@@ -30,13 +25,13 @@
     public void setUp() throws Exception {
         super.setUp();
         dao = dbFacade.getGlusterBrickDao();
-        server = dbFacade.getVdsStaticDao().get(SERVER_ID);
+        server = 
dbFacade.getVdsStaticDao().get(FixturesTool.GLUSTER_SERVER_UUID3);
     }
 
     @Test
     public void testSaveAndGetById() {
         GlusterBrickEntity brickToAdd = new GlusterBrickEntity();
-        brickToAdd.setVolumeId(EXISTING_VOL_ID);
+        brickToAdd.setVolumeId(FixturesTool.GLUSTER_VOLUME_UUID1);
         brickToAdd.setServerId(server.getId());
         brickToAdd.setServerName(server.getHostName());
         brickToAdd.setBrickDirectory("/export/test-vol-distribute-1/dir3");
@@ -52,31 +47,32 @@
 
     @Test
     public void testGlusterVolumeBricksByServerId() {
-        List<GlusterBrickEntity> bricks = 
dao.getGlusterVolumeBricksByServerId(SERVER_ID);
+        List<GlusterBrickEntity> bricks = 
dao.getGlusterVolumeBricksByServerId(FixturesTool.GLUSTER_SERVER_UUID3);
         assertNotNull(bricks);
     }
 
     @Test
     public void testGetBrickByServerIdAndDirectory() {
-        GlusterBrickEntity brick = 
dao.getBrickByServerIdAndDirectory(BRICK_SERVER_ID, BRICK_DIRECTORY);
+        GlusterBrickEntity brick =
+                
dao.getBrickByServerIdAndDirectory(FixturesTool.GLUSTER_BRICK_SERVER1, 
FixturesTool.GLUSTER_BRICK_DIR1);
         assertNotNull(brick);
-        assertEquals(brick.getServerId(), BRICK_SERVER_ID);
-        assertEquals(brick.getBrickDirectory(), BRICK_DIRECTORY);
+        assertEquals(brick.getServerId(), FixturesTool.GLUSTER_BRICK_SERVER1);
+        assertEquals(brick.getBrickDirectory(), 
FixturesTool.GLUSTER_BRICK_DIR1);
     }
 
     @Test
     public void testRemove() {
-        GlusterBrickEntity existingBrick = dao.getById(EXISTING_BRICK_ID);
+        GlusterBrickEntity existingBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
         assertNotNull(existingBrick);
 
-        dao.removeBrick(EXISTING_BRICK_ID);
+        dao.removeBrick(FixturesTool.GLUSTER_BRICK_UUID1);
 
-        assertNull(dao.getById(EXISTING_BRICK_ID));
+        assertNull(dao.getById(FixturesTool.GLUSTER_BRICK_UUID1));
     }
 
     @Test
     public void testRemoveMultiple() {
-        List<GlusterBrickEntity> bricks = 
dao.getBricksOfVolume(EXISTING_VOL_ID);
+        List<GlusterBrickEntity> bricks = 
dao.getBricksOfVolume(FixturesTool.GLUSTER_VOLUME_UUID1);
         assertEquals(2, bricks.size());
 
         List<Guid> idsToRemove = new ArrayList<Guid>();
@@ -84,17 +80,17 @@
         idsToRemove.add(bricks.get(1).getId());
         dao.removeAll(idsToRemove);
 
-        bricks = dao.getBricksOfVolume(EXISTING_VOL_ID);
+        bricks = dao.getBricksOfVolume(FixturesTool.GLUSTER_VOLUME_UUID1);
         assertTrue(bricks.isEmpty());
     }
 
     @Test
     public void testReplaceBrick() {
-        GlusterBrickEntity firstBrick = dao.getById(EXISTING_BRICK_ID);
+        GlusterBrickEntity firstBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
         assertNotNull(firstBrick);
 
         GlusterBrickEntity newBrick = new GlusterBrickEntity();
-        newBrick.setVolumeId(EXISTING_VOL_ID);
+        newBrick.setVolumeId(FixturesTool.GLUSTER_VOLUME_UUID1);
         newBrick.setServerId(server.getId());
         newBrick.setServerName(server.getHostName());
         newBrick.setBrickDirectory("/export/test-vol-distribute-1/dir3");
@@ -105,7 +101,7 @@
 
         dao.replaceBrick(firstBrick, newBrick);
 
-        assertNull(dao.getById(EXISTING_BRICK_ID));
+        assertNull(dao.getById(FixturesTool.GLUSTER_BRICK_UUID1));
 
         GlusterBrickEntity retrievedBrick = dao.getById(newBrick.getId());
         assertNotNull(retrievedBrick);
@@ -114,14 +110,74 @@
 
     @Test
     public void testUpdateBrickStatus() {
-        GlusterBrickEntity existingBrick = dao.getById(EXISTING_BRICK_ID);
+        GlusterBrickEntity existingBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
         assertNotNull(existingBrick);
         assertEquals(GlusterStatus.UP, existingBrick.getStatus());
 
-        dao.updateBrickStatus(EXISTING_BRICK_ID, GlusterStatus.DOWN);
+        dao.updateBrickStatus(FixturesTool.GLUSTER_BRICK_UUID1, 
GlusterStatus.DOWN);
 
-        existingBrick = dao.getById(EXISTING_BRICK_ID);
+        existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
         assertNotNull(existingBrick);
         assertEquals(GlusterStatus.DOWN, existingBrick.getStatus());
     }
+
+    @Test
+    public void testUpdateBrickStatuses() {
+        GlusterBrickEntity existingBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        GlusterBrickEntity existingBrick1 = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID2);
+        assertNotNull(existingBrick);
+        assertNotNull(existingBrick1);
+        assertEquals(GlusterStatus.UP, existingBrick.getStatus());
+        assertEquals(GlusterStatus.UP, existingBrick1.getStatus());
+
+        List<GlusterBrickEntity> bricks = new ArrayList<GlusterBrickEntity>();
+        bricks.add(existingBrick);
+        bricks.add(existingBrick1);
+        dao.updateBrickStatuses(bricks);
+    }
+
+    @Test
+    public void testUpdateBrickTask() {
+        GlusterBrickEntity existingBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        GlusterAsyncTask asyncTask = new GlusterAsyncTask();
+        asyncTask.setTaskId(new Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a763"));
+
+        assertNotNull(existingBrick);
+        assertEquals(GlusterStatus.UP, existingBrick.getStatus());
+
+        dao.updateBrickTask(existingBrick.getId(), 
FixturesTool.GLUSTER_ASYNC_TASK_ID1);
+
+        GlusterBrickEntity newEnity = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+
+        assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, 
newEnity.getAsyncTask().getTaskId());
+    }
+
+    @Test
+    public void testUpdateBrickTasksInBatch() {
+        GlusterBrickEntity existingBrick1 = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        GlusterBrickEntity existingBrick2 = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID2);
+
+        GlusterAsyncTask asyncTask = new GlusterAsyncTask();
+        asyncTask.setTaskId(new Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a763"));
+
+        assertNotNull(existingBrick1);
+        assertNotNull(existingBrick2);
+        assertEquals(GlusterStatus.UP, existingBrick1.getStatus());
+        assertEquals(GlusterStatus.UP, existingBrick2.getStatus());
+
+        existingBrick1.setAsyncTask(asyncTask);
+        existingBrick2.setAsyncTask(asyncTask);
+
+        List<GlusterBrickEntity> bricks = new ArrayList<>();
+        bricks.add(existingBrick1);
+        bricks.add(existingBrick2);
+
+        dao.updateBrickTasksInBatch(bricks);
+
+        GlusterBrickEntity newEnity1 = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        GlusterBrickEntity newEnity2 = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID2);
+
+        assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, 
newEnity1.getAsyncTask().getTaskId());
+        assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, 
newEnity2.getAsyncTask().getTaskId());
+    }
 }
diff --git a/packaging/dbscripts/gluster_volumes_sp.sql 
b/packaging/dbscripts/gluster_volumes_sp.sql
index 0d3ff62..52833c2 100644
--- a/packaging/dbscripts/gluster_volumes_sp.sql
+++ b/packaging/dbscripts/gluster_volumes_sp.sql
@@ -453,6 +453,17 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION UpdateGlusterVolumeBrickAsyncTask(v_id UUID, 
v_task_id UUID)
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    UPDATE  gluster_volume_bricks
+    SET     task_id = v_task_id,
+            _update_date = LOCALTIMESTAMP
+    WHERE   id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
 Create or replace FUNCTION UpdateGlusterVolumeStatusByName(v_cluster_id UUID,
                                                     v_vol_name VARCHAR(1000),
                                                     v_status VARCHAR(32))
@@ -503,4 +514,4 @@
 _update_date = LOCALTIMESTAMP
 WHERE id = v_volume_id;
 END; $procedure$
-LANGUAGE plpgsql;
+LANGUAGE plpgsql;
\ No newline at end of file


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I95d27f571e32c5a91823511fbf5964ec79282afa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ramesh N <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to