You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2015/10/19 15:54:17 UTC

[31/50] [abbrv] ambari git commit: AMBARI-13427: NAMENODE START failed with both NN's being passive (jluniya)

AMBARI-13427: NAMENODE START failed with both NN's being passive (jluniya)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ce356ddc
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ce356ddc
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ce356ddc

Branch: refs/heads/branch-dev-patch-upgrade
Commit: ce356ddc8ca233737e270fec097381192bc4bcb8
Parents: 2f7184a
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Fri Oct 16 08:43:13 2015 -0700
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Fri Oct 16 08:43:13 2015 -0700

----------------------------------------------------------------------
 .../libraries/functions/namenode_ha_utils.py    | 27 ++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ce356ddc/ambari-common/src/main/python/resource_management/libraries/functions/namenode_ha_utils.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/namenode_ha_utils.py b/ambari-common/src/main/python/resource_management/libraries/functions/namenode_ha_utils.py
index 99f90b8..0920e85 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/namenode_ha_utils.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/namenode_ha_utils.py
@@ -23,6 +23,8 @@ from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.jmx import get_value_from_jmx
 from resource_management.core.base import Fail
 from resource_management.core import shell
+from resource_management.core.logger import Logger
+from resource_management.libraries.functions.decorator import retry
 
 __all__ = ["get_namenode_states", "get_active_namenode", "get_property_for_active_namenode"]
 
@@ -32,8 +34,29 @@ HDFS_NN_STATE_STANDBY = 'standby'
 NAMENODE_HTTP_FRAGMENT = 'dfs.namenode.http-address.{0}.{1}'
 NAMENODE_HTTPS_FRAGMENT = 'dfs.namenode.https-address.{0}.{1}'
 JMX_URI_FRAGMENT = "{0}://{1}/jmx?qry=Hadoop:service=NameNode,name=FSNamesystem"
-  
-def get_namenode_states(hdfs_site, security_enabled, run_user):
+
+def get_namenode_states(hdfs_site, security_enabled, run_user, times=10, sleep_time=1, backoff_factor=2):
+  """
+  return format [('nn1', 'hdfs://hostname1:port1'), ('nn2', 'hdfs://hostname2:port2')] , [....], [....]
+  """
+  @retry(times=times, sleep_time=sleep_time, backoff_factor=backoff_factor, err_class=Fail)
+  def doRetries(hdfs_site, security_enabled, run_user):
+    doRetries.attempt += 1
+    active_namenodes, standby_namenodes, unknown_namenodes = get_namenode_states_noretries(hdfs_site, security_enabled, run_user)
+    Logger.info(
+      "NameNode HA states: active_namenodes = {0}, standby_namenodes = {1}, unknown_namenodes = {2}".format(
+        active_namenodes, standby_namenodes, unknown_namenodes))
+    if active_namenodes:
+      return active_namenodes, standby_namenodes, unknown_namenodes
+    elif doRetries.attempt == times:
+      Logger.warning("No active NameNode was found after {0} retries. Will return current NameNode HA states".format(times))
+      return active_namenodes, standby_namenodes, unknown_namenodes
+    raise Fail('No active NameNode was found.')
+
+  doRetries.attempt = 0
+  return doRetries(hdfs_site, security_enabled, run_user)
+
+def get_namenode_states_noretries(hdfs_site, security_enabled, run_user):
   """
   return format [('nn1', 'hdfs://hostname1:port1'), ('nn2', 'hdfs://hostname2:port2')] , [....], [....]
   """