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