)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0edecb9d2e672c781f44304e8fb2c8f14c8bff0a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     ASHWIN A NAIR \u003cnairashwin952013@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-04-27 21:07:02 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix proxy traceback for GeneratorExit in py3"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"8dc9cddc_858f59e2","line":7,"range":{"start_line":7,"start_character":10,"end_line":7,"end_character":19},"updated":"2023-05-17 21:18:32.000000000","message":"is there a bug report?","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     ASHWIN A NAIR \u003cnairashwin952013@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-04-27 21:07:02 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix proxy traceback for GeneratorExit in py3"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"77b0af6a_dd7008f4","line":7,"range":{"start_line":7,"start_character":10,"end_line":7,"end_character":19},"in_reply_to":"8dc9cddc_858f59e2","updated":"2023-06-13 18:26:21.000000000","message":"Done","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0edecb9d2e672c781f44304e8fb2c8f14c8bff0a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix proxy traceback for GeneratorExit in py3"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"},{"line_number":11,"context_line":"needs to be fixed. We have done it by killing all running"},{"line_number":12,"context_line":"coroutines in the ContextPool"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"f26d8c9e_c3b4514f","line":9,"range":{"start_line":9,"start_character":59,"end_line":9,"end_character":60},"updated":"2023-05-17 21:18:32.000000000","message":"the \u0027.\u0027 looks like it should not be there","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix proxy traceback for GeneratorExit in py3"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"},{"line_number":11,"context_line":"needs to be fixed. We have done it by killing all running"},{"line_number":12,"context_line":"coroutines in the ContextPool"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ab9c1522_1872b073","line":9,"range":{"start_line":9,"start_character":59,"end_line":9,"end_character":60},"in_reply_to":"f26d8c9e_c3b4514f","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"},{"line_number":11,"context_line":"needs to be fixed. We have done it by killing all running"},{"line_number":12,"context_line":"coroutines in the ContextPool"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ic372ea9866bb7f2659e02f8796cdee01406e2079"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"b9f5d77f_ed964ba6","line":12,"updated":"2023-04-28 14:57:21.000000000","message":"this is the right way to do it IMHO!\n\nthe only alternative I can see is trying track all of the generators and sub generators wrapped around the stashed_iter util we can be SURE they\u0027re forwading close all the way down and forcing the ContextPool to exit.  But, I think that would be easier to break and harder to maintain - so capturing the internal_parts_iter and context pool and *shutting them down directly* seems obvious, necessary and correct.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Client when explicitly closed before finishing the download."},{"line_number":10,"context_line":"leads to a 499, but the shutdown logging for proxy in py3"},{"line_number":11,"context_line":"needs to be fixed. We have done it by killing all running"},{"line_number":12,"context_line":"coroutines in the ContextPool"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ic372ea9866bb7f2659e02f8796cdee01406e2079"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bc413a35_50a0c3c7","line":12,"in_reply_to":"b9f5d77f_ed964ba6","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"8a4580d5_953925cd","updated":"2023-04-14 22:35:13.000000000","message":"there\u0027s more than a couple changes going on here - but only the probe test and it doesn\u0027t really make many assertions about the behavior hange your trying to achive.\n\nthe testing you have doesn\u0027t make any of these changes obviously correct me - if you could get a unittest that would trigger the tracebacks that might be helpful, but it might be difficult.  If you have any documentation you can point to saying \"do not raise when you catch GeneratorExit\" that might be helpful.","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"cc642363_0be18aee","updated":"2023-04-20 22:34:51.000000000","message":"I think the solution we\u0027ll be most happy with will be more targeted than this - some of the changes seem only accidently related to the problem of \"why are these generators we\u0027re trying to close not suspended on a yield\"","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"afc2be9663ed830129c5945e7032411cef1dfa22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b76702f0_25de9022","updated":"2023-04-28 14:58:01.000000000","message":"AttributeError: \u0027ECAppIter\u0027 object has no attribute \u0027pool\u0027 (txn: txcf04f3d2ee1e42f3b7a27-00644ae89b)\n\noh, maybe it *is* functionally releavent!  who would know clean code leads to less bugs!?","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"082ad083_2941d38c","updated":"2023-04-28 14:57:21.000000000","message":"I think the either the probe test or the unit test should have some asserts about no tracebacks in the logs.  I would recommend we just fix the unittest, and punt the probetest to a follow-on where we can iterate on the interface for checking probe test logs for exeptions.\n\nThere\u0027s maybe some different ideas (nits) we could explore for making the ECAppIter\u0027s pool attribute a little more clean and obvious; but it\u0027s not functionally relevant to carrying the patch.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ff24e8e0_85f4404d","updated":"2023-05-01 18:08:39.000000000","message":"this is getting closer.","commit_id":"839c5daa74478f4307d5c5829b124317d19d5dd8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"ab4d4e4f_abbbcb3e","updated":"2023-05-02 20:16:36.000000000","message":"-1 for the `self.assertTrue(\"Trying to read EC fragment\", ...)`\n\nI\u0027m not clear what we want to do with the `GeneratorExit` exceptions -- https://peps.python.org/pep-0342/ makes me think Clay may be right and we don\u0027t really care about `pass` vs `raise`:\n\n\u003e  If the generator then raises `StopIteration` (by exiting normally, or due to already being closed) or `GeneratorExit` (by not catching the exception), `close()` returns to its caller.\n\n(Though I\u0027d be in favor of dropping the `pass`es entirely.)\n\nMaybe that could change if we ever start using `yield from` from https://peps.python.org/pep-0380/?","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3021581915c34872cda9ba3035e3b1503f3cec44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"e7b98b5c_77d9529a","updated":"2023-05-02 14:16:28.000000000","message":"i don\u0027t think there\u0027s anything in here I don\u0027t like; looks good!","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f9d51a11e6d6fd898f7ea317bfa32a059978739c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"41cd0547_bd7ad143","updated":"2023-05-19 22:29:53.000000000","message":"I\u0027m having some second thoughts on this -- the idea\u0027s still sound, but\n\n1. We definitely don\u0027t need the explicit `pass` -- if we want to drop the `raise`, let\u0027s just drop the `raise`. I _think_ I can convince myself that they\u0027re equivalent (for these particular cases) given https://peps.python.org/pep-0342/#new-generator-method-close and the second example at https://peps.python.org/pep-0342/#examples, and that the callers that are iterating over the generator shouldn\u0027t care about which we choose.\n2. A test for the new interface would be nice.\n\nStill worth carrying -- but could use some cleanup before merging.","commit_id":"8062f9006f77183ede4f841089ebed8d45462877"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c25f0fd07378087b30d5574c12c201936682cf42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"bcfbfd57_96b57d21","updated":"2023-05-17 21:30:52.000000000","message":"sorry, I somehow ended up on an old patchset","commit_id":"8062f9006f77183ede4f841089ebed8d45462877"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c0ea6656c6c41a31b42a6b46addd50103c40e299","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"11cf2a74_037d39bc","updated":"2023-06-13 21:00:32.000000000","message":"Fixed up the unused import. LGTM!","commit_id":"be0c481e44e4f09b3c7fbe37f4b9ee62caa12a27"}],"swift/common/middleware/catch_errors.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":51,"context_line":"            raise BadResponseLength(\u0027Expected another %d bytes\u0027 % ("},{"line_number":52,"context_line":"                bytes_left,))"},{"line_number":53,"context_line":"    except GeneratorExit:"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    finally:"},{"line_number":56,"context_line":"        close_if_possible(inner_iter)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"e6c4aa7a_404f2d69","line":54,"updated":"2023-04-14 22:35:13.000000000","message":"oh, unless catch_errors wraps our iterator with a bytes catcher!  So, this is to the left of proxy-logging - when it changes to just do a return after getting called .close on it does this iterator get the GeneratorExit still?","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            raise BadResponseLength(\u0027Expected another %d bytes\u0027 % ("},{"line_number":52,"context_line":"                bytes_left,))"},{"line_number":53,"context_line":"    except GeneratorExit:"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    finally:"},{"line_number":56,"context_line":"        close_if_possible(inner_iter)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"47ffd2f1_3cf3a89a","line":54,"in_reply_to":"1bf0d256_35acce40","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":true,"context_lines":[{"line_number":51,"context_line":"            raise BadResponseLength(\u0027Expected another %d bytes\u0027 % ("},{"line_number":52,"context_line":"                bytes_left,))"},{"line_number":53,"context_line":"    except GeneratorExit:"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    finally:"},{"line_number":56,"context_line":"        close_if_possible(inner_iter)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1bf0d256_35acce40","line":54,"in_reply_to":"e6c4aa7a_404f2d69","updated":"2023-04-20 22:34:51.000000000","message":"I think this basically has no behavior change - if you catch GeneratorExit and don\u0027t do anything it\u0027s not helpful.","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"}],"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                raise"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"690a3e5e_6b26984a","side":"PARENT","line":446,"updated":"2023-04-14 22:35:13.000000000","message":"now i want to test nested generators - i\u0027m guessing is something else wrapped this... actually i\u0027m not going to guess, I\u0027d just need to test.  Do you have any docs or examples you can\u0027t point to that show this is correct?","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                raise"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"dbf78fcb_5b814db7","side":"PARENT","line":446,"in_reply_to":"690a3e5e_6b26984a","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                return"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"7cc2006b_628de2ff","line":446,"updated":"2023-04-14 22:35:13.000000000","message":"i think this is fine we\u0027re in __call__ and we returned this iterator as the body - if wsgi said .close() I think we\u0027re the LAST one to get a swing at the GeneratorExit exception","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                return"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"4c0de813_d0178a20","line":446,"in_reply_to":"394e108b_b9ba2e7f","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                return"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"bb70f9b8_44df8863","line":446,"in_reply_to":"394e108b_b9ba2e7f","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                return"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"394e108b_b9ba2e7f","line":446,"in_reply_to":"7cc2006b_628de2ff","updated":"2023-04-20 22:34:51.000000000","message":"ok, I think this can be raise/pass/return - it\u0027s all the same, maybe more obvious to just remove this line?  The idea is that we want to explicitly set client_disconnect \u003d True when we\u0027ve had our close method called.  Nothing else matters; less code is better.  I think having the explict return is slightly less obvious than raise (or pass) because you might miss that this return statement is STILL going to drop you into the finally (which is what we want).","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                pass"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"4a113b26_d6fd1c9d","line":446,"updated":"2023-04-28 14:57:21.000000000","message":"I think raise/pass are both fine, still seems pretty obvious to me that we want to fall into the finally block next.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0edecb9d2e672c781f44304e8fb2c8f14c8bff0a","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                pass"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"40566486_20d23384","line":446,"in_reply_to":"21a60596_db4fbdd0","updated":"2023-05-17 21:18:32.000000000","message":"I\u0027m curious too - the commit message says there was a traceback and the fix was to shutdown the pool - why does the raise go from here, when presumably this used to get raised and handled somewhere? Or was this the cause of the traceback, but then what is the fix and what isn\u0027t? #confused","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                pass"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"63d083c5_c2038d70","line":446,"in_reply_to":"4a113b26_d6fd1c9d","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                    yield chunk"},{"line_number":444,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":445,"context_line":"                client_disconnect \u003d True"},{"line_number":446,"context_line":"                pass"},{"line_number":447,"context_line":"            except Exception:"},{"line_number":448,"context_line":"                start_status \u003d 500"},{"line_number":449,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"21a60596_db4fbdd0","line":446,"in_reply_to":"4a113b26_d6fd1c9d","updated":"2023-05-02 20:16:36.000000000","message":"What changes by *not* re-raising here anymore?","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":3007,"context_line":"    def __exit__(self, type, value, traceback):"},{"line_number":3008,"context_line":"        self.close()"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def close(self):"},{"line_number":3011,"context_line":"        for coro in list(self.coroutines_running):"},{"line_number":3012,"context_line":"            coro.kill()"},{"line_number":3013,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"84cd6c13_d1114596","line":3010,"updated":"2023-04-28 14:57:21.000000000","message":"this seems like a useful new interface; might benifit from an explicit unittest.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"    def __exit__(self, type, value, traceback):"},{"line_number":3008,"context_line":"        self.close()"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def close(self):"},{"line_number":3011,"context_line":"        for coro in list(self.coroutines_running):"},{"line_number":3012,"context_line":"            coro.kill()"},{"line_number":3013,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bc0d6199_6182ce26","line":3010,"in_reply_to":"84cd6c13_d1114596","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f9d51a11e6d6fd898f7ea317bfa32a059978739c","unresolved":true,"context_lines":[{"line_number":3007,"context_line":"    def __exit__(self, type, value, traceback):"},{"line_number":3008,"context_line":"        self.close()"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def close(self):"},{"line_number":3011,"context_line":"        for coro in list(self.coroutines_running):"},{"line_number":3012,"context_line":"            coro.kill()"},{"line_number":3013,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"374e644b_267c4017","line":3010,"in_reply_to":"84cd6c13_d1114596","updated":"2023-05-19 22:29:53.000000000","message":"Yeah, that\u0027s probably valid.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c0ea6656c6c41a31b42a6b46addd50103c40e299","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"    def __exit__(self, type, value, traceback):"},{"line_number":3008,"context_line":"        self.close()"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def close(self):"},{"line_number":3011,"context_line":"        for coro in list(self.coroutines_running):"},{"line_number":3012,"context_line":"            coro.kill()"},{"line_number":3013,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"eefd2ed8_2e79c9af","line":3010,"in_reply_to":"bc0d6199_6182ce26","updated":"2023-06-13 21:00:32.000000000","message":"Added tests -- little surprised we didn\u0027t have any tests for `ContextPool` before!","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":2828,"context_line":"                    if end is not None and begin is not None:"},{"line_number":2829,"context_line":"                        if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2830,"context_line":"                            warn \u003d False"},{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"26b75a09_03eb5ce1","side":"PARENT","line":2831,"updated":"2023-04-14 22:35:13.000000000","message":"oh yeah, you just copied what was there - you don\u0027t have to fix someone elses mess if you don\u0027t want to.","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2828,"context_line":"                    if end is not None and begin is not None:"},{"line_number":2829,"context_line":"                        if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2830,"context_line":"                            warn \u003d False"},{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"b2e61b0f_a8e689c1","side":"PARENT","line":2831,"in_reply_to":"26b75a09_03eb5ce1","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":2828,"context_line":"                    if end is not None and begin is not None:"},{"line_number":2829,"context_line":"                        if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2830,"context_line":"                            warn \u003d False"},{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"c53c4f26_46fbba76","side":"PARENT","line":2831,"in_reply_to":"26b75a09_03eb5ce1","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"},{"line_number":2835,"context_line":"        except Exception:"},{"line_number":2836,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2837,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"68114a19_a16999bf","side":"PARENT","line":2834,"updated":"2023-04-14 22:35:13.000000000","message":"oh, huh - yeah I can see the part_iter.close right above in the finally\n\nand re-raising if *we* get closed doesn\u0027t make much sense to me.\n\nthis smells awful, made me think of https://review.opendev.org/c/openstack/swift/+/825172","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":true,"context_lines":[{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"},{"line_number":2835,"context_line":"        except Exception:"},{"line_number":2836,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2837,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"de460c3f_a4dfbf38","side":"PARENT","line":2834,"in_reply_to":"68114a19_a16999bf","updated":"2023-04-20 22:34:51.000000000","message":"I don\u0027t understand the significance of lifting this except clause up before we call part_iter.close.  The purpose of this whole block seems to be logging `client disconnected` but only if the close came from a wsgi/socket close, and not just a range request that didn\u0027t need the whole frag archive body?  I\u0027m not sure how that math works out, we always need whole frags and decode whole segments.\n\nI think with the existing code, if we\u0027re suspended in the yield at 2804 and get thrown a GeneratorExit - it doesn\u0027t matter so much if we log this warning first, or close down the backend part_iter first.  But I slightly prefer to cleanup in the backend (very important) before we do fancy logging (questionable value).","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"},{"line_number":2835,"context_line":"        except Exception:"},{"line_number":2836,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2837,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"b90169a9_e1b34e2a","side":"PARENT","line":2834,"in_reply_to":"de460c3f_a4dfbf38","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2832,"context_line":"                self.logger.warning("},{"line_number":2833,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2834,"context_line":"            raise"},{"line_number":2835,"context_line":"        except Exception:"},{"line_number":2836,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2837,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"c633e6d6_8d614d96","side":"PARENT","line":2834,"in_reply_to":"de460c3f_a4dfbf38","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"c78a5962b5f6c9e75f154cac924a226815236e98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":2815,"context_line":"                        if end is not None and begin is not None:"},{"line_number":2816,"context_line":"                            if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2817,"context_line":"                                warn \u003d False"},{"line_number":2818,"context_line":"                if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2819,"context_line":"                    self.logger.warning("},{"line_number":2820,"context_line":"                        \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2821,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":9,"id":"eb340e67_bea1c4ff","line":2818,"updated":"2023-04-14 22:35:13.000000000","message":"i\u0027d prefer\n\n    if warn and not req.environ:\n    \nbut the reason is because I\u0027m dumb, and sometimes think other people are like me and might read this as\n\n    if not (req.environ and warn):\n    \ninstead of\n\n    if (not req.environ) and warn:\n\ni think the other way is obvoius with the parens, and I\u0027ll only use `if not a and b()` when I need to avoid an expesnive calculation in `b()` when `not a` and even then I write the parens to make it explict I did it on purpose because I don\u0027t want it to be re-written as `if not b() and a`\n\nbut that might just be me!","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"                        if end is not None and begin is not None:"},{"line_number":2816,"context_line":"                            if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2817,"context_line":"                                warn \u003d False"},{"line_number":2818,"context_line":"                if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2819,"context_line":"                    self.logger.warning("},{"line_number":2820,"context_line":"                        \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2821,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":9,"id":"897df856_edafbf28","line":2818,"in_reply_to":"eb340e67_bea1c4ff","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":true,"context_lines":[{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        sleep()  # Give the per-frag threads a chance to clean up"},{"line_number":1175,"context_line":"        for it in self.internal_parts_iters:"},{"line_number":1176,"context_line":"            close_if_possible(it)"},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def kickoff(self, req, resp):"},{"line_number":1179,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"a036e243_f19243ff","line":1176,"updated":"2023-04-20 22:34:51.000000000","message":"I think the crux of the issue is here.  We\u0027re calling close on these internal_parts_iters, but there\u0027s greenthreads in our ContextPool still trying to use them.  We should close our spanw\u0027d greenthreads and THEN close our sub-iterators.","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        sleep()  # Give the per-frag threads a chance to clean up"},{"line_number":1175,"context_line":"        for it in self.internal_parts_iters:"},{"line_number":1176,"context_line":"            close_if_possible(it)"},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def kickoff(self, req, resp):"},{"line_number":1179,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"4cbf023e_a1eb1669","line":1176,"in_reply_to":"a036e243_f19243ff","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        sleep()  # Give the per-frag threads a chance to clean up"},{"line_number":1175,"context_line":"        for it in self.internal_parts_iters:"},{"line_number":1176,"context_line":"            close_if_possible(it)"},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def kickoff(self, req, resp):"},{"line_number":1179,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"95f34a47_907420e3","line":1176,"in_reply_to":"a036e243_f19243ff","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5e44d146b42a720b853a8f1cee640f594c13ac53","unresolved":true,"context_lines":[{"line_number":2817,"context_line":"                                warn \u003d False"},{"line_number":2818,"context_line":"                if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2819,"context_line":"                    self.logger.warning("},{"line_number":2820,"context_line":"                        \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2821,"context_line":"                return"},{"line_number":2822,"context_line":"            finally:"},{"line_number":2823,"context_line":"                if part_iter:"}],"source_content_type":"text/x-python","patch_set":10,"id":"15ea665c_f39fb421","line":2820,"updated":"2023-04-20 22:34:51.000000000","message":"maybe THIS logging happeneding before we get into the finally is equivilent to an eventlet.sleep() and allows the ECAppIter\u0027s ContextPool greenthreads\u0027 to get their generators suspended on a yield before we call close on them just below.","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":false,"context_lines":[{"line_number":2817,"context_line":"                                warn \u003d False"},{"line_number":2818,"context_line":"                if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2819,"context_line":"                    self.logger.warning("},{"line_number":2820,"context_line":"                        \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2821,"context_line":"                return"},{"line_number":2822,"context_line":"            finally:"},{"line_number":2823,"context_line":"                if part_iter:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b92bb520_c4005a43","line":2820,"in_reply_to":"15ea665c_f39fb421","updated":"2023-04-28 14:57:21.000000000","message":"Done","commit_id":"2ef580c14fb734c266b21241bc701c3ad0343a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":1168,"context_line":"    def close(self):"},{"line_number":1169,"context_line":"        # close down the stashed iter first so the ContextPool can"},{"line_number":1170,"context_line":"        # cleanup the frag queue feeding coroutines that may be currently"},{"line_number":1171,"context_line":"        # executing the internal_parts_iters."},{"line_number":1172,"context_line":"        if self.stashed_iter:"},{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        self.pool.close()"}],"source_content_type":"text/x-python","patch_set":15,"id":"441a7534_0f4ab59f","line":1171,"updated":"2023-04-28 14:57:21.000000000","message":"I think maybe the comment makes it sound like closing stashed_iter will close self.pool, and it doesn\u0027t - which is why we close it explictly.  I think the comment could be made more clear.\n\n\"close down the stashed iter AND shutdown the context pool so that...\"","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":1168,"context_line":"    def close(self):"},{"line_number":1169,"context_line":"        # close down the stashed iter first so the ContextPool can"},{"line_number":1170,"context_line":"        # cleanup the frag queue feeding coroutines that may be currently"},{"line_number":1171,"context_line":"        # executing the internal_parts_iters."},{"line_number":1172,"context_line":"        if self.stashed_iter:"},{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        self.pool.close()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1298bf5d_87643b4f","line":1171,"in_reply_to":"441a7534_0f4ab59f","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":1171,"context_line":"        # executing the internal_parts_iters."},{"line_number":1172,"context_line":"        if self.stashed_iter:"},{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        self.pool.close()"},{"line_number":1175,"context_line":"        for it in self.internal_parts_iters:"},{"line_number":1176,"context_line":"            close_if_possible(it)"},{"line_number":1177,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dfbcd870_fcc4c5d7","line":1174,"updated":"2023-04-28 14:57:21.000000000","message":"this fix makes sense to me.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":1171,"context_line":"        # executing the internal_parts_iters."},{"line_number":1172,"context_line":"        if self.stashed_iter:"},{"line_number":1173,"context_line":"            close_if_possible(self.stashed_iter)"},{"line_number":1174,"context_line":"        self.pool.close()"},{"line_number":1175,"context_line":"        for it in self.internal_parts_iters:"},{"line_number":1176,"context_line":"            close_if_possible(it)"},{"line_number":1177,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"307f7c43_1d676d67","line":1174,"in_reply_to":"dfbcd870_fcc4c5d7","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":1534,"context_line":"                pool.spawn(put_fragments_in_queue, frag_iter, queue,"},{"line_number":1535,"context_line":"                           self.logger.thread_locals)"},{"line_number":1536,"context_line":""},{"line_number":1537,"context_line":"            self.pool \u003d pool"},{"line_number":1538,"context_line":""},{"line_number":1539,"context_line":"            while True:"},{"line_number":1540,"context_line":"                fragments \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"be32a21f_92a774a0","line":1537,"updated":"2023-04-28 14:57:21.000000000","message":"like with do with the stashed_iter and internal parts attribute, it might make sense to initialzie pool (to None) in __init__ so that it\u0027s more obviously part of this objects \"public\" interface\n\nEven if we call it self._pool it\u0027s still easier to see/maintain the objects state if we declare attributes explicitly even if populate them lazily.\n\nEven more obvoius and explicit, we could go ahead and *create* the ContextPool of len(internal_parts_iter) in __init__ and re-use it here and and in close.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":1534,"context_line":"                pool.spawn(put_fragments_in_queue, frag_iter, queue,"},{"line_number":1535,"context_line":"                           self.logger.thread_locals)"},{"line_number":1536,"context_line":""},{"line_number":1537,"context_line":"            self.pool \u003d pool"},{"line_number":1538,"context_line":""},{"line_number":1539,"context_line":"            while True:"},{"line_number":1540,"context_line":"                fragments \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"e6cef32e_690409fa","line":1537,"in_reply_to":"be32a21f_92a774a0","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":true,"context_lines":[{"line_number":1534,"context_line":"                pool.spawn(put_fragments_in_queue, frag_iter, queue,"},{"line_number":1535,"context_line":"                           self.logger.thread_locals)"},{"line_number":1536,"context_line":""},{"line_number":1537,"context_line":"            self.pool \u003d pool"},{"line_number":1538,"context_line":""},{"line_number":1539,"context_line":"            while True:"},{"line_number":1540,"context_line":"                fragments \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"d16a9baf_7cf58bbd","line":1537,"in_reply_to":"be32a21f_92a774a0","updated":"2023-05-01 18:08:39.000000000","message":"I think if you\u0027re going to lift the create into __init__ you should with self.pool as pool here, and then also you don\u0027t need self.pool \u003d pool","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":true,"context_lines":[{"line_number":2817,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2818,"context_line":"                self.logger.warning("},{"line_number":2819,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2820,"context_line":"            pass"},{"line_number":2821,"context_line":"        except Exception:"},{"line_number":2822,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2823,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":19,"id":"eb422acf_fc9021f1","line":2820,"updated":"2023-05-02 20:16:36.000000000","message":"Here too -- what actually changes as a result of this?","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2817,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2818,"context_line":"                self.logger.warning("},{"line_number":2819,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2820,"context_line":"            pass"},{"line_number":2821,"context_line":"        except Exception:"},{"line_number":2822,"context_line":"            self.logger.exception(\u0027Trying to send to client\u0027)"},{"line_number":2823,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":19,"id":"4110e24c_2a97e94c","line":2820,"in_reply_to":"eb422acf_fc9021f1","updated":"2023-06-13 18:26:21.000000000","message":"Nothing changes really i can revert the code back to the original, was merely trying to validate https://peps.python.org/pep-0342/","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"}],"test/probe/test_object_failures.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":276,"context_line":"            print(\u0027status\u0027, resp.status)"},{"line_number":277,"context_line":"            for i in range(3):"},{"line_number":278,"context_line":"                resp.read(64 * 2 ** 10)"},{"line_number":279,"context_line":"                time.sleep(options)"},{"line_number":280,"context_line":"            # We\u0027re only going to read the first 3 64KiB chunks and disconnect."},{"line_number":281,"context_line":"            conn.close()"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ccc6f076_573fbd7d","line":279,"updated":"2023-04-14 22:35:13.000000000","message":"this really caught my eye!  we don\u0027t much like sleeping in tests!","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            print(\u0027status\u0027, resp.status)"},{"line_number":277,"context_line":"            for i in range(3):"},{"line_number":278,"context_line":"                resp.read(64 * 2 ** 10)"},{"line_number":279,"context_line":"                time.sleep(options)"},{"line_number":280,"context_line":"            # We\u0027re only going to read the first 3 64KiB chunks and disconnect."},{"line_number":281,"context_line":"            conn.close()"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"f79ce140_068d7a56","line":279,"in_reply_to":"ccc6f076_573fbd7d","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            print(\u0027status\u0027, resp.status)"},{"line_number":277,"context_line":"            for i in range(3):"},{"line_number":278,"context_line":"                resp.read(64 * 2 ** 10)"},{"line_number":279,"context_line":"                time.sleep(options)"},{"line_number":280,"context_line":"            # We\u0027re only going to read the first 3 64KiB chunks and disconnect."},{"line_number":281,"context_line":"            conn.close()"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"d4e4d531_b9d24308","line":279,"in_reply_to":"ccc6f076_573fbd7d","updated":"2023-05-01 18:08:39.000000000","message":"Done","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ba12901d7f8c02bdf3d9c4d0ef9fe06f8fbd35d","unresolved":true,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name, 0.0)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"c4c4189a_a44e9d09","line":296,"updated":"2023-04-14 22:35:13.000000000","message":"since this function is defined inline I don\u0027t see the value of parametirzing this value to noop sleep.  Even if you used time.sleep() during testing/development/debugging - you could just insert it at line 279 and delete it when you\u0027re done to keep the test leaner and more obvious?","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name, 0.0)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"cf9d3018_c8b07593","line":296,"in_reply_to":"c4c4189a_a44e9d09","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name, 0.0)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f777126_612dc7de","line":296,"in_reply_to":"c4c4189a_a44e9d09","updated":"2023-05-01 18:08:39.000000000","message":"Done","commit_id":"ad3ab7827f4fe98ea0771246f3cc07dc09e245f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1410275d_0978f248","line":296,"updated":"2023-04-28 14:57:21.000000000","message":"there\u0027s no asserts in this test, I\u0027m not sure it\u0027s bringing much value as is.\n\nI could imagine a new probe.common interface that hunts for tracebacks in sysstems\u0027 logs tho!  I think maybe in the gate environment the path would be different than on a vsaio (/var/log/syslog) tho maybe...","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"a9007aa5_8e217af3","line":296,"in_reply_to":"1410275d_0978f248","updated":"2023-05-01 18:08:39.000000000","message":"Done","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c1ec96e41a07f1a4c991ebcb34ae94a303e40e92","unresolved":true,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"d0e8d0aa_6b6c2f2d","line":296,"in_reply_to":"a9007aa5_8e217af3","updated":"2023-05-17 21:28:59.000000000","message":"how was this resolved? there\u0027s no assertion","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c25f0fd07378087b30d5574c12c201936682cf42","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        client.put_object(self.url, self.token, container_name,"},{"line_number":294,"context_line":"                          object_name, contents\u003dcontents)"},{"line_number":295,"context_line":"        get_object_disconnect(self.url, self.token, container_name,"},{"line_number":296,"context_line":"                              object_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"0d59e011_a0eb0955","line":296,"in_reply_to":"d0e8d0aa_6b6c2f2d","updated":"2023-05-17 21:30:52.000000000","message":"sorry, ignore, I was on an old patchset","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":true,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def __init__(self, methodName: str \u003d ...):"},{"line_number":209,"context_line":"        super().__init__(methodName)"},{"line_number":210,"context_line":"        self.logger \u003d capture_logger()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def test_ec_missing_all_durable_fragments(self):"},{"line_number":213,"context_line":"        # This tests helps assert the behavior that when"}],"source_content_type":"text/x-python","patch_set":17,"id":"1e2ba09c_1120af8f","line":210,"updated":"2023-05-01 18:08:39.000000000","message":"i normally see \"debug_logger\" as the main entrypoint, but since this isn\u0027t being used you should pull it out.","commit_id":"839c5daa74478f4307d5c5829b124317d19d5dd8"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def __init__(self, methodName: str \u003d ...):"},{"line_number":209,"context_line":"        super().__init__(methodName)"},{"line_number":210,"context_line":"        self.logger \u003d capture_logger()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def test_ec_missing_all_durable_fragments(self):"},{"line_number":213,"context_line":"        # This tests helps assert the behavior that when"}],"source_content_type":"text/x-python","patch_set":17,"id":"9dbf88e1_7544ad6a","line":210,"in_reply_to":"1e2ba09c_1120af8f","updated":"2023-06-13 18:26:21.000000000","message":"my bad, i missed this while cleaning up.","commit_id":"839c5daa74478f4307d5c5829b124317d19d5dd8"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab11bb2903aa2d78e6c9d42c4591a049239f0d2b","unresolved":true,"context_lines":[{"line_number":2455,"context_line":"            stats \u003d self.app.error_limiter.stats.get(node_key) or {}"},{"line_number":2456,"context_line":"            if stats:"},{"line_number":2457,"context_line":"                actual[self.app.error_limiter.node_key(n)] \u003d stats"},{"line_number":2458,"context_line":"        self.assertEqual(actual, expected_error_limiting)"},{"line_number":2459,"context_line":""},{"line_number":2460,"context_line":"    def test_GET_not_found_when_404_newer(self):"},{"line_number":2461,"context_line":"        # if proxy receives a 404, it keeps waiting for other connections until"}],"source_content_type":"text/x-python","patch_set":15,"id":"e6df6dc8_a5752956","line":2458,"updated":"2023-04-28 14:57:21.000000000","message":"I think maybe we\u0027d already have some log capture in this test; shouldn\u0027t be too much trouble to check self.app.logger\n\nAlternatively this existing test seems to only tangentially exercises the ValueError from the generators paused in the greenthreads if the object is big enought; it might make sense to have an explicit test for \"many chunk ec disconnect shutdown\" more focused on the tracebacks we\u0027re trying to purge in the logs w/o the unrelated asserts around node error limiting.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2455,"context_line":"            stats \u003d self.app.error_limiter.stats.get(node_key) or {}"},{"line_number":2456,"context_line":"            if stats:"},{"line_number":2457,"context_line":"                actual[self.app.error_limiter.node_key(n)] \u003d stats"},{"line_number":2458,"context_line":"        self.assertEqual(actual, expected_error_limiting)"},{"line_number":2459,"context_line":""},{"line_number":2460,"context_line":"    def test_GET_not_found_when_404_newer(self):"},{"line_number":2461,"context_line":"        # if proxy receives a 404, it keeps waiting for other connections until"}],"source_content_type":"text/x-python","patch_set":15,"id":"d53922ee_e9aa4a2c","line":2458,"in_reply_to":"e6df6dc8_a5752956","updated":"2023-06-13 18:26:21.000000000","message":"Assert statements added for both warning and error level logs","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1848d518274cce33985f62e61acfef80488289a8","unresolved":true,"context_lines":[{"line_number":2455,"context_line":"            stats \u003d self.app.error_limiter.stats.get(node_key) or {}"},{"line_number":2456,"context_line":"            if stats:"},{"line_number":2457,"context_line":"                actual[self.app.error_limiter.node_key(n)] \u003d stats"},{"line_number":2458,"context_line":"        self.assertEqual(actual, expected_error_limiting)"},{"line_number":2459,"context_line":""},{"line_number":2460,"context_line":"    def test_GET_not_found_when_404_newer(self):"},{"line_number":2461,"context_line":"        # if proxy receives a 404, it keeps waiting for other connections until"}],"source_content_type":"text/x-python","patch_set":15,"id":"1771b97d_17c12136","line":2458,"in_reply_to":"e6df6dc8_a5752956","updated":"2023-05-01 18:08:39.000000000","message":"it would still be nice to see some asserts on the logger here.","commit_id":"86152d473d9e15c1d0931c8a868afb051c9ad97c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":true,"context_lines":[{"line_number":2411,"context_line":"    def test_GET_disconnect(self):"},{"line_number":2412,"context_line":"        self.app.recoverable_node_timeout \u003d 0.01"},{"line_number":2413,"context_line":"        self.app.client_timeout \u003d 0.1"},{"line_number":2414,"context_line":"        self.app.object_chunk_size \u003d 10"},{"line_number":2415,"context_line":"        segment_size \u003d self.policy.ec_segment_size"},{"line_number":2416,"context_line":"        test_data \u003d (b\u0027test\u0027 * segment_size)[:-743]"},{"line_number":2417,"context_line":"        etag \u003d md5(test_data, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":19,"id":"8c444783_51d83a62","line":2414,"updated":"2023-05-02 20:16:36.000000000","message":"This is the crux of the test fix, yeah? Before, we used the default 64k chunk size, so the entire ~16k test_data would come in the first chunk, and the generator would have cleanly exited by the time we `reiterate()` the response.\n\nMight warrant a comment about why we\u0027re twiddling this.","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"    def test_GET_disconnect(self):"},{"line_number":2412,"context_line":"        self.app.recoverable_node_timeout \u003d 0.01"},{"line_number":2413,"context_line":"        self.app.client_timeout \u003d 0.1"},{"line_number":2414,"context_line":"        self.app.object_chunk_size \u003d 10"},{"line_number":2415,"context_line":"        segment_size \u003d self.policy.ec_segment_size"},{"line_number":2416,"context_line":"        test_data \u003d (b\u0027test\u0027 * segment_size)[:-743]"},{"line_number":2417,"context_line":"        etag \u003d md5(test_data, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":19,"id":"0d7331f1_8e27280e","line":2414,"in_reply_to":"8c444783_51d83a62","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a963834c09f2245b6828fabb5a1c77c851700b58","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"    def test_GET_disconnect(self):"},{"line_number":2412,"context_line":"        self.app.recoverable_node_timeout \u003d 0.01"},{"line_number":2413,"context_line":"        self.app.client_timeout \u003d 0.1"},{"line_number":2414,"context_line":"        self.app.object_chunk_size \u003d 10"},{"line_number":2415,"context_line":"        segment_size \u003d self.policy.ec_segment_size"},{"line_number":2416,"context_line":"        test_data \u003d (b\u0027test\u0027 * segment_size)[:-743]"},{"line_number":2417,"context_line":"        etag \u003d md5(test_data, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":19,"id":"1596cabb_9f7ee4ec","line":2414,"in_reply_to":"8c444783_51d83a62","updated":"2023-05-03 20:56:52.000000000","message":"Done","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":true,"context_lines":[{"line_number":2434,"context_line":"                              headers\u003dheaders) as log:"},{"line_number":2435,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2436,"context_line":"            self.assertEqual(resp.status_int, 200)"},{"line_number":2437,"context_line":"            next(resp.app_iter)"},{"line_number":2438,"context_line":"            resp.app_iter.close()"},{"line_number":2439,"context_line":"        self.assertEqual(len(log.requests),"},{"line_number":2440,"context_line":"                         self.policy.ec_ndata + num_slow)"}],"source_content_type":"text/x-python","patch_set":19,"id":"8300562e_c1e10b96","line":2437,"updated":"2023-05-02 20:16:36.000000000","message":"Tests still pass without this; do we need it?","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a963834c09f2245b6828fabb5a1c77c851700b58","unresolved":false,"context_lines":[{"line_number":2434,"context_line":"                              headers\u003dheaders) as log:"},{"line_number":2435,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2436,"context_line":"            self.assertEqual(resp.status_int, 200)"},{"line_number":2437,"context_line":"            next(resp.app_iter)"},{"line_number":2438,"context_line":"            resp.app_iter.close()"},{"line_number":2439,"context_line":"        self.assertEqual(len(log.requests),"},{"line_number":2440,"context_line":"                         self.policy.ec_ndata + num_slow)"}],"source_content_type":"text/x-python","patch_set":19,"id":"cb8d3077_f51c1c7e","line":2437,"in_reply_to":"8300562e_c1e10b96","updated":"2023-05-03 20:56:52.000000000","message":"Done","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2434,"context_line":"                              headers\u003dheaders) as log:"},{"line_number":2435,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2436,"context_line":"            self.assertEqual(resp.status_int, 200)"},{"line_number":2437,"context_line":"            next(resp.app_iter)"},{"line_number":2438,"context_line":"            resp.app_iter.close()"},{"line_number":2439,"context_line":"        self.assertEqual(len(log.requests),"},{"line_number":2440,"context_line":"                         self.policy.ec_ndata + num_slow)"}],"source_content_type":"text/x-python","patch_set":19,"id":"86553693_fd56213b","line":2437,"in_reply_to":"8300562e_c1e10b96","updated":"2023-06-13 18:26:21.000000000","message":"Removed","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c23a3cb3e7ad946e72dcb745c048a4737c235ade","unresolved":true,"context_lines":[{"line_number":2461,"context_line":"        self.assertEqual("},{"line_number":2462,"context_line":"            self.app.logger.get_lines_for_level(\u0027warning\u0027),"},{"line_number":2463,"context_line":"            expected)"},{"line_number":2464,"context_line":"        self.assertTrue(\"Trying to read EC fragment\","},{"line_number":2465,"context_line":"                        self.app.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":2466,"context_line":"        self.assertEqual("},{"line_number":2467,"context_line":"            len(self.logger.logger.records[\u0027ERROR\u0027]), 4,"}],"source_content_type":"text/x-python","patch_set":19,"id":"04289833_8f418e3d","line":2464,"range":{"start_line":2464,"start_character":13,"end_line":2464,"end_character":23},"updated":"2023-05-02 20:16:36.000000000","message":"I don\u0027t think this is the assertion you want to make -- currently, it trivially passes, since any non-empty string is truthy.","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e07e9b7a69bdbf6c6da0dcba1ad1c28132543b35","unresolved":false,"context_lines":[{"line_number":2461,"context_line":"        self.assertEqual("},{"line_number":2462,"context_line":"            self.app.logger.get_lines_for_level(\u0027warning\u0027),"},{"line_number":2463,"context_line":"            expected)"},{"line_number":2464,"context_line":"        self.assertTrue(\"Trying to read EC fragment\","},{"line_number":2465,"context_line":"                        self.app.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":2466,"context_line":"        self.assertEqual("},{"line_number":2467,"context_line":"            len(self.logger.logger.records[\u0027ERROR\u0027]), 4,"}],"source_content_type":"text/x-python","patch_set":19,"id":"125ce6ba_c9d63b66","line":2464,"range":{"start_line":2464,"start_character":13,"end_line":2464,"end_character":23},"in_reply_to":"04289833_8f418e3d","updated":"2023-06-13 18:26:21.000000000","message":"Ack","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a963834c09f2245b6828fabb5a1c77c851700b58","unresolved":false,"context_lines":[{"line_number":2461,"context_line":"        self.assertEqual("},{"line_number":2462,"context_line":"            self.app.logger.get_lines_for_level(\u0027warning\u0027),"},{"line_number":2463,"context_line":"            expected)"},{"line_number":2464,"context_line":"        self.assertTrue(\"Trying to read EC fragment\","},{"line_number":2465,"context_line":"                        self.app.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":2466,"context_line":"        self.assertEqual("},{"line_number":2467,"context_line":"            len(self.logger.logger.records[\u0027ERROR\u0027]), 4,"}],"source_content_type":"text/x-python","patch_set":19,"id":"847ca1c6_50c13284","line":2464,"range":{"start_line":2464,"start_character":13,"end_line":2464,"end_character":23},"in_reply_to":"04289833_8f418e3d","updated":"2023-05-03 20:56:52.000000000","message":"Done","commit_id":"5ca09e7eaf998833fe51487c82370503b0ac7e30"}]}
