)]}'
{"tooz/coordination.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"460d1e9a91e75fc1706c85eb5bc461264aba0a36","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"class NoOwner(ToozError):"},{"line_number":539,"context_line":"    \"\"\"Exception raised when a action is not possible to do no owner.\"\"\""},{"line_number":540,"context_line":""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"class ToozConnectionError(ToozError):"}],"source_content_type":"text/x-python","patch_set":10,"id":"da6ed579_f117a542","line":539,"updated":"2016-01-15 09:00:30.000000000","message":"I don\u0027t understand this sentence. Is it me?","commit_id":"64516646a2ca524e56b8ee9ee142ea8340155683"}],"tooz/drivers/etcd.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"14add4f095eaeddb93dc9f7714f877c462a22b3b","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @_translate_failures"},{"line_number":128,"context_line":"    def release(self):"},{"line_number":129,"context_line":"        if not self._node:"},{"line_number":130,"context_line":"            return False"},{"line_number":131,"context_line":"        if self in self.coord._acquired_locks:"},{"line_number":132,"context_line":"            lock_url \u003d self._lock_url"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_531f6e09","line":129,"updated":"2016-01-07 11:18:57.000000000","message":"I don\u0027t this this is useful. It\u0027s confusing to me, you\u0027re doing a double check with the following if.","commit_id":"dfbb42ef615865ea3e114b040311e102f2acdc04"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3e425ae2cc2eb847eaf3d5b69f7640386be84d19","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @_translate_failures"},{"line_number":128,"context_line":"    def release(self):"},{"line_number":129,"context_line":"        if not self._node:"},{"line_number":130,"context_line":"            return False"},{"line_number":131,"context_line":"        if self in self.coord._acquired_locks:"},{"line_number":132,"context_line":"            lock_url \u003d self._lock_url"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_d713d15a","line":129,"in_reply_to":"fa69d971_531f6e09","updated":"2016-01-08 22:31:55.000000000","message":"Fair nuff.","commit_id":"dfbb42ef615865ea3e114b040311e102f2acdc04"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"14add4f095eaeddb93dc9f7714f877c462a22b3b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def heartbeat(self):"},{"line_number":147,"context_line":"        \"\"\"Keep the lock alive.\"\"\""},{"line_number":148,"context_line":"        if not self._node:"},{"line_number":149,"context_line":"            return"},{"line_number":150,"context_line":"        prevIndex \u003d self._node[\u0027modifiedIndex\u0027]"},{"line_number":151,"context_line":"        reply \u003d self.client.put(self._lock_url,"},{"line_number":152,"context_line":"                                data\u003d{\"ttl\": self.ttl,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_53944e43","line":149,"updated":"2016-01-07 11:18:57.000000000","message":"So you want to make heartbeat() be a noop on a lock that is not acquired. Good idea. Could we have a test that makes it work on all drivers too? :) (it\u0027s very likely to require another patch)","commit_id":"dfbb42ef615865ea3e114b040311e102f2acdc04"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1f867ec12438c4fa7ccc0e127afd0e4412f5aa12","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def heartbeat(self):"},{"line_number":147,"context_line":"        \"\"\"Keep the lock alive.\"\"\""},{"line_number":148,"context_line":"        if not self._node:"},{"line_number":149,"context_line":"            return"},{"line_number":150,"context_line":"        prevIndex \u003d self._node[\u0027modifiedIndex\u0027]"},{"line_number":151,"context_line":"        reply \u003d self.client.put(self._lock_url,"},{"line_number":152,"context_line":"                                data\u003d{\"ttl\": self.ttl,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_5c186884","line":149,"in_reply_to":"fa69d971_53944e43","updated":"2016-01-08 22:31:41.000000000","message":"Right, that\u0027s the goal, I\u0027m pretty sure some other drivers are borked/broken with this though, but ummm sure I can add a test :-P","commit_id":"dfbb42ef615865ea3e114b040311e102f2acdc04"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"14add4f095eaeddb93dc9f7714f877c462a22b3b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                      \"prevExist\": \"true\","},{"line_number":154,"context_line":"                                      \"prevIndex\": prevIndex})"},{"line_number":155,"context_line":"        errorcode \u003d reply.get(\"errorCode\")"},{"line_number":156,"context_line":"        if errorcode is not None:"},{"line_number":157,"context_line":"            LOG.warn(\"Unable to heartbeat by updating key \u0027%s\u0027 with extended\""},{"line_number":158,"context_line":"                     \" expiry of %s seconds: %d, %s\", self.name, self.ttl,"},{"line_number":159,"context_line":"                     errorcode, reply.get(\"message\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_b3858a08","line":156,"updated":"2016-01-07 11:18:57.000000000","message":"i prefer to have simpler condition so I\u0027d do \"if errorcode is None/else\" but this is nitpicking :p","commit_id":"dfbb42ef615865ea3e114b040311e102f2acdc04"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3925fe9b6b3ea1dc943534c9599eb69884b1baa3","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        lock_url +\u003d \"?prevIndex\u003d%d\" % self._node[\u0027modifiedIndex\u0027]"},{"line_number":150,"context_line":"        reply \u003d self.client.delete(lock_url)"},{"line_number":151,"context_line":"        errorcode \u003d reply.get(\"errorCode\")"},{"line_number":152,"context_line":"        return True if errorcode is None else False"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @_translate_failures"},{"line_number":155,"context_line":"    def heartbeat(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_2a7f3be1","line":152,"updated":"2016-01-11 12:02:29.000000000","message":"return errorcode is None","commit_id":"7a423d9dd8dd62f94f2e61272bcc5932cf2bffc3"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f7c60e4b5c5bdc07610911c9f67aa92bad4984e7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self._node \u003d None"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @_translate_failures"},{"line_number":90,"context_line":"    def break_(self, apply_ownership_checks\u003dFalse):"},{"line_number":91,"context_line":"        if not apply_ownership_checks:"},{"line_number":92,"context_line":"            lock_url \u003d self._lock_url"},{"line_number":93,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_d8959040","line":90,"updated":"2016-01-12 16:05:33.000000000","message":"What about renaming it to \"only_if_owner\"?","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"86cafe6ee37ba8b0106d4e0589ba06c0224cbd54","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self._node \u003d None"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @_translate_failures"},{"line_number":90,"context_line":"    def break_(self, apply_ownership_checks\u003dFalse):"},{"line_number":91,"context_line":"        if not apply_ownership_checks:"},{"line_number":92,"context_line":"            lock_url \u003d self._lock_url"},{"line_number":93,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_9c72a7e4","line":90,"in_reply_to":"da6ed579_d8959040","updated":"2016-01-12 17:27:46.000000000","message":"Sure.","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f7c60e4b5c5bdc07610911c9f67aa92bad4984e7","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @_translate_failures"},{"line_number":90,"context_line":"    def break_(self, apply_ownership_checks\u003dFalse):"},{"line_number":91,"context_line":"        if not apply_ownership_checks:"},{"line_number":92,"context_line":"            lock_url \u003d self._lock_url"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            if not self._node:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_f8797430","line":91,"updated":"2016-01-12 16:05:33.000000000","message":"Why you keep going with \"if not/else\" where I prefer \"if else\" :)","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"86cafe6ee37ba8b0106d4e0589ba06c0224cbd54","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @_translate_failures"},{"line_number":90,"context_line":"    def break_(self, apply_ownership_checks\u003dFalse):"},{"line_number":91,"context_line":"        if not apply_ownership_checks:"},{"line_number":92,"context_line":"            lock_url \u003d self._lock_url"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            if not self._node:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_fcaac318","line":91,"in_reply_to":"da6ed579_f8797430","updated":"2016-01-12 17:27:46.000000000","message":"It must be an american thing...","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"458b6fb07f21bfdc18e1b59d54b3ed2008a07ef9","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                lock_url \u003d self._lock_url"},{"line_number":94,"context_line":"                lock_url +\u003d \"?prevIndex\u003d%d\" % self._node[\u0027modifiedIndex\u0027]"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                raise ValueError(\"Can not apply ownership checks\""},{"line_number":97,"context_line":"                                 \" without having a lock that has\""},{"line_number":98,"context_line":"                                 \" been acquired\")"},{"line_number":99,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_f39ccd10","line":96,"updated":"2016-01-14 09:15:59.000000000","message":"Not sure about ValueError… RuntimeError rather? Because it\u0027s probably a programming logic error at this stage if you call only_if_owner\u003dTrue without being an owner.\n\nLet\u0027s make a custom class SomeToozException(RuntimeError)","commit_id":"2734a6069527876ea4a6d7d8ff7d93aec78cb96c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cc7d9979461f1216036159d0d4bd49077996b306","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                lock_url \u003d self._lock_url"},{"line_number":94,"context_line":"                lock_url +\u003d \"?prevIndex\u003d%d\" % self._node[\u0027modifiedIndex\u0027]"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                raise ValueError(\"Can not apply ownership checks\""},{"line_number":97,"context_line":"                                 \" without having a lock that has\""},{"line_number":98,"context_line":"                                 \" been acquired\")"},{"line_number":99,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_ca50bf34","line":96,"in_reply_to":"da6ed579_f39ccd10","updated":"2016-01-14 20:47:38.000000000","message":"Done","commit_id":"2734a6069527876ea4a6d7d8ff7d93aec78cb96c"}],"tooz/drivers/redis.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"458b6fb07f21bfdc18e1b59d54b3ed2008a07ef9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            return owner_tok \u003d\u003d lock_tok"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def break_(self, only_if_owner\u003dFalse):"},{"line_number":78,"context_line":"        with _translate_failures():"},{"line_number":79,"context_line":"            if only_if_owner:"},{"line_number":80,"context_line":"                token \u003d self._lock.local.token"},{"line_number":81,"context_line":"                if not token:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_f3512d37","line":78,"updated":"2016-01-14 09:15:59.000000000","message":"Don\u0027t we have a decorator version of that? Would avoid indenting all the function. Not a big deal though.","commit_id":"2734a6069527876ea4a6d7d8ff7d93aec78cb96c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cc7d9979461f1216036159d0d4bd49077996b306","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            return owner_tok \u003d\u003d lock_tok"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def break_(self, only_if_owner\u003dFalse):"},{"line_number":78,"context_line":"        with _translate_failures():"},{"line_number":79,"context_line":"            if only_if_owner:"},{"line_number":80,"context_line":"                token \u003d self._lock.local.token"},{"line_number":81,"context_line":"                if not token:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_8a3de7de","line":78,"in_reply_to":"da6ed579_f3512d37","updated":"2016-01-14 20:47:38.000000000","message":"Not in this module, https://review.openstack.org/#/c/265661/ will fix some of this...","commit_id":"2734a6069527876ea4a6d7d8ff7d93aec78cb96c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"458b6fb07f21bfdc18e1b59d54b3ed2008a07ef9","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            if only_if_owner:"},{"line_number":80,"context_line":"                token \u003d self._lock.local.token"},{"line_number":81,"context_line":"                if not token:"},{"line_number":82,"context_line":"                    raise ValueError(\"Can not apply ownership checks\""},{"line_number":83,"context_line":"                                     \" without having a lock that has\""},{"line_number":84,"context_line":"                                     \" been acquired\")"},{"line_number":85,"context_line":"                release_script \u003d redis_locks.LuaLock.LUA_RELEASE_SCRIPT"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_53611904","line":82,"updated":"2016-01-14 09:15:59.000000000","message":"Same comment","commit_id":"2734a6069527876ea4a6d7d8ff7d93aec78cb96c"}],"tooz/locking.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3925fe9b6b3ea1dc943534c9599eb69884b1baa3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        :rtype: bool"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def break_(self):"},{"line_number":83,"context_line":"        \"\"\"Forcefully release the lock."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        This is expected to **not** go through a proper release sequence"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_6a48d3b3","line":82,"updated":"2016-01-11 12:02:29.000000000","message":"@staticmethod","commit_id":"7a423d9dd8dd62f94f2e61272bcc5932cf2bffc3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5e6644c585e042283f3603d47822462d7bd6d14a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        :rtype: bool"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def break_(self):"},{"line_number":83,"context_line":"        \"\"\"Forcefully release the lock."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        This is expected to **not** go through a proper release sequence"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_55d8f91d","line":82,"in_reply_to":"fa69d971_6a48d3b3","updated":"2016-01-11 19:11:51.000000000","message":"Done","commit_id":"7a423d9dd8dd62f94f2e61272bcc5932cf2bffc3"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3925fe9b6b3ea1dc943534c9599eb69884b1baa3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        :returns: returns true if forcefully broken (false if not)"},{"line_number":89,"context_line":"        :rtype: bool"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        return False"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @abc.abstractmethod"},{"line_number":94,"context_line":"    def acquire(self, blocking\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_aa000b35","line":91,"updated":"2016-01-11 12:02:29.000000000","message":"I don\u0027t think raising False all the time is good? raise NotImplementedError might be better here","commit_id":"7a423d9dd8dd62f94f2e61272bcc5932cf2bffc3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5e6644c585e042283f3603d47822462d7bd6d14a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        :returns: returns true if forcefully broken (false if not)"},{"line_number":89,"context_line":"        :rtype: bool"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        return False"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @abc.abstractmethod"},{"line_number":94,"context_line":"    def acquire(self, blocking\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_d5e389d6","line":91,"in_reply_to":"fa69d971_aa000b35","updated":"2016-01-11 19:11:51.000000000","message":"Okie dokie.","commit_id":"7a423d9dd8dd62f94f2e61272bcc5932cf2bffc3"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f7c60e4b5c5bdc07610911c9f67aa92bad4984e7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def heartbeat():"},{"line_number":84,"context_line":"        \"\"\"Update lock status to indicate it is still alive."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Method to run once in a while to be sure that the lock is not dead"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_d8d110fd","line":83,"updated":"2016-01-12 16:05:33.000000000","message":"Yes though you could do another patch :]","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"25bd299e0912d7306394a0f0a82c23c55f42c2cd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def heartbeat():"},{"line_number":84,"context_line":"        \"\"\"Update lock status to indicate it is still alive."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Method to run once in a while to be sure that the lock is not dead"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_5c874fb5","line":83,"in_reply_to":"da6ed579_d8d110fd","updated":"2016-01-12 17:27:10.000000000","message":"I was predicting u were gonna say that, hahaha.","commit_id":"5ad64ec067265bb962801f999ee9358dc1d53da4"}],"tooz/tests/test_coordination.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"460d1e9a91e75fc1706c85eb5bc461264aba0a36","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertTrue(lock1.acquire())"},{"line_number":112,"context_line":"        lock1.break_()"},{"line_number":113,"context_line":"        self.assertFalse(lock1.release())"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_get_lock_release_broken(self):"},{"line_number":116,"context_line":"        name \u003d self._get_random_uuid()"},{"line_number":117,"context_line":"        memberid2 \u003d self._get_random_uuid()"}],"source_content_type":"text/x-python","patch_set":10,"id":"da6ed579_d14aa154","line":114,"updated":"2016-01-15 09:00:30.000000000","message":"You miss a test for only_if_owner","commit_id":"64516646a2ca524e56b8ee9ee142ea8340155683"}]}
