AMBARI-22522 - Livy server fails to start during downgrade due to absence of 'conf' directory (Dmitro Lisnichenko via jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2817ad48 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2817ad48 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2817ad48 Branch: refs/heads/branch-feature-AMBARI-22008-isilon Commit: 2817ad481507033bccd1732943c305108585dc4b Parents: fded822 Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Sun Dec 17 20:48:31 2017 -0500 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Mon Dec 18 15:53:16 2017 -0500 ---------------------------------------------------------------------- .../custom_actions/scripts/install_packages.py | 37 +++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/2817ad48/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py index 862f205..c3fbc48 100644 --- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py +++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py @@ -31,7 +31,6 @@ from resource_management.core.resources import Package from resource_management.libraries.functions import conf_select from resource_management.libraries.functions import stack_tools from resource_management.libraries.functions.stack_select import get_stack_versions -from resource_management.libraries.functions.version import format_stack_version from resource_management.libraries.functions.repo_version_history \ import read_actual_version_from_history_file, write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE from resource_management.core.providers import get_provider @@ -155,11 +154,47 @@ class InstallPackages(Script): if num_errors > 0: raise Fail("Failed to distribute repositories/install packages") + self._fix_default_links("livy", "livy-server") + self._fix_default_links("livy2", "livy2-server") + # if installing a version of HDP that needs some symlink love, then create them if is_package_install_successful and 'actual_version' in self.structured_output: self._relink_configurations_with_conf_select(stack_id, self.structured_output['actual_version']) + def _fix_default_links(self, package_name, component_name): + """ + If a prior version of Ambari did not correctly reverse the conf symlinks, then they would + be put into a bad state when distributing a new stack. For example: + + /etc/component/conf (directory) + <stack-root>/v1/component/conf -> /etc/component/conf + + When distributing v2, we'd detect the /etc/component/conf problems and would try to adjust it: + /etc/component/conf -> <stack-root>/current/component/conf + <stack-root>/v2/component/conf -> /etc/component/v2/0 + + The problem is that v1 never gets changed (since the stack being distributed is v2), and + we end up with a circular link: + /etc/component/conf -> <stack-root>/current/component/conf + <stack-root>/v1/component/conf -> /etc/component/conf + + :return: None + """ + from resource_management.libraries.functions import stack_select + package_dirs = conf_select.get_package_dirs() + if package_name in package_dirs: + Logger.info("Attempting to fix the default conf links for {0}".format(package_name)) + + directories = package_dirs[package_name] + Logger.info("The following directories will be fixed for {0}: {1}".format(package_name, + str(directories))) + + stack_version = stack_select.get_stack_version_before_install(component_name) + if stack_version: + conf_select.convert_conf_directories_to_symlinks(package_name, stack_version, directories) + + def _relink_configurations_with_conf_select(self, stack_id, stack_version): """ Sets up the required structure for /etc/<component>/conf symlinks and <stack-root>/current