)]}'
{"swift/common/utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"688a7f2c9dcb30662264060b375afea7c92ed03c","unresolved":false,"context_lines":[{"line_number":5318,"context_line":"    location \u003d urlparse(headers[\u0027Location\u0027]).path"},{"line_number":5319,"context_line":"    account, container, _junk \u003d split_path(location, 2, 3, True)"},{"line_number":5320,"context_line":"    # TODO: should it be an error for the redirect"},{"line_number":5321,"context_line":"    # timestamp to be missing?"},{"line_number":5322,"context_line":"    return (\u0027%s/%s\u0027 % (account, container),"},{"line_number":5323,"context_line":"            Timestamp(headers.get(\u0027X-Backend-Redirect-Timestamp\u0027)))"},{"line_number":5324,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_dbbbf0c1","line":5321,"updated":"2018-05-17 23:17:01.000000000","message":"Well, it already *is*... so I guess the question is, do we want it to be\n\n KeyError: \u0027X-Backend-Redirect-Timestamp\u0027\n\nor\n\n TypeError: float() argument must be a string or a number\n\n? One of those seems a lot more obvious than the other...","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e98cd34524534eb6a1ecab021262a1d1fbe512f1","unresolved":false,"context_lines":[{"line_number":5318,"context_line":"    location \u003d urlparse(headers[\u0027Location\u0027]).path"},{"line_number":5319,"context_line":"    account, container, _junk \u003d split_path(location, 2, 3, True)"},{"line_number":5320,"context_line":"    # TODO: should it be an error for the redirect"},{"line_number":5321,"context_line":"    # timestamp to be missing?"},{"line_number":5322,"context_line":"    return (\u0027%s/%s\u0027 % (account, container),"},{"line_number":5323,"context_line":"            Timestamp(headers.get(\u0027X-Backend-Redirect-Timestamp\u0027)))"},{"line_number":5324,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_67bc6cbb","line":5321,"in_reply_to":"5f7c97a3_dbbbf0c1","updated":"2018-05-18 17:56:06.000000000","message":"Done","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"}],"swift/container/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"688a7f2c9dcb30662264060b375afea7c92ed03c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            return None"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # shard_ranges result is sorted by upper then state so a created shard"},{"line_number":289,"context_line":"        # will be sorted ahead of its sharding parent"},{"line_number":290,"context_line":"        containing_range \u003d shard_ranges[0]"},{"line_number":291,"context_line":"        location \u003d \"/%s/%s\" % (containing_range.name, obj_name)"},{"line_number":292,"context_line":"        headers \u003d {\u0027Location\u0027: location,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_fb1fccb4","line":289,"updated":"2018-05-17 23:17:01.000000000","message":"get_shard_ranges only ever returns 0 or 1 range when given includes -- not sure this comment helps much.","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e98cd34524534eb6a1ecab021262a1d1fbe512f1","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            return None"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # shard_ranges result is sorted by upper then state so a created shard"},{"line_number":289,"context_line":"        # will be sorted ahead of its sharding parent"},{"line_number":290,"context_line":"        containing_range \u003d shard_ranges[0]"},{"line_number":291,"context_line":"        location \u003d \"/%s/%s\" % (containing_range.name, obj_name)"},{"line_number":292,"context_line":"        headers \u003d {\u0027Location\u0027: location,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_677d4ce6","line":289,"in_reply_to":"5f7c97a3_fb1fccb4","updated":"2018-05-18 17:56:06.000000000","message":"Done, badly worded","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"688a7f2c9dcb30662264060b375afea7c92ed03c","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        location \u003d \"/%s/%s\" % (containing_range.name, obj_name)"},{"line_number":292,"context_line":"        headers \u003d {\u0027Location\u0027: location,"},{"line_number":293,"context_line":"                   \u0027X-Backend-Redirect-Timestamp\u0027:"},{"line_number":294,"context_line":"                       containing_range.timestamp.internal}"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # we do not want the host added to the location"},{"line_number":297,"context_line":"        req.environ[\u0027swift.leave_relative_location\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_9b86d8db","line":294,"range":{"start_line":294,"start_character":40,"end_line":294,"end_character":49},"updated":"2018-05-17 23:17:01.000000000","message":"Right; we want timestamp here (and not state_timestamp or epoch or something) because timestamp is the one that\u0027s tied to bounds-changes.","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e98cd34524534eb6a1ecab021262a1d1fbe512f1","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        location \u003d \"/%s/%s\" % (containing_range.name, obj_name)"},{"line_number":292,"context_line":"        headers \u003d {\u0027Location\u0027: location,"},{"line_number":293,"context_line":"                   \u0027X-Backend-Redirect-Timestamp\u0027:"},{"line_number":294,"context_line":"                       containing_range.timestamp.internal}"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # we do not want the host added to the location"},{"line_number":297,"context_line":"        req.environ[\u0027swift.leave_relative_location\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_078258c9","line":294,"range":{"start_line":294,"start_character":40,"end_line":294,"end_character":49},"in_reply_to":"5f7c97a3_9b86d8db","updated":"2018-05-18 17:56:06.000000000","message":"+1","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"688a7f2c9dcb30662264060b375afea7c92ed03c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                       containing_range.timestamp.internal}"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # we do not want the host added to the location"},{"line_number":297,"context_line":"        req.environ[\u0027swift.leave_relative_location\u0027] \u003d True"},{"line_number":298,"context_line":"        return HTTPMovedPermanently(headers\u003dheaders, request\u003dreq)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_3b546454","line":297,"range":{"start_line":297,"start_character":27,"end_line":297,"end_character":50},"updated":"2018-05-17 23:17:01.000000000","message":"I thought this was mainly for gatekeeper, but no -- swob changes behavior based on this, too.","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"}],"swift/obj/server.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"9e7d4161985f29e83f44ec7a72e295963fb2a80b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                            \u0027(saving for async update later): %(status)d \u0027"},{"line_number":286,"context_line":"                            \u0027response from %(ip)s:%(port)s/%(dev)s\u0027),"},{"line_number":287,"context_line":"                            {\u0027status\u0027: response.status, \u0027ip\u0027: ip, \u0027port\u0027: port,"},{"line_number":288,"context_line":"                             \u0027dev\u0027: contdevice})"},{"line_number":289,"context_line":"            except (Exception, Timeout):"},{"line_number":290,"context_line":"                self.logger.exception(_("},{"line_number":291,"context_line":"                    \u0027ERROR container update failed with \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_19022670","side":"PARENT","line":288,"range":{"start_line":288,"start_character":20,"end_line":288,"end_character":48},"updated":"2018-05-14 22:28:40.000000000","message":"thank you for moving this stuff outside the Timeout block","commit_id":"0431fa57f0b201b01dcd8e0d962e5c31cefb6f12"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"688a7f2c9dcb30662264060b375afea7c92ed03c","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            self.logger.debug("},{"line_number":316,"context_line":"                \u0027Update to %(path)s redirected to %(redirect)s\u0027,"},{"line_number":317,"context_line":"                {\u0027path\u0027: full_path, \u0027redirect\u0027: redirect_data[0]})"},{"line_number":318,"context_line":"            container_path \u003d redirect_data[0]"},{"line_number":319,"context_line":"        if container_path:"},{"line_number":320,"context_line":"            data[\u0027container_path\u0027] \u003d container_path"},{"line_number":321,"context_line":"        timestamp \u003d headers_out.get(\u0027x-meta-timestamp\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_bb4ab480","line":318,"range":{"start_line":318,"start_character":42,"end_line":318,"end_character":45},"updated":"2018-05-17 23:17:01.000000000","message":"So we don\u0027t do anything with the timestamp here? Ah, it\u0027s for merging multiple redirects received in the updater...","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e98cd34524534eb6a1ecab021262a1d1fbe512f1","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            self.logger.debug("},{"line_number":316,"context_line":"                \u0027Update to %(path)s redirected to %(redirect)s\u0027,"},{"line_number":317,"context_line":"                {\u0027path\u0027: full_path, \u0027redirect\u0027: redirect_data[0]})"},{"line_number":318,"context_line":"            container_path \u003d redirect_data[0]"},{"line_number":319,"context_line":"        if container_path:"},{"line_number":320,"context_line":"            data[\u0027container_path\u0027] \u003d container_path"},{"line_number":321,"context_line":"        timestamp \u003d headers_out.get(\u0027x-meta-timestamp\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_87fc283f","line":318,"range":{"start_line":318,"start_character":42,"end_line":318,"end_character":45},"in_reply_to":"5f7c97a3_bb4ab480","updated":"2018-05-18 17:56:06.000000000","message":"yes, here we just have to use what we\u0027re given","commit_id":"72754d78f6e337ec1bcd3bcf41106b3ac3a9aca1"}]}
