)]}'
{"swift/obj/replicator.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1d17036f4dc2029cf8d7cc35dd7e62d468d1f128","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                ret_val \u003d proc.wait()"},{"line_number":180,"context_line":"        except GreenletExit:"},{"line_number":181,"context_line":"            self.logger.error(_(\"Killing by lockup detector\"))"},{"line_number":182,"context_line":"            # or we should wait again the process finished?"},{"line_number":183,"context_line":"            proc.terminate()"},{"line_number":184,"context_line":"            proc.wait()"},{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":"        except Timeout:"},{"line_number":187,"context_line":"            self.logger.error(_(\"Killing long-running rsync: %s\"), str(args))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f9dbf25_bb46474f","line":184,"range":{"start_line":182,"start_character":0,"end_line":184,"end_character":23},"updated":"2018-02-27 10:30:00.000000000","message":"Change from SIGKILL to SIGTERM expecting to shutdown graceful shutdown. And add wait() call to prevent zombie process.\n\nBut still not sure. we may be wait again here w/o terminating?","commit_id":"7ebf7fd311bd2fa340cc98c802674aa155e02d53"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"206f0f64a5cd4a9fd9123ac98f78105df4e6bc29","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                ret_val \u003d proc.wait()"},{"line_number":180,"context_line":"        except GreenletExit:"},{"line_number":181,"context_line":"            self.logger.error(_(\"Killing by lockup detector\"))"},{"line_number":182,"context_line":"            # or we should wait again the process finished?"},{"line_number":183,"context_line":"            proc.terminate()"},{"line_number":184,"context_line":"            proc.wait()"},{"line_number":185,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_5b04e3c6","line":182,"updated":"2018-02-27 10:38:54.000000000","message":"Perhaps, good to wait with the remaining time (i.e. rsync_timeout - past time) and then terminate it.","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9ea5f79a900be14b0c540c0c261b87ee78e56ae","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        except GreenletExit:"},{"line_number":181,"context_line":"            self.logger.error(_(\"Killing by lockup detector\"))"},{"line_number":182,"context_line":"            # or we should wait again the process finished?"},{"line_number":183,"context_line":"            proc.terminate()"},{"line_number":184,"context_line":"            proc.wait()"},{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":"        except Timeout:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_66aa1bd3","line":183,"updated":"2018-03-03 19:02:33.000000000","message":"Why do we terminate here, but kill below? I guess, because we\u0027re still hopeful that rsync is responsive?\n\nAlso, there\u0027s a chance that we could get quite unlucky and this will produce a NameError. Of course, that was true before, too, in the Timeout handling...","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9ea5f79a900be14b0c540c0c261b87ee78e56ae","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            self.logger.error(_(\"Killing by lockup detector\"))"},{"line_number":182,"context_line":"            # or we should wait again the process finished?"},{"line_number":183,"context_line":"            proc.terminate()"},{"line_number":184,"context_line":"            proc.wait()"},{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":"        except Timeout:"},{"line_number":187,"context_line":"            self.logger.error(_(\"Killing long-running rsync: %s\"), str(args))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_261733f0","line":184,"updated":"2018-03-03 19:02:33.000000000","message":"What happens if rsync doesn\u0027t respond to SIGTERM? I guess we wait forever on it -- does that have any implications for the lockup detector that\u0027s trying to kill us?\n\nI guess... it waits a bit, then comes around and kills us again, yeah? So... not so bad.","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"206f0f64a5cd4a9fd9123ac98f78105df4e6bc29","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":"        except Timeout:"},{"line_number":187,"context_line":"            self.logger.error(_(\"Killing long-running rsync: %s\"), str(args))"},{"line_number":188,"context_line":"            proc.kill()"},{"line_number":189,"context_line":"            return 1  # failure response code"},{"line_number":190,"context_line":"        total_time \u003d time.time() - start_time"},{"line_number":191,"context_line":"        for result in results.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_dbf793d4","line":188,"updated":"2018-02-27 10:38:54.000000000","message":"Off topic: IIUC, this absolutely causes zombie process unless we wait the process termination here. as well as L184.","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9ea5f79a900be14b0c540c0c261b87ee78e56ae","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":"        except Timeout:"},{"line_number":187,"context_line":"            self.logger.error(_(\"Killing long-running rsync: %s\"), str(args))"},{"line_number":188,"context_line":"            proc.kill()"},{"line_number":189,"context_line":"            return 1  # failure response code"},{"line_number":190,"context_line":"        total_time \u003d time.time() - start_time"},{"line_number":191,"context_line":"        for result in results.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_a6f6e3f8","line":188,"in_reply_to":"1f9dbf25_dbf793d4","updated":"2018-03-03 19:02:33.000000000","message":"Confirmed, using Clay\u0027s blackhole server and rsync_timeout\u003d1 (instead of lockup_timeout).","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"}],"test/unit/obj/test_replicator.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b114e9967b7cd26dd2b7e6872cc4a6981a9b61da","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"                self.stdout \u003d MockStdout()"},{"line_number":2031,"context_line":""},{"line_number":2032,"context_line":"            def wait(self):"},{"line_number":2033,"context_line":"                sleep(1)"},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":"            def kill(self):"},{"line_number":2036,"context_line":"                kill_coros_call_count[0] +\u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f9dbf25_fb65afe2","line":2033,"updated":"2018-02-27 10:31:28.000000000","message":"Oh, I may ought to change the sleep time here because new version will call wait again after terminate. Oh... I have to change def kill below too.","commit_id":"7ebf7fd311bd2fa340cc98c802674aa155e02d53"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9ea5f79a900be14b0c540c0c261b87ee78e56ae","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"                self.stdout \u003d MockStdout()"},{"line_number":2031,"context_line":""},{"line_number":2032,"context_line":"            def wait(self):"},{"line_number":2033,"context_line":"                sleep(1)"},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":"            def terminate(self):"},{"line_number":2036,"context_line":"                kill_coros_call_count[0] +\u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f9dbf25_c6e9af1a","line":2033,"updated":"2018-03-03 19:02:33.000000000","message":"I wonder if we should have a similar call-counter that we could assert on...","commit_id":"9e5f434574e6d65e97fbece69d5baa6a60d73418"}]}
