)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"371fbd3d00866be12703f8afd9ed520bafd78bf0","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-03-06 19:26:09 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use signals for timeout on os.wait()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I227ca4f16c4314fc91663a25f2bb4623c6d761ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"f6e7fba1_6787e4cd","line":7,"updated":"2023-04-28 19:49:33.000000000","message":"I should provide a little more context here -- eventlet\u0027s not a great tool for waiting on subprocesses; since there\u0027s nothing else the manager process is trying to do at the same time, we may as well embrace the blocking call but set a timer to interrupt us if it goes on too long. Then we only have to wake up every 0.5s or something, instead of every 0.01s.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9fdf4605e09edb2d7430f7c7b8d09832df6b9f78","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-03-06 19:26:09 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use signals for timeout on os.wait()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I227ca4f16c4314fc91663a25f2bb4623c6d761ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6d8008a0_14eb9e3a","line":7,"in_reply_to":"f6e7fba1_6787e4cd","updated":"2025-05-23 20:06:32.000000000","message":"\u003e I should provide a little more context here\n\nDone.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"371fbd3d00866be12703f8afd9ed520bafd78bf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5854c3a5_60c85292","updated":"2023-04-28 19:49:33.000000000","message":"I still think this is a good idea, but I don\u0027t think I saw much of a power-usage drop in my home cluster, FWIW.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a5ccafa0c3c79a62669dbda75cb752e4b5da0e30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"deaf82ee_28abd9ac","updated":"2023-03-10 06:04:51.000000000","message":"Nice, I\u0027ve been having a play with this on a real SKU\u0027ed hardware box we have in our dev lab.\n\nThe box is running an SAIO but on the real hardware. When running master and is idle I\u0027m seeing the wsgi processes hitting 0.7 each on the CPU% (and at the top), when I apply your patch they stay on 0.0.\n\nSo this seems like a win to me. Before I +2 I\u0027ll run some benchmarks on the box, just to make sure there are no other side effects.. just in case.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"}],"swift/common/wsgi.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"371fbd3d00866be12703f8afd9ed520bafd78bf0","unresolved":true,"context_lines":[{"line_number":936,"context_line":"                        # events that happen. The value of 0.01 matches the"},{"line_number":937,"context_line":"                        # value in eventlet\u0027s waitpid()."},{"line_number":938,"context_line":"                        sleep(0.01)"},{"line_number":939,"context_line":"            except KeyboardInterrupt:"},{"line_number":940,"context_line":"                logger.notice(\u0027User quit\u0027)"},{"line_number":941,"context_line":"                running_context[0] \u003d False"},{"line_number":942,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"b5beda98_f1e45d34","side":"PARENT","line":939,"updated":"2023-04-28 19:49:33.000000000","message":"🤔 Maybe we had this double-try in case user hit ^C during the sleep or something -- but in that case I\u0027d wonder why we wouldn\u0027t want the interrupt-catcher wrapping the whole for-loop.","commit_id":"a2952962d2f451d63b482646e23f515be9b00b86"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"332280c579b78bddeca15bf473f89fb23302ed12","unresolved":true,"context_lines":[{"line_number":936,"context_line":"                        # events that happen. The value of 0.01 matches the"},{"line_number":937,"context_line":"                        # value in eventlet\u0027s waitpid()."},{"line_number":938,"context_line":"                        sleep(0.01)"},{"line_number":939,"context_line":"            except KeyboardInterrupt:"},{"line_number":940,"context_line":"                logger.notice(\u0027User quit\u0027)"},{"line_number":941,"context_line":"                running_context[0] \u003d False"},{"line_number":942,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"756d195a_838ba55f","side":"PARENT","line":939,"in_reply_to":"b5beda98_f1e45d34","updated":"2023-11-08 23:52:47.000000000","message":"\u003e Maybe we had this double-try in case user hit ^C during the sleep\n\n🤦 I should learn to read comments...","commit_id":"a2952962d2f451d63b482646e23f515be9b00b86"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"eb241b84f0d4bf426a15217ea5cf696c525171b0","unresolved":true,"context_lines":[{"line_number":803,"context_line":"        if any(existing):"},{"line_number":804,"context_line":"            raise RuntimeError(\u0027alarm already set: %r\u0027 % (existing,))"},{"line_number":805,"context_line":"        self.old_handler \u003d signal.signal(signal.SIGALRM, self.alarm)"},{"line_number":806,"context_line":"        signal.setitimer(signal.ITIMER_REAL, self.timeout)"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def __exit__(self, *a):"},{"line_number":809,"context_line":"        if self.timeout is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce6a38cc_6f555d6e","line":806,"range":{"start_line":806,"start_character":15,"end_line":806,"end_character":24},"updated":"2023-03-10 20:39:18.000000000","message":"Note that we\u0027re not using `signal.alarm()` here -- that only accepts integer arguments, while `setitimer` allows floats.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"eb241b84f0d4bf426a15217ea5cf696c525171b0","unresolved":true,"context_lines":[{"line_number":808,"context_line":"    def __exit__(self, *a):"},{"line_number":809,"context_line":"        if self.timeout is None:"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":"        signal.alarm(0)"},{"line_number":812,"context_line":"        signal.signal(signal.SIGALRM, self.old_handler)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e1f94979_d591d988","line":811,"updated":"2023-03-10 20:39:18.000000000","message":"This should maybe use `setitimer` for consistency\u0027s sake. Under the hood, it\u0027s the same timer.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"332280c579b78bddeca15bf473f89fb23302ed12","unresolved":false,"context_lines":[{"line_number":808,"context_line":"    def __exit__(self, *a):"},{"line_number":809,"context_line":"        if self.timeout is None:"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":"        signal.alarm(0)"},{"line_number":812,"context_line":"        signal.signal(signal.SIGALRM, self.old_handler)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6ea7db73_b92eb83d","line":811,"in_reply_to":"e1f94979_d591d988","updated":"2023-11-08 23:52:47.000000000","message":"Done","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"371fbd3d00866be12703f8afd9ed520bafd78bf0","unresolved":true,"context_lines":[{"line_number":940,"context_line":"        #"},{"line_number":941,"context_line":"        # NOTE: a timeout value of None will just instantiate the Timeout"},{"line_number":942,"context_line":"        # object and not actually schedule it, which is equivalent to no"},{"line_number":943,"context_line":"        # timeout for the green_os.wait()."},{"line_number":944,"context_line":"        loop_timeout \u003d strategy.loop_timeout()"},{"line_number":945,"context_line":""},{"line_number":946,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bdc09e5c_7efc11b7","line":943,"range":{"start_line":943,"start_character":26,"end_line":943,"end_character":39},"updated":"2023-04-28 19:49:33.000000000","message":"Comment could use an update -- we\u0027re not using green_os anymore, nor is there anything about \"scheduling\" going on now.","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"332280c579b78bddeca15bf473f89fb23302ed12","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        #"},{"line_number":941,"context_line":"        # NOTE: a timeout value of None will just instantiate the Timeout"},{"line_number":942,"context_line":"        # object and not actually schedule it, which is equivalent to no"},{"line_number":943,"context_line":"        # timeout for the green_os.wait()."},{"line_number":944,"context_line":"        loop_timeout \u003d strategy.loop_timeout()"},{"line_number":945,"context_line":""},{"line_number":946,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b01db7cc_8f53565e","line":943,"range":{"start_line":943,"start_character":26,"end_line":943,"end_character":39},"in_reply_to":"bdc09e5c_7efc11b7","updated":"2023-11-08 23:52:47.000000000","message":"Done","commit_id":"625c37a86abeb6315515a0b156acce8ada1e7a64"}]}
