[Checkins] SVN: Sandbox/J1m/resumelb/src/zc/resumelb/worker. When computing resume scores, don't count time waiting for threads.

Jim Fulton jim at zope.com
Sat Feb 25 19:35:35 UTC 2012


Log message for revision 124476:
  When computing resume scores, don't count time waiting for threads.
  That's already taken into account in the lb backlog calculations.
  

Changed:
  U   Sandbox/J1m/resumelb/src/zc/resumelb/worker.py
  U   Sandbox/J1m/resumelb/src/zc/resumelb/worker.test

-=-
Modified: Sandbox/J1m/resumelb/src/zc/resumelb/worker.py
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/worker.py	2012-02-25 14:23:57 UTC (rev 124475)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/worker.py	2012-02-25 19:35:34 UTC (rev 124476)
@@ -50,6 +50,7 @@
 
         def call_app(rno, env):
             response = [0]
+            env['zc.resumelb.time'] = time.time()
             def start_response(status, headers, exc_info=None):
                 assert not exc_info # XXX
                 response[0] = (status, headers)
@@ -129,7 +130,6 @@
                 if rput is None:
                     if data:
                         env = data
-                        env['zc.resumelb.time'] = time.time()
                         env['zc.resumelb.lb_addr'] = addr
                         gevent.spawn(
                             self.handle, conn, rno, conn.start(rno), env)

Modified: Sandbox/J1m/resumelb/src/zc/resumelb/worker.test
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/worker.test	2012-02-25 14:23:57 UTC (rev 124475)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/worker.test	2012-02-25 19:35:34 UTC (rev 124476)
@@ -502,7 +502,7 @@
     >>> with mock.patch('datetime.datetime') as dtmock:
     ...     dtmock.now.side_effect = lambda : now
     ...     worker = zc.resumelb.worker.Worker(
-    ...       zc.resumelb.tests.app(), ('127.0.0.1', 0), dict(history=5),
+    ...       zc.resumelb.tests.app(), ('127.0.0.1', 0), dict(history=2),
     ...       tracelog='tracelog', threads=1)
 
     >>> worker_socket = gevent.socket.create_connection(worker.addr)
@@ -554,6 +554,19 @@
     E 1 2012-02-05 01:02:03.030456
     (1, ('200 OK', [...('Content-Length', '12')]))
 
+Also, note that the worker score is based on the time spent in app. It
+doesn't include time waiting.  We can see this when the worker sends
+us it's resume:
+
+    >>> _ = read_message(worker_socket), read_message(worker_socket)
+    >>> _, resume = read_message(worker_socket)
+    >>> [(_, score)] = resume.items()
+    >>> score > 7.0
+    True
+
+(If we started computing elapsed time when we started waiting for a
+thread, the score would be less than 2/(.1+.2).)
+
 Cleanup:
 
     >>> logger.removeHandler(handler)



More information about the checkins mailing list