)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c1fc3e8c_12ab282d","updated":"2023-04-25 21:01:51.000000000","message":"this seems helpful to me","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f55b6a71fcfcc837952b2647f3fafa101ee5f86a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"20f40af5_87191dec","updated":"2023-04-26 23:56:17.000000000","message":"The sooner we can have that follow-up to get rid of the `or len(buf)` and associated test, the better.","commit_id":"0f95870c51c696b076b3c9b266e1d7cde52a30d4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5ed2a5e90f3c8534b5c530248d815af4970c2b54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2bd05ba0_406ec246","updated":"2023-04-26 15:22:35.000000000","message":"recheck\n\nE           AssertionError: Ran reconstructor config #3 to repair u\u0027sdb7\u0027 but found 404 on primary: [u\u0027sdb7\u0027]","commit_id":"0f95870c51c696b076b3c9b266e1d7cde52a30d4"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":true,"context_lines":[{"line_number":2661,"context_line":""},{"line_number":2662,"context_line":"    def iter_bytes_from_response_part(self, part_file, nbytes):"},{"line_number":2663,"context_line":"        client_chunk_size \u003d self.client_chunk_size"},{"line_number":2664,"context_line":"        node_timeout \u003d self.app.recoverable_node_timeout"},{"line_number":2665,"context_line":"        nchunks \u003d 0"},{"line_number":2666,"context_line":"        buf \u003d b\u0027\u0027"},{"line_number":2667,"context_line":"        part_file \u003d ByteCountEnforcer(part_file, nbytes)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bbd07e78_0bf677e8","side":"PARENT","line":2664,"updated":"2023-04-25 21:01:51.000000000","message":"eek.  maybe node_timeout \u003d is even more incidious, I feel like having a local over client_chunk_size sort of at least drew attention to it.","commit_id":"9f7527973997baa5e685ea57d1563232234bc872"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":true,"context_lines":[{"line_number":2725,"context_line":"                        self.bytes_used_from_backend +\u003d len(buf)"},{"line_number":2726,"context_line":"                        buf \u003d b\u0027\u0027"},{"line_number":2727,"context_line":""},{"line_number":2728,"context_line":"                client_chunk_size \u003d self.client_chunk_size or len(buf)"},{"line_number":2729,"context_line":"                while buf and (len(buf) \u003e\u003d client_chunk_size or not chunk):"},{"line_number":2730,"context_line":"                    client_chunk \u003d buf[:client_chunk_size]"},{"line_number":2731,"context_line":"                    buf \u003d buf[client_chunk_size:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5d8a91d6_9dbcb4c5","line":2728,"updated":"2023-04-25 21:01:51.000000000","message":"why *or* len(buf)... what do we think client_chunk_size even means in the context of an ECFragGetter if not the policies\u0027 fragment size?","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f55b6a71fcfcc837952b2647f3fafa101ee5f86a","unresolved":true,"context_lines":[{"line_number":2725,"context_line":"                        self.bytes_used_from_backend +\u003d len(buf)"},{"line_number":2726,"context_line":"                        buf \u003d b\u0027\u0027"},{"line_number":2727,"context_line":""},{"line_number":2728,"context_line":"                client_chunk_size \u003d self.client_chunk_size or len(buf)"},{"line_number":2729,"context_line":"                while buf and (len(buf) \u003e\u003d client_chunk_size or not chunk):"},{"line_number":2730,"context_line":"                    client_chunk \u003d buf[:client_chunk_size]"},{"line_number":2731,"context_line":"                    buf \u003d buf[client_chunk_size:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"f2f6b535_4cadf8d1","line":2728,"in_reply_to":"5d8a91d6_9dbcb4c5","updated":"2023-04-26 23:56:17.000000000","message":"Seconded -- `self.client_chunk_size` should always be set and \u003e0, no?","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":true,"context_lines":[{"line_number":2733,"context_line":"                                         self.app.client_timeout,"},{"line_number":2734,"context_line":"                                         ChunkWriteTimeout):"},{"line_number":2735,"context_line":"                        self.bytes_used_from_backend +\u003d len(client_chunk)"},{"line_number":2736,"context_line":"                        yield client_chunk"},{"line_number":2737,"context_line":""},{"line_number":2738,"context_line":"                if not chunk:"},{"line_number":2739,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"de497c4b_82744c51","line":2736,"updated":"2023-04-25 21:01:51.000000000","message":"I was blow away that this is equivilent; it\u0027s not obvious to me.  But I can kinda see how all three with WatchdogTimeout branches were doing about the same thing; so kudos.","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f55b6a71fcfcc837952b2647f3fafa101ee5f86a","unresolved":true,"context_lines":[{"line_number":2733,"context_line":"                                         self.app.client_timeout,"},{"line_number":2734,"context_line":"                                         ChunkWriteTimeout):"},{"line_number":2735,"context_line":"                        self.bytes_used_from_backend +\u003d len(client_chunk)"},{"line_number":2736,"context_line":"                        yield client_chunk"},{"line_number":2737,"context_line":""},{"line_number":2738,"context_line":"                if not chunk:"},{"line_number":2739,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"cf2849b2_b120464e","line":2736,"in_reply_to":"de497c4b_82744c51","updated":"2023-04-26 23:56:17.000000000","message":"It\u0027s not quite -- but this seems better. Now we consistently yield out `self.client_chunk_size` bytes, except for the last which may be smaller. Previously, that last one could be bigger, could be smaller, *who knows*.","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":true,"context_lines":[{"line_number":2736,"context_line":"                        yield client_chunk"},{"line_number":2737,"context_line":""},{"line_number":2738,"context_line":"                if not chunk:"},{"line_number":2739,"context_line":"                    break"},{"line_number":2740,"context_line":""},{"line_number":2741,"context_line":"                # This is for fairness; if the network is outpacing"},{"line_number":2742,"context_line":"                # the CPU, we\u0027ll always be able to read and write"}],"source_content_type":"text/x-python","patch_set":1,"id":"7de31651_8650b3f3","line":2739,"updated":"2023-04-25 21:01:51.000000000","message":"yup, gotta do this after to make the main loop drain the buf.","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f55b6a71fcfcc837952b2647f3fafa101ee5f86a","unresolved":true,"context_lines":[{"line_number":2746,"context_line":"                            self.bytes_used_from_backend +\u003d \\"},{"line_number":2747,"context_line":"                                len(client_chunk)"},{"line_number":2748,"context_line":"                            yield client_chunk"},{"line_number":2749,"context_line":"                else:"},{"line_number":2750,"context_line":"                    with WatchdogTimeout(self.app.watchdog,"},{"line_number":2751,"context_line":"                                         self.app.client_timeout,"},{"line_number":2752,"context_line":"                                         ChunkWriteTimeout):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4cedcdf1_c357aefc","side":"PARENT","line":2749,"updated":"2023-04-26 23:56:17.000000000","message":"Were we ever hitting this branch? It\u0027s not clear to me how we *would*...","commit_id":"9f7527973997baa5e685ea57d1563232234bc872"}],"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":"6ed6d249f6707d32399da60f9aa8e025a869c4fb","unresolved":true,"context_lines":[{"line_number":6717,"context_line":""},{"line_number":6718,"context_line":"    def test_iter_bytes_from_response_part_null_chunk_size(self):"},{"line_number":6719,"context_line":"        # we don\u0027t expect a policy to have fragment_size None or zero but"},{"line_number":6720,"context_line":"        # verify that the getter is defensive"},{"line_number":6721,"context_line":"        self.getter.client_chunk_size \u003d None"},{"line_number":6722,"context_line":"        part \u003d FileLikeIter([b\u0027some\u0027, b\u0027thing\u0027, b\u0027\u0027])"},{"line_number":6723,"context_line":"        it \u003d self.getter.iter_bytes_from_response_part(part, nbytes\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"79f84d97_764b50eb","line":6720,"updated":"2023-04-25 21:01:51.000000000","message":"I\u0027ve mixed feelings here.  We should do a different refactor that just renames client_chunk to fragment_size and get rid of the whole \"if fragment_size is none\" nonsense.  If that\u0027s reasonable then this test hopefully gets deleted soon; which seems wasteful somehow.  But I guess we can\u0027t do everything at once; and deleting tests we don\u0027t need anymore shouldn\u0027t feel bad.","commit_id":"88eaa8083aecaaa0c3087f633a77cf250272dcba"}]}
