[CalendarServer-changes] [14086] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Fri Oct 17 11:24:45 PDT 2014


Revision: 14086
          http://trac.calendarserver.org//changeset/14086
Author:   cdaboo at apple.com
Date:     2014-10-17 11:24:45 -0700 (Fri, 17 Oct 2014)
Log Message:
-----------
More cross-pod delegate support: fixing testpods script, re-factoring store/directory setup.

Modified Paths:
--------------
    CalendarServer/trunk/bin/testpods
    CalendarServer/trunk/calendarserver/tap/caldav.py
    CalendarServer/trunk/calendarserver/tap/util.py
    CalendarServer/trunk/conf/caldavd-test-podA.plist
    CalendarServer/trunk/conf/caldavd-test-podB.plist
    CalendarServer/trunk/txdav/dps/server.py
    CalendarServer/trunk/txdav/who/delegates.py
    CalendarServer/trunk/txdav/who/test/test_util.py
    CalendarServer/trunk/txdav/who/util.py

Modified: CalendarServer/trunk/bin/testpods
===================================================================
--- CalendarServer/trunk/bin/testpods	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/bin/testpods	2014-10-17 18:24:45 UTC (rev 14086)
@@ -117,8 +117,8 @@
 # Modify the plists
 
 python -c "import plistlib; f=plistlib.readPlist('${configdir}/caldavd-cdt.plist'); f['ConfigRoot'] = '${configdir}'; f['RunRoot'] = 'Run'; f['Authentication']['Kerberos']['Enabled'] = False; plistlib.writePlist(f, '${configdir}/caldavd-cdt.plist');"
-python -c "import plistlib; f=plistlib.readPlist('${configdir}/caldavd-cdt-podA.plist'); f['ImportConfig'] = '${configdir}/caldavd-cdt.plist'; f['ServerRoot'] = '${serverrootA}'; f['ProxyLoadFromFile'] = '${configdir}/auth/proxies-cdt.xml'; f['ResourceService']['params']['xmlFile'] = '${configdir}/auth/resources-cdt.xml'; f['DirectoryService']['params']['xmlFile'] = '${configdir}/auth/accounts-cdt.xml'; f['AugmentService']['params']['xmlFiles'] = ['${configdir}/auth/augments-cdt.xml']; plistlib.writePlist(f, '${configdir}/caldavd-cdt-podA.plist');"
-python -c "import plistlib; f=plistlib.readPlist('${configdir}/caldavd-cdt-podB.plist'); f['ImportConfig'] = '${configdir}/caldavd-cdt.plist'; f['ServerRoot'] = '${serverrootB}'; f['ProxyLoadFromFile'] = '${configdir}/auth/proxies-cdt.xml'; f['ResourceService']['params']['xmlFile'] = '${configdir}/auth/resources-cdt.xml'; f['DirectoryService']['params']['xmlFile'] = '${configdir}/auth/accounts-cdt.xml'; f['AugmentService']['params']['xmlFiles'] = ['${configdir}/auth/augments-cdt.xml']; plistlib.writePlist(f, '${configdir}/caldavd-cdt-podB.plist');"
+python -c "import plistlib; f=plistlib.readPlist('${configdir}/caldavd-cdt-podA.plist'); f['ImportConfig'] = '${configdir}/caldavd-cdt.plist'; f['ServerRoot'] = '${serverrootA}'; f['ConfigRoot'] = '${configdir}'; f['ProxyLoadFromFile'] = '${configdir}/auth/proxies-cdt.xml'; f['ResourceService']['params']['xmlFile'] = '${configdir}/auth/resources-cdt.xml'; f['DirectoryService']['params']['xmlFile'] = '${configdir}/auth/accounts-cdt.xml'; f['AugmentService']['params']['xmlFiles'] = ['${configdir}/auth/augments-cdt.xml']; plistlib.writePlist(f, '${configdir}/caldavd-cdt-podA.plist');"
+python -c "import plistlib; f=plistlib.readPlist('${configdir}/caldavd-cdt-podB.plist'); f['ImportConfig'] = '${configdir}/caldavd-cdt.plist'; f['ServerRoot'] = '${serverrootB}'; f['ConfigRoot'] = '${configdir}'; f['ProxyLoadFromFile'] = '${configdir}/auth/proxies-cdt.xml'; f['ResourceService']['params']['xmlFile'] = '${configdir}/auth/resources-cdt.xml'; f['DirectoryService']['params']['xmlFile'] = '${configdir}/auth/accounts-cdt.xml'; f['AugmentService']['params']['xmlFiles'] = ['${configdir}/auth/augments-cdt.xml']; plistlib.writePlist(f, '${configdir}/caldavd-cdt-podB.plist');"
 
 runpod() {
 	local podsuffix="$1"; shift;
@@ -153,6 +153,7 @@
 
 # Run CDT
 
+echo ""
 echo "Starting CDT run"
 
 cd "${cdt}" && "${python}" testcaldav.py ${random} ${seed} ${ssl} ${cdtdebug} --print-details-onfail ${printres} -s "${serverinfo}" -x scripts/tests-pod ${subdir} "$@";

Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -82,9 +82,6 @@
 
 from txdav.caldav.datastore.scheduling.imip.inbound import MailRetriever
 from txdav.caldav.datastore.scheduling.imip.inbound import scheduleNextMailPoll
-from txdav.caldav.datastore.scheduling.ischedule.localservers import (
-    buildServersDB
-)
 from txdav.common.datastore.upgrade.migrate import UpgradeToDatabaseStep
 from txdav.common.datastore.upgrade.sql.upgrade import (
     UpgradeDatabaseCalendarDataStep, UpgradeDatabaseOtherStep,
@@ -94,10 +91,7 @@
 )
 from txdav.common.datastore.work.inbox_cleanup import InboxCleanupWork
 from txdav.common.datastore.work.revision_cleanup import FindMinValidRevisionWork
-from txdav.dps.client import DirectoryService as DirectoryProxyClientService
-from txdav.who.cache import CachingDirectoryService
 from txdav.who.groups import GroupCacher
-from txdav.who.util import directoryFromConfig
 
 from twistedcaldav import memcachepool
 from twistedcaldav.config import ConfigurationError
@@ -127,7 +121,8 @@
     checkDirectories, getRootResource,
     oracleConnectorFromConfig, pgConnectorFromConfig,
     pgServiceFromConfig, getDBPool, MemoryLimitService,
-    storeFromConfig, getSSLPassphrase, preFlightChecks
+    storeFromConfig, getSSLPassphrase, preFlightChecks,
+    storeFromConfigWithDPSClient, storeFromConfigWithoutDPS,
 )
 try:
     from calendarserver.version import version
@@ -846,15 +841,8 @@
         CalDAV and CardDAV requests.
         """
         pool, txnFactory = getDBPool(config)
-        directory = DirectoryProxyClientService(config.DirectoryRealmName)
-        if config.Servers.Enabled:
-            directory.setServersDB(buildServersDB(config.Servers.MaxClients))
-        if config.DirectoryProxy.InProcessCachingSeconds:
-            directory = CachingDirectoryService(
-                directory,
-                expireSeconds=config.DirectoryProxy.InProcessCachingSeconds
-            )
-        store = storeFromConfig(config, txnFactory, directory)
+        store = storeFromConfigWithDPSClient(config, txnFactory)
+        directory = store.directoryService()
         logObserver = AMPCommonAccessLoggingObserver()
         result = self.requestProcessingService(options, store, logObserver)
 
@@ -1380,7 +1368,7 @@
                 Popen(memcachedArgv)
 
         return self.storageService(
-            slaveSvcCreator, logObserver, uid=uid, gid=gid, directory=None
+            slaveSvcCreator, logObserver, uid=uid, gid=gid
         )
 
 
@@ -1397,7 +1385,7 @@
 
         uid, gid = getSystemIDs(config.UserName, config.GroupName)
         return self.storageService(
-            toolServiceCreator, None, uid=uid, gid=gid, directory=None
+            toolServiceCreator, None, uid=uid, gid=gid
         )
 
 
@@ -1448,7 +1436,7 @@
 
 
     def storageService(
-        self, createMainService, logObserver, uid=None, gid=None, directory=None
+        self, createMainService, logObserver, uid=None, gid=None
     ):
         """
         If necessary, create a service to be started used for storage; for
@@ -1492,23 +1480,7 @@
                     maxConnections=config.MaxDBConnectionsPerPool
                 )
                 cp.setServiceParent(ms)
-                store = storeFromConfig(config, cp.connection, directory)
-                if directory is None:
-                    # Create a Directory Proxy "Server" service and hand it to
-                    # the store.
-                    if config.Servers.Enabled:
-                        serversDB = buildServersDB(config.Servers.MaxClients)
-                    else:
-                        serversDB = None
-                    directorySvc = directoryFromConfig(
-                        config, store=store, serversDB=serversDB
-                    )
-                    if config.DirectoryProxy.InProcessCachingSeconds:
-                        directorySvc = CachingDirectoryService(
-                            directorySvc,
-                            expireSeconds=config.DirectoryProxy.InProcessCachingSeconds
-                        )
-                    store.setDirectoryService(directorySvc)
+                store = storeFromConfigWithoutDPS(config, cp.connection)
 
                 pps = PreProcessingService(
                     createMainService, cp, store, logObserver, storageService
@@ -1625,7 +1597,7 @@
                     "Unknown database type {}".format(config.DBType)
                 )
         else:
-            store = storeFromConfig(config, None, directory)
+            store = storeFromConfig(config, None, None)
             return createMainService(None, store, logObserver, None)
 
 
@@ -1920,15 +1892,8 @@
 
             return multi
 
-        # The master will use its own directory.  We could switch this
-        # service out for a DirectoryProxyClientService once the DPS
-        # sidecar is running, but not sure that's necessary as the master
-        # is likely not doing much directory-related activity once it
-        # spawns the caldavd workers.
-        directory = None
-
         ssvc = self.storageService(
-            spawnerSvcCreator, None, uid, gid, directory=directory
+            spawnerSvcCreator, None, uid, gid
         )
         ssvc.setServiceParent(s)
         return s

Modified: CalendarServer/trunk/calendarserver/tap/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/util.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/calendarserver/tap/util.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -28,39 +28,40 @@
     "preFlightChecks",
 ]
 
-import errno
-import OpenSSL
-import os
-import psutil
+from calendarserver.accesslog import DirectoryLogWrapperResource
+from calendarserver.provision.root import RootResource
+from calendarserver.push.applepush import APNSubscriptionResource
+from calendarserver.push.notifier import NotifierFactory
+from calendarserver.tools.util import checkDirectory
+from calendarserver.webadmin.landing import WebAdminLandingResource
+from calendarserver.webcal.resource import WebCalendarResource
+
 from socket import fromfd, AF_UNIX, SOCK_STREAM, socketpair
 from subprocess import Popen, PIPE
-import sys
 
-
+from twext.enterprise.adbapi2 import ConnectionPool, ConnectionPoolConnection
+from twext.enterprise.adbapi2 import ConnectionPoolClient
+from twext.enterprise.ienterprise import ORACLE_DIALECT
+from twext.enterprise.ienterprise import POSTGRES_DIALECT
 from twext.internet.ssl import ChainingOpenSSLContextFactory
+from twext.python.filepath import CachingFilePath
 from twext.python.filepath import CachingFilePath as FilePath
 from twext.python.log import Logger
-from txweb2.auth.basic import BasicCredentialFactory
-from txweb2.dav import auth
-from txweb2.dav.util import joinURL
-from txweb2.http_headers import Headers
-from txweb2.resource import Resource
-from txweb2.static import File as FileResource
+from twext.who.checker import HTTPDigestCredentialChecker
+from twext.who.checker import UsernamePasswordCredentialChecker
 
 from twisted.application.service import Service
+from twisted.cred.error import UnauthorizedLogin
 from twisted.cred.portal import Portal
+from twisted.internet import reactor as _reactor
 from twisted.internet.defer import inlineCallbacks, returnValue, Deferred, succeed
-from twisted.internet import reactor as _reactor
 from twisted.internet.reactor import addSystemEventTrigger
 from twisted.internet.tcp import Connection
+from twisted.python.usage import UsageError
 
-from calendarserver.push.applepush import APNSubscriptionResource
-from calendarserver.push.notifier import NotifierFactory
-from twext.enterprise.adbapi2 import ConnectionPool, ConnectionPoolConnection
-from twext.enterprise.ienterprise import ORACLE_DIALECT
-from twext.enterprise.ienterprise import POSTGRES_DIALECT
 from twistedcaldav.bind import doBind
 from twistedcaldav.cache import CacheStoreNotifierFactory
+from twistedcaldav.config import ConfigurationError
 from twistedcaldav.controlapi import ControlAPIResource
 from twistedcaldav.directory.addressbook import DirectoryAddressBookHomeProvisioningResource
 from twistedcaldav.directory.calendar import DirectoryCalendarHomeProvisioningResource
@@ -69,48 +70,48 @@
 from twistedcaldav.directorybackedaddressbook import DirectoryBackedAddressBookResource
 from twistedcaldav.resource import AuthenticationWrapper
 from twistedcaldav.simpleresource import SimpleResource, SimpleRedirectResource
+from twistedcaldav.stdconfig import config
 from twistedcaldav.timezones import TimezoneCache
 from twistedcaldav.timezoneservice import TimezoneServiceResource
 from twistedcaldav.timezonestdservice import TimezoneStdServiceResource
-from txdav.caldav.datastore.scheduling.ischedule.dkim import DKIMUtils, DomainKeyResource
-from txdav.caldav.datastore.scheduling.ischedule.resource import IScheduleInboxResource
 
-
-try:
-    from twistedcaldav.authkerb import NegotiateCredentialFactory
-    NegotiateCredentialFactory  # pacify pyflakes
-except ImportError:
-    NegotiateCredentialFactory = None
-
-from twext.enterprise.adbapi2 import ConnectionPoolClient
 from txdav.base.datastore.dbapiclient import DBAPIConnector, OracleConnector
 from txdav.base.datastore.dbapiclient import postgresPreflight
 from txdav.base.datastore.subpostgres import PostgresService
-
-from calendarserver.accesslog import DirectoryLogWrapperResource
-from calendarserver.provision.root import RootResource
-from calendarserver.tools.util import checkDirectory
-from calendarserver.webadmin.landing import WebAdminLandingResource
-from calendarserver.webcal.resource import WebCalendarResource
-
+from txdav.caldav.datastore.scheduling.ischedule.dkim import DKIMUtils, DomainKeyResource
+from txdav.caldav.datastore.scheduling.ischedule.localservers import buildServersDB
+from txdav.caldav.datastore.scheduling.ischedule.resource import IScheduleInboxResource
+from txdav.common.datastore.file import CommonDataStore as CommonFileDataStore
 from txdav.common.datastore.podding.resource import ConduitResource
 from txdav.common.datastore.sql import CommonDataStore as CommonSQLDataStore
-from txdav.common.datastore.file import CommonDataStore as CommonFileDataStore
 from txdav.common.datastore.sql import current_sql_schema
 from txdav.common.datastore.upgrade.sql.upgrade import NotAllowedToUpgrade
-from twext.python.filepath import CachingFilePath
-from urllib import quote
-from twisted.python.usage import UsageError
+from txdav.dps.client import DirectoryService as DirectoryProxyClientService
+from txdav.who.cache import CachingDirectoryService
+from txdav.who.util import directoryFromConfig
 
-from twext.who.checker import UsernamePasswordCredentialChecker
-from twext.who.checker import HTTPDigestCredentialChecker
-from twisted.cred.error import UnauthorizedLogin
+from txweb2.auth.basic import BasicCredentialFactory
+from txweb2.dav import auth
 from txweb2.dav.auth import IPrincipalCredentials
+from txweb2.dav.util import joinURL
+from txweb2.http_headers import Headers
+from txweb2.resource import Resource
+from txweb2.static import File as FileResource
 
-from twistedcaldav.config import ConfigurationError
-from twistedcaldav.stdconfig import config
+from urllib import quote
+import OpenSSL
+import errno
+import os
+import psutil
+import sys
 
+try:
+    from twistedcaldav.authkerb import NegotiateCredentialFactory
+    NegotiateCredentialFactory  # pacify pyflakes
+except ImportError:
+    NegotiateCredentialFactory = None
 
+
 log = Logger()
 
 
@@ -229,6 +230,47 @@
 
 
 
+def storeFromConfigWithoutDPS(config, txnFactory):
+    store = storeFromConfig(config, txnFactory, None)
+    directory = directoryFromConfig(config, store)
+    if config.DirectoryProxy.InProcessCachingSeconds:
+        directory = CachingDirectoryService(
+            directory,
+            expireSeconds=config.DirectoryProxy.InProcessCachingSeconds
+        )
+    store.setDirectoryService(directory)
+    return store
+
+
+
+def storeFromConfigWithDPSClient(config, txnFactory):
+    store = storeFromConfig(config, txnFactory, None)
+    directory = DirectoryProxyClientService(config.DirectoryRealmName)
+    if config.Servers.Enabled:
+        directory.setServersDB(buildServersDB(config.Servers.MaxClients))
+    if config.DirectoryProxy.InProcessCachingSeconds:
+        directory = CachingDirectoryService(
+            directory,
+            expireSeconds=config.DirectoryProxy.InProcessCachingSeconds
+        )
+    store.setDirectoryService(directory)
+    return store
+
+
+
+def storeFromConfigWithDPSServer(config, txnFactory):
+    store = storeFromConfig(config, txnFactory, None)
+    directory = directoryFromConfig(config, store)
+    if config.DirectoryProxy.InSidecarCachingSeconds:
+        directory = CachingDirectoryService(
+            directory,
+            expireSeconds=config.DirectoryProxy.InSidecarCachingSeconds
+        )
+    store.setDirectoryService(directory)
+    return store
+
+
+
 def storeFromConfig(config, txnFactory, directoryService):
     """
     Produce an L{IDataStore} from the given configuration, transaction factory,

Modified: CalendarServer/trunk/conf/caldavd-test-podA.plist
===================================================================
--- CalendarServer/trunk/conf/caldavd-test-podA.plist	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/conf/caldavd-test-podA.plist	2014-10-17 18:24:45 UTC (rev 14086)
@@ -110,48 +110,6 @@
 	    <string>podding</string>
 	</dict>
 
-    <key>Scheduling</key>
-    <dict>
-      <!-- iSchedule protocol options -->
-      <key>iSchedule</key>
-      <dict>
-        <key>Enabled</key>
-        <true/>
-        <key>AddressPatterns</key>
-        <array>
-        </array>
-        <key>RemoteServers</key>
-        <string>remoteservers-test.xml</string>
-        <key>DNSDebug</key>
-        <string>test-db.zones</string>
-        <key>DKIM</key>
-        <dict>
-        	<key>Enabled</key>
-        	<true/>
-        	<key>Domain</key>
-        	<string>example.com</string>
-        	<key>KeySelector</key>
-        	<string>ischedule</string>
-        	<key>UseDNSKey</key>
-        	<false/>
-        	<key>UseHTTPKey</key>
-        	<true/>
-        	<key>UsePrivateExchangeKey</key>
-        	<true/>
-        	<key>ExpireSeconds</key>
-        	<integer>3600</integer>
-        	<key>PrivateKeyFile</key>
-        	<string>dkim-test/priv.pem</string>
-        	<key>PublicKeyFile</key>
-        	<string>dkim-test/pub.pem</string>
-        	<key>PrivateExchanges</key>
-        	<string>dkim-test/other_keys</string>
-        	<key>ProtocolDebug</key>
-        	<true/>
-        </dict>
-      </dict>
-    </dict>
-
     <key>Notifications</key>
     <dict>
       <key>Services</key>

Modified: CalendarServer/trunk/conf/caldavd-test-podB.plist
===================================================================
--- CalendarServer/trunk/conf/caldavd-test-podB.plist	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/conf/caldavd-test-podB.plist	2014-10-17 18:24:45 UTC (rev 14086)
@@ -117,48 +117,6 @@
 	    <string>podding</string>
 	</dict>
 
-    <key>Scheduling</key>
-    <dict>
-      <!-- iSchedule protocol options -->
-      <key>iSchedule</key>
-      <dict>
-        <key>Enabled</key>
-        <true/>
-        <key>AddressPatterns</key>
-        <array>
-        </array>
-        <key>RemoteServers</key>
-        <string>remoteservers-test.xml</string>
-        <key>DNSDebug</key>
-        <string>test-db.zones</string>
-        <key>DKIM</key>
-        <dict>
-        	<key>Enabled</key>
-        	<true/>
-        	<key>Domain</key>
-        	<string>example.com</string>
-        	<key>KeySelector</key>
-        	<string>ischedule</string>
-        	<key>UseDNSKey</key>
-        	<false/>
-        	<key>UseHTTPKey</key>
-        	<true/>
-        	<key>UsePrivateExchangeKey</key>
-        	<true/>
-        	<key>ExpireSeconds</key>
-        	<integer>3600</integer>
-        	<key>PrivateKeyFile</key>
-        	<string>dkim-test/priv.pem</string>
-        	<key>PublicKeyFile</key>
-        	<string>dkim-test/pub.pem</string>
-        	<key>PrivateExchanges</key>
-        	<string>dkim-test/other_keys</string>
-        	<key>ProtocolDebug</key>
-        	<true/>
-        </dict>
-      </dict>
-    </dict>
-
     <key>Notifications</key>
     <dict>
       <key>Services</key>
@@ -194,7 +152,7 @@
 		    <key>ClientEnabled</key>
 		    <true/>
 		    <key>ServerEnabled</key>
-		    <true/>
+		    <false/>
 		    <key>BindAddress</key>
 		    <string>localhost</string>
 		    <key>Port</key>

Modified: CalendarServer/trunk/txdav/dps/server.py
===================================================================
--- CalendarServer/trunk/txdav/dps/server.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/txdav/dps/server.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -18,7 +18,7 @@
 import datetime
 import uuid
 
-from calendarserver.tap.util import getDBPool, storeFromConfig
+from calendarserver.tap.util import getDBPool, storeFromConfigWithDPSServer
 from twext.python.log import Logger
 from twext.who.expression import MatchType, MatchFlags, Operand
 from twisted.application import service
@@ -42,8 +42,6 @@
     AddMembersCommand, RemoveMembersCommand,
     UpdateRecordsCommand, # RemoveRecordsCommand,
 )
-from txdav.who.cache import CachingDirectoryService
-from txdav.who.util import directoryFromConfig
 from txdav.who.wiki import WikiAccessLevel
 from zope.interface import implementer
 
@@ -773,14 +771,7 @@
 
         try:
             _ignore_pool, txnFactory = getDBPool(config)
-            store = storeFromConfig(config, txnFactory, None)
-            directory = directoryFromConfig(config)
-            if config.DirectoryProxy.InSidecarCachingSeconds:
-                directory = CachingDirectoryService(
-                    directory,
-                    expireSeconds=config.DirectoryProxy.InSidecarCachingSeconds
-                )
-            store.setDirectoryService(directory)
+            store = storeFromConfigWithDPSServer(config, txnFactory)
         except Exception as e:
             log.error("Failed to create directory service", error=e)
             raise
@@ -792,5 +783,5 @@
             "unix:{path}:mode=660".format(
                 path=config.DirectoryProxy.SocketPath
             ),
-            DirectoryProxyAMPFactory(directory)
+            DirectoryProxyAMPFactory(store.directoryService())
         )

Modified: CalendarServer/trunk/txdav/who/delegates.py
===================================================================
--- CalendarServer/trunk/txdav/who/delegates.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/txdav/who/delegates.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -372,6 +372,7 @@
     @rtype: a Deferred which fires a set of L{str}
     """
 
+    log.debug("_delegatesOfUIDs for: {} and read-write = {} and expanded = {}".format(delegator.uid, readWrite, expanded,))
     if delegator.thisServer():
         delegateUIDs = yield txn.delegates(delegator.uid, readWrite, expanded=expanded)
     else:
@@ -401,6 +402,7 @@
     """
 
 
+    log.debug("_delegatedToUIDs for: {} and read-write = {}".format(delegate.uid, readWrite,))
     delegatorUIDs = (yield txn.delegators(delegate.uid, readWrite))
     if not onlyThisServer and config.Servers.Enabled:
         delegatorUIDs.update((yield _podDelegators(txn, delegate, readWrite)))
@@ -438,6 +440,7 @@
     @rtype: a Deferred which fires a set of L{str}
     """
 
+    log.debug("_podDelegates for: {} and read-write = {} and expanded = {}".format(delegator.uid, readWrite, expanded,))
     return txn.store().conduit.send_get_delegates(txn, delegator, readWrite, expanded)
 
 
@@ -456,6 +459,7 @@
     @rtype: a Deferred which fires a set of L{str}
     """
 
+    log.debug("_podDelegators for: {} and read-write = {}".format(delegate.uid, readWrite,))
     results = yield DeferredList([
         txn.store().conduit.send_get_delegators(txn, server, delegate, readWrite) for
         server in txn.directoryService().serversDB.allServersExceptThis()

Modified: CalendarServer/trunk/txdav/who/test/test_util.py
===================================================================
--- CalendarServer/trunk/txdav/who/test/test_util.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/txdav/who/test/test_util.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -20,22 +20,23 @@
 
 import os
 
-from txdav.who.util import directoryFromConfig
-from txdav.who.test.support import InMemoryDirectoryService
+from twext.who.aggregate import DirectoryService as AggregateDirectoryService
+from twext.who.directory import DirectoryRecord
+from twext.who.idirectory import RecordType, NoSuchRecordError
+from twext.who.xml import DirectoryService as XMLDirectoryService
 from twisted.internet.defer import inlineCallbacks
+from twisted.python.filepath import FilePath
 from twisted.trial.unittest import TestCase
 from twistedcaldav.config import ConfigDict
-from twisted.python.filepath import FilePath
+import twistedcaldav.stdconfig #@UnusedImport
 from txdav.who.augment import AugmentedDirectoryService
-from twext.who.aggregate import DirectoryService as AggregateDirectoryService
-from twext.who.xml import DirectoryService as XMLDirectoryService
 from txdav.who.delegates import (
     DirectoryService as DelegateDirectoryService,
     RecordType as DelegateRecordType
 )
-from twext.who.directory import DirectoryRecord
-from twext.who.idirectory import RecordType, NoSuchRecordError
 from txdav.who.idirectory import RecordType as CalRecordType
+from txdav.who.test.support import InMemoryDirectoryService
+from txdav.who.util import directoryFromConfig
 from txdav.who.wiki import (
     DirectoryService as WikiDirectoryService,
     RecordType as WikiRecordType,
@@ -103,11 +104,14 @@
                         "xmlFiles": ["augments.xml"],
                     },
                 },
+                "Servers": {
+                    "Enabled": False,
+                },
             }
         )
 
         store = StubStore()
-        service = directoryFromConfig(config, store=store)
+        service = directoryFromConfig(config, store)
 
         # Make sure XML files were created
         dataRoot = FilePath(self.dataRoot)

Modified: CalendarServer/trunk/txdav/who/util.py
===================================================================
--- CalendarServer/trunk/txdav/who/util.py	2014-10-17 17:22:48 UTC (rev 14085)
+++ CalendarServer/trunk/txdav/who/util.py	2014-10-17 18:24:45 UTC (rev 14086)
@@ -15,7 +15,6 @@
 ##
 
 
-from calendarserver.tap.util import getDBPool, storeFromConfig
 from twext.python.log import Logger
 from twext.python.types import MappingProxyType
 from twext.who.aggregate import DirectoryService as AggregateDirectoryService
@@ -40,12 +39,13 @@
 )
 from txdav.who.wiki import DirectoryService as WikiDirectoryService
 from txdav.who.xml import DirectoryService as XMLDirectoryService
+from txdav.caldav.datastore.scheduling.ischedule.localservers import buildServersDB
 
 
 log = Logger()
 
 
-def directoryFromConfig(config, store=None, serversDB=None):
+def directoryFromConfig(config, store):
     """
     Return a directory service based on the config.  If you want to go through
     AMP to talk to one of these as a client, instantiate
@@ -62,10 +62,10 @@
 
     # TODO: use proxyForInterface to ensure we're only using the DPS related
     # store API.  Also define an IDirectoryProxyStore Interface
-    if store is None:
-        _ignore_pool, txnFactory = getDBPool(config)
-        store = storeFromConfig(config, txnFactory, None)
+    assert store is not None
 
+    serversDB = buildServersDB(config.Servers.MaxClients) if config.Servers.Enabled else None
+
     return buildDirectory(
         store,
         config.DataRoot,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20141017/e52895a6/attachment-0001.html>


More information about the calendarserver-changes mailing list