thomasvs - in flumotion/trunk: . flumotion/common flumotion/service flumotion/test flumotion/worker

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Mon Mar 12 23:52:39 CET 2007


Author: thomasvs
Date: Mon Mar 12 23:52:03 2007
New Revision: 4620

Modified:
   flumotion/trunk/ChangeLog
   flumotion/trunk/flumotion/common/config.py
   flumotion/trunk/flumotion/service/service.py
   flumotion/trunk/flumotion/test/test_worker_worker.py
   flumotion/trunk/flumotion/test/test_workerconfig.py
   flumotion/trunk/flumotion/worker/config.py
Log:
	* flumotion/common/config.py:
	  Expose BOOL_TRUE_VALUES so we can use it somewhere else
	* flumotion/service/service.py:
	  Set feeder ports to random by default.  We should change this in
	  the future after using the Command classes for options.
	* flumotion/test/test_worker_worker.py:
	  Fix the test.
	* flumotion/test/test_workerconfig.py:
	  Add test for random feeder ports.
	* flumotion/worker/config.py:
	  Allow specifying random feeder ports in the configuration.



Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog	(original)
+++ flumotion/trunk/ChangeLog	Mon Mar 12 23:52:03 2007
@@ -1,5 +1,19 @@
 2007-03-12  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* flumotion/common/config.py:
+	  Expose BOOL_TRUE_VALUES so we can use it somewhere else
+	* flumotion/service/service.py:
+	  Set feeder ports to random by default.  We should change this in
+	  the future after using the Command classes for options.
+	* flumotion/test/test_worker_worker.py:
+	  Fix the test.
+	* flumotion/test/test_workerconfig.py:
+	  Add test for random feeder ports.
+	* flumotion/worker/config.py:
+	  Allow specifying random feeder ports in the configuration.
+
+2007-03-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* flumotion/worker/main.py:
 	* flumotion/worker/worker.py:
 	  Implement --random-feederports as per #585.

Modified: flumotion/trunk/flumotion/common/config.py
==============================================================================
--- flumotion/trunk/flumotion/common/config.py	(original)
+++ flumotion/trunk/flumotion/common/config.py	Mon Mar 12 23:52:03 2007
@@ -38,6 +38,9 @@
 
 from errors import ConfigError, ComponentWorkerConfigError
 
+# all these string values should result in True
+BOOL_TRUE_VALUES = ['True', 'true', '1', 'Yes', 'yes']
+
 class ConfigEntryComponent(log.Loggable):
     "I represent a <component> entry in a planet config file"
     nice = 0
@@ -134,8 +137,8 @@
         return [long(subnode.childNodes[0].data) for subnode in nodes]
 
     def get_bool_values(self, nodes):
-        valid = ['True', 'true', '1', 'Yes', 'yes']
-        return [subnode.childNodes[0].data in valid for subnode in nodes]
+        return [subnode.childNodes[0].data in BOOL_TRUE_VALUES \
+            for subnode in nodes]
 
     def get_string_values(self, nodes):
         values = []

Modified: flumotion/trunk/flumotion/service/service.py
==============================================================================
--- flumotion/trunk/flumotion/service/service.py	(original)
+++ flumotion/trunk/flumotion/service/service.py	Mon Mar 12 23:52:03 2007
@@ -244,7 +244,7 @@
         if type == 'manager':
             self.createManager(name, port)
         elif type == 'worker':
-            self.createWorker(name, managerPort=port)
+            self.createWorker(name, managerPort=port, randomFeederports=True)
         else:
             raise errors.SystemError, \
                 "Please specify 'manager' or 'worker' to create."
@@ -295,7 +295,7 @@
 
         return True
 
-    def createWorker(self, name, managerPort=7531):
+    def createWorker(self, name, managerPort=7531, randomFeederports=False):
         """
         Create a sample worker.
 
@@ -308,6 +308,9 @@
             raise errors.SystemError, \
                 "Worker file %s already exists." % workerFile
 
+        feederports = "  <!-- <feederports>8600-8639</feederports> -->"
+        if randomFeederports:
+            feederports = '  <feederports random="True" />'
         # generate the file
         handle = open(workerFile, 'w')
         handle.write("""<worker>
@@ -326,7 +329,7 @@
     <password>test</password>
   </authentication>
 
-  <!-- <feederports>8600-8639</feederports> -->
+%(feederports)s
 
 </worker>
 """ % locals())

Modified: flumotion/trunk/flumotion/test/test_worker_worker.py
==============================================================================
--- flumotion/trunk/flumotion/test/test_worker_worker.py	(original)
+++ flumotion/trunk/flumotion/test/test_worker_worker.py	Mon Mar 12 23:52:03 2007
@@ -64,6 +64,7 @@
         self.port = 9999
         self.transport = 'TCP'
         self.feederports = [9998]
+        self.randomFeederports = False
         self.name = 'fakeworker'
     
 class TestWorkerClientFactory(unittest.TestCase):

Modified: flumotion/trunk/flumotion/test/test_workerconfig.py
==============================================================================
--- flumotion/trunk/flumotion/test/test_workerconfig.py	(original)
+++ flumotion/trunk/flumotion/test/test_workerconfig.py	Mon Mar 12 23:52:03 2007
@@ -43,6 +43,19 @@
         s = """<worker><invalid-name/></worker>"""
         self.assertRaises(config.ConfigError, parse, s)
 
+    def testParseWorkerRandomFeederPorts(self):
+        s = """<worker><feederports random="yes" /></worker>"""
+        conf = parse(s)
+        self.assertEquals(conf.feederports, [])
+        self.assertEquals(conf.randomFeederports, True)
+
+    def testParseWorkerFeederPorts(self):
+        s = """<worker><feederports random="no">1000-1002</feederports></worker>"""
+        conf = parse(s)
+        self.assertEquals(conf.feederports, [1000, 1001, 1002])
+        self.assertEquals(conf.randomFeederports, False)
+
+
     def testParseManager(self):
         conf = parse("""<worker><manager>
         <host>hostname</host>

Modified: flumotion/trunk/flumotion/worker/config.py
==============================================================================
--- flumotion/trunk/flumotion/worker/config.py	(original)
+++ flumotion/trunk/flumotion/worker/config.py	Mon Mar 12 23:52:03 2007
@@ -27,7 +27,7 @@
 from xml.dom import minidom, Node
 from xml.parsers import expat
 
-from flumotion.common import log
+from flumotion.common import log, config
 
 class ConfigError(Exception):
     pass
@@ -54,6 +54,7 @@
         self.authentication = None
         self.feederports = None
         self.fludebug = None
+        self.randomFeederports = False
 
         try:
             if filename != None:
@@ -96,7 +97,8 @@
             elif node.nodeName == 'authentication':
                 self.authentication = self.parseAuthentication(node)
             elif node.nodeName == 'feederports':
-                self.feederports = self.parseFeederports(node)
+                self.feederports, self.randomFeederports = \
+                    self.parseFeederports(node)
             elif node.nodeName == 'debug':
                 self.fludebug = str(node.firstChild.nodeValue)
             else:
@@ -160,15 +162,24 @@
         return ConfigEntryAuthentication(username, password)
         
     def parseFeederports(self, node):
+        """
+        Returns a list of feeder ports to use (possibly empty),
+        and whether or not to use random feeder ports.
+
+        @rtype: (list, bool)
+        """
         # returns a list of allowed port numbers
         # port := int
         # port-range := port "-" port
         # port-term := port | port-range
         # port-list := "" | port-term | port-term "," port-list
         # <feederports>port-list</feederports>
+        random = False
+        if node.hasAttribute('random'):
+            random = node.getAttribute('random') in config.BOOL_TRUE_VALUES
         ports = []
         if not node.firstChild:
-            return ports
+            return (ports, random)
         terms = str(node.firstChild.nodeValue).split(',')
         for term in terms:
             if '-' in term:
@@ -180,4 +191,4 @@
                 port = int(term)
                 if port not in ports:
                     ports.append(port)
-        return ports
+        return (ports, random)


More information about the flumotion-commit mailing list