/** * Update properties * * @param svcId node service id * @throws Exception */ private void updateProperties(String svcId) throws Exception { if (targetPropInfo.TARGET_PROPERTY.equals(targetPropInfo.OLD_TARGET_PROPERTY)) { coordinator.removeTargetInfo(targetPropInfo, true); } PropertyInfoExt diffProperties = new PropertyInfoExt(targetPropInfo.getDiffProperties(localTargetPropInfo)); PropertyInfoExt override_properties = new PropertyInfoExt(localRepository.getOverrideProperties().getAllProperties()); log.info("Step3a: Updating User Changed properties file: {}", override_properties); PropertyInfoExt updatedUserChangedProps = combineProps(override_properties, diffProperties); if (diffProperties.hasRebootProperty()) { if (!getPropertyLock(svcId)) { retrySleep(); } else if (!isQuorumMaintained()) { try { coordinator.releasePersistentLock(svcId, propertyLockId); } catch (Exception e) { log.error("Failed to release the property lock:", e); } retrySleep(); } else { log.info("Step3a: Reboot property found."); localRepository.setOverrideProperties(updatedUserChangedProps); log.info("Step3a: Updating properties: {}", updatedUserChangedProps); reboot(); } } else if (diffProperties.hasReconfigProperty() || !diffProperties.getNotifierTags().isEmpty()) { log.info("Step3a: Reconfig property found or notifiers specified."); // CTRL-9860: don't update the local config version until everything is done. String targetVersion = targetPropInfo.getProperty(PropertyInfoExt.CONFIG_VERSION); updatedUserChangedProps.addProperty(PropertyInfoExt.CONFIG_VERSION, localConfigVersion); localRepository.setOverrideProperties(updatedUserChangedProps); log.info( "Step3a: Updating properties without updating the config version: {}", updatedUserChangedProps); if (diffProperties.hasReconfigAttributeWithoutNotifiers()) { // this is the old-school "complete" reconfig that takes no notifiers as arguments. // moving forward this will diminish // i.e., all reconfigRequired properties will have notifier specified. localRepository.reconfig(); } else if (diffProperties.hasReconfigProperty()) { reconfigProperties(diffProperties); } // the notifier list can be empty, in which case nothing will be done. notifyPropertyChanges(diffProperties); // update the local config version to target version now log.info("Step3a: Updating the config version to {}", targetVersion); updatedUserChangedProps.addProperty(PropertyInfoExt.CONFIG_VERSION, targetVersion); localRepository.setOverrideProperties(updatedUserChangedProps); } else { log.info("Step3a: No reboot property found."); localRepository.setOverrideProperties(updatedUserChangedProps); log.info("Step3a: Updating properties: {}", updatedUserChangedProps); } }