private void selectMaster(ConfigBag parameters) { String newMasterId = parameters.get(NEW_MASTER_ID); Preconditions.checkNotNull(newMasterId, NEW_MASTER_ID.getName() + " parameter is required"); final Entity oldMaster = entity().getAttribute(BrooklynCluster.MASTER_NODE); if (oldMaster != null && oldMaster.getId().equals(newMasterId)) { LOG.info(newMasterId + " is already the current master, no change needed."); return; } final Entity newMaster = getMember(newMasterId); //1. Increase the priority of the node we wish to become master toggleNodePriority(newMaster, HA_MASTER_PRIORITY); //2. Demote the existing master so a new election takes place try { // this allows the finally block to run even on failure DynamicTasks.swallowChildrenFailures(); if (oldMaster != null) { demoteOldMaster(oldMaster, HighAvailabilityMode.HOT_STANDBY); } waitMasterHandover(oldMaster, newMaster); } finally { //3. Revert the priority of the node once it has become master toggleNodePriority(newMaster, HA_STANDBY_PRIORITY); } checkMasterSelected(newMaster); }