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