[Cluster-devel] conga/luci cluster/resource_form_handlers.js h ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Sep 29 21:41:44 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-09-29 21:41:43
Modified files:
luci/cluster : resource_form_handlers.js
luci/homebase : index_html
luci/site/luci/Extensions: ricci_bridge.py ricci_communicator.py
Log message:
improve the robustness of the ssl socket code
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.15&r2=1.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&r1=1.16&r2=1.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_bridge.py.diff?cvsroot=cluster&r1=1.19&r2=1.20
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
--- conga/luci/cluster/resource_form_handlers.js 2006/09/27 22:24:11 1.15
+++ conga/luci/cluster/resource_form_handlers.js 2006/09/29 21:41:43 1.16
@@ -106,7 +106,7 @@
} else
clr_form_error(form.mountpoint);
- if (!form.host || str_is_blank(form.host.value))
+ if (!form.host || str_is_blank(form.host.value)) {
errors.push('No NFS server host was given.');
set_form_error(form.host);
} else
--- conga/luci/homebase/index_html 2006/09/27 22:49:09 1.16
+++ conga/luci/homebase/index_html 2006/09/29 21:41:43 1.17
@@ -15,7 +15,7 @@
xml:lang language">
<tal:comment replace="nothing">
- $Id: index_html,v 1.16 2006/09/27 22:49:09 rmccabe Exp $
+ $Id: index_html,v 1.17 2006/09/29 21:41:43 rmccabe Exp $
</tal:comment>
<head metal:use-macro="here/header/macros/html_header">
@@ -66,6 +66,7 @@
<body tal:attributes="class here/getSectionFromURL;
dir python:test(isRTL, 'rtl', 'ltr')">
+
<div id="visual-portal-wrapper">
<div id="portal-top" i18n:domain="plone">
--- conga/luci/site/luci/Extensions/ricci_bridge.py 2006/09/25 22:59:15 1.19
+++ conga/luci/site/luci/Extensions/ricci_bridge.py 2006/09/29 21:41:43 1.20
@@ -19,10 +19,14 @@
def process(self, xml_out):
CLUSTER_STR='<?xml version="1.0" ?><ricci async="false" function="process_batch" version="1.0"><batch><module name="cluster"><request API_version="1.0"><function_call name="get_cluster.conf"/></request></module></batch></ricci>'
- doc = self.makeConnection(CLUSTER_STR)
-
- if doc == None:
- print "Sorry, doc is None"
+ docc = None
+ try:
+ doc = self.makeConnection(CLUSTER_STR)
+ except RicciReceiveError, r:
+ return None
+
+ #if doc == None:
+ # print "Sorry, doc is None"
if doc != None:
bt_node = None
for node in doc.firstChild.childNodes:
@@ -30,7 +34,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -40,7 +44,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -48,7 +52,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -56,7 +60,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -65,7 +69,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
cl_node = None
@@ -74,7 +78,7 @@
cl_node = node
break
if cl_node == None:
- print "cl_node == None"
+ #print "cl_node == None"
doc = None
else:
docc = minidom.Document()
@@ -83,7 +87,7 @@
return docc
def __sendall(self, str, ssl_sock):
- print str
+ #print str
s = str
while len(s) != 0:
pos = ssl_sock.write(s)
@@ -119,29 +123,41 @@
CLUSTER_STR='<?xml version="1.0" ?><ricci async="false" function="process_batch" version="1.0"><batch><module name="cluster"><request API_version="1.0"><function_call name="status"/></request></module></batch></ricci>'
# socket
sock = socket(AF_INET, SOCK_STREAM)
- sock.connect((self.__hostname, self.__port))
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ try:
+ sock.connect((self.__hostname, self.__port))
+ except:
+ sock.close()
+ return ''
+
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ except sslerror, e:
+ if ss:
+ del ss
+ sock.close()
+ return ''
# receive ricci header
hello = self.__receive(ss)
if hello != None:
pass
#print hello.toxml()
+
try:
self.__sendall(CLUSTER_STR, ss)
+ doc = self.__receive(ss)
except sslerror, e:
- sock.close()
- return ''
+ doc = None
- # receive response
- doc = self.__receive(ss)
- if doc == None:
- print "Sorry, doc is None"
- else:
- payload = self.extractPayload(doc)
- sock.shutdown(2)
+ del ss
sock.close()
+ if doc == None:
+ return ''
+ #print "Sorry, doc is None"
+
+ payload = self.extractPayload(doc)
return payload
def startService(self,servicename, preferrednode = None):
@@ -204,25 +220,29 @@
def makeConnection(self,query_str):
# socket
sock = socket(AF_INET, SOCK_STREAM)
- sock.connect((self.__hostname, self.__port))
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ try:
+ sock.connect((self.__hostname, self.__port))
+ except:
+ sock.close()
+ return None
- # receive ricci header
- hello = self.__receive(ss)
- print >> sys.stderr, hello.toxml()
- if hello != None:
- pass
- #print hello.toxml()
- self.__sendall(query_str, ss)
-
-
- # receive response
- payload = self.__receive(ss)
- if payload == None:
- raise RicciReceiveError('FATAL',"Unable to receive ricci data for %s" % self.__hostname)
- sock.shutdown(2)
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ hello = self.__receive(ss)
+ #print >> sys.stderr, hello.toxml()
+ self.__sendall(query_str, ss)
+ # receive response
+ payload = self.__receive(ss)
+ except sslerror, e:
+ payload = None
+
+ if ss:
+ del ss
sock.close()
+ if payload == None:
+ raise RicciReceiveError('FATAL',"Unable to receive ricci data for %s" % self.__hostname)
return payload
@@ -341,7 +361,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -351,7 +371,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -359,7 +379,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -367,7 +387,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -376,7 +396,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
cl_node = None
@@ -385,7 +405,7 @@
cl_node = node
break
if cl_node == None:
- print "cl_node == None"
+ #print "cl_node == None"
doc = None
else:
docc = minidom.Document()
@@ -402,7 +422,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -412,7 +432,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -420,7 +440,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -428,7 +448,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -437,7 +457,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
svc_node = None
@@ -462,20 +482,41 @@
result = node.getAttribute('status')
return (batch_number, result)
else:
- print "RETURNING NONE!!!"
+ #print "RETURNING NONE!!!"
return (None, None )
def getRicciResponse(self):
sock = socket(AF_INET, SOCK_STREAM)
+ sock.settimeout(2.0)
try:
sock.connect((self.__hostname, self.__port))
except:
+ sock.close()
return False
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ except sslerror, e:
+ if ss:
+ del ss
+ sock.close()
+ return False
+ sock.settimeout(600.0) # 10 minutes
+ # TODO: data transfer timeout should be much less,
+ # leave until all calls are async ricci calls
+
# receive ricci header
- hello = self.__receive(ss)
+ try:
+ hello = self.__receive(ss)
+ except sslerror, e:
+ hello = None
+
+ del ss
+ sock.close()
+
if hello != None:
return True
else:
--- conga/luci/site/luci/Extensions/ricci_communicator.py 2006/09/26 21:04:47 1.5
+++ conga/luci/site/luci/Extensions/ricci_communicator.py 2006/09/29 21:41:43 1.6
@@ -164,7 +164,7 @@
def __send(self, xml_doc):
buff = xml_doc.toxml() + '\n'
- print buff
+ #print buff
while len(buff) != 0:
pos = self.ss.write(buff)
buff = buff[pos:]
More information about the Cluster-devel
mailing list