[CalendarServer-changes] [11895] CalendarServer/branches/users/sagen/groupcacher
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:19:23 PDT 2014
Revision: 11895
http://trac.calendarserver.org//changeset/11895
Author: sagen at apple.com
Date: 2013-11-06 14:20:51 -0800 (Wed, 06 Nov 2013)
Log Message:
-----------
Checkpoint -- groupByGUID will handle adding the row
Modified Paths:
--------------
CalendarServer/branches/users/sagen/groupcacher/twext/who/delegates.py
CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py
CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py
CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py
Modified: CalendarServer/branches/users/sagen/groupcacher/twext/who/delegates.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/twext/who/delegates.py 2013-11-06 22:19:12 UTC (rev 11894)
+++ CalendarServer/branches/users/sagen/groupcacher/twext/who/delegates.py 2013-11-06 22:20:51 UTC (rev 11895)
@@ -47,6 +47,7 @@
else:
yield txn.addDelegate(delegator.guid, delegate.guid,
1 if readWrite else 0, False)
+
def removeDelegate(txn, delegator, delegate, readWrite):
"""
@@ -55,6 +56,7 @@
return txn.removeDelegate(delegator.guid, delegate.guid,
1 if readWrite else 0, delegate.recordType==RecordType.group)
+
@inlineCallbacks
def delegatesOf(txn, delegator, readWrite):
"""
@@ -70,6 +72,7 @@
records.append(record)
returnValue(records)
+
@inlineCallbacks
def delegateFor(txn, delegate, readWrite):
"""
Modified: CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py 2013-11-06 22:19:12 UTC (rev 11894)
+++ CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py 2013-11-06 22:20:51 UTC (rev 11895)
@@ -92,8 +92,8 @@
@inlineCallbacks
def doWork(self):
- # Delete all other work items
- yield Delete(From=self.table, Where=None).on(self.transaction)
+ # Delete all other work items for this group
+ yield Delete(From=self.table, Where=(self.table.GROUP_GUID == self.groupGUID)).on(self.transaction)
groupCacher = getattr(self.transaction, "_groupCacher", None)
if groupCacher is not None:
@@ -182,15 +182,8 @@
for member in members:
membershipHashContent.update(member.guid)
membershipHash = membershipHashContent.hexdigest()
- results = (yield txn.groupByGUID(groupGUID))
- if not results:
- # Group is not yet in the DB
- cachedName = ""
- cachedMembershipHash = ""
- addGroup = True
- else:
- groupID, cachedName, cachedMembershipHash = results[0]
- addGroup = False
+ groupID, cachedName, cachedMembershipHash = (yield
+ txn.groupByGUID(groupGUID))
if cachedMembershipHash != membershipHash:
membershipChanged = True
@@ -198,11 +191,7 @@
else:
membershipChanged = False
- if addGroup:
- yield txn.addGroup(groupGUID, record.fullNames[0], membershipHash)
- else:
- yield txn.updateGroup(groupGUID, record.fullNames[0],
- membershipHash)
+ yield txn.updateGroup(groupGUID, record.fullNames[0], membershipHash)
results = (yield txn.groupByGUID(groupGUID))
if len(results) == 1:
Modified: CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py 2013-11-06 22:19:12 UTC (rev 11894)
+++ CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py 2013-11-06 22:20:51 UTC (rev 11895)
@@ -23,6 +23,7 @@
from twext.who.idirectory import RecordType
from twisted.internet.defer import inlineCallbacks
from twistedcaldav.test.util import StoreTestCase
+from txdav.common.icommondatastore import NotFoundError
class GroupCacherTest(StoreTestCase):
@@ -65,10 +66,10 @@
guid = "49b350c69611477b94d95516b13856ab"
yield self.groupCacher.refreshGroup(txn, guid)
- groupID, name, membershipHash = (yield txn.groupByGUID(guid))[0]
+ groupID, name, membershipHash = (yield txn.groupByGUID(guid))
self.assertEquals(membershipHash, "e90052eb63d47f32d5b03df0073f7854")
- groupGUID, name, membershipHash = (yield txn.groupByID(groupID))[0]
+ groupGUID, name, membershipHash = (yield txn.groupByID(groupID))
self.assertEquals(groupGUID, guid)
self.assertEquals(name, "Top Group 1")
self.assertEquals(membershipHash, "e90052eb63d47f32d5b03df0073f7854")
@@ -99,7 +100,7 @@
# Refresh the group so it's assigned a group_id
guid = "49b350c69611477b94d95516b13856ab"
yield self.groupCacher.refreshGroup(txn, guid)
- groupID, name, membershipHash = (yield txn.groupByGUID(guid))[0]
+ groupID, name, membershipHash = (yield txn.groupByGUID(guid))
# Remove two members, and add one member
newSet = set()
@@ -126,6 +127,23 @@
self.assertEquals(len(records), 0)
+ @inlineCallbacks
+ def test_groupByID(self):
+
+ store = self.storeUnderTest()
+ txn = store.newTransaction()
+
+ # Non-existent groupID
+ self.failUnlessFailure(txn.groupByID(42), NotFoundError)
+
+ guid = "49b350c69611477b94d95516b13856ab"
+ hash = "e90052eb63d47f32d5b03df0073f7854"
+ yield self.groupCacher.refreshGroup(txn, guid)
+ groupID, name, membershipHash = (yield txn.groupByGUID(guid))
+ results = (yield txn.groupByID(groupID))
+ self.assertEquals([guid, "Top Group 1", hash], results)
+
+
testXMLConfig = """<?xml version="1.0" encoding="utf-8"?>
<directory realm="xyzzy">
Modified: CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py 2013-11-06 22:19:12 UTC (rev 11894)
+++ CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py 2013-11-06 22:20:51 UTC (rev 11895)
@@ -68,7 +68,7 @@
HomeChildNameAlreadyExistsError, NoSuchHomeChildError, \
ObjectResourceNameNotAllowedError, ObjectResourceNameAlreadyExistsError, \
NoSuchObjectResourceError, AllRetriesFailed, InvalidSubscriptionValues, \
- InvalidIMIPTokenValues, TooManyObjectResourcesError
+ InvalidIMIPTokenValues, TooManyObjectResourcesError, NotFoundError
from txdav.common.idirectoryservice import IStoreDirectoryService
from txdav.common.inotifications import INotificationCollection, \
INotificationObject
@@ -876,7 +876,8 @@
gr = schema.GROUPS
return Insert({gr.NAME: Parameter("name"),
gr.GROUP_GUID: Parameter("groupGUID"),
- gr.MEMBERSHIP_HASH: Parameter("membershipHash")})
+ gr.MEMBERSHIP_HASH: Parameter("membershipHash")},
+ Return=gr.GROUP_ID)
@classproperty
@@ -926,12 +927,41 @@
membershipHash=membershipHash)
+ @inlineCallbacks
def groupByGUID(self, groupGUID):
- return self._groupByGUID.on(self, groupGUID=groupGUID)
+ results = (yield self._groupByGUID.on(self, groupGUID=groupGUID))
+ if results:
+ returnValue(results[0])
+ else:
+ savepoint = SavepointAction("groupByGUID")
+ yield savepoint.acquire(self)
+ try:
+ groupID = (yield self.addGroup(groupGUID, "", ""))[0][0]
+ except Exception:
+ yield savepoint.rollback(self)
+ results = (yield self._groupByGUID.on(self,
+ groupGUID=groupGUID))
+ if results:
+ returnValue(results[0])
+ else:
+ raise
+ else:
+ yield savepoint.release(self)
+ results = (yield self._groupByGUID.on(self,
+ groupGUID=groupGUID))
+ if results:
+ returnValue(results[0])
+ else:
+ raise
+ @inlineCallbacks
def groupByID(self, groupID):
- return self._groupByID.on(self, groupID=groupID)
+ try:
+ results = (yield self._groupByID.on(self, groupID=groupID))[0]
+ returnValue(results)
+ except IndexError:
+ raise NotFoundError
def deleteGroup(self, groupID):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/1ded20b5/attachment.html>
More information about the calendarserver-changes
mailing list