Allon Mureinik has uploaded a new change for review. Change subject: core: Move getOrderedVmGuidsForRunMultipleActions ......................................................................
core: Move getOrderedVmGuidsForRunMultipleActions Moved getOrderedVmGuidsForRunMultipleActions(List<Guid>) from DbFacade (which it has nothing to do with) to VmStaticDao, where it makes sense. The tests for the method were moved from DbFacadeDAOTest to VmStaticDAOTest. A neat side bonus of this refactoring is getting all the capabilities of BaseDbFacadeDAO for free, allowing the method's code to be made much clearer. Change-Id: Ide46b9ad358a5de2815b8d41df2f86f950c9127c Signed-off-by: Allon Mureinik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVMActionRunner.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java 6 files changed, 196 insertions(+), 232 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/85/16385/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVMActionRunner.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVMActionRunner.java index ed0b9c4..4d7a768 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVMActionRunner.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVMActionRunner.java @@ -27,7 +27,7 @@ List<Guid> guids = new ArrayList<Guid>(); guids.addAll(runVmCommandsMap.keySet()); - List<Guid> orderedGuids = DbFacade.getInstance().getOrderedVmGuidsForRunMultipleActions(guids); + List<Guid> orderedGuids = DbFacade.getInstance().getVmStaticDao().getOrderedVmGuidsForRunMultipleActions(guids); commandsList.clear(); 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 5e09d79..9890f6b 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 @@ -3,7 +3,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,11 +34,11 @@ import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; -import org.ovirt.engine.core.common.businessentities.permissions; -import org.ovirt.engine.core.common.businessentities.vds_spm_id_map; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmNetworkStatistics; +import org.ovirt.engine.core.common.businessentities.permissions; +import org.ovirt.engine.core.common.businessentities.vds_spm_id_map; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.ActionGroupDAO; import org.ovirt.engine.core.dao.AdGroupDAO; @@ -328,31 +327,6 @@ .returningResultSet("RETURN_VALUE", mapper).execute(parameterSource); return (Integer) DbFacadeUtils.asSingleResult((List<?>) (dbResults.get("RETURN_VALUE"))); - } - - @SuppressWarnings("unchecked") - public List<Guid> getOrderedVmGuidsForRunMultipleActions(List<Guid> guids) { - RowMapper<Guid> mapper = new RowMapper<Guid>() { - @Override - public Guid mapRow(ResultSet rs, int rowNum) throws SQLException { - return Guid.createGuidFromStringDefaultEmpty(rs.getString("vm_guid")); - } - }; - - // Constructing an IN clause of SQL that contains a list of GUIDs - // The in clause looks like ('guid1','guid2','guid3') - StringBuilder guidsSb = new StringBuilder(); - guidsSb.append("'").append(StringUtils.join(guids, "','")).append("'"); - - MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_guids", guidsSb - .toString()); - - Map<String, Object> dbResults = dbEngineDialect.createJdbcCallForQuery(jdbcTemplate).withProcedureName( - "GetOrderedVmGuidsForRunMultipleActions").returningResultSet("RETURN_VALUE", mapper).execute( - parameterSource); - - return (ArrayList<Guid>) dbResults.get("RETURN_VALUE"); - } /** diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java index f548d16..073abc4 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java @@ -83,4 +83,6 @@ * @return */ public void incrementDbGeneration(Guid id); + + List<Guid> getOrderedVmGuidsForRunMultipleActions(List<Guid> guids); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java index 38b4aba..ad5487b 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java @@ -5,6 +5,7 @@ import java.util.List; import org.apache.commons.lang.NotImplementedException; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.VmStatic; @@ -168,6 +169,20 @@ .addValue("vm_guid", id)); } + public List<Guid> getOrderedVmGuidsForRunMultipleActions(List<Guid> guids) { + // Constructing an IN clause of SQL that contains a list of GUIDs + // The in clause looks like ('guid1','guid2','guid3') + StringBuilder guidsSb = new StringBuilder(); + guidsSb.append("'").append(StringUtils.join(guids, "','")).append("'"); + + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_guids", guidsSb + .toString()); + + return getCallsHandler().executeReadList("GetOrderedVmGuidsForRunMultipleActions", createGuidMapper() + , getCustomMapSqlParameterSource().addValue("vm_guids", guidsSb + .toString())); + } + /** * JDBC row mapper for VM static */ diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java index e0fc04b8..fa9d22d 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java @@ -8,22 +8,16 @@ import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import java.util.Properties; import javax.sql.DataSource; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.BaseDisk; import org.ovirt.engine.core.common.businessentities.Bookmark; import org.ovirt.engine.core.common.businessentities.DbUser; -import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.RoleType; @@ -71,10 +65,6 @@ private static final Guid SYSTEM_OBJECT_ID = new Guid("AAA00000-0000-0000-0000-123456789AAA"); private static final String STATIC_VM_NAME = "rhel5-pool-50"; private static final int NUM_OF_VM_STATIC_IN_FIXTURES = 3; - List<VmStatic> vmStatics; - VmStatic[] vmStaticArrayInDescOrder; - Guid[] guidsArrayToBeChecked; - List<Guid> vmStaticGuidsInDb; private static final int NUM_OF_VM_IN_FIXTURES_WITH_STATUS_MIGRATING_FROM = 2; private static final int NUM_OF_USERS_IN_FIXTURES = 2; private static final Guid STORAGE_POOL_WITH_MASTER_UP = new Guid("386BFFD1-E7ED-4B08-BCE9-D7DF10F8C9A0"); @@ -83,31 +73,6 @@ private static final Guid DIRECTORY_ELEMENT_ID_WITH_BASIC_PERMISSIONS = new Guid("88D4301A-17AF-496C-A793-584640853D4B"); private static final Guid VMT_ID = new Guid("1b85420c-b84c-4f29-997e-0eb674b40b79"); - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - - // Retrieve all three vmstatics that were defined by fixtures and put in an array - vmStatics = dbFacade.getVmStaticDao().getAllByName(STATIC_VM_NAME); - vmStaticArrayInDescOrder = new VmStatic[NUM_OF_VM_STATIC_IN_FIXTURES]; - guidsArrayToBeChecked = new Guid[NUM_OF_VM_STATIC_IN_FIXTURES]; - vmStaticGuidsInDb = getListOfGuidFromListOfVmStatics(vmStatics); - } - - /** - * Restores the fixtures back to initial status - * - * @param vmStatics - */ - @After - public void restoreFixtures() { - Iterator<VmStatic> vmStaticIterator = vmStatics.iterator(); - while (vmStaticIterator.hasNext()) { - dbFacade.getVmStaticDao().update(vmStaticIterator.next()); - } - } /** * Ensures that the checkDBConnection method returns true when the connection is up @@ -199,174 +164,6 @@ nonAdminUser = dbFacade.getDbUserDao().get(nonAdminUser.getuser_id()); assertTrue(nonAdminUser.getLastAdminCheckStatus()); - } - - /** - * Checking if the function gets the VmStatics in correct order according to priority - */ - @Test - public void testGetOrderedVmGuidsForRunMultipleActionsByPriority() { - assertNotNull(vmStatics); - vmStaticArrayInDescOrder = initVmStaticsOrderedByPriority(vmStatics); - - // execute - vmStaticGuidsInDb = dbFacade.getOrderedVmGuidsForRunMultipleActions(vmStaticGuidsInDb); - assertNotNull(vmStaticGuidsInDb); - guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(guidsArrayToBeChecked); - - boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); - assertTrue(result); - } - - /** - * Checking if the function gets the VmStatics in correct order according to auto_startup - */ - @Test - public void testGetOrderedVmGuidsForRunMultipleActionsByAutoStartup() { - assertNotNull(vmStatics); - vmStaticArrayInDescOrder = initVmStaticsOrderedByAutoStartup(vmStatics); - - // execute - vmStaticGuidsInDb = dbFacade.getOrderedVmGuidsForRunMultipleActions(vmStaticGuidsInDb); - assertNotNull(vmStaticGuidsInDb); - guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(guidsArrayToBeChecked); - - boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); - assertTrue(result); - } - - /** - * Checking if the function gets the VmStatics in correct order according to MigrationSupport - */ - @Test - public void testGetOrderedVmGuidsForRunMultipleActionsByMigrationSupport() { - assertNotNull(vmStatics); - vmStaticArrayInDescOrder = initVmStaticsOrderedByMigrationSupport(vmStatics); - - // execute - vmStaticGuidsInDb = dbFacade.getOrderedVmGuidsForRunMultipleActions(vmStaticGuidsInDb); - assertNotNull(vmStaticGuidsInDb); - guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(guidsArrayToBeChecked); - - boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); - assertTrue(result); - } - - /** - * {@code initVmStaticsOrderedByAutoStartup(List)} is the first method in VMs order selection tests. The other init - * methods: <br> - * {@code initVmStaticsOrderedByPriority} and {@code initVmStaticsOrderedByAutoStartup} are relying on each other - * for creating an array of VM Static objects.<br> - * Each of the methods modifies the VM static array according to the column which is being tested, started from the - * least important column to the most.<br> - * That way prioritizing a preceded column should be reflected in the selection and therefore to validate the order - * is maintained. - * - * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport.<br> - * The MigrationSupport is the one being checked.<br> - */ - private VmStatic[] initVmStaticsOrderedByMigrationSupport(List<VmStatic> vmStatics) { - VmStatic[] vmStaticArray = new VmStatic[NUM_OF_VM_STATIC_IN_FIXTURES]; - - vmStaticArray = vmStatics.toArray(vmStaticArray); - - // initialize the VMs with equal settings: non HA, priority 1 and MIGRATABLE - for (VmStatic element : vmStaticArray) { - element.setAutoStartup(false); - element.setPriority(1); - element.setMigrationSupport(MigrationSupport.MIGRATABLE); - } - - // set higher migration support value for the first VM - vmStaticArray[0].setMigrationSupport(MigrationSupport.PINNED_TO_HOST); - vmStaticArray[1].setMigrationSupport(MigrationSupport.IMPLICITLY_NON_MIGRATABLE); - updateArrayOfVmStaticsInDb(vmStaticArray); - return vmStaticArray; - } - - /** - * Creates an array of VM static which was initiated for MigrationSupport order, and modified the priority to - * reflect the precedence of the priority column on top the MigrationSupport. - * - * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport. The - * priority is the one being checked. - */ - private VmStatic[] initVmStaticsOrderedByPriority(List<VmStatic> vmStatics) { - VmStatic[] vmStaticArray = initVmStaticsOrderedByMigrationSupport(vmStatics); - - // Swapping the first two VmStatics - VmStatic tempVmStatic = vmStaticArray[0]; - vmStaticArray[0] = vmStaticArray[1]; - vmStaticArray[1] = tempVmStatic; - - int arrayLength = vmStaticArray.length; - - // Setting the array in descending order due to their priorities to maintain its correctness - for (int i = 0; i < arrayLength; i++) { - vmStaticArray[i].setPriority(arrayLength - i + 1); - } - - updateArrayOfVmStaticsInDb(vmStaticArray); - return vmStaticArray; - } - - /** - * Creates an array of VM static which was initiated for Priority and MigrationSupport order, and modified the - * auto-startup to reflect the precedence of the auto-startup column on top the Priority. - * - * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport. The - * auto_startup is the one being checked - */ - private VmStatic[] initVmStaticsOrderedByAutoStartup(List<VmStatic> vmStatics) { - VmStatic[] vmStaticArray = initVmStaticsOrderedByPriority(vmStatics); - - // Swapping the first two VmStatics - VmStatic tempVmStatic = vmStaticArray[0]; - vmStaticArray[0] = vmStaticArray[1]; - vmStaticArray[1] = tempVmStatic; - - // Maintaining the order correctness of the elements by incrementing the auto_startup of the first element - vmStaticArray[0].setAutoStartup(true); - - updateArrayOfVmStaticsInDb(vmStaticArray); - return vmStaticArray; - } - - /** - * Converts a list of vmStatics to a list if Guids - */ - private List<Guid> getListOfGuidFromListOfVmStatics(List<VmStatic> vmStatics) { - List<Guid> listOfGuidToReturn = new ArrayList<Guid>(); - for (VmStatic vmStatic : vmStatics) { - listOfGuidToReturn.add(vmStatic.getId()); - } - return listOfGuidToReturn; - } - - /** - * Updates the given array of vmStatics in the Database - */ - private void updateArrayOfVmStaticsInDb(VmStatic[] vmStaticArray) { - for (VmStatic element : vmStaticArray) { - dbFacade.getVmStaticDao().update(element); - } - } - - /** - * Compares between the two given guid arrays, returns true if they are equal and false otherwise - */ - private boolean compareGuidArrays(Guid[] guidsArrayToBeChecked, VmStatic[] vmStaticArrayInDescOrder) { - boolean returnValue = true; - if (guidsArrayToBeChecked.length == vmStaticArrayInDescOrder.length) { - for (int i = 0; i < guidsArrayToBeChecked.length; i++) { - if (!guidsArrayToBeChecked[i].equals(vmStaticArrayInDescOrder[i].getId())) { - returnValue = false; - break; - } - } - } - - return returnValue; } @Test diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java index 0bfe7f8..f412d71 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java @@ -9,10 +9,12 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.NotImplementedException; import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.VmStatic; @@ -27,6 +29,9 @@ private static final Guid EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355"); private static final Guid VDS_STATIC_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6"); private static final Guid VDS_GROUP_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); + + private static final String STATIC_VM_NAME = "rhel5-pool-50"; + private static final int NUM_OF_VM_STATIC_IN_FIXTURES = 3; private VmStaticDAO dao; private VmStatic existingVmStatic; @@ -221,4 +226,175 @@ assertFalse(namesPinnedToHost.isEmpty()); assertTrue(namesPinnedToHost.contains(existingVmStatic.getName())); } + + /** + * Checking if the function gets the VmStatics in correct order according to priority + */ + @Test + public void testGetOrderedVmGuidsForRunMultipleActionsByPriority() { + List<VmStatic> vmStatics = dao.getAllByName(STATIC_VM_NAME); + VmStatic[] vmStaticArrayInDescOrder = initVmStaticsOrderedByPriority(vmStatics); + + // execute + List<Guid> vmStaticGuidsInDb = + dao.getOrderedVmGuidsForRunMultipleActions(getListOfGuidFromListOfVmStatics(vmStatics)); + assertNotNull(vmStaticGuidsInDb); + Guid[] guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(new Guid[vmStaticGuidsInDb.size()]); + + boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); + assertTrue(result); + } + + /** + * Checking if the function gets the VmStatics in correct order according to auto_startup + */ + @Test + public void testGetOrderedVmGuidsForRunMultipleActionsByAutoStartup() { + List<VmStatic> vmStatics = dao.getAllByName(STATIC_VM_NAME); + VmStatic[] vmStaticArrayInDescOrder = initVmStaticsOrderedByAutoStartup(vmStatics); + + // execute + List<Guid> vmStaticGuidsInDb = + dao.getOrderedVmGuidsForRunMultipleActions(getListOfGuidFromListOfVmStatics(vmStatics)); + assertNotNull(vmStaticGuidsInDb); + Guid[] guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(new Guid[vmStaticGuidsInDb.size()]); + + boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); + assertTrue(result); + } + + /** + * Checking if the function gets the VmStatics in correct order according to MigrationSupport + */ + @Test + public void testGetOrderedVmGuidsForRunMultipleActionsByMigrationSupport() { + List<VmStatic> vmStatics = dao.getAllByName(STATIC_VM_NAME); + VmStatic[] vmStaticArrayInDescOrder = initVmStaticsOrderedByMigrationSupport(vmStatics); + + // execute + List<Guid> vmStaticGuidsInDb = + dao.getOrderedVmGuidsForRunMultipleActions(getListOfGuidFromListOfVmStatics(vmStatics)); + assertNotNull(vmStaticGuidsInDb); + Guid[] guidsArrayToBeChecked = vmStaticGuidsInDb.toArray(new Guid[vmStaticGuidsInDb.size()]); + + boolean result = compareGuidArrays(guidsArrayToBeChecked, vmStaticArrayInDescOrder); + assertTrue(result); + } + + /** + * {@code initVmStaticsOrderedByAutoStartup(List)} is the first method in VMs order selection tests. The other init + * methods: <br> + * {@code initVmStaticsOrderedByPriority} and {@code initVmStaticsOrderedByAutoStartup} are relying on each other + * for creating an array of VM Static objects.<br> + * Each of the methods modifies the VM static array according to the column which is being tested, started from the + * least important column to the most.<br> + * That way prioritizing a preceded column should be reflected in the selection and therefore to validate the order + * is maintained. + * + * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport.<br> + * The MigrationSupport is the one being checked.<br> + */ + private VmStatic[] initVmStaticsOrderedByMigrationSupport(List<VmStatic> vmStatics) { + VmStatic[] vmStaticArray = new VmStatic[NUM_OF_VM_STATIC_IN_FIXTURES]; + + vmStaticArray = vmStatics.toArray(vmStaticArray); + + // initialize the VMs with equal settings: non HA, priority 1 and MIGRATABLE + for (VmStatic element : vmStaticArray) { + element.setAutoStartup(false); + element.setPriority(1); + element.setMigrationSupport(MigrationSupport.MIGRATABLE); + } + + // set higher migration support value for the first VM + vmStaticArray[0].setMigrationSupport(MigrationSupport.PINNED_TO_HOST); + vmStaticArray[1].setMigrationSupport(MigrationSupport.IMPLICITLY_NON_MIGRATABLE); + updateArrayOfVmStaticsInDb(vmStaticArray); + return vmStaticArray; + } + + /** + * Creates an array of VM static which was initiated for MigrationSupport order, and modified the priority to + * reflect the precedence of the priority column on top the MigrationSupport. + * + * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport. The + * priority is the one being checked. + */ + private VmStatic[] initVmStaticsOrderedByPriority(List<VmStatic> vmStatics) { + VmStatic[] vmStaticArray = initVmStaticsOrderedByMigrationSupport(vmStatics); + + // Swapping the first two VmStatics + VmStatic tempVmStatic = vmStaticArray[0]; + vmStaticArray[0] = vmStaticArray[1]; + vmStaticArray[1] = tempVmStatic; + + int arrayLength = vmStaticArray.length; + + // Setting the array in descending order due to their priorities to maintain its correctness + for (int i = 0; i < arrayLength; i++) { + vmStaticArray[i].setPriority(arrayLength - i + 1); + } + + updateArrayOfVmStaticsInDb(vmStaticArray); + return vmStaticArray; + } + + /** + * Creates an array of VM static which was initiated for Priority and MigrationSupport order, and modified the + * auto-startup to reflect the precedence of the auto-startup column on top the Priority. + * + * @return an array of VmStatics, in descending order according to: auto_startup, priority, MigrationSupport. The + * auto_startup is the one being checked + */ + private VmStatic[] initVmStaticsOrderedByAutoStartup(List<VmStatic> vmStatics) { + VmStatic[] vmStaticArray = initVmStaticsOrderedByPriority(vmStatics); + + // Swapping the first two VmStatics + VmStatic tempVmStatic = vmStaticArray[0]; + vmStaticArray[0] = vmStaticArray[1]; + vmStaticArray[1] = tempVmStatic; + + // Maintaining the order correctness of the elements by incrementing the auto_startup of the first element + vmStaticArray[0].setAutoStartup(true); + + updateArrayOfVmStaticsInDb(vmStaticArray); + return vmStaticArray; + } + + /** + * Updates the given array of vmStatics in the Database + */ + private void updateArrayOfVmStaticsInDb(VmStatic[] vmStaticArray) { + for (VmStatic element : vmStaticArray) { + dao.update(element); + } + } + + /** + * Converts a list of vmStatics to a list if Guids + */ + private static List<Guid> getListOfGuidFromListOfVmStatics(List<VmStatic> vmStatics) { + List<Guid> listOfGuidToReturn = new ArrayList<Guid>(); + for (VmStatic vmStatic : vmStatics) { + listOfGuidToReturn.add(vmStatic.getId()); + } + return listOfGuidToReturn; + } + + /** + * Compares between the two given guid arrays, returns true if they are equal and false otherwise + */ + private static boolean compareGuidArrays(Guid[] guidsArrayToBeChecked, VmStatic[] vmStaticArrayInDescOrder) { + boolean returnValue = true; + if (guidsArrayToBeChecked.length == vmStaticArrayInDescOrder.length) { + for (int i = 0; i < guidsArrayToBeChecked.length; i++) { + if (!guidsArrayToBeChecked[i].equals(vmStaticArrayInDescOrder[i].getId())) { + returnValue = false; + break; + } + } + } + + return returnValue; + } } -- To view, visit http://gerrit.ovirt.org/16385 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ide46b9ad358a5de2815b8d41df2f86f950c9127c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Allon Mureinik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
