thomasvs - in flumotion/trunk: . flumotion/worker

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Mon Mar 12 23:34:37 CET 2007


Author: thomasvs
Date: Mon Mar 12 23:34:29 2007
New Revision: 4619

Modified:
   flumotion/trunk/ChangeLog
   flumotion/trunk/flumotion/worker/main.py
   flumotion/trunk/flumotion/worker/worker.py
Log:
	* flumotion/worker/main.py:
	* flumotion/worker/worker.py:
	  Implement --random-feederports as per #585.



Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog	(original)
+++ flumotion/trunk/ChangeLog	Mon Mar 12 23:34:29 2007
@@ -1,5 +1,11 @@
 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.
+
+2007-03-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* flumotion/admin/gtk/main.py:
 	  Add a comment.
 

Modified: flumotion/trunk/flumotion/worker/main.py
==============================================================================
--- flumotion/trunk/flumotion/worker/main.py	(original)
+++ flumotion/trunk/flumotion/worker/main.py	Mon Mar 12 23:34:29 2007
@@ -90,12 +90,17 @@
     group.add_option('-F', '--feederports',
                      action="store", type="string", dest="feederports",
                      help="range of feeder ports to use")
+    group.add_option('', '--random-feederports',
+                     action="store_true",
+                     dest="randomFeederports",
+                     help="Use randomly available feeder ports")
 
     parser.add_option_group(group)
 
     return parser
 
 def _readConfig(workerFile, options):
+    # modifies options dict in-place
     log.info('worker', 'Reading configuration from %s' % workerFile)
     try:
         cfg = config.WorkerConfigXML(workerFile)
@@ -138,6 +143,9 @@
     # XML could specify it as empty, meaning "don't use any"
     if not options.feederports and cfg.feederports is not None:
         options.feederports = cfg.feederports
+    if options.randomFeederports:
+        options.feederports = None
+        log.debug('worker', 'Using random feederports')
     if options.feederports is not None:
         log.debug('worker', 'Using feederports %r' % options.feederports)
 
@@ -202,7 +210,7 @@
             log.debug('worker', 'Setting worker name %s (from hostname)' %
                 options.name)
 
-    if options.feederports is None:
+    if options.feederports is None and not options.randomFeederports:
         options.feederports = configure.defaultGstPortRange
         log.debug('worker', 'Using default feederports %r' %
             options.feederports)

Modified: flumotion/trunk/flumotion/worker/worker.py
==============================================================================
--- flumotion/trunk/flumotion/worker/worker.py	(original)
+++ flumotion/trunk/flumotion/worker/worker.py	Mon Mar 12 23:34:29 2007
@@ -545,7 +545,10 @@
         
         self.authenticator = None
         # the last one is reserved for our FeedServer
-        self.medium = WorkerMedium(self, self.options.feederports[:-1])
+        ports = []
+        if not self.options.randomFeederports:
+            ports = self.options.feederports[:-1]
+        self.medium = WorkerMedium(self, ports)
         self._socketPath = _getSocketPath()
         self.kindergarten = Kindergarten(options, self._socketPath, self)
         self.jobHeaven = JobHeaven(self)
@@ -618,18 +621,26 @@
         """
         @returns: (port, portNumber)
         """
-        try:
-            self.feedServerPort = self.options.feederports[-1]
-        except IndexError:
-            self.info('Not starting feed server because no port is configured')
-            return
+        port = None
+        if self.options.randomFeederports:
+            port = 0
+        else:
+            try:
+                port = self.options.feederports[-1]
+            except IndexError:
+                self.info(
+                    'Not starting feed server because no port is configured')
+                return
 
-        self.debug('Listening for feed requests on TCP port %s' %
-            self.feedServerPort)
         self._feedServerPort = reactor.listenWith(
-            fdserver.PassableServerPort, self.feedServerPort, 
+            fdserver.PassableServerPort, port,
             self._feedServerFactory)
 
+        # jumping through hoops is fun
+        self.feedServerPort = self._feedServerPort.getHost().port
+        self.debug('Listening for feed requests on TCP port %s' %
+            self.feedServerPort)
+
     # FIXME: this is only called from the tests
     def teardown(self):
         """


More information about the flumotion-commit mailing list