You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by wu...@apache.org on 2022/11/17 09:23:17 UTC

[ambari] branch trunk updated: AMBARI-25465: Postgresql service naming convention changed on SUSE 12 SP2 (#3528)

This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 0bc9adeeec AMBARI-25465: Postgresql service naming convention changed on SUSE 12 SP2 (#3528)
0bc9adeeec is described below

commit 0bc9adeeecb8a5301b13abd56b797c2a2f3b7631
Author: Yu Hou <52...@qq.com>
AuthorDate: Thu Nov 17 17:23:11 2022 +0800

    AMBARI-25465: Postgresql service naming convention changed on SUSE 12 SP2 (#3528)
---
 .../src/main/python/ambari_commons/os_linux.py     |  7 +++++++
 .../src/main/python/ambari_commons/os_utils.py     |  7 +++++--
 .../src/main/python/ambari_commons/os_windows.py   | 10 ++++++++++
 .../python/ambari_server/dbConfiguration_linux.py  | 23 ++++++++++++++++++----
 4 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/ambari-common/src/main/python/ambari_commons/os_linux.py b/ambari-common/src/main/python/ambari_commons/os_linux.py
index 053051bd69..448018383d 100644
--- a/ambari-common/src/main/python/ambari_commons/os_linux.py
+++ b/ambari-common/src/main/python/ambari_commons/os_linux.py
@@ -84,3 +84,10 @@ def os_set_open_files_limit(maxOpenFiles):
 
 def os_getpass(prompt):
   return getpass.unix_getpass(prompt)
+
+def os_is_service_exist(serviceName):
+  if os.path.exists('/run/systemd/system/'):
+    return os.popen('systemctl list-units --full -all | grep "%s.service"' % serviceName).read().strip() != ''
+
+  status = os.system("service %s status >/dev/null 2>&1" % serviceName)
+  return status != 256
\ No newline at end of file
diff --git a/ambari-common/src/main/python/ambari_commons/os_utils.py b/ambari-common/src/main/python/ambari_commons/os_utils.py
index 4224f003de..ac86154ec7 100644
--- a/ambari-common/src/main/python/ambari_commons/os_utils.py
+++ b/ambari-common/src/main/python/ambari_commons/os_utils.py
@@ -33,11 +33,11 @@ else:
 
 if OSCheck.is_windows_family():
   from ambari_commons.os_windows import os_change_owner, os_getpass, os_is_root, os_run_os_command, \
-    os_set_open_files_limit, os_set_file_permissions
+    os_set_open_files_limit, os_set_file_permissions, os_is_service_exist
 else:
   # MacOS not supported
   from ambari_commons.os_linux import os_change_owner, os_getpass, os_is_root, os_run_os_command, \
-    os_set_open_files_limit, os_set_file_permissions
+    os_set_open_files_limit, os_set_file_permissions, os_is_service_exist
   pass
 
 from ambari_commons.exceptions import FatalException
@@ -137,6 +137,9 @@ def set_open_files_limit(maxOpenFiles):
 def get_password(prompt):
   return os_getpass(prompt)
 
+def is_service_exist(serviceName):
+  return os_is_service_exist(serviceName)
+
 def find_in_path(file):
   full_path = _search_file(file, os.environ["PATH"], os.pathsep)
   if full_path is None:
diff --git a/ambari-common/src/main/python/ambari_commons/os_windows.py b/ambari-common/src/main/python/ambari_commons/os_windows.py
index 4c22384cdf..f674894c87 100644
--- a/ambari-common/src/main/python/ambari_commons/os_windows.py
+++ b/ambari-common/src/main/python/ambari_commons/os_windows.py
@@ -471,6 +471,16 @@ def wait_for_pid_wmi(processName, parentPid, pattern, timeout):
   return 0
 
 
+def os_is_service_exist(serviceName):
+  try:
+    win32serviceutil.QueryServiceStatus(serviceName)
+  except:
+    # "Windows service NOT installed"
+    return False
+  else:
+    # "Windows service installed"
+    return True
+
 #need this for redirecting output form python process to file
 class SyncStreamWriter(object):
   def __init__(self, stream, hMutexWrite):
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py b/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
index e95bbbddf5..4790f5d9d8 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
@@ -31,7 +31,7 @@ import pwd
 from ambari_commons import OSCheck, OSConst
 from ambari_commons.logging_utils import get_silent, get_verbose, print_error_msg, print_info_msg, print_warning_msg
 from ambari_commons.exceptions import NonFatalException, FatalException
-from ambari_commons.os_utils import copy_files, find_in_path, is_root, remove_file, run_os_command
+from ambari_commons.os_utils import copy_files, find_in_path, is_root, remove_file, run_os_command, is_service_exist
 from ambari_server.dbConfiguration import DBMSConfig, USERNAME_PATTERN, SETUP_DB_CONNECT_ATTEMPTS, \
     SETUP_DB_CONNECT_TIMEOUT, STORAGE_TYPE_LOCAL, DEFAULT_USERNAME, DEFAULT_PASSWORD
 from ambari_server.serverConfiguration import encrypt_password, store_password_file, \
@@ -385,11 +385,25 @@ class PGConfig(LinuxDBMSConfig):
     PG_HBA_RELOAD_CMD = AMBARI_SUDO_BINARY + " %s reload %s" % (SERVICE_CMD, PG_SERVICE_NAME)
   else:
     SERVICE_CMD = "/usr/bin/env service"
-    PG_ST_CMD = "%s %s status" % (SERVICE_CMD, PG_SERVICE_NAME)
     if os.path.isfile("/usr/bin/postgresql-setup"):
         PG_INITDB_CMD = "/usr/bin/postgresql-setup initdb"
     else:
-        PG_INITDB_CMD = "%s %s initdb" % (SERVICE_CMD, PG_SERVICE_NAME)
+      PG_INITDB_CMD = "%s %s initdb" % (SERVICE_CMD, PG_SERVICE_NAME)
+
+      if OSCheck.is_suse_family() and not is_service_exist(PG_SERVICE_NAME):
+        versioned_script_paths = glob.glob("/usr/pgsql-*/bin/postgresql*-setup")
+        if versioned_script_paths:
+          versioned_script_path_tps = map(lambda path: (re.search(r'pgsql-([0-9]+\.?[0-9]*)', path).group(1), path), versioned_script_paths)
+          versioned_script_path_tps.sort(key = lambda t: float(t[0]), reverse = True)
+          for versioned_script_path_tp in versioned_script_path_tps:
+            pgsql_service_file_name = "postgresql-%s" % versioned_script_path_tp[0]
+            if is_service_exist(pgsql_service_file_name):
+              PG_SERVICE_NAME = pgsql_service_file_name
+              PG_INITDB_CMD = "%s initdb" % versioned_script_path_tp[1]
+              PG_HBA_DIR = "/var/lib/pgsql/%s/data" % versioned_script_path_tp[0]
+              break
+
+    PG_ST_CMD = "%s %s status" % (SERVICE_CMD, PG_SERVICE_NAME)
 
     PG_START_CMD = AMBARI_SUDO_BINARY + " %s %s start" % (SERVICE_CMD, PG_SERVICE_NAME)
     PG_RESTART_CMD = AMBARI_SUDO_BINARY + " %s %s restart" % (SERVICE_CMD, PG_SERVICE_NAME)
@@ -433,7 +447,8 @@ class PGConfig(LinuxDBMSConfig):
 
     if self.persistence_type == STORAGE_TYPE_LOCAL:
       PGConfig.PG_STATUS_RUNNING = get_postgre_running_status()
-      PGConfig.PG_HBA_DIR = get_postgre_hba_dir(OS_FAMILY)
+      if not PGConfig.PG_HBA_DIR:
+        PGConfig.PG_HBA_DIR = get_postgre_hba_dir(OS_FAMILY)
 
       PGConfig.PG_HBA_CONF_FILE = os.path.join(PGConfig.PG_HBA_DIR, "pg_hba.conf")
       PGConfig.PG_HBA_CONF_FILE_BACKUP = os.path.join(PGConfig.PG_HBA_DIR, "pg_hba_bak.conf.old")


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ambari.apache.org
For additional commands, e-mail: commits-help@ambari.apache.org