)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"539f8e703117df7b92a6c407715aa711d0a4ec77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"effe17b8_5eb68883","updated":"2024-06-06 21:27:42.000000000","message":"I have a couple of questions","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5f98e7fea8ef6a21ee8ad4d6fafd298aa25286f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"dfd83e36_6fd0ab89","updated":"2024-05-14 07:02:34.000000000","message":"recheck req job is fixed","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9c8f6709dacde4c2c7dbc6d6f6e61d9c32f158b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3c909b00_f30ac8a0","updated":"2024-06-05 07:31:02.000000000","message":"recheck unrelated failure","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"3ac1aee533614d4f899e11ef6bf8b5b063d48af0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"2bb78e20_dc1d47c9","updated":"2024-07-08 02:28:02.000000000","message":"I\u0027m leaving a few comments but these can be addressed by follow-up.","commit_id":"f0fd57a863e0ce44adf9a09c6bbf505ebaf9d991"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135b981b988353993f7fcae8528de3133e8bfd49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"57e46b8b_f5d8b1ca","updated":"2024-06-13 16:50:19.000000000","message":"LGTM","commit_id":"f0fd57a863e0ce44adf9a09c6bbf505ebaf9d991"}],"taskflow/jobs/backends/impl_etcd.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"539f8e703117df7b92a6c407715aa711d0a4ec77","unresolved":true,"context_lines":[{"line_number":66,"context_line":"            ret \u003d timeutils.parse_strtime(data[\"last_modified\"])"},{"line_number":67,"context_line":"            return ret"},{"line_number":68,"context_line":"        except Exception:"},{"line_number":69,"context_line":"            LOG.exception(\"Can not read load_modified key.\")"},{"line_number":70,"context_line":"        return 0"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"66cffed1_fc4424be","line":69,"updated":"2024-06-06 21:27:42.000000000","message":"nit: \"Can not\" -\u003e \"Cannot\"","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"553a4571252c10c1ca65039ff4347b5c94b5284c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            ret \u003d timeutils.parse_strtime(data[\"last_modified\"])"},{"line_number":67,"context_line":"            return ret"},{"line_number":68,"context_line":"        except Exception:"},{"line_number":69,"context_line":"            LOG.exception(\"Can not read load_modified key.\")"},{"line_number":70,"context_line":"        return 0"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"4ebee7c4_a87dae29","line":69,"in_reply_to":"66cffed1_fc4424be","updated":"2024-06-11 12:08:14.000000000","message":"Done","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"539f8e703117df7b92a6c407715aa711d0a4ec77","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        if self.lease is None:"},{"line_number":121,"context_line":"            return False"},{"line_number":122,"context_line":"        ret \u003d self.lease.refresh()"},{"line_number":123,"context_line":"        # we can also update the last_modified of the job here"},{"line_number":124,"context_line":"        return (ret \u003e 0)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"b87574e7_5be54f64","line":123,"updated":"2024-06-06 21:27:42.000000000","message":"The Redis driver doesn\u0027t do that, so I\u0027m curious about this comment.","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"527e251429dc4a69e665b3493c3515b6ca5ad7c3","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        if self.lease is None:"},{"line_number":121,"context_line":"            return False"},{"line_number":122,"context_line":"        ret \u003d self.lease.refresh()"},{"line_number":123,"context_line":"        # we can also update the last_modified of the job here"},{"line_number":124,"context_line":"        return (ret \u003e 0)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"0385964e_ce52ddd7","line":123,"in_reply_to":"b87574e7_5be54f64","updated":"2024-06-11 12:07:58.000000000","message":"yeah you\u0027re right, it was probably just an idea out of nowhere, I\u0027m removing the comment.","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"539f8e703117df7b92a6c407715aa711d0a4ec77","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                      self._conf.get(\"path\", self.DEFAULT_PATH)]"},{"line_number":230,"context_line":"        self._root_path \u003d self.join(*path_elems)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        self._job_cache \u003d {}"},{"line_number":233,"context_line":"        self._job_cond \u003d threading.Condition()"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        self._open_close_lock \u003d threading.RLock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9cc606dd_81780ddf","line":232,"updated":"2024-06-06 21:27:42.000000000","message":"Wouldn\u0027t this be a problem in multi-process deployments? Maybe even threads?\nIt seems like things like job_count here are always going to be wrong. The Redis backend makes a call to redis to get the job count.","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"527e251429dc4a69e665b3493c3515b6ca5ad7c3","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                      self._conf.get(\"path\", self.DEFAULT_PATH)]"},{"line_number":230,"context_line":"        self._root_path \u003d self.join(*path_elems)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        self._job_cache \u003d {}"},{"line_number":233,"context_line":"        self._job_cond \u003d threading.Condition()"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        self._open_close_lock \u003d threading.RLock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"f7080dc7_93de4de1","line":232,"in_reply_to":"9cc606dd_81780ddf","updated":"2024-06-11 12:07:58.000000000","message":"The _job_cache behavior is similar to the _known_jobs dict in zookeeper.\nI think the main issue is that zookeeper and etcd are heavyweight compared to redis. Taskflow does a dozen of calls every second to iterjobs() and in my (devstack) environment, the etcd server was really loaded. So I choosed to add this caching mechanism, based on the one in zookeeper.\n\njob_count should be correct:\n- after a call to iterjobs with ensure_fresh\n- after an update through the watcher","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"539f8e703117df7b92a6c407715aa711d0a4ec77","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        return value[0]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _fetch_jobs(self, only_unclaimed\u003dFalse, ensure_fresh\u003dFalse):"},{"line_number":273,"context_line":"        # TODO(gthiemonge) only_unclaimed is ignored"},{"line_number":274,"context_line":"        if ensure_fresh or self._state !\u003d self.FETCH_STATE:"},{"line_number":275,"context_line":"            self._ensure_fresh()"},{"line_number":276,"context_line":"        return sorted(self._job_cache.values())"}],"source_content_type":"text/x-python","patch_set":11,"id":"675e6bf0_c01f4ab7","line":273,"updated":"2024-06-06 21:27:42.000000000","message":"Does this still need to be fixed?\n\nIt seems to be implemented on the Redis backend.","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"527e251429dc4a69e665b3493c3515b6ca5ad7c3","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        return value[0]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _fetch_jobs(self, only_unclaimed\u003dFalse, ensure_fresh\u003dFalse):"},{"line_number":273,"context_line":"        # TODO(gthiemonge) only_unclaimed is ignored"},{"line_number":274,"context_line":"        if ensure_fresh or self._state !\u003d self.FETCH_STATE:"},{"line_number":275,"context_line":"            self._ensure_fresh()"},{"line_number":276,"context_line":"        return sorted(self._job_cache.values())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1216d02d_2dfca559","line":273,"in_reply_to":"675e6bf0_c01f4ab7","updated":"2024-06-11 12:07:58.000000000","message":"I cannot do it in a followup commit but:\n\n- only_unclaimed is not implemented in the redis and zookeeper backends (it\u0027s ignored)\n- it\u0027s never passed by taskflow to the backends\n\nthat said, only_unclaimed is described in the doc and used in some examples (but still not implemented by the backends)","commit_id":"8072abdb2c19558e60ceebfbbe9a47e3fdcfe206"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"3ac1aee533614d4f899e11ef6bf8b5b063d48af0","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        (\"ca_cert\", str),"},{"line_number":208,"context_line":"        (\"cert_key\", str),"},{"line_number":209,"context_line":"        (\"cert_cert\", str),"},{"line_number":210,"context_line":"        (\"timeout\", int),"},{"line_number":211,"context_line":"        (\"api_path\", str),"},{"line_number":212,"context_line":"    )"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"b73b651a_58f4a575","line":210,"range":{"start_line":210,"start_character":20,"end_line":210,"end_character":23},"updated":"2024-07-08 02:28:02.000000000","message":"Can timeout be float ?","commit_id":"f0fd57a863e0ce44adf9a09c6bbf505ebaf9d991"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"3ac1aee533614d4f899e11ef6bf8b5b063d48af0","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        self._watcher \u003d None"},{"line_number":239,"context_line":"        self._watcher_cancel \u003d None"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def join(self, root, *args):"},{"line_number":242,"context_line":"        return \"/\".join([root] + [a.strip(\"/\") for a in args])"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def incr(self, key):"}],"source_content_type":"text/x-python","patch_set":13,"id":"d098aa55_afa587d9","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":12},"updated":"2024-07-08 02:28:02.000000000","message":"This can be a private method (_join). Also, it would be better to use more explicit name (such as _create_path).\nI\u0027ll address this in follow-up.","commit_id":"f0fd57a863e0ce44adf9a09c6bbf505ebaf9d991"}],"taskflow/test.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"fa17c321217d6dea3980771692f9785ce853e223","unresolved":true,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertRaises(exc_class, access_func)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _assertRaisesRegex(self, exc_class, pattern, callable_obj,"},{"line_number":126,"context_line":"                           *args, **kwargs):"},{"line_number":127,"context_line":"        # TODO(harlowja): submit a pull/review request to testtools to add"},{"line_number":128,"context_line":"        # this method to there codebase instead of having it exist in ours"}],"source_content_type":"text/x-python","patch_set":6,"id":"5012d7d9_77e40bd7","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":26},"updated":"2024-04-23 12:25:21.000000000","message":"I think we can remove this function","commit_id":"c43c7bc3f5df111a01457964c96b449d44b2f498"}]}
