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