From 30eaaa78623487dc9234dd44c7fa4bbe82fbb6a5 Mon Sep 17 00:00:00 2001 From: robk-tahoe Date: Thu, 3 Apr 2008 18:43:46 -0700 Subject: [PATCH] key_generator: fix timing, make tests more robust 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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/allmydata/key_generator.py b/src/allmydata/key_generator.py index 964b2b38..61fa9b2e 100644 --- a/src/allmydata/key_generator.py +++ b/src/allmydata/key_generator.py @@ -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() -- 2.45.2