[CalendarServer-changes] [2792] CalendarServer/branches/users/sagen/xmpp-2764/twistedcaldav/notify. py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Aug 11 10:56:01 PDT 2008
Revision: 2792
http://trac.macosforge.org/projects/calendarserver/changeset/2792
Author: sagen at apple.com
Date: 2008-08-11 10:56:01 -0700 (Mon, 11 Aug 2008)
Log Message:
-----------
Make sure that a repeatedly-updated calendar doesn't suffer starvation; let a notification out once in a while.
Modified Paths:
--------------
CalendarServer/branches/users/sagen/xmpp-2764/twistedcaldav/notify.py
Modified: CalendarServer/branches/users/sagen/xmpp-2764/twistedcaldav/notify.py
===================================================================
--- CalendarServer/branches/users/sagen/xmpp-2764/twistedcaldav/notify.py 2008-08-08 20:08:21 UTC (rev 2791)
+++ CalendarServer/branches/users/sagen/xmpp-2764/twistedcaldav/notify.py 2008-08-11 17:56:01 UTC (rev 2792)
@@ -180,7 +180,7 @@
self.log_debug("Sending to notification server: %s" % (uri,))
observer.sendLine(str(uri))
else:
- self.log_debug("Queing: %s" % (uri,))
+ self.log_debug("Queuing: %s" % (uri,))
self.queued.add(uri)
def connectionMade(self):
@@ -258,9 +258,14 @@
"""
delaySeconds = 5
+ sendAnywayAfterCount = 5
- def __init__(self, notifiers, reactor=None, delaySeconds=None):
+ def __init__(self, notifiers, reactor=None, delaySeconds=None,
+ sendAnywayAfterCount=None):
+ if sendAnywayAfterCount:
+ self.sendAnywayAfterCount = sendAnywayAfterCount
+
if delaySeconds:
self.delaySeconds = delaySeconds
@@ -268,18 +273,29 @@
from twisted.internet import reactor
self.reactor = reactor
- self.uris = dict()
+ self.uris = {}
self.notifiers = notifiers
def add(self, uri):
- delayed = self.uris.get(uri, None)
+ delayed, count = self.uris.get(uri, [None, 0])
+
if delayed and delayed.active():
- delayed.reset(self.delaySeconds)
+ count += 1
+ if count < self.sendAnywayAfterCount:
+ # reschedule for delaySeconds in the future
+ delayed.reset(self.delaySeconds)
+ self.uris[uri][1] = count
+ self.log_info("Delaying: %s" % (uri,))
+ else:
+ self.log_info("Not delaying to avoid starvation: %s" % (uri,))
else:
- self.uris[uri] = self.reactor.callLater(self.delaySeconds,
- self.delayedEnqueue, uri)
+ self.log_info("Scheduling: %s" % (uri,))
+ self.uris[uri] = [self.reactor.callLater(self.delaySeconds,
+ self.delayedEnqueue, uri), 0]
def delayedEnqueue(self, uri):
+ self.log_info("Time to send: %s" % (uri,))
+ self.uris[uri][1] = 0
for notifier in self.notifiers:
notifier.enqueue(uri)
@@ -771,7 +787,7 @@
def hammer(self, count):
for i in xrange(count):
- self.enqueue("hammertesting")
+ self.enqueue("hammertesting%d" % (count,))
class XMPPNotificationFactory(xmlstream.XmlStreamFactory, LoggingMixIn):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080811/c81ece77/attachment.html
More information about the calendarserver-changes
mailing list