)]}'
{"swift/obj/updater.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d84d93f1082b82ff928e928b5dbd4fc7f7b46f9b","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"                location \u003d urlparse(location).path"},{"line_number":329,"context_line":"                try:"},{"line_number":330,"context_line":"                    shard_account, shard_cont, _junk \u003d split_path("},{"line_number":331,"context_line":"                        location, 2, 3, True)"},{"line_number":332,"context_line":"                except ValueError as err:"},{"line_number":333,"context_line":"                    # there has been an error so log it and return"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_78a2a64d","line":330,"range":{"start_line":330,"start_character":47,"end_line":330,"end_character":52},"updated":"2017-09-25 17:02:18.000000000","message":"I should go look at the redirect code again... do we actually expect that there might be more than two pieces?","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"283259627ed1d60c866481c8ad79538e8081e0ab","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"                location \u003d urlparse(location).path"},{"line_number":329,"context_line":"                try:"},{"line_number":330,"context_line":"                    shard_account, shard_cont, _junk \u003d split_path("},{"line_number":331,"context_line":"                        location, 2, 3, True)"},{"line_number":332,"context_line":"                except ValueError as err:"},{"line_number":333,"context_line":"                    # there has been an error so log it and return"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_3c99bb6d","line":330,"range":{"start_line":330,"start_character":47,"end_line":330,"end_character":52},"in_reply_to":"7f515b1d_78a2a64d","updated":"2017-09-25 20:07:46.000000000","message":"yes, Location header \u003d /a/c/o which I guess makes sense since we are redirecting a request to a /a/c/o path","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d84d93f1082b82ff928e928b5dbd4fc7f7b46f9b","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                except ValueError as err:"},{"line_number":333,"context_line":"                    # there has been an error so log it and return"},{"line_number":334,"context_line":"                    self.logger.error("},{"line_number":335,"context_line":"                        \u0027Container update failed for: %r; problem with \u0027"},{"line_number":336,"context_line":"                        \u0027redirect location: %s\u0027 % (obj, err))"},{"line_number":337,"context_line":"                    return False, node[\u0027id\u0027], redirect"},{"line_number":338,"context_line":"                redirect \u003d (\u0027%s/%s\u0027 % (shard_account, shard_cont),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_d8be3a64","line":335,"range":{"start_line":335,"start_character":52,"end_line":335,"end_character":53},"updated":"2017-09-25 17:02:18.000000000","message":"nit: Probably reads better without the colon.","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7bb43e1e769417a23c58b01a2a72710bb2959193","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                except ValueError as err:"},{"line_number":333,"context_line":"                    # there has been an error so log it and return"},{"line_number":334,"context_line":"                    self.logger.error("},{"line_number":335,"context_line":"                        \u0027Container update failed for: %r; problem with \u0027"},{"line_number":336,"context_line":"                        \u0027redirect location: %s\u0027 % (obj, err))"},{"line_number":337,"context_line":"                    return False, node[\u0027id\u0027], redirect"},{"line_number":338,"context_line":"                redirect \u003d (\u0027%s/%s\u0027 % (shard_account, shard_cont),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_d8f981c8","line":335,"range":{"start_line":335,"start_character":52,"end_line":335,"end_character":53},"in_reply_to":"7f515b1d_d8be3a64","updated":"2017-09-26 08:49:13.000000000","message":"Done","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d84d93f1082b82ff928e928b5dbd4fc7f7b46f9b","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"        # TODO: why are we using make_requests (plural) when we only use one"},{"line_number":1985,"context_line":"        # response?"},{"line_number":1986,"context_line":"        # TODO: should this be a subrequest? - as it is we\u0027re sending all the"},{"line_number":1987,"context_line":"        # original object request headers to the container server"},{"line_number":1988,"context_line":"        response \u003d self.make_requests(req, self.app.container_ring,"},{"line_number":1989,"context_line":"                                      part, \"GET\", path, headers_list,"},{"line_number":1990,"context_line":"                                      urlencode(params))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_ab87a661","line":1987,"updated":"2017-09-25 17:02:18.000000000","message":"Do we have any precedent for doing it not-as-a-subrequest? Closest thing like it I can think of is account auto-creation, which\n\n- uses self.make_subrequests and\n- has some long-lived problems as a result: https://bugs.launchpad.net/swift/+bug/1186024","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d037faf71037398a0f40251e158e92570284fdc4","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"        # TODO: why are we using make_requests (plural) when we only use one"},{"line_number":1985,"context_line":"        # response?"},{"line_number":1986,"context_line":"        # TODO: should this be a subrequest? - as it is we\u0027re sending all the"},{"line_number":1987,"context_line":"        # original object request headers to the container server"},{"line_number":1988,"context_line":"        response \u003d self.make_requests(req, self.app.container_ring,"},{"line_number":1989,"context_line":"                                      part, \"GET\", path, headers_list,"},{"line_number":1990,"context_line":"                                      urlencode(params))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_12581830","line":1987,"in_reply_to":"7f515b1d_ab87a661","updated":"2017-09-26 07:34:42.000000000","message":"The reason it\u0027s using make_requests is because make_requests acutally uses the proxies inbuild best_response quorom code, ie. make a bunch of requests only return the single best response. If we use sub requests we need to manage the all the responses and pick the best.","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d84d93f1082b82ff928e928b5dbd4fc7f7b46f9b","unresolved":false,"context_lines":[{"line_number":5326,"context_line":"        do_test(\u0027\u0027, \u0027a/c\u0027)"},{"line_number":5327,"context_line":"        do_test(None, \u0027a/c\u0027)"},{"line_number":5328,"context_line":"        # TODO: should these cases trigger a 400 response rather than"},{"line_number":5329,"context_line":"        # defaulting to root path?"},{"line_number":5330,"context_line":"        do_test(\u0027garbage\u0027, \u0027a/c\u0027)"},{"line_number":5331,"context_line":"        do_test(\u0027too/many/parts\u0027, \u0027a/c\u0027)"},{"line_number":5332,"context_line":"        do_test(\u0027/leading/slash\u0027, \u0027a/c\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_abbb26c2","line":5329,"updated":"2017-09-25 17:02:18.000000000","message":"*shrug*\n\nRoot path will always be authoritative, right? Seems like a reasonable fall-back.\n\nOn the other hand, it might be nice to have a 400 (or even some exception that gets us a traceback + 500) to help us root out any places that we\u0027re sending bad data, particularly while we\u0027re still developing.","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"283259627ed1d60c866481c8ad79538e8081e0ab","unresolved":false,"context_lines":[{"line_number":5326,"context_line":"        do_test(\u0027\u0027, \u0027a/c\u0027)"},{"line_number":5327,"context_line":"        do_test(None, \u0027a/c\u0027)"},{"line_number":5328,"context_line":"        # TODO: should these cases trigger a 400 response rather than"},{"line_number":5329,"context_line":"        # defaulting to root path?"},{"line_number":5330,"context_line":"        do_test(\u0027garbage\u0027, \u0027a/c\u0027)"},{"line_number":5331,"context_line":"        do_test(\u0027too/many/parts\u0027, \u0027a/c\u0027)"},{"line_number":5332,"context_line":"        do_test(\u0027/leading/slash\u0027, \u0027a/c\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_fcf9e37f","line":5329,"in_reply_to":"7f515b1d_abbb26c2","updated":"2017-09-25 20:07:46.000000000","message":"yeah, 400 sounds good, but.... AFAICT if the existing update headers are bad, on master, we just *ignore* that - so do we end up with dark data???\n\nwe ought to return 400 much earlier if we are going to - before writing data","commit_id":"5d4a8d5ae1353c49a7e086ece4228b071edf003d"}]}
