On Tue, Jul 02, 2013 at 07:53:52AM +0300, Vladislav Bogdanov wrote:
> 01.07.2013 18:29, Dejan Muhamedagic wrote:
> > Hi,
> > 
> > On Mon, Jul 01, 2013 at 05:29:31PM +0300, Vladislav Bogdanov wrote:
> >> Hi,
> >>
> >> I'm trying to look if it is now safe to delete non-running nodes
> >> (corosync 2.3, pacemaker HEAD, crmsh tip).
> >>
> >> # crm node delete v02-d
> >> WARNING: 2: crm_node bad format: 7 v02-c
> >> WARNING: 2: crm_node bad format: 8 v02-d
> >> WARNING: 2: crm_node bad format: 5 v02-a
> >> WARNING: 2: crm_node bad format: 6 v02-b
> >> INFO: 2: node v02-d not found by crm_node
> >> INFO: 2: node v02-d deleted
> >> #
> >>
> >> So, I expect that crmsh still doesn't follow latest changes to 'crm_node
> >> -l'. Although node seems to be deleted correctly.
> >>
> >> For reference, output of crm_node -l is:
> >> 7 v02-c
> >> 8 v02-d
> >> 5 v02-a
> >> 6 v02-b
> > 
> > This time the node state was empty. Or it's missing altogether.
> > I'm not sure how's that supposed to be interpreted. We test the
> > output of crm_node -l just to make sure that the node is not
> > online. Perhaps we need to use some other command.
> 
> Likely it shows everything from a corosync nodelist.
> After I deleted the node from everywhere except corosync, list is still
> the same.

OK. This patch changes the interface to crm_node to use the
"list partition" option (-p). Could you please test it?

Cheers,

Dejan

> _______________________________________________
> Linux-HA mailing list
> Linux-HA@lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha
> See also: http://linux-ha.org/ReportingProblems
# HG changeset patch
# User Dejan Muhamedagic <de...@hello-penguin.com>
# Date 1372868970 -7200
#      Wed Jul 03 18:29:30 2013 +0200
# Node ID d6f915195baceb5d0e3b76297ad1c8188c767e2f
# Parent  2c70ae4d11d3744bb6917170d0216617ec3a11dd
Medium: node: update interface to crm_node (node delete)

diff -r 2c70ae4d11d3 -r d6f915195bac modules/ui.py.in
--- a/modules/ui.py.in	Tue Jul 02 12:44:55 2013 +0200
+++ b/modules/ui.py.in	Wed Jul 03 18:29:30 2013 +0200
@@ -1258,50 +1258,30 @@ class NodeMgmt(UserInterface):
         if not is_our_node(node):
             common_err("node %s not found in the CIB" % node)
             return False
-        rc = True
         if cluster_stack() == "heartbeat":
-            rc = ext_cmd(self.hb_delnode%node) == 0
+            cmd = (self.hb_delnode % node)
         else:
-            node_states = {}
-            ec, l = stdout2list("%s -l" % self.crm_node)
-            for s in l:
-                a = s.split()
-                if len(a) != 3:
-                    common_warn("%s bad format: %s" % (self.crm_node, s))
-                    continue
-                # fmt: id uname status
-                # remove only those in state "lost"
-                if a[1] == node:
-                    node_ref_du_jour = a[0]
-                    if is_pcmk_118():
-                        node_ref_du_jour = a[1]
-                    node_states[a[2]] = 1
-                    if a[2] == "lost":
-                        ec = ext_cmd("%s --force -R %s" % \
-                            (self.crm_node, node_ref_du_jour))
-                        if ec != 0:
-                            common_warn('"%s --force -R %s" failed, rc=%d' % \
-                                (self.crm_node, node_ref_du_jour, ec))
-            if not node_states:
-                common_info("node %s not found by %s" % (node, self.crm_node))
-            elif "member" in node_states:
-                common_info("node %s appears to be still active" % node)
-                common_info("check output of %s -l" % self.crm_node)
-                rc = False
-            elif not "lost" in node_states:
-                common_err("node %s's state not recognized: %s" % (node, node_states.keys()))
-                common_info("check output of %s -l" % self.crm_node)
-                rc = False
-        if rc:
-            if ext_cmd(self.node_delete%node) != 0 or \
-                    ext_cmd(self.node_delete_status%node) != 0:
-                common_err("failed to remove %s from the CIB" % node)
-                rc = False
-        if rc:
-            common_info("node %s deleted" % node)
-        else:
-            common_err('failed to delete node %s' % node)
-        return rc
+            ec, s = get_stdout("%s -p" % self.crm_node)
+            if not s:
+                common_err('%s -p could not list any nodes (rc=%d)' % \
+                    (self.crm_node, ec))
+                return False
+            partition_l = s.split()
+            if node in partition_l:
+                common_err("according to %s, node %s is still active" % \
+                    (self.crm_node, node))
+                return False
+            cmd = "%s --force -R %s" % (self.crm_node, node)
+        ec = ext_cmd(cmd)
+        if ec != 0:
+            common_warn('"%s" failed, rc=%d' % (cmd, ec))
+            return False
+        if ext_cmd(self.node_delete % node) != 0 or \
+                ext_cmd(self.node_delete_status % node) != 0:
+            common_err("%s removed from membership, but not from CIB!" % node)
+            return False
+        common_info("node %s deleted" % node)
+        return True
     def attribute(self, cmd, *args):
         """usage:
         attribute <node> set <rsc> <value>
_______________________________________________
Linux-HA mailing list
Linux-HA@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to