)]}'
{"swiftclient/service.py":[{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"0611abab4ae448dddfd2c606e4666002cbae2824","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        return res"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def _post_object_job(self, conn, container, obj, headers, result,"},{"line_number":757,"context_line":"                         results_queue\u003dNone):"},{"line_number":758,"context_line":"        res \u003d {"},{"line_number":759,"context_line":"            \u0027success\u0027: True,"},{"line_number":760,"context_line":"            \u0027action\u0027: \u0027post_object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_75da3b19","line":757,"range":{"start_line":757,"start_character":25,"end_line":757,"end_character":43},"updated":"2016-12-18 22:59:44.000000000","message":"This name is a bit misleading, it\u0027s a list, not a queue.","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"0611abab4ae448dddfd2c606e4666002cbae2824","unresolved":false,"context_lines":[{"line_number":776,"context_line":"                \u0027error_timestamp\u0027: err_time"},{"line_number":777,"context_line":"            })"},{"line_number":778,"context_line":"        else:"},{"line_number":779,"context_line":"            segment_headers \u003d {"},{"line_number":780,"context_line":"                header: value"},{"line_number":781,"context_line":"                for header, value in headers.items() if header.lower() in ("},{"line_number":782,"context_line":"                    \u0027x-delete-at\u0027, \u0027x-delete-after\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_f5fc8b74","line":779,"range":{"start_line":779,"start_character":12,"end_line":779,"end_character":27},"updated":"2016-12-18 22:59:44.000000000","message":"Is this name not a bit presumptuous? Surely there\u0027s no guarantee at this point that we\u0027re now looking at a segment?\n\nSurely we only know we have a segment after we\u0027ve grabbed the chunk_data and found it not to be empty?","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"718a82addb32ff2aa26edc30ff3c68a6e9b12d8c","unresolved":false,"context_lines":[{"line_number":776,"context_line":"                \u0027error_timestamp\u0027: err_time"},{"line_number":777,"context_line":"            })"},{"line_number":778,"context_line":"        else:"},{"line_number":779,"context_line":"            segment_headers \u003d {"},{"line_number":780,"context_line":"                header: value"},{"line_number":781,"context_line":"                for header, value in headers.items() if header.lower() in ("},{"line_number":782,"context_line":"                    \u0027x-delete-at\u0027, \u0027x-delete-after\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_93b781f4","line":779,"range":{"start_line":779,"start_character":12,"end_line":779,"end_character":27},"in_reply_to":"1a6eadb0_f5fc8b74","updated":"2016-12-21 00:24:26.000000000","message":"I was thinking of it more as \"these are the headers (if any) that apply to segments.\" If there aren\u0027t any, then we can skip trying to ... shit. Nope. Gotta do the HEAD no matter what, don\u0027t we?","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"0611abab4ae448dddfd2c606e4666002cbae2824","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                for header, value in headers.items() if header.lower() in ("},{"line_number":782,"context_line":"                    \u0027x-delete-at\u0027, \u0027x-delete-after\u0027,"},{"line_number":783,"context_line":"                    \u0027x-remove-delete-at\u0027, \u0027x-remove-delete-after\u0027)}"},{"line_number":784,"context_line":"            if segment_headers and results_queue:"},{"line_number":785,"context_line":"                new_headers \u003d conn.head_object(container, obj)"},{"line_number":786,"context_line":"                if \u0027x-delete-at\u0027 in new_headers:"},{"line_number":787,"context_line":"                    # we have a more reliable delete-at"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_158747d8","line":784,"range":{"start_line":784,"start_character":35,"end_line":784,"end_character":48},"updated":"2016-12-18 22:59:44.000000000","message":"Why do we only attempt to post to segments if we have an existing list of futures that\u0027s non-empty? Is this important?","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"718a82addb32ff2aa26edc30ff3c68a6e9b12d8c","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                for header, value in headers.items() if header.lower() in ("},{"line_number":782,"context_line":"                    \u0027x-delete-at\u0027, \u0027x-delete-after\u0027,"},{"line_number":783,"context_line":"                    \u0027x-remove-delete-at\u0027, \u0027x-remove-delete-after\u0027)}"},{"line_number":784,"context_line":"            if segment_headers and results_queue:"},{"line_number":785,"context_line":"                new_headers \u003d conn.head_object(container, obj)"},{"line_number":786,"context_line":"                if \u0027x-delete-at\u0027 in new_headers:"},{"line_number":787,"context_line":"                    # we have a more reliable delete-at"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_b37c7d21","line":784,"range":{"start_line":784,"start_character":35,"end_line":784,"end_character":48},"in_reply_to":"1a6eadb0_158747d8","updated":"2016-12-21 00:24:26.000000000","message":"I meant\n\n and results_queue is not None\n\nSince swiftclient only ever creates SLOs that are one level deep, we shouldn\u0027t need to recurse for segments. To that end, we don\u0027t pass results_queue on L801.","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"0611abab4ae448dddfd2c606e4666002cbae2824","unresolved":false,"context_lines":[{"line_number":796,"context_line":"                    should_recurse\u003dis_swiftclient_seg)"},{"line_number":797,"context_line":"                for segment in chunk_data:"},{"line_number":798,"context_line":"                    if is_swiftclient_seg(segment):"},{"line_number":799,"context_line":"                        results_queue.append(self._post_object_job("},{"line_number":800,"context_line":"                            conn, segment[\u0027container\u0027], segment[\u0027object\u0027],"},{"line_number":801,"context_line":"                            segment_headers, {}))"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        return res"},{"line_number":804,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_754ddbc3","line":801,"range":{"start_line":799,"start_character":24,"end_line":801,"end_character":49},"updated":"2016-12-18 22:59:44.000000000","message":"This seems to be placing results onto a list that was being used as a source for a ResultsIterator (that expects futures, not results).","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"718a82addb32ff2aa26edc30ff3c68a6e9b12d8c","unresolved":false,"context_lines":[{"line_number":796,"context_line":"                    should_recurse\u003dis_swiftclient_seg)"},{"line_number":797,"context_line":"                for segment in chunk_data:"},{"line_number":798,"context_line":"                    if is_swiftclient_seg(segment):"},{"line_number":799,"context_line":"                        results_queue.append(self._post_object_job("},{"line_number":800,"context_line":"                            conn, segment[\u0027container\u0027], segment[\u0027object\u0027],"},{"line_number":801,"context_line":"                            segment_headers, {}))"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        return res"},{"line_number":804,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_b3a39d9d","line":801,"range":{"start_line":799,"start_character":24,"end_line":801,"end_character":49},"in_reply_to":"1a6eadb0_754ddbc3","updated":"2016-12-21 00:24:26.000000000","message":"Yeah, eight-months-ago me was an idiot. I clearly need to think more about how to get this to do what I *actually* want it to do.","commit_id":"fbced480165a173632cc3905bb816eca67f1201e"}]}
