Revision: 876 http://trac.macosforge.org/projects/calendarserver/changeset/876 Author: dreid@apple.com Date: 2006-12-20 16:25:37 -0800 (Wed, 20 Dec 2006) Log Message: ----------- Better config layout, ability to disable pydir when using the multiprocess setup Modified Paths: -------------- CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py Modified: CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist =================================================================== --- CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist 2006-12-20 23:45:33 UTC (rev 875) +++ CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist 2006-12-21 00:25:37 UTC (rev 876) @@ -169,24 +169,33 @@ <string>/principals/user/admin</string> </array> - <key>Cluster</key> + <key>ServerType</key> + <string>singleprocess</string> + + <key>MultiProcess</key> <dict> - <key>processes</key> + <key>NumProcesses</key> <integer>2</integer> - <key>scheduler</key> - <string>leastconns</string> - - <key>admin</key> + <key>PyDirector</key> <dict> - <key>username</key> - <string></string> + <key>Enabled</key> + <true/> - <key>password</key> - <string></string> - </dict> + <key>Scheduler</key> + <string>leastconns</string> + + <key>admin</key> + <dict> + <key>username</key> + <string></string> + + <key>password</key> + <string></string> + </dict> + </dict> </dict> - + <key>pydirLocation</key> <string>../pydirector-1.0.0/pydir.py</string> Modified: CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist =================================================================== --- CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist 2006-12-20 23:45:33 UTC (rev 875) +++ CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist 2006-12-21 00:25:37 UTC (rev 876) @@ -118,26 +118,34 @@ <key>ServerType</key> <string>singleprocess</string> - <key>Cluster</key> + <key>MultiProcess</key> <dict> - <key>processes</key> + <key>NumProcesses</key> <integer>0</integer> - <key>scheduler</key> - <string>leastconns</string> - - <key>admin</key> + <key>PyDirector</key> <dict> - <key>username</key> - <string></string> + <key>Enabled</key> + <false/> - <key>password</key> - <string></string> - </dict> - - <key>pydirLocation</key> - <string>/usr/share/caldavd/bin/pydir++.py</string> + <key>Scheduler</key> + <string>leastconns</string> + <key>admin</key> + <dict> + <key>username</key> + <string></string> + + <key>password</key> + <string></string> + </dict> + </dict> </dict> + + <key>pydirLocation</key> + <string>/usr/share/caldavd/bin/pydir++.py</string> + + <key>pydirConfig</key> + <string>/etc/caldvad/pydir.xml</string> </dict> </plist> Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py =================================================================== --- CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py 2006-12-20 23:45:33 UTC (rev 875) +++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py 2006-12-21 00:25:37 UTC (rev 876) @@ -25,13 +25,13 @@ </pdconfig> """ -hostTemplate = '<host name="%(name)s" ip="127.0.0.1:%(port)s" />' +hostTemplate = '<host name="%(name)s" ip="%(bindAddress)s:%(port)s" />' class TwistdSlaveProcess(object): prefix = "caldav" - def __init__(self, twistdLocation, configFile, port, sslPort): + def __init__(self, twistdLocation, configFile, interface, port, sslPort): self.twistd = twistdLocation self.configFile = configFile @@ -43,6 +43,8 @@ os.path.dirname(config.PIDFile), '%s.pid' % (self.getName(),)) + self.interface = interface + def getName(self): return '%s-%s' % (self.prefix, self.port) @@ -54,8 +56,8 @@ sys.executable, self.twistd, '-n', 'caldav', '-f', self.configFile, - '-o', 'ServerType=standalone', - '-o', 'BindAddress=127.0.0.1', + '-o', 'ServerType=singleprocess', + '-o', 'BindAddress=%s' % (self.interface,), '-o', 'Port=%s' % (self.port,), '-o', 'SSLPort=%s' % (self.sslPort,), '-o', 'PIDFile=%s' % (self.pidFile,)] @@ -63,12 +65,14 @@ def getHostLine(self, ssl=None): name = self.getName() port = self.port + if ssl: name = self.getSSLName() port = self.sslPort return hostTemplate % {'name': name, - 'port': port} + 'port': port, + 'bindAddress': self.interface} def makeService_multiprocess(self, options): service = procmon.ProcessMonitor() @@ -79,12 +83,18 @@ port = config.Port sslport = config.SSLPort - for p in xrange(0, config.Cluster['processes']): + bindAddress = '127.0.0.1' + + if not config.MultiProcess['PyDirector']['Enabled']: + bindAddress = config.BindAddress + + for p in xrange(0, config.MultiProcess['NumProcesses']): port += 1 sslport += 1 process = TwistdSlaveProcess(config.twistdLocation, options['config'], + bindAddress, port, sslport) service.addProcess(process.getName(), @@ -98,40 +108,45 @@ if config.SSLEnable: sslHosts.append(process.getHostLine(ssl=True)) - services = [] + if config.MultiProcess['PyDirector']['Enabled']: + services = [] - if not config.SSLOnly: - services.append(serviceTemplate % { - 'name': 'http', - 'bindAddress': config.BindAddress, - 'port': config.Port, - 'scheduler': config.Cluster['scheduler'], - 'hosts': '\n'.join(hosts) - }) + if not config.SSLOnly: + services.append(serviceTemplate % { + 'name': 'http', + 'bindAddress': config.BindAddress, + 'port': config.Port, + 'scheduler': + config.MultiProcess['PyDirector']['Scheduler'], + 'hosts': '\n'.join(hosts) + }) + + if config.SSLEnable: + services.append(serviceTemplate % { + 'name': 'https', + 'bindAddress': config.BindAddress, + 'port': config.SSLPort, + 'scheduler': + config.MultiProcess['PyDirector']['Scheduler'], + 'hosts': '\n'.join(sslHosts), + }) + + pdconfig = configTemplate % { + 'services': '\n'.join(services), + 'username': + config.MultiProcess['PyDirector']['admin']['username'], + 'password': + config.MultiProcess['PyDirector']['admin']['password'], + } + + fd, fname = tempfile.mkstemp(prefix='pydir') + os.write(fd, pdconfig) + os.close(fd) - if config.SSLEnable: - services.append(serviceTemplate % { - 'name': 'https', - 'bindAddress': config.BindAddress, - 'port': config.SSLPort, - 'scheduler': config.Cluster['scheduler'], - 'hosts': '\n'.join(sslHosts), - }) - - pdconfig = configTemplate % { - 'services': '\n'.join(services), - 'username': config.Cluster['admin']['username'], - 'password': config.Cluster['admin']['password'], - } - - fd, fname = tempfile.mkstemp(prefix='pydir') - os.write(fd, pdconfig) - os.close(fd) + service.addProcess('pydir', [sys.executable, + config.pydirLocation, + fname]) - service.addProcess('pydir', [sys.executable, - config.pydirLocation, - fname]) - return service def makeService_pydir(self, options): Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py =================================================================== --- CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py 2006-12-20 23:45:33 UTC (rev 875) +++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py 2006-12-21 00:25:37 UTC (rev 876) @@ -56,12 +56,15 @@ 'ServerType': 'singleprocess', - 'Cluster': { - 'processes': 10, - 'scheduler': 'leastconns', - 'admin': { - 'username': None, - 'password': None, + 'MultiProcess': { + 'NumProcesses': 10, + 'PyDirector': { + 'Enabled': True, + 'Scheduler': 'leastconns', + 'admin': { + 'username': None, + 'password': None, + }, }, }, } Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py =================================================================== --- CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py 2006-12-20 23:45:33 UTC (rev 875) +++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py 2006-12-21 00:25:37 UTC (rev 876) @@ -253,7 +253,7 @@ serviceMethod = getattr(self, 'makeService_%s' % (serverType,), None) - if not serverMethod: + if not serviceMethod: raise UsageError( ("Unknown server type %s, please choose: singleprocess, " "multiprocess, master, slave" % (serverType,)))