)]}'
{"swift/common/wsgi.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6cef5220160d85737e0faf5d39cb7edae7861b58","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        logger.error(\u0027SIGTERM received\u0027)"},{"line_number":941,"context_line":"        signal.signal(signal.SIGTERM, signal.SIG_IGN)"},{"line_number":942,"context_line":"        running[0] \u003d False"},{"line_number":943,"context_line":"        os.killpg(0, signal.SIGTERM)"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def hup(*args):"},{"line_number":946,"context_line":"        \"\"\"Shuts down the server, but allows running requests to complete\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_68e20f32","side":"PARENT","line":943,"updated":"2018-04-06 01:25:42.000000000","message":"killpg moves outside the loop? I worry a little if we\u0027re getting signals because we\u0027re deadlocked somewhere... who knows when this will actually run...","commit_id":"a75516841fd635e4656d7ca8587e09cc60d9181d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c100ceba9ba433ebdbbe2379a16c2f7687ea31","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        logger.error(\u0027SIGTERM received\u0027)"},{"line_number":941,"context_line":"        signal.signal(signal.SIGTERM, signal.SIG_IGN)"},{"line_number":942,"context_line":"        running[0] \u003d False"},{"line_number":943,"context_line":"        os.killpg(0, signal.SIGTERM)"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def hup(*args):"},{"line_number":946,"context_line":"        \"\"\"Shuts down the server, but allows running requests to complete\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_088ef326","side":"PARENT","line":943,"in_reply_to":"bf659307_68e20f32","updated":"2018-04-06 01:39:08.000000000","message":"well... it\u0027s a blocking syscall - so it *technically* runs the same risk as the logging call but may be find in practice.\n\nI sort of like the idea that the handler just sets flags and we have the main loop handling all the shutdown logic but I agree it does place some earnest on that being correct.\n\nThe tradeoff isn\u0027t obvious to me :\\","commit_id":"a75516841fd635e4656d7ca8587e09cc60d9181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6cef5220160d85737e0faf5d39cb7edae7861b58","unresolved":false,"context_lines":[{"line_number":945,"context_line":"    def hup(*args):"},{"line_number":946,"context_line":"        \"\"\"Shuts down the server, but allows running requests to complete\"\"\""},{"line_number":947,"context_line":"        logger.error(\u0027SIGHUP received\u0027)"},{"line_number":948,"context_line":"        signal.signal(signal.SIGHUP, signal.SIG_IGN)"},{"line_number":949,"context_line":"        running[0] \u003d False"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"    running \u003d [True]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_08e83314","side":"PARENT","line":948,"updated":"2018-04-06 01:25:42.000000000","message":"No more ignoring? I guess it doesn\u0027t really hurt to call stop_with_signal again...","commit_id":"a75516841fd635e4656d7ca8587e09cc60d9181d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c100ceba9ba433ebdbbe2379a16c2f7687ea31","unresolved":false,"context_lines":[{"line_number":945,"context_line":"    def hup(*args):"},{"line_number":946,"context_line":"        \"\"\"Shuts down the server, but allows running requests to complete\"\"\""},{"line_number":947,"context_line":"        logger.error(\u0027SIGHUP received\u0027)"},{"line_number":948,"context_line":"        signal.signal(signal.SIGHUP, signal.SIG_IGN)"},{"line_number":949,"context_line":"        running[0] \u003d False"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"    running \u003d [True]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_e89cdf5e","side":"PARENT","line":948,"in_reply_to":"bf659307_08e83314","updated":"2018-04-06 01:39:08.000000000","message":"yeah baby idempotent!","commit_id":"a75516841fd635e4656d7ca8587e09cc60d9181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6cef5220160d85737e0faf5d39cb7edae7861b58","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    reiterate"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SIGNUM_TO_NAME \u003d {getattr(signal, n): n for n in dir(signal)"},{"line_number":49,"context_line":"                  if n.startswith(\u0027SIG\u0027) and \u0027_\u0027 not in n}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Set maximum line size of message headers to be accepted."},{"line_number":52,"context_line":"wsgi.MAX_HEADER_LINE \u003d constraints.MAX_HEADER_SIZE"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_2888976f","line":49,"updated":"2018-04-06 01:25:42.000000000","message":"Ick. I was really expecting there to be something like errno.errorcode, but no, not even on py3...","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c100ceba9ba433ebdbbe2379a16c2f7687ea31","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    reiterate"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SIGNUM_TO_NAME \u003d {getattr(signal, n): n for n in dir(signal)"},{"line_number":49,"context_line":"                  if n.startswith(\u0027SIG\u0027) and \u0027_\u0027 not in n}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Set maximum line size of message headers to be accepted."},{"line_number":52,"context_line":"wsgi.MAX_HEADER_LINE \u003d constraints.MAX_HEADER_SIZE"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_689a0f6f","line":49,"in_reply_to":"bf659307_2888976f","updated":"2018-04-06 01:39:08.000000000","message":"I think py3 does have some sort of enum... signal.Signal(signum).name or something?","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2be71079fab932f0e49a93ac0532b51cc2d73698","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    reiterate"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SIGNUM_TO_NAME \u003d {getattr(signal, n): n for n in dir(signal)"},{"line_number":49,"context_line":"                  if n.startswith(\u0027SIG\u0027) and \u0027_\u0027 not in n}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Set maximum line size of message headers to be accepted."},{"line_number":52,"context_line":"wsgi.MAX_HEADER_LINE \u003d constraints.MAX_HEADER_SIZE"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_88b0c38d","line":49,"in_reply_to":"bf659307_689a0f6f","updated":"2018-04-06 01:56:28.000000000","message":"Oh, so it does! I think I must\u0027ve found myself still looking at the 2.7 tree out of habit.\n\nI must admit I find https://github.com/python/cpython/blob/v3.6.0/Lib/signal.py#L8-L13 mildly terrifying, though.","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d541da4441bdb39b12bf1ae76d8142416dca905","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    reiterate"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SIGNUM_TO_NAME \u003d {getattr(signal, n): n for n in dir(signal)"},{"line_number":49,"context_line":"                  if n.startswith(\u0027SIG\u0027) and \u0027_\u0027 not in n}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Set maximum line size of message headers to be accepted."},{"line_number":52,"context_line":"wsgi.MAX_HEADER_LINE \u003d constraints.MAX_HEADER_SIZE"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_7ac40341","line":49,"in_reply_to":"bf659307_88b0c38d","updated":"2018-04-06 18:38:06.000000000","message":"could avoid this by passing the string sig name to stop_with_signal using a partial?","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6cef5220160d85737e0faf5d39cb7edae7861b58","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"        os.killpg(0, signal.SIGTERM)"},{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"    strategy.shutdown_sockets()"},{"line_number":1006,"context_line":"    signal.signal(signal.SIGTERM, signal.SIG_IGN)"},{"line_number":1007,"context_line":"    logger.notice(\u0027Exited (%s)\u0027, os.getpid())"},{"line_number":1008,"context_line":"    return 0"},{"line_number":1009,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_286417b9","line":1006,"updated":"2018-04-06 01:25:42.000000000","message":"And *now* we ignore?? We\u0027re about to exit -- why bother?","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c100ceba9ba433ebdbbe2379a16c2f7687ea31","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"        os.killpg(0, signal.SIGTERM)"},{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"    strategy.shutdown_sockets()"},{"line_number":1006,"context_line":"    signal.signal(signal.SIGTERM, signal.SIG_IGN)"},{"line_number":1007,"context_line":"    logger.notice(\u0027Exited (%s)\u0027, os.getpid())"},{"line_number":1008,"context_line":"    return 0"},{"line_number":1009,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_68a8cf76","line":1006,"in_reply_to":"bf659307_286417b9","updated":"2018-04-06 01:39:08.000000000","message":"yeah... this is probably useless... I was blindly cargo culting","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d541da4441bdb39b12bf1ae76d8142416dca905","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"        os.killpg(0, signal.SIGTERM)"},{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"    strategy.shutdown_sockets()"},{"line_number":1006,"context_line":"    signal.signal(signal.SIGTERM, signal.SIG_IGN)"},{"line_number":1007,"context_line":"    logger.notice(\u0027Exited (%s)\u0027, os.getpid())"},{"line_number":1008,"context_line":"    return 0"},{"line_number":1009,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_dae2ef01","line":1006,"in_reply_to":"bf659307_68a8cf76","updated":"2018-04-06 18:38:06.000000000","message":"so probably moot, but should this be:\n\nsignal.signal(running[1], signal.SIG_IGN)\n\n...before we\u0027d map SIGHUP to SIG_IGN in hup()","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"}],"test/probe/test_sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6cef5220160d85737e0faf5d39cb7edae7861b58","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                       if v.startswith(\u0027container\u0027)]"},{"line_number":122,"context_line":"            self.brain.servers.stop()"},{"line_number":123,"context_line":"        for ipport in ipports:"},{"line_number":124,"context_line":"            wait_for_server_to_hangup(ipport)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def put_objects(self, obj_names):"},{"line_number":127,"context_line":"        for obj in obj_names:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_486ceb9b","line":124,"updated":"2018-04-06 01:25:42.000000000","message":"Should we just have this as part of brain.servers.stop()?\n\nWhy is this only affecting sharder tests?","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c100ceba9ba433ebdbbe2379a16c2f7687ea31","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                       if v.startswith(\u0027container\u0027)]"},{"line_number":122,"context_line":"            self.brain.servers.stop()"},{"line_number":123,"context_line":"        for ipport in ipports:"},{"line_number":124,"context_line":"            wait_for_server_to_hangup(ipport)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def put_objects(self, obj_names):"},{"line_number":127,"context_line":"        for obj in obj_names:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_a8902750","line":124,"in_reply_to":"bf659307_486ceb9b","updated":"2018-04-06 01:39:08.000000000","message":"this code was just for debugging, fixing the signal handling not do logging makes this unnecessary - but not harmful either:\n\n\"fail early and loudly\"","commit_id":"6b26aa3a528e8f6005e70de4fcce7b87215b4296"}]}
