)]}'
{"swift/obj/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6e2b21acfac1a01906c3f2b57f27ec9fa8850c7","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                    override \u003d key.lower().replace(override_prefix, \u0027x-\u0027)"},{"line_number":480,"context_line":"                    update_headers[override] \u003d val"},{"line_number":481,"context_line":"            # apply x-backend-container-update-override* from footers *before*"},{"line_number":482,"context_line":"            # x-object-sysmeta-container-update-override-* from headers"},{"line_number":483,"context_line":"            for key, val in footers.items():"},{"line_number":484,"context_line":"                if key.lower().startswith(override_prefix):"},{"line_number":485,"context_line":"                    override \u003d key.lower().replace(override_prefix, \u0027x-\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_36a83820","line":482,"updated":"2016-07-26 12:43:44.000000000","message":"ok. the only source of -backend- override should be footers from the proxy EC obj controller, so the effective precedence (low to high) is\n\n  - (x-backend-* headers - none should ever be received)\n  - x-backend-* footers from proxy for EC objects\n  - -sysmeta- headers from middleware\n  - -sysmeta- footers from middleware\n\nwhereas before we had\n\n  - (x-backend-* headers - none should ever be received)\n  - -sysmeta- headers from middleware\n  - x-backend-* footers from proxy for EC objects\n  - -sysmeta- footers from middleware","commit_id":"bcd9a58d3c30ce554bfbe7fee5bc851e9feccaa0"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6e2b21acfac1a01906c3f2b57f27ec9fa8850c7","unresolved":false,"context_lines":[{"line_number":1513,"context_line":"        # but sysmeta header trumps backend footer"},{"line_number":1514,"context_line":"        do_test({\u0027X-Object-Sysmeta-Container-Update-Override-Etag\u0027:"},{"line_number":1515,"context_line":"                 \u0027update-etag\u0027},"},{"line_number":1516,"context_line":"                {\u0027X-Backend-Container-Update-Override-Etag\u0027: \u0027ignored-etag\u0027})"},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"    def test_PUT_etag_in_footer_mismatch(self):"},{"line_number":1519,"context_line":"        timestamp \u003d normalize_timestamp(time())"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_610ae88b","line":1516,"updated":"2016-07-26 12:43:44.000000000","message":"for completeness, test that sysmeta footer trumps backend header","commit_id":"bcd9a58d3c30ce554bfbe7fee5bc851e9feccaa0"}]}
