Muli Salem has uploaded a new change for review.

Change subject: core: Remove Mac Addresses When DC Removed
......................................................................

core: Remove Mac Addresses When DC Removed

This patch removes the Mac Addresses of the vNics
that are under the Data Center that is being removed.

Change-Id: I5b6d473b4921de12fbd68bdaf2fc058662ed3a06
Bug-Url: https://bugzilla.redhat.com/903572
Signed-off-by: Muli Salem <msa...@redhat.com>
---
M backend/manager/dbscripts/network_sp.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.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/network/VmNetworkInterfaceDaoTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
7 files changed, 105 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/11796/1

diff --git a/backend/manager/dbscripts/network_sp.sql 
b/backend/manager/dbscripts/network_sp.sql
index 690aa60..34a9bf4 100644
--- a/backend/manager/dbscripts/network_sp.sql
+++ b/backend/manager/dbscripts/network_sp.sql
@@ -907,6 +907,20 @@
 LANGUAGE plpgsql;
 
 
+Create or replace FUNCTION GetMacsByStoragePoolId(v_storage_pool_id UUID) 
RETURNS SETOF varchar
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT mac_addr
+   FROM vm_interface_view
+   WHERE EXISTS (
+      SELECT 1 FROM vm_static
+      JOIN vds_groups ON vm_static.vds_group_id = vds_groups.vds_group_id
+      WHERE vds_groups.storage_pool_id = v_storage_pool_id
+      AND vm_static.vm_guid = vm_interface_view.vm_guid);
+END; $procedure$
+LANGUAGE plpgsql;
+
+
 
 Create or replace FUNCTION set_network_exclusively_as_display(v_cluster_id 
UUID, v_network_id UUID)
 RETURNS VOID
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
index 1d988fa..2a36ae8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
@@ -10,6 +10,7 @@
 import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.network.MacPoolManager;
 import org.ovirt.engine.core.common.AuditLogType;
 import 
org.ovirt.engine.core.common.action.DetachStorageDomainFromPoolParameters;
 import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters;
@@ -55,6 +56,7 @@
 
     @Override
     protected void executeCommand() {
+        List<String> macsToRemove = 
getVmNetworkInterfaceDao().getAllMacsByStoragePool(getStoragePool().getId());
         removeNetworks();
         /**
          * Detach master storage domain last.
@@ -79,8 +81,14 @@
                 return;
             }
         }
+
         getStoragePoolDAO().remove(getStoragePool().getId());
+
         setSucceeded(true);
+
+        if (getSucceeded()) {
+            MacPoolManager.getInstance().freeMacs(macsToRemove);
+        }
     }
 
     private void removeNetworks() {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
index 6a5989d..9bbb0f6 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
@@ -69,4 +69,13 @@
      * @return the list of VmNetworkInterfaces
      */
     List<VmNetworkInterface> getAllForTemplatesByNetwork(Guid networkId);
+
+    /**
+     * Retrieves the MAC addresses of the Vms in the given Storage Pool.
+     *
+     * @param storagePoolId
+     *            the Storage Pool
+     * @return the list of MAC addresses
+     */
+    List<String> getAllMacsByStoragePool(Guid storagePoolId);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
index 86c6ac9..e2164ad 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
@@ -15,6 +15,8 @@
 
 public class VmNetworkInterfaceDaoDbFacadeImpl extends BaseDAODbFacade 
implements VmNetworkInterfaceDao {
 
+    private static final int MAC_COLUMN = 1;
+
     protected final ParameterizedRowMapper<VmNetworkInterface> mapper =
             new ParameterizedRowMapper<VmNetworkInterface>() {
                 @Override
@@ -42,6 +44,14 @@
                     return entity;
                 }
             };
+
+    protected final ParameterizedRowMapper<String> macMapper = new 
ParameterizedRowMapper<String>() {
+
+        @Override
+        public String mapRow(ResultSet rs, int rowNum) throws SQLException {
+            return rs.getString(MAC_COLUMN);
+        }
+    };
 
     @Override
     public VmNetworkInterface get(Guid id) {
@@ -136,4 +146,10 @@
         return 
getCallsHandler().executeReadList("GetVmTemplateInterfacesByNetworkId",
                 mapper, 
getCustomMapSqlParameterSource().addValue("network_id", networkId));
     }
+
+    @Override
+    public List<String> getAllMacsByStoragePool(Guid storagePoolId) {
+        return getCallsHandler().executeReadList("GetMacsByStoragePoolId",
+                macMapper, 
getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId));
+    }
 }
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 e4ef0c4..1ecf49a 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
@@ -14,7 +14,7 @@
     /**
      * Predefined NFS storage pool.
      */
-    protected static final Guid STORAGE_POOL_NFS_2 = new 
Guid("386bffd1-e7ed-4b08-bce9-d7df10f8c9a0");
+    public static final Guid STORAGE_POOL_NFS_2 = new 
Guid("386bffd1-e7ed-4b08-bce9-d7df10f8c9a0");
 
     /**
      * Predefined ISCSI storage pool.
@@ -341,5 +341,6 @@
      */
     public static final Guid VDS_NETWORK_INTERFACE = new 
Guid("ba31682e-6ae7-4f9d-8c6f-04c93acca9db");
 
-    public static final int NUMBER_OF_VM_INTERFACES = 2;
+    public static final String MAC_ADDRESS = "00:1a:4a:16:87:db";
+    public static final int NUMBER_OF_VM_INTERFACES = 3;
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
index f3974ff..908dde9 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
@@ -271,6 +271,12 @@
         assertEquals(existingVmInterface, result.get(0));
     }
 
+    @Test
+    public void testGetAllMacsByStoragePool() throws Exception {
+        List<String> result = 
dao.getAllMacsByStoragePool(FixturesTool.STORAGE_POOL_NFS_2);
+        assertEquals(FixturesTool.MAC_ADDRESS, result.get(0));
+    }
+
     private void assertCorrectResultForTemplate(List<VmNetworkInterface> 
result) {
         assertNotNull(result);
         assertFalse(result.isEmpty());
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 660db29..1bc7b63 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -699,6 +699,20 @@
             <value>9000</value>
             <value>true</value>
         </row>
+        <row>
+            <value>58d5c1c6-cb15-4832-b2a4-023770607191</value>
+            <value>engine4</value>
+            <value>Management Network</value>
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <value>0</value>
+            <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value>
+            <value>1500</value>
+            <value>true</value>
+        </row>
     </table>
 
     <table name="network_cluster">
@@ -3093,6 +3107,19 @@
             <null />
             <value>false</value>
         </row>
+        <row>
+            <value>14550e82-1e1f-47b5-ae41-b009348dabfb</value>
+            <value>engine4</value>
+            <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value>
+            <value>1b85420c-b84c-4f29-997e-0eb674b40b79</value>
+            <value>00:1a:4a:16:87:db</value>
+            <value>nic1</value>
+            <value>1000</value>
+            <value>3</value>
+            <value>2013-01-24 11:14:00</value>
+            <null />
+            <value>false</value>
+        </row>
     </table>
 
     <table name="vm_interface_statistics">
@@ -3124,6 +3151,15 @@
         <row>
             <value>e2817b12-f873-4046-b0da-0098293c0000</value>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b79</value>
+            <value>0</value>
+            <value>0</value>
+            <value>0</value>
+            <value>0</value>
+            <value>1</value>
+        </row>
+            <row>
+            <value>14550e82-1e1f-47b5-ae41-b009348dabfb</value>
+            <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value>
             <value>0</value>
             <value>0</value>
             <value>0</value>
@@ -3994,6 +4030,19 @@
             <value>false</value>
             <value>alias</value>
         </row>
+              <row>
+            <value>14550e82-1e1f-47b5-ae41-b009348dabfb</value>
+            <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value>
+            <value>interface</value>
+            <value>bridge</value>
+            <value>sample</value>
+            <value>1</value>
+            <value>{}</value>
+            <value>true</value>
+            <value>false</value>
+            <value>false</value>
+            <value>alias</value>
+        </row>
      </table>
 
     <table name="job">


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

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

Reply via email to