[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