)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9022d66718a6faad4f1c1db9be42613404bddc0e","unresolved":false,"context_lines":[{"line_number":1628,"context_line":"                                 exception_handler):"},{"line_number":1629,"context_line":"        \"\"\"Call before sending the first chunk of request body\"\"\""},{"line_number":1630,"context_line":"        self.queue \u003d Queue(queue_depth)"},{"line_number":1631,"context_line":"        pool.spawn(self._send_file, write_timeout, exception_handler)"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"    def wait(self):"},{"line_number":1634,"context_line":"        if self.queue.unfinished_tasks:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_a14b69af","side":"PARENT","line":1631,"updated":"2019-11-06 05:29:18.000000000","message":"dropping this interface also removes the only caller of _send_file","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9022d66718a6faad4f1c1db9be42613404bddc0e","unresolved":false,"context_lines":[{"line_number":2625,"context_line":"                for putter in putters:"},{"line_number":2626,"context_line":"                    putter.spawn_sender_greenthread("},{"line_number":2627,"context_line":"                        pool, self.app.put_queue_depth, self.app.node_timeout,"},{"line_number":2628,"context_line":"                        self.app.exception_occurred)"},{"line_number":2629,"context_line":"                while True:"},{"line_number":2630,"context_line":"                    with ChunkReadTimeout(self.app.client_timeout):"},{"line_number":2631,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_014fddbe","side":"PARENT","line":2628,"updated":"2019-11-06 05:29:18.000000000","message":"so this is where we were passing in the timeout value and error tracking handler before they got moved to the constructor","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"26ec0a156f42f65b1340951b36b0e3e3d594cd51","unresolved":false,"context_lines":[{"line_number":2624,"context_line":""},{"line_number":2625,"context_line":"                for putter in putters:"},{"line_number":2626,"context_line":"                    putter.spawn_sender_greenthread("},{"line_number":2627,"context_line":"                        pool, self.app.put_queue_depth, self.app.node_timeout,"},{"line_number":2628,"context_line":"                        self.app.exception_occurred)"},{"line_number":2629,"context_line":"                while True:"},{"line_number":2630,"context_line":"                    with ChunkReadTimeout(self.app.client_timeout):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_e52722c7","side":"PARENT","line":2627,"range":{"start_line":2627,"start_character":39,"end_line":2627,"end_character":54},"updated":"2019-11-06 21:33:21.000000000","message":"We could get rid of this over in swift/proxy/server.py now, and remove it from the sample proxy-server.conf.","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"4e795bc68c6f9cdbbb02f80ee82c4bc91e847b9d","unresolved":false,"context_lines":[{"line_number":2624,"context_line":""},{"line_number":2625,"context_line":"                for putter in putters:"},{"line_number":2626,"context_line":"                    putter.spawn_sender_greenthread("},{"line_number":2627,"context_line":"                        pool, self.app.put_queue_depth, self.app.node_timeout,"},{"line_number":2628,"context_line":"                        self.app.exception_occurred)"},{"line_number":2629,"context_line":"                while True:"},{"line_number":2630,"context_line":"                    with ChunkReadTimeout(self.app.client_timeout):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_7d242661","side":"PARENT","line":2627,"range":{"start_line":2627,"start_character":39,"end_line":2627,"end_character":54},"in_reply_to":"3fa7e38b_e52722c7","updated":"2019-11-07 02:59:45.000000000","message":"Done","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"26ec0a156f42f65b1340951b36b0e3e3d594cd51","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"                    putter.end_of_object_data(footer_metadata\u003dtrail_md)"},{"line_number":2673,"context_line":""},{"line_number":2674,"context_line":"                for putter in putters:"},{"line_number":2675,"context_line":"                    putter.wait()"},{"line_number":2676,"context_line":""},{"line_number":2677,"context_line":"                # for storage policies requiring 2-phase commit (e.g."},{"line_number":2678,"context_line":"                # erasure coding), enforce \u003e\u003d \u0027quorum\u0027 number of"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_16739aea","side":"PARENT","line":2675,"updated":"2019-11-06 21:33:21.000000000","message":"So this wait seems maybe significant -- is there any extra value to making sure we\u0027ve sent all the chunks before waiting on the responses? I guess maybe no... I suppose we ought to wait for the other side either way? And it\u0027s on the operating system to get the send buffer out as it can.\n\nI just worry a little about something like a deadlock, where the proxy hasn\u0027t finished sending \u0027cause it\u0027s got some data waiting in buffer, but it\u0027s stuck waiting for a response from an object server that hasn\u0027t gotten all of its data... but it really shouldn\u0027t be our problem and you make a convincing case in the commit message.\n\nWorst case, I suppose there are Timeouts still just in case...","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"4e795bc68c6f9cdbbb02f80ee82c4bc91e847b9d","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"                    putter.end_of_object_data(footer_metadata\u003dtrail_md)"},{"line_number":2673,"context_line":""},{"line_number":2674,"context_line":"                for putter in putters:"},{"line_number":2675,"context_line":"                    putter.wait()"},{"line_number":2676,"context_line":""},{"line_number":2677,"context_line":"                # for storage policies requiring 2-phase commit (e.g."},{"line_number":2678,"context_line":"                # erasure coding), enforce \u003e\u003d \u0027quorum\u0027 number of"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_bdcffe89","side":"PARENT","line":2675,"in_reply_to":"3fa7e38b_16739aea","updated":"2019-11-07 02:59:45.000000000","message":"It was waiting for the queue to be empty, meaning that all chunks were moved to the socket buffer. Now that we directly  write to the socket, we get the same guarantee.\n\nAs it never was a problem, I assume it\u0027s not.","commit_id":"1c0661e9203373a92b4eec19571f40309263376a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"838d789cf8165fd4a6de871767be00c6fa8632ea","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"    :param chunked: boolean indicating if the request encoding is chunked"},{"line_number":1578,"context_line":"    \"\"\""},{"line_number":1579,"context_line":"    def __init__(self, conn, node, resp, path, connect_duration,"},{"line_number":1580,"context_line":"                 write_timeout, send_exception_handler, logger,"},{"line_number":1581,"context_line":"                 chunked\u003dFalse):"},{"line_number":1582,"context_line":"        # Note: you probably want to call Putter.connect() instead of"},{"line_number":1583,"context_line":"        # instantiating one of these directly."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_3d91ce54","line":1580,"updated":"2019-11-07 03:20:08.000000000","message":"NIT: doc string param update","commit_id":"b1a5e524879f8474b6cbce1ac8bdbab294aacfed"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"98ea5677be3ee725af69daf03764a65394357df1","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"    :param chunked: boolean indicating if the request encoding is chunked"},{"line_number":1578,"context_line":"    \"\"\""},{"line_number":1579,"context_line":"    def __init__(self, conn, node, resp, path, connect_duration,"},{"line_number":1580,"context_line":"                 write_timeout, send_exception_handler, logger,"},{"line_number":1581,"context_line":"                 chunked\u003dFalse):"},{"line_number":1582,"context_line":"        # Note: you probably want to call Putter.connect() instead of"},{"line_number":1583,"context_line":"        # instantiating one of these directly."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_80a739bd","line":1580,"in_reply_to":"3fa7e38b_3d91ce54","updated":"2019-11-07 05:45:07.000000000","message":"Done","commit_id":"b1a5e524879f8474b6cbce1ac8bdbab294aacfed"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"725fbdfb8a554c941725a2dd47ccb465d786ac5b","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"    :param path: the object path to send to the storage node"},{"line_number":1575,"context_line":"    :param connect_duration: time taken to initiate the HTTPConnection"},{"line_number":1576,"context_line":"    :param write_timeout: time limit to write a chunk to the connection socket"},{"line_number":1577,"context_line":"    :param write_timeout: callback called when an exception occured writing to"},{"line_number":1578,"context_line":"                          the connection socket"},{"line_number":1579,"context_line":"    :param logger: a Logger instance"},{"line_number":1580,"context_line":"    :param chunked: boolean indicating if the request encoding is chunked"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_3666cbf0","line":1577,"range":{"start_line":1577,"start_character":11,"end_line":1577,"end_character":24},"updated":"2019-11-07 08:39:54.000000000","message":"send_exception_handler","commit_id":"1dc8ddd198e7705694b312e1e2cdfbf2da2a45d8"}]}
