From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte ...
Date: 31 Oct 2006 00:16:19 -0000 [thread overview]
Message-ID: <20061031001619.15181.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-10-31 00:16:15
Modified files:
luci/site/luci/Extensions: cluster_adapters.py
Log message:
more logging and exception robustness
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.133&r2=1.134
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2006/10/30 22:52:00 1.133
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2006/10/31 00:16:14 1.134
@@ -1637,6 +1637,7 @@
try:
svcname = req.form['servicename']
except:
+ luci_log.debug_verbose('serviceStart error: no service name')
return None
try:
@@ -1645,22 +1646,28 @@
try:
nodename = req.form['nodename']
except:
- return None
+ nodename = None
+ cluname = None
try:
cluname = req['clustername']
except KeyError, e:
try:
- cluname = req.form['clusterName']
+ cluname = req.form['clustername']
except:
- return None
+ pass
+
+ if cluname is None:
+ luci_log.debug_verbose('serviceStart error: %s no service name' \
+ % svcname)
+ return None
ricci_agent = rc.hostname()
batch_number, result = startService(rc, svcname, nodename)
- if not batch_number or not result:
- luci_log.debug_verbose('startService %s @ %s call failed' \
- % (svcname, nodename))
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('startService %s call failed' \
+ % svcname)
return None
#Now we need to create a DB flag for this system.
@@ -1704,17 +1711,14 @@
try:
cluname = req.form['clustername']
except:
- try:
- cluname = rc.cluster_info()[0]
- except:
- pass
+ pass
if cluname is None:
luci_log.debug_verbose('unable to determine cluser name for serviceRestart %s' % svcname)
return None
batch_number, result = restartService(rc, svcname)
- if not batch_number or not result:
+ if batch_number is None or result is None:
luci_log.debug_verbose('restartService for %s failed' % svcname)
return None
@@ -1762,17 +1766,14 @@
try:
cluname = req.form['clustername']
except:
- try:
- cluname = rc.cluster_info()[0]
- except:
- pass
+ pass
if cluname is None:
luci_log.debug_verbose('unable to determine cluser name for serviceStop %s' % svcname)
return None
batch_number, result = stopService(rc, svcname)
- if not batch_number or not result:
+ if batch_number is None or result is None:
luci_log.debug_verbose('stopService for %s failed' % svcname)
return None
@@ -2097,7 +2098,7 @@
clustername = request['clustername']
except KeyError, e:
try:
- clustername = request.form['clusterName']
+ clustername = request.form['clustername']
except:
luci_log.debug('missing cluster name for NTP')
return None
@@ -2194,16 +2195,20 @@
return None
batch_number, result = nodeLeaveCluster(rc)
- batch_id = str(batch_number)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('nodeLeaveCluster error: batch_number and/or result is None')
+ return None
+ batch_id = str(batch_number)
objpath = str(path + "/" + objname)
+
try:
nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
#Now we need to annotate the new DB object
flag = self.restrictedTraverse(objpath)
flag.manage_addProperty(BATCH_ID, batch_id, "string")
- flag.manage_addProperty(TASKTYPE,NODE_LEAVE_CLUSTER, "string")
- flag.manage_addProperty(FLAG_DESC,"Node \'" + nodename + "\' leaving cluster", "string")
+ flag.manage_addProperty(TASKTYPE, NODE_LEAVE_CLUSTER, "string")
+ flag.manage_addProperty(FLAG_DESC, "Node \'" + nodename + "\' leaving cluster", "string")
except:
luci_log.debug('An error occurred while setting flag %s' % objpath)
@@ -2212,34 +2217,52 @@
response.redirect(request['URL'] + "?pagetype=" + CLUSTER_CONFIG + "&clustername=" + clustername)
elif task == NODE_JOIN_CLUSTER:
batch_number, result = nodeJoinCluster(rc)
- path = CLUSTER_FOLDER_PATH + clustername + "/" + nodename_resolved
- nodefolder = self.restrictedTraverse(path)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('nodeJoin error: batch_number and/or result is None')
+ return None
+
+ path = str(CLUSTER_FOLDER_PATH + clustername + "/" + nodename_resolved)
batch_id = str(batch_number)
- objname = nodename_resolved + "____flag"
- nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
- #Now we need to annotate the new DB object
- objpath = path + "/" + objname
- flag = self.restrictedTraverse(objpath)
- flag.manage_addProperty(BATCH_ID,batch_id, "string")
- flag.manage_addProperty(TASKTYPE,NODE_JOIN_CLUSTER, "string")
- flag.manage_addProperty(FLAG_DESC,"Node \'" + nodename + "\' joining cluster", "string")
+ objname = str(nodename_resolved + "____flag")
+ objpath = str(path + "/" + objname)
+
+ try:
+ nodefolder = self.restrictedTraverse(path)
+ nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
+ #Now we need to annotate the new DB object
+ flag = self.restrictedTraverse(objpath)
+ flag.manage_addProperty(BATCH_ID, batch_id, "string")
+ flag.manage_addProperty(TASKTYPE, NODE_JOIN_CLUSTER, "string")
+ flag.manage_addProperty(FLAG_DESC, "Node \'" + nodename + "\' joining cluster", "string")
+ except Exception, e:
+ luci_log.debug_verbose('nodeJoin error: creating flags at %s: %s' \
+ % (path, str(e)))
response = request.RESPONSE
#Once again, is this correct? Should we re-direct to the cluster page?
response.redirect(request['URL'] + "?pagetype=" + CLUSTER_CONFIG + "&clustername=" + clustername)
elif task == NODE_REBOOT:
batch_number, result = nodeReboot(rc)
- path = CLUSTER_FOLDER_PATH + clustername + "/" + nodename_resolved
- nodefolder = self.restrictedTraverse(path)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('nodeReboot: batch_number and/or result is None')
+ return None
+
+ path = str(CLUSTER_FOLDER_PATH + clustername + "/" + nodename_resolved)
batch_id = str(batch_number)
- objname = nodename_resolved + "____flag"
- nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
- #Now we need to annotate the new DB object
- objpath = path + "/" + objname
- flag = self.restrictedTraverse(objpath)
- flag.manage_addProperty(BATCH_ID, batch_id, "string")
- flag.manage_addProperty(TASKTYPE, NODE_REBOOT, "string")
- flag.manage_addProperty(FLAG_DESC, "Node \'" + nodename + "\' is being rebooted", "string")
+ objname = str(nodename_resolved + "____flag")
+ objpath = str(path + "/" + objname)
+
+ try:
+ nodefolder = self.restrictedTraverse(path)
+ nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
+ #Now we need to annotate the new DB object
+ flag = self.restrictedTraverse(objpath)
+ flag.manage_addProperty(BATCH_ID, batch_id, "string")
+ flag.manage_addProperty(TASKTYPE, NODE_REBOOT, "string")
+ flag.manage_addProperty(FLAG_DESC, "Node \'" + nodename + "\' is being rebooted", "string")
+ except Exception, e:
+ luci_log.debug_verbose('nodeReboot err: creating flags at %s: %s' \
+ % (path, str(e)))
response = request.RESPONSE
#Once again, is this correct? Should we re-direct to the cluster page?
@@ -2250,16 +2273,19 @@
try:
clusterfolder = self.restrictedTraverse(path)
if not clusterfolder:
- raise
- except:
- luci_log.debug('The cluster folder for %s could not be found.' \
- % clustername)
+ raise Exception, 'no cluster folder at %s' % path
+ except Exception, e:
+ luci_log.debug('The cluster folder for %s could not be found: %s' \
+ % (clustername, str(e)))
return None
try:
nodes = clusterfolder.objectItems('Folder')
- except:
- luci_log.debug('No cluster nodes for %s were found' % clustername)
+ if not nodes or len(nodes) < 1:
+ raise Exception, 'no cluster nodes'
+ except Exception, e:
+ luci_log.debug('No cluster nodes for %s were found: %s' \
+ % (clustername, str(e)))
return None
found_one = False
@@ -2299,17 +2325,26 @@
return None
batch_number, result = nodeFence(rc, nodename)
- path = path + "/" + nodename_resolved
- nodefolder = self.restrictedTraverse(path)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('nodeFence: batch_number and/or result is None')
+ return None
+
+ path = str(path + "/" + nodename_resolved)
batch_id = str(batch_number)
- objname = nodename_resolved + "____flag"
- nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
- #Now we need to annotate the new DB object
- objpath = path + "/" + objname
- flag = self.restrictedTraverse(objpath)
- flag.manage_addProperty(BATCH_ID,batch_id, "string")
- flag.manage_addProperty(TASKTYPE,NODE_FENCE, "string")
- flag.manage_addProperty(FLAG_DESC,"Node \'" + nodename + "\' is being fenced", "string")
+ objname = str(nodename_resolved + "____flag")
+ objpath = str(path + "/" + objname)
+
+ try:
+ nodefolder = self.restrictedTraverse(path)
+ nodefolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
+ #Now we need to annotate the new DB object
+ flag = self.restrictedTraverse(objpath)
+ flag.manage_addProperty(BATCH_ID, batch_id, "string")
+ flag.manage_addProperty(TASKTYPE, NODE_FENCE, "string")
+ flag.manage_addProperty(FLAG_DESC, "Node \'" + nodename + "\' is being fenced", "string")
+ except Exception, e:
+ luci_log.debug_verbose('nodeFence err: creating flags at %s: %s' \
+ % (path, str(e)))
response = request.RESPONSE
#Once again, is this correct? Should we re-direct to the cluster page?
@@ -2320,17 +2355,25 @@
#and propogate it. We will need two ricci agents for this task.
# Make sure we can find a second node before we hose anything.
- path = CLUSTER_FOLDER_PATH + clustername
+ path = str(CLUSTER_FOLDER_PATH + clustername)
try:
clusterfolder = self.restrictedTraverse(path)
if not clusterfolder:
- raise
- except:
+ raise Exception, 'no cluster folder at %s' % path
+ except Exception, e:
+ luci_log.debug_verbose('node delete error for cluster %s: %s' \
+ % (clustername, str(e)))
return None
- nodes = clusterfolder.objectItems('Folder')
- found_one = False
+ try:
+ nodes = clusterfolder.objectItems('Folder')
+ if not nodes or len(nodes) < 1:
+ raise Exception, 'no cluster nodes in DB'
+ except Exception, e:
+ luci_log.debug_verbose('node delete error for cluster %s: %s' \
+ % (clustername, str(e)))
+ found_one = False
for node in nodes:
if node[1].getId().find(nodename) != (-1):
continue
@@ -2339,38 +2382,59 @@
# in the cluster we believe it is.
try:
rc2 = RicciCommunicator(node[1].getId())
- if not rc2.authed():
- # set the flag
- rc2 = None
- if not rc2:
- raise
- found_one = True
- break
+ except Exception, e:
+ luci_log.info('ricci %s error: %s' % (node[0], str(e)))
+ continue
except:
continue
+ if not rc2.authed():
+ try:
+ setNodeFlag(node[1], CLUSTER_NODE_NEED_AUTH)
+ except:
+ pass
+
+ try:
+ snode = getStorageNode(self, node[0])
+ setNodeFlag(snode, CLUSTER_NODE_NEED_AUTH)
+ except:
+ pass
+
+ luci_log.debug_verbose('%s is not authed' % node[0])
+ rc2 = None
+ continue
+ else:
+ found_one = True
+ break
+
if not found_one:
+ luci_log.debug_verbose('unable to find ricci node to delete %s from %s' % (nodename, clustername))
return None
#First, delete cluster.conf from node to be deleted.
#next, have node leave cluster.
batch_number, result = nodeLeaveCluster(rc, purge=True)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('nodeDelete: batch_number and/or result is None')
+ return None
#It is not worth flagging this node in DB, as we are going
#to delete it anyway. Now, we need to delete node from model
#and send out new cluster.conf
delete_target = None
- try:
- nodelist = model.getNodes()
- find_node = lower(nodename)
- for n in nodelist:
+ nodelist = model.getNodes()
+ find_node = lower(nodename)
+ for n in nodelist:
+ try:
if lower(n.getName()) == find_node:
delete_target = n
break
- except:
- pass
+ except:
+ continue
if delete_target is None:
+ luci_log.debug_verbose('unable to find delete target for %s in %s' \
+ % (nodename, clustername))
return None
model.deleteNode(delete_target)
@@ -2386,6 +2450,7 @@
# propagate the new cluster.conf via the second node
batch_number, result = setClusterConf(rc2, str(str_buf))
if batch_number is None:
+ luci_log.debug_verbose('batch number is None after del node in NTP')
return None
#Now we need to delete the node from the DB
@@ -2396,19 +2461,24 @@
delnode = self.restrictedTraverse(del_path)
clusterfolder = self.restrictedTraverse(path)
clusterfolder.manage_delObjects(delnode[0])
- except:
- # XXX - we need to handle this
- pass
+ except Exception, e:
+ luci_log.debug_verbose('error deleting %s: %s' % (del_path, str(e)))
batch_id = str(batch_number)
objname = str(nodename_resolved + "____flag")
- clusterfolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
- #Now we need to annotate the new DB object
objpath = str(path + "/" + objname)
- flag = self.restrictedTraverse(objpath)
- flag.manage_addProperty(BATCH_ID,batch_id, "string")
- flag.manage_addProperty(TASKTYPE,NODE_DELETE, "string")
- flag.manage_addProperty(FLAG_DESC,"Deleting node \'" + nodename + "\'", "string")
+
+ try:
+ clusterfolder.manage_addProduct['ManagedSystem'].addManagedSystem(objname)
+ #Now we need to annotate the new DB object
+ flag = self.restrictedTraverse(objpath)
+ flag.manage_addProperty(BATCH_ID, batch_id, "string")
+ flag.manage_addProperty(TASKTYPE, NODE_DELETE, "string")
+ flag.manage_addProperty(FLAG_DESC, "Deleting node \'" + nodename + "\'", "string")
+ except Exception, e:
+ luci_log.debug_verbose('nodeDelete %s err setting flag@%s: %s' \
+ % (nodename, objpath, str(e)))
+
response = request.RESPONSE
response.redirect(request['HTTP_REFERER'] + "&busyfirst=true")
next reply other threads:[~2006-10-31 0:16 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-31 0:16 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2008-07-17 16:36 [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte rmccabe
2008-04-18 20:37 rmccabe
2007-12-12 15:45 rmccabe
2007-08-23 19:00 rmccabe
2007-08-22 20:57 rmccabe
2007-05-03 19:51 rmccabe
2007-04-02 16:35 rmccabe
2007-04-02 15:56 rmccabe
2007-03-27 2:03 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-13 3:07 rmccabe
2007-03-13 3:06 rmccabe
2007-03-12 5:47 rmccabe
2007-03-12 5:46 rmccabe
2007-03-12 5:46 rmccabe
2007-03-06 22:48 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-02-13 19:50 rmccabe
2007-02-13 19:50 rmccabe
2007-02-12 20:25 rmccabe
2007-02-12 20:24 rmccabe
2007-02-07 22:00 rmccabe
2007-02-07 21:30 rmccabe
2007-02-05 19:56 rmccabe
2007-01-31 23:45 rmccabe
2007-01-31 19:28 rmccabe
2007-01-31 18:50 rmccabe
2007-01-30 21:41 jparsons
2007-01-30 21:21 jparsons
2007-01-30 21:05 jparsons
2007-01-29 23:30 rmccabe
2007-01-26 19:35 rmccabe
2007-01-18 2:48 rmccabe
2007-01-17 22:26 rmccabe
2007-01-17 22:14 rmccabe
2007-01-10 23:33 jparsons
2007-01-10 22:45 rmccabe
2007-01-10 20:06 rmccabe
2006-12-20 20:40 jparsons
2006-12-14 21:37 rmccabe
2006-12-14 17:03 rmccabe
2006-12-08 23:02 rmccabe
2006-11-30 20:12 jparsons
2006-11-27 21:06 rmccabe
2006-11-27 21:05 rmccabe
2006-11-27 18:15 rmccabe
2006-11-20 23:32 rmccabe
2006-11-20 15:05 jparsons
2006-11-17 5:50 rmccabe
2006-11-17 5:48 rmccabe
2006-11-10 18:18 rmccabe
2006-11-10 17:59 rmccabe
2006-11-09 22:30 rmccabe
2006-11-09 14:17 rmccabe
2006-11-08 21:42 rmccabe
2006-11-08 15:52 jparsons
2006-11-07 20:14 jparsons
2006-11-07 20:13 jparsons
2006-11-07 2:36 jparsons
2006-11-07 1:32 jparsons
2006-11-06 23:55 rmccabe
2006-11-05 0:59 rmccabe
2006-11-03 21:13 jparsons
2006-11-03 1:24 rmccabe
2006-11-03 1:08 rmccabe
2006-11-02 20:58 rmccabe
2006-11-02 20:45 rmccabe
2006-11-02 20:41 rmccabe
2006-11-02 3:17 rmccabe
2006-10-31 17:18 rmccabe
2006-10-30 22:52 rmccabe
2006-10-30 20:43 jparsons
2006-10-27 1:11 rmccabe
2006-10-25 0:43 rmccabe
2006-10-24 14:08 rmccabe
2006-10-23 20:47 jparsons
2006-10-20 22:09 rmccabe
2006-10-20 21:59 rmccabe
2006-10-19 14:57 rmccabe
2006-10-18 23:12 rmccabe
2006-10-18 19:16 rmccabe
2006-10-16 21:01 rmccabe
2006-10-16 20:51 jparsons
2006-10-16 19:17 jparsons
2006-10-16 5:28 rmccabe
2006-10-16 4:54 rmccabe
2006-10-16 4:51 rmccabe
2006-10-13 22:56 rmccabe
2006-10-12 22:11 jparsons
2006-10-12 21:00 kupcevic
2006-10-12 20:54 jparsons
2006-10-12 20:48 jparsons
2006-10-12 19:40 rmccabe
2006-10-12 17:27 jparsons
2006-10-12 17:08 jparsons
2006-10-12 15:50 jparsons
2006-10-12 15:45 jparsons
2006-10-12 0:04 jparsons
2006-10-11 23:56 jparsons
2006-10-11 23:11 jparsons
2006-10-11 23:08 rmccabe
2006-10-11 22:37 jparsons
2006-10-11 20:58 jparsons
2006-10-11 17:43 jparsons
2006-10-11 17:29 rmccabe
2006-10-11 16:35 jparsons
2006-10-11 16:25 jparsons
2006-10-11 16:18 rmccabe
2006-10-10 21:33 kupcevic
2006-10-09 20:21 rmccabe
2006-10-04 16:20 rmccabe
2006-10-04 16:05 jparsons
2006-10-04 15:11 jparsons
2006-10-02 22:30 rmccabe
2006-10-02 21:42 rmccabe
2006-10-02 21:09 rmccabe
2006-10-02 20:53 rmccabe
2006-09-28 22:04 rmccabe
2006-09-28 20:10 rmccabe
2006-09-27 18:46 rmccabe
2006-09-27 16:18 jparsons
2006-09-27 15:51 jparsons
2006-09-27 15:35 jparsons
2006-09-25 22:59 rmccabe
2006-09-22 18:24 rmccabe
2006-08-30 22:59 rmccabe
2006-08-22 17:46 jparsons
2006-08-22 17:41 jparsons
2006-08-16 23:40 jparsons
2006-08-16 21:56 jparsons
2006-08-16 21:54 jparsons
2006-08-16 21:51 jparsons
2006-08-16 19:14 rmccabe
2006-08-16 16:10 jparsons
2006-08-14 15:12 jparsons
2006-08-13 19:38 jparsons
2006-08-13 19:37 jparsons
2006-08-13 18:36 jparsons
2006-08-13 16:32 jparsons
2006-08-13 16:15 jparsons
2006-08-13 15:02 jparsons
2006-08-13 14:57 jparsons
2006-08-13 13:48 jparsons
2006-08-12 21:13 jparsons
2006-08-12 20:31 jparsons
2006-08-12 18:22 jparsons
2006-08-12 17:53 jparsons
2006-08-11 0:29 jparsons
2006-08-10 23:06 shuennek
2006-08-10 16:50 jparsons
2006-08-10 14:16 jparsons
2006-08-09 22:05 jparsons
2006-08-09 21:48 jparsons
2006-08-03 13:37 jparsons
2006-08-02 18:59 rmccabe
2006-08-02 17:25 rmccabe
2006-08-01 15:29 jparsons
2006-08-01 15:25 jparsons
2006-08-01 15:20 jparsons
2006-08-01 15:13 jparsons
2006-08-01 15:04 jparsons
2006-07-31 18:21 rmccabe
2006-07-28 19:03 jparsons
2006-07-28 18:57 jparsons
2006-07-28 18:40 jparsons
2006-07-28 14:16 jparsons
2006-07-28 14:02 jparsons
2006-07-28 11:46 jparsons
2006-07-27 16:34 jparsons
2006-07-27 15:53 rmccabe
2006-07-25 20:16 jparsons
2006-07-25 20:01 jparsons
2006-07-25 0:56 jparsons
2006-07-24 21:51 jparsons
2006-07-24 21:13 jparsons
2006-07-24 19:50 jparsons
2006-07-19 22:28 rmccabe
2006-07-19 21:38 rmccabe
2006-07-19 20:57 rmccabe
2006-07-19 20:19 rmccabe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061031001619.15181.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.