praekelt/vumi — pull request #474 by smn (2013-02-26 13:19:19+00:00)
Title: WindowManager setting of timestamp can encounter race condition with concurrent workers.

```
2013-02-23 14:42:08+0000 [VumiRedis,client] Unhandled error in Deferred:
2013-02-23 14:42:08+0000 [VumiRedis,client] Unhandled Error
Traceback (most recent call last):
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 397, in errback
self._startRunCallbacks(fail)
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 464, in _startRunCallbacks
self._runCallbacks()
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 551, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 1101, in gotResult
_inlineCallbacks(r, g, deferred)
--- ---
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 1043, in _inlineCallbacks
result = result.throwExceptionIntoGenerator(g)
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/python/failure.py", line 382, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/praekelt/vumi-go/ve/src/vumi/vumi/components/window_manager.py", line 190, in _monitor_windows
key = (yield self.get_next_key(window_id))
File "/var/praekelt/vumi-go/ve/lib/python2.6/site-packages/twisted/internet/defer.py", line 1045, in _inlineCallbacks
result = g.send(result)
File "/var/praekelt/vumi-go/ve/src/vumi/vumi/components/window_manager.py", line 110, in get_next_key
yield self._set_timestamp(window_id, next_key)
File "/var/praekelt/vumi-go/ve/src/vumi/vumi/components/window_manager.py", line 115, in _set_timestamp
flight_key: self.get_clocktime(),
exceptions.TypeError: zadd() keywords must be strings
```