[Cluster-devel] conga/luci cluster/form-macros cluster/validat ...

rmccabe at sourceware.org rmccabe at sourceware.org
Fri Aug 24 22:01:47 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-08-24 22:01:45

Modified files:
	luci/cluster   : form-macros validate_config_multicast.js 
	                 validate_config_qdisk.js 
	luci/site/luci/Extensions: LuciClusterInfo.py 
	                           cluster_adapters.py 
	luci/site/luci/Extensions/ClusterModel: ModelBuilder.py 

Log message:
	qdisk and multicast configuration fixes from the RHEL4 branch

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.209&r2=1.210
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.268&r2=1.269
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.6&r2=1.7

--- conga/luci/cluster/form-macros	2007/08/24 18:42:06	1.209
+++ conga/luci/cluster/form-macros	2007/08/24 22:01:41	1.210
@@ -1082,7 +1082,7 @@
 				<tr class="systemsTable">
 					<td class="systemsTable">
 						<input type="radio" name="mcast" value="False"
-							onClick="disable_mcast('mcast_address');"
+							onClick="disable_mcast('mcast_address', 'mcast_interface');"
 							tal:attributes="checked python: clusterinfo['is_mcast'] != 'True'"
 						/>
 						<tal:block tal:condition="python:os_version == 'rhel4'">
@@ -1097,7 +1097,7 @@
 				<tr class="systemsTable">
 					<td class="systemsTable">
 						<input type="radio" name="mcast" value="True"
-							onClick="enable_mcast('mcast_address');"
+							onClick="enable_mcast('mcast_address', 'mcast_interface');"
 							tal:attributes="checked python: clusterinfo['is_mcast'] == 'True'"
 
 						/>
@@ -1122,6 +1122,18 @@
 								value clusterinfo/mcast_addr |nothing" />
 					</td>
 				</tr>
+				<tr class="systemsTable">
+					<td class="systemsTable">
+						Multicast network interface <span tal:condition="python:os_version != 'rhel4'">(optional)</span>
+					</td>
+					<td class="systemsTable">
+						<input type="text"
+							name="mcast_interface" id="mcast_interface"
+							tal:attributes="
+								disabled not:clusterinfo/mcast_addr;
+								value clusterinfo/mcast_interface |nothing" />
+					</td>
+				</tr>
 			</tbody>
 
 			<tfoot class="systemsTable">
--- conga/luci/cluster/validate_config_multicast.js	2007/08/24 18:42:06	1.5
+++ conga/luci/cluster/validate_config_multicast.js	2007/08/24 22:01:41	1.6
@@ -8,24 +8,36 @@
 */
 
 var prev_mcast_str = '';
+var prev_mcast_if = '';
 
-function disable_mcast(addrId) {
-	addrObj = document.getElementById(addrId);
-	if (!addrObj) {
-		return;
-	}
-	addrObj.disabled = true;
-	prev_mcast_str = addrObj.value;
-	addrObj.value = '';
+function disable_mcast(addrId, ifId) {
+	var addrObj = document.getElementById(addrId);
+	if (addrObj) {
+		prev_mcast_str = addrObj.value;
+		addrObj.disabled = true;
+		addrObj.value = '';
+	}
+
+	var ifObj = document.getElementById(ifId);
+	if (ifObj) {
+		prev_mcast_if = ifObj.value;
+		ifObj.disabled = true;
+		ifObj.value = '';
+	}
 }
 
-function enable_mcast(addrId) {
-	addrObj = document.getElementById(addrId);
-	if (!addrObj) {
-		return;
+function enable_mcast(addrId, ifId) {
+	var addrObj = document.getElementById(addrId);
+	if (addrObj) {
+		addrObj.disabled = false;
+		addrObj.value = prev_mcast_str;
+	}
+
+	var ifObj = document.getElementById(ifId);
+	if (ifObj) {
+		ifObj.disabled = false;
+		ifObj.value = prev_mcast_if; 
 	}
-	addrObj.disabled = false;
-	addrObj.value = prev_mcast_str;
 }
 
 function validate_form(form) {
@@ -54,6 +66,7 @@
 		clr_form_err(form.mcast[0]);
 		clr_form_err(form.mcast[1]);
 		clr_form_err(form.mcast_address);
+		clr_form_err(form.mcast_interface);
 	}
 
 	if (mcast == 1) {
@@ -68,6 +81,15 @@
 			}
 			clr_form_err(form.mcast_address);
 		}
+
+		if (form.cluster_version && form.cluster_version.value == 'rhel4') {
+			if (!form.mcast_interface || str_is_blank(form.mcast_interface.value)) {
+				set_form_err(form.mcast_interface);
+				errors.push('No multicast interface was given.');
+			} else {
+				clr_form_err(form.mcast_interface);
+			}
+		}
 	}
 
 	if (error_dialog(errors))
--- conga/luci/cluster/validate_config_qdisk.js	2007/08/08 21:00:06	1.8
+++ conga/luci/cluster/validate_config_qdisk.js	2007/08/24 22:01:41	1.9
@@ -180,17 +180,6 @@
 				clr_form_err(form.interval);
 		}
 
-		if (!form.votes || str_is_blank(form.votes.value)) {
-			errors.push('No votes setting was given.');
-			set_form_err(form.votes);
-		} else {
-			if (!is_valid_int(form.votes.value, 1, null)) {
-				errors.push('Votes values must be greater than 0.');
-				set_form_err(form.votes);
-			} else
-				clr_form_err(form.votes);
-		}
-
 		if (!form.tko || str_is_blank(form.tko.value)) {
 			errors.push('No TKO setting was given.');
 			set_form_err(form.tko);
@@ -202,15 +191,15 @@
 				clr_form_err(form.tko);
 		}
 
-		if (!form.min_score || str_is_blank(form.min_score.value)) {
-			errors.push('No minimum score setting was given.');
-			set_form_err(form.min_score);
+		if (!form.votes || str_is_blank(form.votes.value)) {
+			errors.push('No votes setting was given.');
+			set_form_err(form.votes);
 		} else {
-			if (!is_valid_int(form.min_score.value, 1, null)) {
-				errors.push('Minimum score values must be greater than 0.');
-				set_form_err(form.min_score);
+			if (!is_valid_int(form.votes.value, 1, null)) {
+				errors.push('Votes values must be greater than 0.');
+				set_form_err(form.votes);
 			} else
-				clr_form_err(form.min_score);
+				clr_form_err(form.votes);
 		}
 
 		var no_dev = !form.device || str_is_blank(form.device.value);
@@ -226,6 +215,23 @@
 				if (err)
 					errors = errors.concat(err);
 			}
+
+			if (hnum > 1) {
+				if (!form.min_score || str_is_blank(form.min_score.value)) {
+					errors.push('No minimum score setting was given.');
+					set_form_err(form.min_score);
+				} else {
+					if (!is_valid_int(form.min_score.value, 1, null)) {
+						errors.push('Minimum score values must be greater than 0.');
+						set_form_err(form.min_score);
+					} else
+						clr_form_err(form.min_score);
+				}
+			} else {
+				clr_form_err(form.min_score);
+			}
+		} else {
+			clr_form_err(form.min_score);
 		}
 	}
 
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/08/24 18:42:06	1.11
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/08/24 22:01:42	1.12
@@ -618,9 +618,11 @@
 		is_mcast = model.isMulticast()
 		if is_mcast:
 			clumap['mcast_addr'] = model.getMcastAddr()
+			clumap['mcast_interface'] = model.getMcastInterface()
 			clumap['is_mcast'] = 'True'
 		else:
 			clumap['mcast_addr'] = None
+			clumap['mcast_interface'] = None
 			clumap['is_mcast'] = 'False'
 		clumap['gulm'] = False
 	else:
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2007/08/24 18:42:06	1.268
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2007/08/24 22:01:42	1.269
@@ -974,6 +974,14 @@
 		errors.append('An invalid multicast selection was made')
 		return (False, {'errors': errors})
 
+	mcast_interface = None
+	if form.has_key('mcast_interface'):
+		mcast_interface = form['mcast_interface'].strip()
+
+	if mcast_manual is True and form.has_key('cluster_version') and form['cluster_version'].strip() == 'rhel4' and not mcast_interface:
+		errors.append('No multicast interface was specified')
+		return (False, {'errors': errors})
+
 	if mcast_manual is True:
 		import socket
 		try:
@@ -992,20 +1000,13 @@
 		addr_str = None
 
 	try:
-		old_mcast_addr = model.getMcastAddr()
-	except Exception, e:
-		luci_log.debug_verbose('VMCC0: %r %s' % (e, str(e)))
-		old_mcast_addr = None
-
-	if (addr_str is None and mcast_manual is not True and not old_mcast_addr) or (mcast_manual is True and addr_str == old_mcast_addr):
-		errors.append('No multicast configuration changes were made')
-		return (False, {'errors': errors})
-
-	try:
-		if model.getMcastAddr() is not None and not addr_str:
+		if not addr_str:
+			if mcast_interface:
+				errors.append('A multicast interface was specified, but no multicast address was given')
+				return (False, {'errors': errors})
 			model.del_cluster_multicast()
 		else:
-			model.set_cluster_multicast(addr_str)
+			model.set_cluster_multicast(addr_str, mcast_if=mcast_interface)
 	except Exception, e:
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug('Error updating mcast properties: %r %s' \
@@ -1108,7 +1109,7 @@
 	for i in xrange(num_heuristics):
 		try:
 			h = form['heuristic%d' % i]
-			if not h or len(h) != 3:
+			if not h or len(h) != 3 or not (h[0].strip() and h[1].strip() and h[2].strip()):
 				continue
 		except:
 			continue
@@ -1118,26 +1119,26 @@
 			if not hprog:
 				raise Exception, 'no hprog'
 		except Exception, e:
-			errors.append('No program was given for heuristic %d' % i + 1)
+			errors.append('No program was given for heuristic %d' % (i + 1))
 		try:
 			hint = int(h[1])
 			if hint < 1:
 				raise ValueError, 'Heuristic interval values must be greater than 0'
 		except KeyError, e:
-			errors.append('No interval was given for heuristic %d' % i + 1)
+			errors.append('No interval was given for heuristic %d' % (i + 1))
 		except ValueError, e:
 			errors.append('An invalid interval was given for heuristic %d: %s' \
-				% (i + 1, str(e)))
+				% ((i + 1), str(e)))
 
 		try:
 			hscore = int(h[2])
 			if hscore < 1:
 				raise ValueError, 'Heuristic scores must be greater than 0'
 		except KeyError, e:
-			errors.append('No score was given for heuristic %d' % i + 1)
+			errors.append('No score was given for heuristic %d' % (i + 1))
 		except ValueError, e:
 			errors.append('An invalid score was given for heuristic %d: %s' \
-				% (i + 1, str(e)))
+				% ((i + 1), str(e)))
 
 		heuristics.append([ hprog, hint, hscore ])
 
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/08/24 18:42:06	1.6
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/08/24 22:01:42	1.7
@@ -682,17 +682,23 @@
       children = self.CMAN_ptr.getChildren()
       for child in children:
         if child.getTagName() == MCAST_STR:
+          self.mcast_ptr = child
           addr = child.getAttribute("addr")
           if addr is not None:
             self.mcast_address = addr
-            return
           else:  #What a mess! a multicast tag, but no addr attribute
             self.mcast_address = ""
-            return
+          mcastif = child.getAttribute("interface")
+          if mcastif is not None:
+            self.mcast_interface = mcastif
+          return
 
   def getMcastAddr(self):
     return self.mcast_address
 
+  def getMcastInterface(self):
+    return self.mcast_interface
+
   def isQuorumd(self):
     return self.usesQuorumd
 
@@ -877,6 +883,8 @@
 
       self.usesMulticast = None
       self.mcast_address = None
+      self.mcast_interface = None
+      self.mcast_ptr = None
 
       #reset self.lock_type
       self.lock_type = GULM_TYPE
@@ -985,7 +993,7 @@
     for child in iter(self.CMAN_ptr.getChildren()):
       if child.getTagName() == MCAST_STR:
         self.CMAN_ptr.removeChild(child)
-        break
+
     self.mcast_ptr = None
     self.usesMulticast = False
     self.mcast_address = None




More information about the Cluster-devel mailing list