[CalendarServer-changes] [875] CalendarServer/branches/users/dreid/cluster

source_changes at macosforge.org source_changes at macosforge.org
Wed Dec 20 15:45:33 PST 2006


Revision: 875
          http://trac.macosforge.org/projects/calendarserver/changeset/875
Author:   dreid at apple.com
Date:     2006-12-20 15:45:33 -0800 (Wed, 20 Dec 2006)

Log Message:
-----------
various improvements, BindAddress support, and new service types

Modified Paths:
--------------
    CalendarServer/branches/users/dreid/cluster/bin/caldavd
    CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist
    CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist
    CalendarServer/branches/users/dreid/cluster/run
    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/bin/caldavd
===================================================================
--- CalendarServer/branches/users/dreid/cluster/bin/caldavd	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/bin/caldavd	2006-12-20 23:45:33 UTC (rev 875)
@@ -24,6 +24,7 @@
 configfile="";
 twistdpath="$(type -p twistd)";
 plugin_name="caldav";
+service_type="";
 
 py_version ()
 {
@@ -75,7 +76,7 @@
     
     if [ "${1--}" != "-" ]; then echo "${1}"; echo; fi;
 
-    echo "Usage: ${program} [-hX] [-u username] [-g groupname] [-T twistd] [-f caldavd.plist]";
+    echo "Usage: ${program} [-hX] [-u username] [-g groupname] [-T twistd] [-t type] [-f caldavd.plist]";
     echo "Options:";
     echo "        -h Print this help and exit";
     echo "        -X Do not daemonize";
@@ -83,12 +84,13 @@
     echo "        -g Group to run as";
     echo "        -f Configuration file to read";
     echo "        -T Path to twistd binary";
+    echo "        -t Service type (master, slave, standalone, cluster)";
     
     if [ "${1-}" == "-" ]; then return 0; fi;
     exit 64;
 }
 
-while getopts 'hXu:g:f:T:P:' option; do
+while getopts 'hXu:g:f:T:P:t:' option; do
     case "${option}" in
         '?') usage; ;;
         'h') usage -; exit 0; ;;
@@ -98,6 +100,7 @@
         'u') username="-u ${OPTARG}"; ;;
         'g') grouname="-g ${OPTARG}"; ;;
         'P') plugin_name="${OPTARG}"; ;;
+        't') service_type="-o ServerType=${OPTARG}"; ;;
     esac;
 done;
 
@@ -105,4 +108,4 @@
 
 if [ $# != 0 ]; then usage "Unrecognized arguments:" "$@"; fi;
 
-exec "${python}" "${twistdpath}" "${daemonize}" ${username} ${groupname} "${plugin_name}" ${configfile};
+exec "${python}" "${twistdpath}" "${daemonize}" ${username} ${groupname} "${plugin_name}" ${configfile} ${service_type};

Modified: CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist
===================================================================
--- CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/conf/caldavd-test.plist	2006-12-20 23:45:33 UTC (rev 875)
@@ -29,6 +29,9 @@
   <key>DocumentRoot</key>
   <string>twistedcaldav/test/data/</string>
 
+  <key>BindAddress</key>
+  <string>127.0.0.1</string>
+
   <key>Port</key>
   <integer>8008</integer>
 
@@ -165,14 +168,11 @@
   <array>
     <string>/principals/user/admin</string>
   </array>
-
-  <key>ClusterEnable</key>
-  <false/>
   
   <key>Cluster</key>
   <dict>
     <key>processes</key>
-    <integer>0</integer>
+    <integer>2</integer>
 
     <key>scheduler</key>
     <string>leastconns</string>
@@ -185,10 +185,12 @@
       <key>password</key>
       <string></string>
     </dict>
+  </dict>
     
-    <key>pydirLocation</key>
-    <string>../pydirector-1.0.0/pydir++.py</string>
+  <key>pydirLocation</key>
+  <string>../pydirector-1.0.0/pydir.py</string>
 
-  </dict>
+  <key>pydirConfig</key>
+  <string>conf/pydir.xml</string>
 </dict>
 </plist>

Modified: CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist
===================================================================
--- CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/conf/caldavd.plist	2006-12-20 23:45:33 UTC (rev 875)
@@ -29,6 +29,9 @@
   <key>DocumentRoot</key>
   <string>/Library/CalendarServer/Documents</string>
 
+  <key>BindAddress</key>
+  <string></string>
+
   <key>Port</key>
   <integer>8008</integer>
 
@@ -112,8 +115,8 @@
     <string>/principals/user/admin</string>
   </array>
 
-  <key>ClusterEnable</key>
-  <false/>
+  <key>ServerType</key>
+  <string>singleprocess</string>
   
   <key>Cluster</key>
   <dict>
@@ -134,6 +137,7 @@
     
     <key>pydirLocation</key>
     <string>/usr/share/caldavd/bin/pydir++.py</string>
+
   </dict>
 </dict>
 </plist>

Modified: CalendarServer/branches/users/dreid/cluster/run
===================================================================
--- CalendarServer/branches/users/dreid/cluster/run	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/run	2006-12-20 23:45:33 UTC (rev 875)
@@ -35,6 +35,7 @@
       install="";
     daemonize="-X";
   plugin_name="caldav";
+ service_type="standalone";
 
 usage ()
 {
@@ -58,7 +59,7 @@
   exit 64;
 }
 
-while getopts 'hvsfnpdP:i:I:' option; do
+while getopts 'hvsfnpdP:i:I:t:' option; do
   case "$option" in
     '?') usage; ;;
     'h') usage -; exit 0; ;;
@@ -71,6 +72,7 @@
     'P')   plugin_name="${OPTARG}"; ;;
     'i')    setup_only="true"; install="${OPTARG}"; install_flag="--root="; ;;
     'I')    setup_only="true"; install="${wd}/build/dst"; install_flag="--root="; install_home="${OPTARG}"; ;;
+    't')  service_type="${OPTARG}"; ;;
   esac;
 done;
 shift $((${OPTIND} - 1));
@@ -186,7 +188,7 @@
         -f "${config}"                                \
         -T "${twisted}/bin/twistd"                    \
         -P "${plugin_name}"                           \
-        ;
+        -t "${service_type}";
     cd /;
   fi;
 }

Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py
===================================================================
--- CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/cluster.py	2006-12-20 23:45:33 UTC (rev 875)
@@ -1,17 +1,14 @@
 import os
+import sys
 import tempfile
-import socket
 
 from twisted.runner import procmon
 
-from twisted.python import usage
-
 from twistedcaldav.config import config
-# from twistedcaldav.tap import CaldavOptions, CaldavServiceMaker
 
 serviceTemplate = """
     <service name="%(name)s">
-	<listen ip="127.0.0.1:%(port)s" />
+	<listen ip="%(bindAddress)s:%(port)s" />
 	<group name="main" scheduler="%(scheduler)s">
 	  %(hosts)s
         </group>
@@ -25,7 +22,6 @@
     <admin listen="localhost:7001">
 	<user name="%(username)s" password="%(password)s" access="full"/>
     </admin>
-    <logging file="pydir.log"/>
 </pdconfig>
 """
 
@@ -54,13 +50,16 @@
         return '%s-%s' % (self.prefix, self.sslPort)
 
     def getCommandLine(self):
-        return [self.twistd, '-n', 'caldav', 
-                '-f', self.configFile,
-                '-t', 'standalone',
-                '-o', 'Port=%s' % (self.port,),
-                '-o', 'SSLPort=%s' % (self.sslPort,),
-                '-o', 'PIDFile=%s' % (self.pidFile,)]
-
+        return [
+            sys.executable,
+            self.twistd, '-n', 'caldav', 
+            '-f', self.configFile,
+            '-o', 'ServerType=standalone',
+            '-o', 'BindAddress=127.0.0.1',
+            '-o', 'Port=%s' % (self.port,),
+            '-o', 'SSLPort=%s' % (self.sslPort,),
+            '-o', 'PIDFile=%s' % (self.pidFile,)]
+    
     def getHostLine(self, ssl=None):
         name = self.getName()
         port = self.port
@@ -71,13 +70,7 @@
         return hostTemplate % {'name': name,
                                'port': port}
 
-def makeService(self, options):
-    if not config.ClusterEnable:
-        raise usage.UsageError(
-            ("Clustering is not enabled in the config "
-             "file, use -o ClusterEnable=True to "
-             "override"))
-
+def makeService_multiprocess(self, options):
     service = procmon.ProcessMonitor()
 
     hosts = []
@@ -108,9 +101,9 @@
     services = []
 
     if not config.SSLOnly:
-
         services.append(serviceTemplate % {
                 'name': 'http',
+                'bindAddress': config.BindAddress,
                 'port': config.Port,
                 'scheduler': config.Cluster['scheduler'],
                 'hosts': '\n'.join(hosts)
@@ -119,6 +112,7 @@
     if config.SSLEnable:
         services.append(serviceTemplate % {
                 'name': 'https',
+                'bindAddress': config.BindAddress,
                 'port': config.SSLPort,
                 'scheduler': config.Cluster['scheduler'],
                 'hosts': '\n'.join(sslHosts),
@@ -134,7 +128,17 @@
     os.write(fd, pdconfig)
     os.close(fd)
     
-    service.addProcess('pydir', [config.Cluster['pydirLocation'],
+    service.addProcess('pydir', [sys.executable,
+                                 config.pydirLocation,
                                  fname])
     
     return service
+
+def makeService_pydir(self, options):
+    service = procmon.ProcessMonitor()
+
+    service.addProcess('pydir', [sys.executable,
+                                 config.pydirLocation,
+                                 config.pydirConfig])
+
+    return service

Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py
===================================================================
--- CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/config.py	2006-12-20 23:45:33 UTC (rev 875)
@@ -23,6 +23,7 @@
 defaultConfigFile = '/etc/caldavd/caldavd.plist'
 
 defaultConfig = {
+    'BindAddress': '127.0.0.1',
     'DirectoryService': {
         'params': {'node': '/Search'},
         'type': 'twistedcaldav.directory.appleopendirectory.OpenDirectoryService'
@@ -45,11 +46,16 @@
     'ServerStatsFile': '/Library/CalendarServer/Documents/stats.plist',
     'UserQuotaBytes': 104857600,
     'Verbose': False,
-    'twistdLocation': '/usr/share/caldavd/bin/twistd',
     'SACLEnable': False,
     'AuthSchemes': ['Basic'],
     'AdminPrincipals': ['/principals/user/admin'],
-    'ClusterEnable': True,
+
+    'twistdLocation': '/usr/share/caldavd/bin/twistd',
+    'pydirLocation': '/usr/share/caldavd/bin/pydir++.py',
+    'pydirConfig': '/etc/caldavd/pydir.xml',
+
+    'ServerType': 'singleprocess',
+
     'Cluster': {
         'processes': 10,
         'scheduler': 'leastconns',
@@ -57,7 +63,6 @@
             'username': None,
             'password': None,
             },
-        'pydirLocation': '/usr/share/caldavd/bin/pydir++.py',
         },
     }
 

Modified: CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py
===================================================================
--- CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py	2006-12-20 23:11:27 UTC (rev 874)
+++ CalendarServer/branches/users/dreid/cluster/twistedcaldav/tap.py	2006-12-20 23:45:33 UTC (rev 875)
@@ -23,7 +23,7 @@
 
 from twisted.python import log
 
-from twisted.python.usage import Options
+from twisted.python.usage import Options, UsageError
 from twisted.python.reflect import namedClass
 
 from twisted.application import internet, service
@@ -42,7 +42,7 @@
 from twisted.web2.log import LogWrapperResource
 from twisted.web2.server import Site
 
-from twistedcaldav.cluster import makeService as makeService_cluster
+from twistedcaldav.cluster import makeService_multiprocess, makeService_pydir
 from twistedcaldav.config import config, parseConfig, defaultConfig
 from twistedcaldav.logging import RotatingFileAccessLoggingObserver
 from twistedcaldav.root import RootResource
@@ -54,7 +54,6 @@
     optParameters = [
         ["config", "f", "/etc/caldavd/caldavd.plist",
          "Path to configuration file."],
-        ["type", "t", "standalone", "Select the type of service to run"],
         ]
 
     zsh_actions = {"config" : "_files -g '*.plist'"}
@@ -86,7 +85,7 @@
                     value = value.split(',')
 
                 elif isinstance(defaultConfig[key], dict):
-                    raise usage.UsageError(
+                    raise UsageError(
                         "We do not support dict options on the command line")
 
             self.overrides[key] = value
@@ -124,7 +123,7 @@
     principalResourceClass = DirectoryPrincipalProvisioningResource
     calendarResourceClass = CalendarHomeProvisioningFile
 
-    def makeService_standalone(self, options):
+    def makeService_singleprocess(self, options):
         #
         # Setup the Directory
         #
@@ -226,7 +225,8 @@
         service = Web2Service(logObserver)
 
         if not config.SSLOnly:
-            httpService = internet.TCPServer(int(config.Port), channel)
+            httpService = internet.TCPServer(int(config.Port), channel,
+                                             interface=config.BindAddress)
             httpService.setServiceParent(service)
 
         if config.SSLEnable:
@@ -235,24 +235,28 @@
                 int(config.SSLPort),
                 channel,
                 DefaultOpenSSLContextFactory(config.SSLPrivateKey,
-                                             config.SSLCertificate)
+                                             config.SSLCertificate),
+                interface=config.BindAddress
             )
             httpsService.setServiceParent(service)
             
         return service
 
-    makeService_slave = makeService_standalone
+    makeService_slave = makeService_singleprocess
 
-    makeService_cluster = makeService_cluster
+    makeService_multiprocess = makeService_multiprocess
 
+    makeService_master = makeService_pydir
+
     def makeService(self, options):
-        serviceType = options['type']
+        serverType = config.ServerType
         
-        serviceMethod = getattr(self, 'makeService_%s' % (serviceType,))
+        serviceMethod = getattr(self, 'makeService_%s' % (serverType,), None)
 
-        if not serviceMethod:
-            raise usage.UsageError(
-                ("Unknown service type %s, please choose: " % (serviceType,)))
+        if not serverMethod:
+            raise UsageError(
+                ("Unknown server type %s, please choose: singleprocess, "
+                 "multiprocess, master, slave" % (serverType,)))
 
         else:
             return serviceMethod(options)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20061220/ebc489a2/attachment.html


More information about the calendarserver-changes mailing list