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

source_changes at macosforge.org source_changes at macosforge.org
Wed Dec 20 16:25:37 PST 2006


Revision: 876
          http://trac.macosforge.org/projects/calendarserver/changeset/876
Author:   dreid at 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,)))

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


More information about the calendarserver-changes mailing list