[Checkins] SVN: zc.resumelb/trunk/src/zc/resumelb/ The update settings methods were changed to revert settings to

jim cvs-admin at zope.org
Mon Mar 26 16:00:10 UTC 2012


Log message for revision 124736:
  The update settings methods were changed to revert settings to
  default when not provided.  This is especially important when used
  with ZooKeeper, so you can look at a tree and know what settings are
  without knowing the change history.
  

Changed:
  U   zc.resumelb/trunk/src/zc/resumelb/README.txt
  U   zc.resumelb/trunk/src/zc/resumelb/lb.py
  U   zc.resumelb/trunk/src/zc/resumelb/lb.test
  U   zc.resumelb/trunk/src/zc/resumelb/pool.test
  U   zc.resumelb/trunk/src/zc/resumelb/worker.py
  U   zc.resumelb/trunk/src/zc/resumelb/worker.test

-=-
Modified: zc.resumelb/trunk/src/zc/resumelb/README.txt
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/README.txt	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/README.txt	2012-03-26 16:00:07 UTC (rev 124736)
@@ -240,9 +240,14 @@
 Change History
 ==============
 
-0.1.1 (2012-03-??)
+0.2.0 (2012-03-??)
 ------------------
 
+- The update settings methods were changed to revert settings to
+  default when not provided.  This is especially important when used
+  with ZooKeeper, so you can look at a tree and know what settings are
+  without knowing the change history.
+
 - Added graceful load-balancer and worker shutdown on SIGTERM.
 
 - Added packaging meta data to help find gevent 1.0b1

Modified: zc.resumelb/trunk/src/zc/resumelb/lb.py
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/lb.py	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/lb.py	2012-03-26 16:00:07 UTC (rev 124736)
@@ -98,12 +98,8 @@
 
 class Pool:
 
-    def __init__(self, unskilled_score=1.0, variance=4.0, backlog_history=9):
-        self.unskilled_score = unskilled_score
-        self.variance = variance
-        self.backlog_history = backlog_history
-        self._update_worker_decay()
-
+    def __init__(self,
+                 unskilled_score=None, variance=None, backlog_history=None):
         self.workers = set()
         self.nworkers = 0
         self.unskilled = llist.dllist()
@@ -111,14 +107,29 @@
         self.event = gevent.event.Event()
         _init_backlog(self)
 
+        self.update_settings(dict(
+            unskilled_score=unskilled_score,
+            variance=variance,
+            backlog_history=backlog_history))
+
+
+    _meta_settings = dict(
+        unskilled_score=1.0,
+        variance=4.0,
+        backlog_history=9
+        )
+
     def update_settings(self, settings):
-        for name in ('unskilled_score', 'variance', 'backlog_history'):
-            if name in settings:
-                setattr(self, name, settings[name])
+        for name, default in self._meta_settings.iteritems():
+            setting = settings.get(name)
+            if setting is None:
+                setting = default
+            else:
+                setting = type(default)(setting)
+            setattr(self, name, setting)
 
-        if 'backlog_history' in settings:
-            self._update_worker_decay()
-            self._update_decay()
+        self._update_worker_decay()
+        self._update_decay()
 
     def _update_decay(self):
         if self.nworkers:

Modified: zc.resumelb/trunk/src/zc/resumelb/lb.test
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/lb.test	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/lb.test	2012-03-26 16:00:07 UTC (rev 124736)
@@ -29,6 +29,12 @@
     >>> lb = zc.resumelb.lb.LB([w.addr for w in workers],
     ...                        zc.resumelb.lb.host_classifier)
 
+Note that the lb provides an interface for changing pool
+settings. This is just a link to the pool's update_settings method:
+
+    >>> lb.update_settings == lb.pool.update_settings
+    True
+
 We pass the constructor an iterable of addresses.  The lb will connect
 to these addresses. Let's wait for it to do so:
 

Modified: zc.resumelb/trunk/src/zc/resumelb/pool.test
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/pool.test	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/pool.test	2012-03-26 16:00:07 UTC (rev 124736)
@@ -296,3 +296,23 @@
     (3.0, 6, 0.25)
     >>> pool.worker_decay, pool.decay # doctest: +ELLIPSIS
     (0.916..., 0.972...)
+
+Note that settings revert to their default values when not specified:
+
+    >>> pool.update_settings({})
+    >>> pool.variance, pool.backlog_history, pool.unskilled_score
+    (4.0, 9, 1.0)
+    >>> pool.worker_decay, pool.decay # doctest: +ELLIPSIS
+    (0.944..., 0.981...)
+
+Settings are automatically coerced to their expected types:
+
+    >>> pool.update_settings(
+    ... dict(variance=3, backlog_history=6.2, unskilled_score=2))
+    >>> pool.variance, pool.backlog_history, pool.unskilled_score
+    (3.0, 6, 2.0)
+
+    >>> pool.update_settings(
+    ... dict(variance='2', backlog_history='7', unskilled_score='1'))
+    >>> pool.variance, pool.backlog_history, pool.unskilled_score
+    (2.0, 7, 1.0)

Modified: zc.resumelb/trunk/src/zc/resumelb/worker.py
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/worker.py	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/worker.py	2012-03-26 16:00:07 UTC (rev 124736)
@@ -25,14 +25,11 @@
 class Worker:
 
     def __init__(self, app, addr,
-                 history=9999, max_skill_age=None,
+                 history=None, max_skill_age=None,
                  resume_file=None, threads=None, tracelog=None,
                  tracelog_key='tracelog'):
-        history = int(history)
         self.app = app
-        self.history = history
-        self.max_skill_age = max_skill_age or history * 10
-        self.decay = 1.0-1.0/history
+        self.update_settings(dict(history=history, max_skill_age=max_skill_age))
         self.resume_file = resume_file
         self.perf_data = {} # rclass -> (gen, decayed times, decayed counts)
         self.generation = 0
@@ -123,14 +120,22 @@
         self.addr = addr[0], self.server.server_port
 
     def update_settings(self, data):
-        if 'history' in data:
-            self.history = data['history']
-            if 'max_skill_age' not in data:
-                self.max_skill_age = self.history * 10
-        if 'max_skill_age' in data:
-            self.max_skill_age = data['max_skill_age']
-        self.decay = 1 - 1.0/self.history
+        history = data.get('history')
+        if history is None:
+            history = 9999
+        else:
+            history = int(history)
+        self.history = history
 
+        max_skill_age = data.get('max_skill_age')
+        if max_skill_age is None:
+            max_skill_age = history * 10
+        else:
+            max_skill_age = int(max_skill_age)
+        self.max_skill_age = max_skill_age
+
+        self.decay = 1 - 1.0/history
+
     def stop(self):
         self.server.stop()
         if hasattr(self, 'threadpool'):

Modified: zc.resumelb/trunk/src/zc/resumelb/worker.test
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/worker.test	2012-03-26 15:57:25 UTC (rev 124735)
+++ zc.resumelb/trunk/src/zc/resumelb/worker.test	2012-03-26 16:00:07 UTC (rev 124736)
@@ -648,6 +648,15 @@
 
     >>> worker.update_settings(dict(max_skill_age=99))
     >>> worker.history, worker.max_skill_age
+    (9999, 99)
+
+Note that in the last example, the history setting reverted to it's
+default value, because it wasn't set in the settings.
+
+Settings are automaticaly coerced you they expected types:
+
+    >>> worker.update_settings(dict(history='5', max_skill_age='99'))
+    >>> worker.history, worker.max_skill_age
     (5, 99)
 
 Resume computation and decay



More information about the checkins mailing list