[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] conga/luci/site/luci/Extensions FenceDaemon.py ...



CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe sourceware org	2006-11-06 17:30:50

Modified files:
	luci/site/luci/Extensions: FenceDaemon.py cluster_adapters.py 

Log message:
	propagate multicast and fence daemon properties

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceDaemon.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.145&r2=1.146

--- conga/luci/site/luci/Extensions/FenceDaemon.py	2006/05/30 20:17:21	1.1
+++ conga/luci/site/luci/Extensions/FenceDaemon.py	2006/11/06 17:30:49	1.2
@@ -27,4 +27,10 @@
     val = self.getAttribute("clean_start")
     return val
 
+  def setPostJoinDelay(self, delay):
+    self.addAttribute("post_join_delay", delay)
+
+  def setPostFailDelay(self, delay):
+    self.addAttribute("post_fail_delay", delay)
+
 
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2006/11/05 00:59:09	1.145
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2006/11/06 17:30:49	1.146
@@ -480,33 +480,51 @@
 	
 ## Cluster properties form validation routines
 
+# rhel5 cluster version
 def validateMCastConfig(model, form):
+	errors = list()
 	try:
 		mcast_val = form['mcast'].strip().lower()
 		if mcast_val != 'true' and mcast_val != 'false':
 			raise KeyError, mcast_val
 		if mcast_val == 'true':
-			mcast_val = 1
+			mcast_manual = True
 		else:
-			mcast_val = 0
+			mcast_manual = False
 	except KeyError, e:
-		return (False, {'errors': ['An invalid multicast selection was made']})
-
-	if not mcast_val:
-		return (True, {'messages': ['Changes accepted. - FILL ME IN']})
+		errors.append('An invalid multicast selection was made')
+		return (False, {'errors': errors})
 
-	try:
-		addr_str = form['mcast_addr'].strip()
-		socket.inet_pton(socket.AF_INET, addr_str)
-	except KeyError, e:
-		return (False, {'errors': ['No multicast address was given']})
-	except socket.error, e:
+	if mcast_manual == True:
 		try:
-			socket.inet_pton(socket.AF_INET6, addr_str)
+			addr_str = form['mcast_addr'].strip()
+			socket.inet_pton(socket.AF_INET, addr_str)
+		except KeyError, e:
+			errors.append('No multicast address was given')
 		except socket.error, e:
-			return (False, {'errors': ['An invalid multicast address was given: %s' % str(e)]})
+			try:
+				socket.inet_pton(socket.AF_INET6, addr_str)
+			except socket.error, e:
+				errors.append('An invalid multicast address was given: %s')
+	else:
+		addr_str = None
 
-	return (True, {'messages': ['Changes accepted. - FILL ME IN']})
+	if (addr_str is None and mcast_manual != True) or (mcast_manual == True and addr_str == model.getMcastAddr()):
+		errors.append('No multicast configuration changes were made.')
+		return (False, {'errors': errors})
+
+	try:
+		model.usesMulticast = True
+		model.mcast_address = addr_str
+		model.setModified(True)
+	except Exception, e:
+		luci_log.debug('Error updating mcast properties: %s' % str(e))
+		errors.append('Unable to update cluster multicast properties')
+
+	if len(errors) > 0:
+		return (False, {'errors': errors})
+
+	return (True, {})
 
 def validateQDiskConfig(model, form):
 	errors = list()
@@ -652,10 +670,9 @@
 	try:
 		version_num = int(form['cfgver'])
 		if version_num < old_ver:
-			raise ValueError, 'configuration version number must be %d or greater.' \
-								% old_ver
-		if version_num == old_ver:
-			version_num += 1
+			raise ValueError, 'configuration version number must be %d or greater.' % old_ver
+		# we'll increment the cluster version before propagating it.
+		version_num -= 1
 	except KeyError, e:
 		errors.append('No cluster configuration version was given.')
 	except ValueError, e:
@@ -684,7 +701,7 @@
 	except KeyError, e:
 		errors.append('No post fail delay was given.')
 	except ValueError, e:
-		errors.append('Invalid post fail delay: ' + e)
+		errors.append('Invalid post fail delay: %s' % str(e))
 
 	try:
 		post_join_delay = int(form['post_join_delay'])
@@ -693,12 +710,26 @@
 	except KeyError, e:
 		errors.append('No post join delay was given.')
 	except ValueError, e:
-		errors.append('Invalid post join delay: ' + e)
+		errors.append('Invalid post join delay: %s' % str(e))
+
+	try:
+		fd = model.getFenceDaemonPtr()
+		old_pj_delay = fd.getPostJoinDelay()
+		old_pf_delay = fd.getPostFailDelay()
+
+		if post_join_delay == old_pj_delay and post_fail_delay == old_pf_delay:
+			errors.append('No fence daemon properties were changed.')
+		else:
+			fd.setPostJoinDelay(post_join_delay)
+			fd.setPostFailDelay(post_fail_delay)
+	except Exception, e:
+		luci_log.debug_verbose('Unable to update fence daemon properties: %s' % str(e))
+		errors.append('An error occurred while attempting to update fence daemon properties.')
 
 	if len(errors) > 0:
 		return (False, {'errors': errors })
 
-	return (True, {'messages': ['Changes accepted. - FILL ME IN']})
+	return (True, {})
 
 configFormValidators = {
 	'general': validateGeneralConfig,
@@ -712,7 +743,7 @@
 	messages = list()
 
 	try:
-  		model = request.SESSION.get('model')
+		model = request.SESSION.get('model')
 		if not model:
 			raise Exception, 'model is none'
 	except Exception, e:
@@ -731,6 +762,12 @@
 		luci_log.debug_verbose('VCC3: invalid config type: %s' % request.form['configtype'])
 		return (False, {'errors': ['An invalid configuration type was submitted.']})
 
+	try:
+		cp = model.getClusterPtr()
+	except:
+		luci_log.debug_verbose('VCC3a: getClusterPtr failed')
+		return (False, {'errors': ['No cluster model was found.']})
+
 	config_validator = configFormValidators[request.form['configtype']]
 	ret = config_validator(model, request.form)
 
@@ -743,6 +780,9 @@
 
 	if retcode == True:
 		try:
+			old_ver = cp.getConfigVersion()
+			# always increment the configuration version
+			model.setConfigVersion(old_ver + 1)
 			conf_str = str(model.exportModelAsString())
 			if not conf_str:
 				raise Exception, 'conf_str is none'


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]