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

adoroszlai 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 b6b293a  AMBARI-23477. Utility to parse initial active namenode for 
blueprint deployment (#900)
b6b293a is described below

commit b6b293ab0c1ac078da0017be4a957ef4da4c2cff
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Thu Apr 5 23:41:51 2018 +0200

    AMBARI-23477. Utility to parse initial active namenode for blueprint 
deployment (#900)
---
 .../libraries/functions/namenode_ha_utils.py       | 24 ++++++++++++++++++++--
 .../test/python/stacks/2.0.6/HDFS/test_namenode.py | 21 ++++++++++++++++++-
 2 files changed, 42 insertions(+), 3 deletions(-)

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 05fff1f..ae1a681 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
@@ -17,7 +17,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 '''
-from resource_management.libraries.functions.is_empty import is_empty
 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
@@ -164,7 +163,7 @@ def get_active_namenode(hdfs_site, security_enabled, 
run_user):
     return active_namenodes[0]
 
   raise NoActiveNamenodeException('No active NameNode was found.')
-  
+
 def get_property_for_active_namenodes(hdfs_site, property_name, 
security_enabled, run_user):
   """
   Return format: {'ns1': 'value1', 'ns2', 'value2'}
@@ -312,3 +311,24 @@ def get_nameservices(hdfs_site):
         return [ns]
     return [name_services_string.split(",")[0]] # default to return the first 
nameservice
   return []
+
+
+def get_initial_active_namenodes(hadoop_env):
+  """
+  :return: The set of initially active namenode hosts as specified by one of 
the
+           'hadoop-env/dfs_ha_initial_namenode_active_set' or
+           'hadoop-env/dfs_ha_initial_namenode_active' properties.
+           An empty set if the properties are unspecified or empty.
+  """
+  setting = ''
+
+  if 'dfs_ha_initial_namenode_active_set' in hadoop_env:
+    setting = hadoop_env['dfs_ha_initial_namenode_active_set']
+
+  if 'dfs_ha_initial_namenode_active' in hadoop_env and not setting:
+    setting = hadoop_env['dfs_ha_initial_namenode_active']
+
+  if setting:
+    return frozenset(setting.split(','))
+
+  return frozenset()
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py 
b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py
index 303ad3a..fb2aa2b 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py
@@ -24,6 +24,7 @@ import tempfile
 import time
 from stacks.utils.RMFTestCase import *
 from mock.mock import MagicMock, patch, call
+from resource_management.libraries.functions import namenode_ha_utils
 from resource_management.libraries.script.script import Script
 from resource_management.core import shell
 from resource_management.core.exceptions import Fail
@@ -835,7 +836,7 @@ class TestNamenode(RMFTestCase):
     active_namenodes = [('nn1', 'c6401.ambari.apache.org:50070')]
     standby_namenodes = [('nn2', 'c6402.ambari.apache.org:50070')]
     unknown_namenodes = []
-    
+
     get_namenode_states_mock.return_value = active_namenodes, 
standby_namenodes, unknown_namenodes
 
     call_mocks = MagicMock(return_value=(0,""))
@@ -1772,6 +1773,24 @@ class TestNamenode(RMFTestCase):
       #                       logoutput=True
       #                       )
 
+  def test_initial_active_namenode_unspecified(self):
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({}), 
frozenset())
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': '' }), frozenset())
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active_set': '' }), frozenset())
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': '', 'dfs_ha_initial_namenode_active_set': '' 
}), frozenset())
+
+  def test_initial_active_namenode_single(self):
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': 'c6401.ambari.apache.org' }), 
frozenset(['c6401.ambari.apache.org']))
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': 'c6401,c7401' }), frozenset(['c6401', 
'c7401']))
+
+  def test_initial_active_namenode_set(self):
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active_set': 'c6401.ambari.apache.org' }), 
frozenset(['c6401.ambari.apache.org']))
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active_set': 'c6401,c7401' }), frozenset(['c6401', 
'c7401']))
+
+  def test_initial_active_namenode_both(self):
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': '', 'dfs_ha_initial_namenode_active_set': 
'mult1,mult2' }), frozenset(['mult1', 'mult2']))
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': 'single', 
'dfs_ha_initial_namenode_active_set': 'mult1,mult2' }), frozenset(['mult1', 
'mult2']))
+    self.assertEqual(namenode_ha_utils.get_initial_active_namenodes({ 
'dfs_ha_initial_namenode_active': 'single', 
'dfs_ha_initial_namenode_active_set': '' }), frozenset(['single']))
 
 
 class Popen_Mock:

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to