[CalendarServer-changes] [1496] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Tue Apr 24 11:34:04 PDT 2007
Revision: 1496
http://trac.macosforge.org/projects/calendarserver/changeset/1496
Author: dreid at apple.com
Date: 2007-04-24 11:34:04 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
Ok this does two things:
1) it fixes #162 which it does by
2) allowing you to specify deep overrides on the command line using '/' seperated paths.
For example -o MultiProcess/ProcessCount=1
So #162 is fixed by telling all subprocesses how many process their are, then for the ProcessCount=1 case we don't try to hook up the PDClientAddressWrapper hack.
Fixes #162
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/cluster.py
CalendarServer/trunk/twistedcaldav/tap.py
CalendarServer/trunk/twistedcaldav/test/test_tap.py
Modified: CalendarServer/trunk/twistedcaldav/cluster.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/cluster.py 2007-04-24 17:41:18 UTC (rev 1495)
+++ CalendarServer/trunk/twistedcaldav/cluster.py 2007-04-24 18:34:04 UTC (rev 1496)
@@ -56,7 +56,8 @@
class TwistdSlaveProcess(object):
prefix = "caldav"
- def __init__(self, twistd, tapname, configFile, interfaces, port, sslPort):
+ def __init__(self, twistd, tapname, configFile,
+ interfaces, port, sslPort):
self.twistd = twistd
self.tapname = tapname
@@ -94,8 +95,11 @@
'-o', 'BindSSLPorts=%s' % (','.join(map(str, self.sslPorts)),),
'-o', 'PIDFile=None',
'-o', 'ErrorLogFile=None',
- '-o', 'SharedSecret=%s' % (config.SharedSecret,)])
+ '-o', 'SharedSecret=%s' % (config.SharedSecret,),
+ '-o', 'MultiProcess/ProcessCount=%d' % (
+ config.MultiProcess['ProcessCount'],)])
+
return args
def getHostLine(self, ssl=None):
Modified: CalendarServer/trunk/twistedcaldav/tap.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/tap.py 2007-04-24 17:41:18 UTC (rev 1495)
+++ CalendarServer/trunk/twistedcaldav/tap.py 2007-04-24 18:34:04 UTC (rev 1496)
@@ -25,6 +25,7 @@
import os
import stat
import sys
+import copy
from zope.interface import implements
@@ -97,6 +98,49 @@
self.overrides = {}
+ def _coerceOption(self, configDict, key, value):
+ """
+ Coerce the given C{val} to type of C{configDict[key]}
+ """
+ if key in configDict:
+ if isinstance(configDict[key], bool):
+ value = value == "True"
+
+ elif isinstance(configDict[key], (int, float, long)):
+ value = type(configDict[key])(value)
+
+ elif isinstance(configDict[key], (list, tuple)):
+ value = value.split(',')
+
+ elif isinstance(configDict[key], dict):
+ raise UsageError("Dict options not supported on the command line")
+
+ elif value == 'None':
+ value = None
+
+ return value
+
+ def _setOverride(self, configDict, path, value, overrideDict):
+ """
+ Set the value at path in configDict
+ """
+ key = path[0]
+
+ if len(path) == 1:
+ overrideDict[key] = self._coerceOption(configDict, key, value)
+ return
+
+ if key in configDict:
+ if not isinstance(configDict[key], dict):
+ raise UsageError(
+ "Found intermediate path element that is not a dictionary")
+
+ if key not in overrideDict:
+ overrideDict[key] = {}
+
+ self._setOverride(
+ configDict[key], path[1:], value, overrideDict[key])
+
def opt_option(self, option):
"""
Set an option to override a value in the config file. True, False, int,
@@ -106,25 +150,9 @@
"""
if '=' in option:
- key, value = option.split('=')
-
- if key in defaultConfig:
- if isinstance(defaultConfig[key], bool):
- value = value == "True"
-
- elif isinstance(defaultConfig[key], (int, float, long)):
- value = type(defaultConfig[key])(value)
-
- elif isinstance(defaultConfig[key], (list, tuple)):
- value = value.split(',')
-
- elif isinstance(defaultConfig[key], dict):
- raise UsageError("Dict options not supported on the command line")
-
- elif value == 'None':
- value = None
-
- self.overrides[key] = value
+ path, value = option.split('=')
+ self._setOverride(
+ defaultConfig, path.split('/'), value, self.overrides)
else:
self.opt_option('%s=True' % (option,))
@@ -457,10 +485,13 @@
log.msg("Setting up service")
if config.ProcessType == 'Slave':
- realRoot = pdmonster.PDClientAddressWrapper(
- logWrapper,
- config.PythonDirector['ControlSocket']
- )
+ if config.MultiProcess['ProcessCount'] > 1:
+ realRoot = pdmonster.PDClientAddressWrapper(
+ logWrapper,
+ config.PythonDirector['ControlSocket']
+ )
+ else:
+ realRoot = logWrapper
logObserver = logging.AMPCommonAccessLoggingObserver(config.ControlSocket)
Modified: CalendarServer/trunk/twistedcaldav/test/test_tap.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_tap.py 2007-04-24 17:41:18 UTC (rev 1495)
+++ CalendarServer/trunk/twistedcaldav/test/test_tap.py 2007-04-24 18:34:04 UTC (rev 1496)
@@ -154,7 +154,17 @@
self.assertEquals(config.Authentication['Basic']['Enabled'],
myConfig['Authentication']['Basic']['Enabled'])
+ def test_specifyDictPath(self):
+ """
+ Test that we can specify command line overrides to leafs using
+ a '/' seperated path. Such as '-o MultiProcess/ProcessCount=1'
+ """
+ argv = ['-o', 'MultiProcess/ProcessCount=102']
+ self.config.parseOptions(argv)
+
+ self.assertEquals(config.MultiProcess['ProcessCount'], 102)
+
class BaseServiceMakerTests(unittest.TestCase):
"""
Utility class for ServiceMaker tests.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070424/0124134c/attachment.html
More information about the calendarserver-changes
mailing list