)]}'
{"tooz/coordination.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6666501b29eaae0d39ad7deddca85aee495af318","unresolved":true,"context_lines":[{"line_number":202,"context_line":"        \"\"\"Inner beating loop.\"\"\""},{"line_number":203,"context_line":"        while not self._dead.is_set():"},{"line_number":204,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":205,"context_line":"                try:"},{"line_number":206,"context_line":"                    wait_until_next_beat \u003d self._driver.heartbeat()"},{"line_number":207,"context_line":"                except Exception as exc:"},{"line_number":208,"context_line":"                    LOG.warning("}],"source_content_type":"text/x-python","patch_set":2,"id":"802d204e_34948359","line":205,"range":{"start_line":205,"start_character":16,"end_line":205,"end_character":19},"updated":"2026-10-11 16:50:27.000000000","message":"The change conflicts with this logic later (L216) to detect long heartbeat check which expects that w.elspsed is accumulated during retry.","commit_id":"98a96fde4122cddfa0a8f3eeb32217673b2d024d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a9970296c8d117eb77f3050baf8c737b7a67caac","unresolved":true,"context_lines":[{"line_number":202,"context_line":"        \"\"\"Inner beating loop.\"\"\""},{"line_number":203,"context_line":"        while not self._dead.is_set():"},{"line_number":204,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":205,"context_line":"                try:"},{"line_number":206,"context_line":"                    wait_until_next_beat \u003d self._driver.heartbeat()"},{"line_number":207,"context_line":"                except Exception as exc:"},{"line_number":208,"context_line":"                    LOG.warning("}],"source_content_type":"text/x-python","patch_set":2,"id":"e629c684_8aa932fa","line":205,"range":{"start_line":205,"start_character":16,"end_line":205,"end_character":19},"in_reply_to":"802d204e_34948359","updated":"2026-10-11 17:37:22.000000000","message":"Thanks for review. I actually hadn’t looked at this closely yet, and I didn’t like the shape of it anyway, this way looks better to me. I still need to test this one in my deployment.","commit_id":"98a96fde4122cddfa0a8f3eeb32217673b2d024d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b6cb938793400553e5d02d4df6a1678ed3796d90","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        \"\"\"Inner beating loop.\"\"\""},{"line_number":203,"context_line":"        while not self._dead.is_set():"},{"line_number":204,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":205,"context_line":"                try:"},{"line_number":206,"context_line":"                    wait_until_next_beat \u003d self._driver.heartbeat()"},{"line_number":207,"context_line":"                except Exception as exc:"},{"line_number":208,"context_line":"                    LOG.warning("}],"source_content_type":"text/x-python","patch_set":2,"id":"913b9a34_97e7d7de","line":205,"range":{"start_line":205,"start_character":16,"end_line":205,"end_character":19},"in_reply_to":"e629c684_8aa932fa","updated":"2026-10-12 04:02:15.000000000","message":"Done","commit_id":"98a96fde4122cddfa0a8f3eeb32217673b2d024d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b6cb938793400553e5d02d4df6a1678ed3796d90","unresolved":true,"context_lines":[{"line_number":215,"context_line":"        while not self._dead.is_set():"},{"line_number":216,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":217,"context_line":"                wait_until_next_beat \u003d retry(heartbeat)"},{"line_number":218,"context_line":"            if wait_until_next_beat is None and self._dead.is_set():"},{"line_number":219,"context_line":"                return"},{"line_number":220,"context_line":"            assert wait_until_next_beat is not None  # narrow type"},{"line_number":221,"context_line":"            ran_for \u003d w.elapsed()"}],"source_content_type":"text/x-python","patch_set":4,"id":"6885e86c_bb5bec83","line":218,"range":{"start_line":218,"start_character":15,"end_line":218,"end_character":47},"updated":"2026-10-12 04:02:15.000000000","message":"I wonder if we even want to drop this ? This still allows the loop to run one more sleep( in worst case 30 / 2 \u003d 15 s) in case the event is set right after the heartbeat starts. I know it happens within a quite narrow window.","commit_id":"306e58fc5278c3b30d76049ead5b2219f2eb4dc3"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fcada1a856d037e290265500c70de2c7390f668b","unresolved":true,"context_lines":[{"line_number":215,"context_line":"        while not self._dead.is_set():"},{"line_number":216,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":217,"context_line":"                wait_until_next_beat \u003d retry(heartbeat)"},{"line_number":218,"context_line":"            if wait_until_next_beat is None and self._dead.is_set():"},{"line_number":219,"context_line":"                return"},{"line_number":220,"context_line":"            assert wait_until_next_beat is not None  # narrow type"},{"line_number":221,"context_line":"            ran_for \u003d w.elapsed()"}],"source_content_type":"text/x-python","patch_set":4,"id":"85d4f30d_8f6dde1f","line":218,"range":{"start_line":218,"start_character":15,"end_line":218,"end_character":47},"in_reply_to":"6885e86c_bb5bec83","updated":"2026-10-12 04:55:18.000000000","message":"Simplified in PS5 (and adjusted the test more to my liking in PS6). `Event.wait()` was already interruptible, but simpler is fine. also added a test for prompt shutdown and no further backend calls when stopping during a successful heartbeat.","commit_id":"306e58fc5278c3b30d76049ead5b2219f2eb4dc3"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"3f0bfd2ca5ee24b2bb72d761f525157caaa29baa","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        while not self._dead.is_set():"},{"line_number":216,"context_line":"            with timeutils.StopWatch() as w:"},{"line_number":217,"context_line":"                wait_until_next_beat \u003d retry(heartbeat)"},{"line_number":218,"context_line":"            if wait_until_next_beat is None and self._dead.is_set():"},{"line_number":219,"context_line":"                return"},{"line_number":220,"context_line":"            assert wait_until_next_beat is not None  # narrow type"},{"line_number":221,"context_line":"            ran_for \u003d w.elapsed()"}],"source_content_type":"text/x-python","patch_set":4,"id":"0217bb78_e87daee1","line":218,"in_reply_to":"85d4f30d_8f6dde1f","updated":"2026-10-19 20:38:43.000000000","message":"Done","commit_id":"306e58fc5278c3b30d76049ead5b2219f2eb4dc3"}]}
