)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"df4d8e93440837afc112cfba986d10494dcf37d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f4d9b13_d48f56c7","updated":"2022-04-19 13:31:59.000000000","message":"need release note","commit_id":"eb63883898e71773d6fea81987c8f2c303af5d14"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9895db2ff786aea21065a042da1bb2739304c0b0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"023610ce_909935d2","updated":"2022-09-14 16:33:34.000000000","message":"I think this is good enough for now, but I hope in the future we can think of ways to allow tasks that are not progressing to be rescheduled.\nScenarios like when one controller is having a partial network outage/split.","commit_id":"d367b47639af02aaaff80cd62629f5c8e7f3f91a"}],"octavia/common/base_taskflow.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"d485b9870833d6f998266ceb1273bc2383188742","unresolved":true,"context_lines":[{"line_number":199,"context_line":"                    # conductor (from the same process)"},{"line_number":200,"context_line":"                    if owner \u003d\u003d conductor_name:"},{"line_number":201,"context_line":"                        if job.expires_in() \u003c expiration_time / 2:"},{"line_number":202,"context_line":"                            LOG.debug(f\"Extend expiry for job {job.name}\")"},{"line_number":203,"context_line":"                            job.extend_expiry(expiration_time)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _waiter(self, conductor):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fc1bd065_899cddbe","line":202,"range":{"start_line":202,"start_character":38,"end_line":202,"end_character":73},"updated":"2022-09-02 14:48:02.000000000","message":"Nit: I am a big fan of f-strings, but logger calls are a bit special. I learned that it is better to provide variables as arguments:\n\nLOG.debug(\"Extend expiry for job %s\", job.name)\n\nAFAIR the reason is that this way the string doesn\u0027t need to get evaluated if the log level is not DEBUG.","commit_id":"bb34dab3633eaba7b4b3bb5fb1a4c9b96980826f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c342b9c9af4e5106397a0ff6882215ea3c357aa9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                    # conductor (from the same process)"},{"line_number":200,"context_line":"                    if owner \u003d\u003d conductor_name:"},{"line_number":201,"context_line":"                        if job.expires_in() \u003c expiration_time / 2:"},{"line_number":202,"context_line":"                            LOG.debug(f\"Extend expiry for job {job.name}\")"},{"line_number":203,"context_line":"                            job.extend_expiry(expiration_time)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _waiter(self, conductor):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f8d4c11e_a89a7aa7","line":202,"range":{"start_line":202,"start_character":38,"end_line":202,"end_character":73},"in_reply_to":"fc1bd065_899cddbe","updated":"2022-09-02 14:53:41.000000000","message":"Yeah you\u0027re right","commit_id":"bb34dab3633eaba7b4b3bb5fb1a4c9b96980826f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"d485b9870833d6f998266ceb1273bc2383188742","unresolved":true,"context_lines":[{"line_number":205,"context_line":"    def _waiter(self, conductor):"},{"line_number":206,"context_line":"        expiration_time \u003d CONF.task_flow.jobboard_expiration_time"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        while True:"},{"line_number":209,"context_line":"            self._extend_jobs(conductor, expiration_time)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            time.sleep(expiration_time / 4)"}],"source_content_type":"text/x-python","patch_set":2,"id":"666d44ed_0d6d1222","line":211,"range":{"start_line":208,"start_character":8,"end_line":211,"end_character":43},"updated":"2022-09-02 14:48:02.000000000","message":"Does that extend the jobs forever? I don\u0027t see a break condition.","commit_id":"bb34dab3633eaba7b4b3bb5fb1a4c9b96980826f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c342b9c9af4e5106397a0ff6882215ea3c357aa9","unresolved":true,"context_lines":[{"line_number":205,"context_line":"    def _waiter(self, conductor):"},{"line_number":206,"context_line":"        expiration_time \u003d CONF.task_flow.jobboard_expiration_time"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        while True:"},{"line_number":209,"context_line":"            self._extend_jobs(conductor, expiration_time)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            time.sleep(expiration_time / 4)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1733c1cb_0b764810","line":211,"range":{"start_line":208,"start_character":8,"end_line":211,"end_character":43},"in_reply_to":"666d44ed_0d6d1222","updated":"2022-09-02 14:53:41.000000000","message":"yeah it extends the jobs that are owned by this worker (\u003d\u003d that are run in a thread of this process)\nbasically, while the worker is alive, it notifies taskflow that its tasks cannot be rescheduled on another worker.","commit_id":"bb34dab3633eaba7b4b3bb5fb1a4c9b96980826f"}]}
