]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
key_generator: fix timing, make tests more robust
authorrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 4 Apr 2008 01:43:46 +0000 (18:43 -0700)
committerrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 4 Apr 2008 01:43:46 +0000 (18:43 -0700)
previously there was an edge case in the timing of expected behaviour
of the key_generator (w.r.t. the refresh delay and twisted/foolscap
delivery).  if it took >6s for a key to be generated, then it was
possible for the pool refresh delay to transpire _during_ the
synchronous creation of a key in remote_get_rsa_key_pair.  this could
lead to the timer elapsing during key creation and hence the pool
being refilled before control returned to the client.

this change ensures that the time window from a get key request
until the key gen reactor blocks to refill the pool is the time
since a request was answered, not since a request was asked.
this causes the behaviour to match expectations, as embodied in
test_keygen, even if the delay window is dropped to 0.1s

src/allmydata/key_generator.py

index 964b2b38d7ca5d4c51180247d0212d954477d627..61fa9b2edf0ccebf86993a27960b4900e52d0996 100644 (file)
@@ -65,8 +65,9 @@ class KeyGenerator(service.MultiService, foolscap.Referenceable):
     def remote_get_rsa_key_pair(self, key_size):
         self.vlog('%s remote_get_key' % (self,))
         if key_size != self.DEFAULT_KEY_SIZE or not self.keypool:
+            key = self.gen_key(key_size)
             self.reset_timer()
-            return self.gen_key(key_size)
+            return key
         else:
             self.reset_timer()
             return self.keypool.pop()