Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package crmsh for openSUSE:Factory checked 
in at 2022-09-27 20:14:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
 and      /work/SRC/openSUSE:Factory/.crmsh.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "crmsh"

Tue Sep 27 20:14:08 2022 rev:260 rq:1006343 version:4.4.1+20220923.9651e0fa

Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes      2022-09-21 
14:44:26.898077367 +0200
+++ /work/SRC/openSUSE:Factory/.crmsh.new.2275/crmsh.changes    2022-09-27 
20:14:10.997860443 +0200
@@ -1,0 +2,8 @@
+Fri Sep 23 09:05:44 UTC 2022 - xli...@suse.com
+
+- Update to version 4.4.1+20220923.9651e0fa:
+  * Dev: unittest: Adjust unit test based on prevous changes
+  * Dev: behave: Add functional test based on previous commit
+  * Fix: ui_cluster: 'crm cluster stop' failed to stop services (bsc#1203601)
+
+-------------------------------------------------------------------

Old:
----
  crmsh-4.4.1+20220921.dbe833c5.tar.bz2

New:
----
  crmsh-4.4.1+20220923.9651e0fa.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.uYSmPi/_old  2022-09-27 20:14:11.585861740 +0200
+++ /var/tmp/diff_new_pack.uYSmPi/_new  2022-09-27 20:14:11.593861757 +0200
@@ -36,7 +36,7 @@
 Summary:        High Availability cluster command-line interface
 License:        GPL-2.0-or-later
 Group:          %{pkg_group}
-Version:        4.4.1+20220921.dbe833c5
+Version:        4.4.1+20220923.9651e0fa
 Release:        0
 URL:            http://crmsh.github.io
 Source0:        %{name}-%{version}.tar.bz2

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.uYSmPi/_old  2022-09-27 20:14:11.633861846 +0200
+++ /var/tmp/diff_new_pack.uYSmPi/_new  2022-09-27 20:14:11.637861855 +0200
@@ -9,7 +9,7 @@
 </service>
 <service name="tar_scm">
   <param name="url">https://github.com/ClusterLabs/crmsh.git</param>
-  <param 
name="changesrevision">dbe833c5f8703d6a9990ef199ca0b7aae7255b72</param>
+  <param 
name="changesrevision">6236df2587ced94135a27867f11e442090b8d742</param>
 </service>
 </servicedata>
 (No newline at EOF)

++++++ crmsh-4.4.1+20220921.dbe833c5.tar.bz2 -> 
crmsh-4.4.1+20220923.9651e0fa.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220921.dbe833c5/crmsh/constants.py 
new/crmsh-4.4.1+20220923.9651e0fa/crmsh/constants.py
--- old/crmsh-4.4.1+20220921.dbe833c5/crmsh/constants.py        2022-09-21 
09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/crmsh/constants.py        2022-09-23 
10:48:20.000000000 +0200
@@ -522,4 +522,5 @@
 SCHEMA_MIN_VER_SUPPORT_OCF_1_1 = "pacemaker-3.7"
 REJOIN_COUNT = 60
 REJOIN_INTERVAL = 10
+DC_DEADTIME_DEFAULT = 20
 # vim:ts=4:sw=4:et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220921.dbe833c5/crmsh/ui_cluster.py 
new/crmsh-4.4.1+20220923.9651e0fa/crmsh/ui_cluster.py
--- old/crmsh-4.4.1+20220921.dbe833c5/crmsh/ui_cluster.py       2022-09-21 
09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/crmsh/ui_cluster.py       2022-09-23 
10:48:20.000000000 +0200
@@ -186,10 +186,18 @@
                 else:
                     logger.info("Cluster services already stopped on 
{}".format(node))
                 node_list.remove(node)
+            elif not utils.service_is_active("pacemaker.service", 
remote_addr=node):
+                utils.stop_service("corosync", remote_addr=node)
+                logger.info("Cluster services stopped on {}".format(node))
+                node_list.remove(node)
         if not node_list:
             return
 
-        if not utils.get_dc(timeout=5):
+        dc_deadtime = utils.get_property("dc-deadtime") or 
constants.DC_DEADTIME_DEFAULT
+        dc_timeout = int(dc_deadtime.strip('s')) + 5
+        try:
+            utils.check_function_with_timeout(utils.get_dc, 
wait_timeout=dc_timeout)
+        except TimeoutError:
             logger.error("No DC found currently, please wait if the cluster is 
still starting")
             return False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220921.dbe833c5/crmsh/utils.py 
new/crmsh-4.4.1+20220923.9651e0fa/crmsh/utils.py
--- old/crmsh-4.4.1+20220921.dbe833c5/crmsh/utils.py    2022-09-21 
09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/crmsh/utils.py    2022-09-23 
10:48:20.000000000 +0200
@@ -837,10 +837,8 @@
         return False
 
 
-def get_dc(timeout=None):
-    cmd = "crmadmin -D"
-    if timeout:
-        cmd += " -t {}".format(timeout)
+def get_dc():
+    cmd = "crmadmin -D -t 1"
     rc, s, _ = get_stdout_stderr(add_sudo(cmd))
     if rc != 0:
         return None
@@ -3002,7 +3000,8 @@
     """
     Get cluster properties
     """
-    cmd = "crm configure get_property " + name
+    cib_path = os.getenv('CIB_file', constants.CIB_RAW_FILE)
+    cmd = "CIB_file={} crm configure get_property {}".format(cib_path, name)
     rc, stdout, _ = get_stdout_stderr(cmd)
     return stdout if rc == 0 else None
 
@@ -3134,4 +3133,20 @@
         code, _, _ = get_stdout_stderr(cmd)
         rc = code == 0
     return rc
+
+
+def check_function_with_timeout(check_function, wait_timeout=30, interval=1):
+    """
+    Run check_function in a loop
+    Return when check_function is true
+    Raise TimeoutError when timeout
+    """
+    current_time = int(time.time())
+    timeout = current_time + wait_timeout
+    while current_time <= timeout:
+        if check_function():
+            return
+        time.sleep(interval)
+        current_time = int(time.time())
+    raise TimeoutError
 # vim:ts=4:sw=4:et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220921.dbe833c5/test/features/bootstrap_bugs.feature 
new/crmsh-4.4.1+20220923.9651e0fa/test/features/bootstrap_bugs.feature
--- old/crmsh-4.4.1+20220921.dbe833c5/test/features/bootstrap_bugs.feature      
2022-09-21 09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/test/features/bootstrap_bugs.feature      
2022-09-23 10:48:20.000000000 +0200
@@ -112,3 +112,22 @@
     When    Run "crm cluster remove HANODE2 -y" on "hanode1"
     Then    Cluster service is "stopped" on "hanode2"
     And     Online nodes are "hanode1"
+
+  @clean
+  Scenario: Stop service quickly(bsc#1203601)
+    Given   Cluster service is "stopped" on "hanode1"
+    And     Cluster service is "stopped" on "hanode2"
+    When    Run "crm cluster init -y" on "hanode1"
+    Then    Cluster service is "started" on "hanode1"
+    When    Run "crm cluster join -c hanode1 -y" on "hanode2"
+    Then    Cluster service is "started" on "hanode2"
+    When    Run "crm cluster stop --all" on "hanode1"
+    Then    Cluster service is "stopped" on "hanode1"
+    And     Cluster service is "stopped" on "hanode2"
+    When    Run "crm cluster start --all;crm cluster stop --all" on "hanode1"
+    Then    Cluster service is "stopped" on "hanode1"
+    And     Cluster service is "stopped" on "hanode2"
+    When    Run "systemctl start corosync" on "hanode1"
+    Then    Service "corosync" is "started" on "hanode1"
+    When    Run "crm cluster stop" on "hanode1"
+    Then    Service "corosync" is "stopped" on "hanode1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220921.dbe833c5/test/unittests/test_ui_cluster.py 
new/crmsh-4.4.1+20220923.9651e0fa/test/unittests/test_ui_cluster.py
--- old/crmsh-4.4.1+20220921.dbe833c5/test/unittests/test_ui_cluster.py 
2022-09-21 09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/test/unittests/test_ui_cluster.py 
2022-09-23 10:48:20.000000000 +0200
@@ -101,21 +101,24 @@
     @mock.patch('crmsh.utils.is_quorate')
     @mock.patch('crmsh.utils.is_dlm_running')
     @mock.patch('crmsh.utils.get_dc')
+    @mock.patch('crmsh.utils.check_function_with_timeout')
+    @mock.patch('crmsh.utils.get_property')
     @mock.patch('crmsh.utils.service_is_active')
     @mock.patch('crmsh.ui_cluster.parse_option_for_nodes')
-    def test_do_stop(self, mock_parse_nodes, mock_active, mock_get_dc, 
mock_dlm_running, mock_is_quorate, mock_set_dlm, mock_stop, mock_info, 
mock_debug):
+    def test_do_stop(self, mock_parse_nodes, mock_active, mock_get_property, 
mock_check, mock_get_dc, mock_dlm_running, mock_is_quorate, mock_set_dlm, 
mock_stop, mock_info, mock_debug):
         context_inst = mock.Mock()
         mock_stop.side_effect = [["node1"], ["ndoe1"], ["node1"]]
         mock_parse_nodes.return_value = ["node1"]
-        mock_active.side_effect = [True, True]
+        mock_active.side_effect = [True, True, True]
         mock_dlm_running.return_value = True
         mock_is_quorate.return_value = False
-        mock_get_dc.return_value = "node1"
+        mock_get_property.return_value = "20s"
 
         self.ui_cluster_inst.do_stop(context_inst, "node1")
 
         mock_active.assert_has_calls([
             mock.call("corosync.service", remote_addr="node1"),
+            mock.call("pacemaker.service", remote_addr="node1"),
             mock.call("corosync-qdevice.service")
             ])
         mock_stop.assert_has_calls([
@@ -125,3 +128,4 @@
             ])
         mock_info.assert_called_once_with("Cluster services stopped on node1")
         mock_debug.assert_called_once_with("Quorum is lost; Set 
enable_quorum_fencing=0 and enable_quorum_lockspace=0 for dlm")
+        mock_check.assert_called_once_with(mock_get_dc, wait_timeout=25)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220921.dbe833c5/test/unittests/test_utils.py 
new/crmsh-4.4.1+20220923.9651e0fa/test/unittests/test_utils.py
--- old/crmsh-4.4.1+20220921.dbe833c5/test/unittests/test_utils.py      
2022-09-21 09:33:20.000000000 +0200
+++ new/crmsh-4.4.1+20220923.9651e0fa/test/unittests/test_utils.py      
2022-09-23 10:48:20.000000000 +0200
@@ -1607,11 +1607,13 @@
         ])
 
 
+@mock.patch('os.getenv')
 @mock.patch('crmsh.utils.get_stdout_stderr')
-def test_get_property(mock_run):
+def test_get_property(mock_run, mock_env):
     mock_run.return_value = (0, "data", None)
+    mock_env.return_value = "cib.xml"
     assert utils.get_property("no-quorum-policy") == "data"
-    mock_run.assert_called_once_with("crm configure get_property 
no-quorum-policy")
+    mock_run.assert_called_once_with("CIB_file=cib.xml crm configure 
get_property no-quorum-policy")
 
 
 @mock.patch('crmsh.utils.get_stdout_or_raise_error')

Reply via email to