[CalendarServer-changes] [15491] twext/trunk/twext/enterprise/jobs
source_changes at macosforge.org
source_changes at macosforge.org
Thu Mar 31 10:43:21 PDT 2016
Revision: 15491
http://trac.calendarserver.org//changeset/15491
Author: cdaboo at apple.com
Date: 2016-03-31 10:43:21 -0700 (Thu, 31 Mar 2016)
Log Message:
-----------
Always coerce job weight zero to one.
Modified Paths:
--------------
twext/trunk/twext/enterprise/jobs/queue.py
twext/trunk/twext/enterprise/jobs/test/test_jobs.py
Modified: twext/trunk/twext/enterprise/jobs/queue.py
===================================================================
--- twext/trunk/twext/enterprise/jobs/queue.py 2016-03-31 17:06:32 UTC (rev 15490)
+++ twext/trunk/twext/enterprise/jobs/queue.py 2016-03-31 17:43:21 UTC (rev 15491)
@@ -277,12 +277,12 @@
"""
d = self.callRemote(PerformJob, job=job)
self._assigned += 1
- self._load += job.weight
+ self._load += max(job.weight, 1)
@d.addBoth
def f(result):
self._assigned -= 1
- self._load -= job.weight
+ self._load -= max(job.weight, 1)
self._completed += 1
return result
Modified: twext/trunk/twext/enterprise/jobs/test/test_jobs.py
===================================================================
--- twext/trunk/twext/enterprise/jobs/test/test_jobs.py 2016-03-31 17:06:32 UTC (rev 15490)
+++ twext/trunk/twext/enterprise/jobs/test/test_jobs.py 2016-03-31 17:43:21 UTC (rev 15491)
@@ -1064,6 +1064,39 @@
self.assertEquals(worker2.currentLoad, 1)
+ def test_workerPerformJobNoZeroWeight(self):
+ """
+ L{WorkerConnectionPool.performJob} always uses a weight greater than zero.
+ """
+ clock = Clock()
+ peerPool = ControllerQueue(clock, None)
+ factory = peerPool.workerListenerFactory()
+
+ def peer():
+ p = factory.buildProtocol(None)
+ t = StringTransport()
+ p.makeConnection(t)
+ return p, t
+
+ worker1, _ignore_trans1 = peer()
+ worker2, _ignore_trans2 = peer()
+
+ # Ask the worker to do something.
+ worker1.performJob(JobDescriptor(1, 0, "ABC"))
+ self.assertEquals(worker1.currentLoad, 1)
+ self.assertEquals(worker2.currentLoad, 0)
+
+ # Now ask the pool to do something
+ peerPool.workerPool.performJob(JobDescriptor(2, 0, "ABC"))
+ self.assertEquals(worker1.currentLoad, 1)
+ self.assertEquals(worker2.currentLoad, 1)
+
+ # Ask the worker to do something more.
+ worker1.performJob(JobDescriptor(3, 5, "ABC"))
+ self.assertEquals(worker1.currentLoad, 6)
+ self.assertEquals(worker2.currentLoad, 1)
+
+
def test_poolStartServiceChecksForWork(self):
"""
L{ControllerQueue.startService} kicks off the idle work-check loop.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20160331/b5e69445/attachment.html>
More information about the calendarserver-changes
mailing list