)]}'
{"test/probe/test_object_async_update.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":119,"context_line":"        content \u003d u\u0027stuff\u0027"},{"line_number":120,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027, contents\u003dcontent)"},{"line_number":121,"context_line":"        meta \u003d client.head_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # re-start the container server and assert that it does not yet know"},{"line_number":124,"context_line":"        # about the object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_7c20429c","side":"PARENT","line":121,"updated":"2016-06-06 10:56:29.000000000","message":"here we do need to change to a different client if we want to assert the x-object-sysmeta- headers are set","commit_id":"886fa0822a7881806fd5b2ac8aa66e0a628da3a8"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":119,"context_line":"        content \u003d u\u0027stuff\u0027"},{"line_number":120,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027, contents\u003dcontent)"},{"line_number":121,"context_line":"        meta \u003d client.head_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # re-start the container server and assert that it does not yet know"},{"line_number":124,"context_line":"        # about the object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_caffb2ff","side":"PARENT","line":121,"in_reply_to":"7aa08908_7c20429c","updated":"2016-06-07 06:05:56.000000000","message":"Yes, swift client can not get internal metadata (e.g. x-object-sysmeta-xxx)","commit_id":"886fa0822a7881806fd5b2ac8aa66e0a628da3a8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            cnode, cpart, self.account, container)[1]]"},{"line_number":61,"context_line":"        self.assertTrue(obj in objs)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # verify that the container update overrides it to the container servers"},{"line_number":64,"context_line":"    # when container updates are sync or async and possibly re-ordered with"},{"line_number":65,"context_line":"    # respect to object PUT and POST requests."},{"line_number":66,"context_line":"    def test_update_during_PUT(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_bc546a54","line":63,"updated":"2016-06-06 10:56:29.000000000","message":"s/it to/make it to/","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            cnode, cpart, self.account, container)[1]]"},{"line_number":61,"context_line":"        self.assertTrue(obj in objs)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # verify that the container update overrides it to the container servers"},{"line_number":64,"context_line":"    # when container updates are sync or async and possibly re-ordered with"},{"line_number":65,"context_line":"    # respect to object PUT and POST requests."},{"line_number":66,"context_line":"    def test_update_during_PUT(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_6fd7b0ed","line":63,"in_reply_to":"7aa08908_bc546a54","updated":"2016-06-07 06:05:56.000000000","message":"Done","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":85,"context_line":"            self.account, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":86,"context_line":"        resp_headers \u003d direct_client.direct_head_object("},{"line_number":87,"context_line":"            onodes[0], opart, self.account, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":88,"context_line":"            headers\u003d{\u0027X-Backend-Storage-Policy-Index\u0027: str(int(self.policy))})"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_f906041f","line":86,"updated":"2016-06-06 10:56:29.000000000","message":"why was it necessary to change to use the direct client? I think int_client.get_object_metadata would still work?","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":85,"context_line":"            self.account, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":86,"context_line":"        resp_headers \u003d direct_client.direct_head_object("},{"line_number":87,"context_line":"            onodes[0], opart, self.account, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":88,"context_line":"            headers\u003d{\u0027X-Backend-Storage-Policy-Index\u0027: str(int(self.policy))})"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_cf634419","line":86,"in_reply_to":"7aa08908_f906041f","updated":"2016-06-07 06:05:56.000000000","message":"No internal client doesn\u0027t work for EC case. The reason we need direct client here is to get raw object metadata from object-server. If we use an internal client, it collects the metadata via *proxy app*. In the repl case, it\u0027s ok because proxy app doesn\u0027t change anything. However, in the EC case, proxy app attempt to set *original object etag/content-length* into the header[1]. As a result of it, we cannot assert any actual etag/content-length info in the object-server.\n\n1: https://github.com/openstack/swift/blob/master/swift/proxy/controllers/obj.py#L1868-L1879","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # put an object while one container server is stopped so that we force"},{"line_number":115,"context_line":"        # an async update to it"},{"line_number":116,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":117,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":118,"context_line":"                          contents\u003dself.content, headers\u003dself.request_headers)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # sanity, that metadata is in object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_fc6272d7","line":117,"updated":"2016-06-06 10:56:29.000000000","message":"I think all the usages of client.put_object need to change to int_client.upload_object (like line 77) so that the x-backend-override- headers can be sent.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # put an object while one container server is stopped so that we force"},{"line_number":115,"context_line":"        # an async update to it"},{"line_number":116,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":117,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":118,"context_line":"                          contents\u003dself.content, headers\u003dself.request_headers)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # sanity, that metadata is in object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_2a3d96bb","line":117,"in_reply_to":"7aa08908_fc6272d7","updated":"2016-06-07 06:05:56.000000000","message":"Either is fine to me. Exactly, backend-override- headers cannot be sent via swiftclient. Looking at the original tests, it seems enough but it\u0027s ok to change those client to internal with this patch. I\u0027ll try it.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        # put an object while one container server is stopped so that we force"},{"line_number":160,"context_line":"        # an async update to it"},{"line_number":161,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":162,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":163,"context_line":"                          contents\u003dself.content, headers\u003dself.request_headers)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # sanity, that metadata is in object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_af138a5b","line":162,"updated":"2016-06-06 10:56:29.000000000","message":"use int_client to allow override headers to pass (int_client declared at line 185)","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        # sanity, that metadata is in object"},{"line_number":166,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":167,"context_line":"            self.account, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":168,"context_line":"        resp_headers \u003d direct_client.direct_head_object("},{"line_number":169,"context_line":"            onodes[0], opart, self.account, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":170,"context_line":"            headers\u003d{\u0027X-Backend-Storage-Policy-Index\u0027: str(int(self.policy))})"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_9c936ea3","line":168,"updated":"2016-06-06 10:56:29.000000000","message":"int_client might be simpler","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        # sanity, that metadata is in object"},{"line_number":166,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":167,"context_line":"            self.account, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":168,"context_line":"        resp_headers \u003d direct_client.direct_head_object("},{"line_number":169,"context_line":"            onodes[0], opart, self.account, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":170,"context_line":"            headers\u003d{\u0027X-Backend-Storage-Policy-Index\u0027: str(int(self.policy))})"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_8a63eadb","line":168,"in_reply_to":"7aa08908_9c936ea3","updated":"2016-06-07 06:05:56.000000000","message":"No direct client is needed here. See my comment at L86.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # PUT and POST to object while one container server is stopped so that"},{"line_number":217,"context_line":"        # we force async updates to it"},{"line_number":218,"context_line":"        kill_server((cnodes[0][\u0027ip\u0027], cnodes[0][\u0027port\u0027]), self.ipport2server)"},{"line_number":219,"context_line":"        client.put_object(self.url, self.token, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":220,"context_line":"                          contents\u003dself.content, headers\u003dself.request_headers)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        # sanity, that metadata is in object"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_0f045e13","line":219,"updated":"2016-06-06 10:56:29.000000000","message":"use int_client to allow override headers to pass (int_client declared at line 236)","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        # sanity, that metadata is in object"},{"line_number":223,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":224,"context_line":"            self.account, \u0027c1\u0027, \u0027o1\u0027)"},{"line_number":225,"context_line":"        resp_headers \u003d direct_client.direct_head_object("},{"line_number":226,"context_line":"            onodes[0], opart, self.account, \u0027c1\u0027, \u0027o1\u0027,"},{"line_number":227,"context_line":"            headers\u003d{\u0027X-Backend-Storage-Policy-Index\u0027: str(int(self.policy))})"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_7cf3220b","line":225,"updated":"2016-06-06 10:56:29.000000000","message":"int_client might be simpler","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    def setUp(self):"},{"line_number":262,"context_line":"        super(TestUpdateOverrides, self).setUp()"},{"line_number":263,"context_line":"        # In ReplPolicy, override headers here will be applied directly into"},{"line_number":264,"context_line":"        # the request header to object-server."},{"line_number":265,"context_line":"        self.content \u003d u\u0027stuff\u0027"},{"line_number":266,"context_line":"        self.request_headers \u003d HeaderKeyDict({"},{"line_number":267,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_9cf6ced5","line":264,"updated":"2016-06-06 10:56:29.000000000","message":"(see next comment too) - this confused me because there are no override headers set here. The comment seems IS what I expected, but I was also expecting the setUp to specify override headers for all the inherited tests to use.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"},{"line_number":268,"context_line":"        })"},{"line_number":269,"context_line":"        # define expected meta data in container/object"},{"line_number":270,"context_line":"        self.container_meta \u003d {"},{"line_number":271,"context_line":"            \u0027Content-Type\u0027: \u0027text/lain\u0027,"},{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_3cd35a3a","line":270,"updated":"2016-06-06 10:56:29.000000000","message":"self.container_meta is only ever used to compare against the container listing metadata, so it might be simpler/easier to understand if the keys were the same as used in a container listing (i.e. hash, bytes...)","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"},{"line_number":268,"context_line":"        })"},{"line_number":269,"context_line":"        # define expected meta data in container/object"},{"line_number":270,"context_line":"        self.container_meta \u003d {"},{"line_number":271,"context_line":"            \u0027Content-Type\u0027: \u0027text/lain\u0027,"},{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_2aabd6d7","line":270,"in_reply_to":"7aa08908_3cd35a3a","updated":"2016-06-07 06:05:56.000000000","message":"Agreed, I\u0027ll change them.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        })"},{"line_number":269,"context_line":"        # define expected meta data in container/object"},{"line_number":270,"context_line":"        self.container_meta \u003d {"},{"line_number":271,"context_line":"            \u0027Content-Type\u0027: \u0027text/lain\u0027,"},{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"},{"line_number":274,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_fcc43241","line":271,"updated":"2016-06-06 10:56:29.000000000","message":"typo? text/lain - but actually this value is never asserted since content-type is only checked in test_update_during_PUT where the self.container_meta is defined again.\n\n(see comment below) I think this declaration could go and the declaration at line 293 used in setUp","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        })"},{"line_number":269,"context_line":"        # define expected meta data in container/object"},{"line_number":270,"context_line":"        self.container_meta \u003d {"},{"line_number":271,"context_line":"            \u0027Content-Type\u0027: \u0027text/lain\u0027,"},{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"},{"line_number":274,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_ea7f0e64","line":271,"in_reply_to":"7aa08908_fcc43241","updated":"2016-06-07 06:05:56.000000000","message":"whoo, yes it\u0027s typo.","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"},{"line_number":274,"context_line":"        }"},{"line_number":275,"context_line":"        # object meta will be compaired with a direct head response header so"},{"line_number":276,"context_line":"        # it should follow the header syntax"},{"line_number":277,"context_line":"        self.object_meta \u003d HeaderKeyDict({"},{"line_number":278,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_7cdde241","line":275,"updated":"2016-06-06 10:56:29.000000000","message":"s/compaired/compared/","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":273,"context_line":"            \u0027Content-Length\u0027: len(self.content),"},{"line_number":274,"context_line":"        }"},{"line_number":275,"context_line":"        # object meta will be compaired with a direct head response header so"},{"line_number":276,"context_line":"        # it should follow the header syntax"},{"line_number":277,"context_line":"        self.object_meta \u003d HeaderKeyDict({"},{"line_number":278,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_2ad91684","line":275,"in_reply_to":"7aa08908_7cdde241","updated":"2016-06-07 06:05:56.000000000","message":"Done","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            \u0027Content-Length\u0027: str(len(self.content)),"},{"line_number":281,"context_line":"        })"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def test_update_during_PUT(self):"},{"line_number":284,"context_line":"        # This test is for Update-Override so we need to use custom request"},{"line_number":285,"context_line":"        # headers and container assertions"},{"line_number":286,"context_line":"        self.request_headers \u003d HeaderKeyDict({"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_dcee96eb","line":283,"updated":"2016-06-06 10:56:29.000000000","message":"this confused me - can\u0027t we just set the request_headers and self.container_meta below in setUp and use them for all the tests...? Then there is no need to override test_update_during_PUT.\n\n...ah, that does require changing some of the other tests to use int_client.upload_object so that the override headers are allowed through. But that would be a good thing to do IMHO. (see comments above - change client.put_object to int_client.upload_object)","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b65acf18aee84ad7950f2021f3e9ecb37882b1f1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            \u0027Content-Length\u0027: str(len(self.content)),"},{"line_number":281,"context_line":"        })"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def test_update_during_PUT(self):"},{"line_number":284,"context_line":"        # This test is for Update-Override so we need to use custom request"},{"line_number":285,"context_line":"        # headers and container assertions"},{"line_number":286,"context_line":"        self.request_headers \u003d HeaderKeyDict({"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_caba12e1","line":283,"in_reply_to":"7aa08908_dcee96eb","updated":"2016-06-07 06:05:56.000000000","message":"I\u0027ve been concerning that test_update_during_PUT doesn\u0027t test the correct Swift Repl case straight forward.\n\nIn real Swift world with replication policy, Etag, Content-Type, and Content-Length must be same between object metadata and container db. However test_update_during_PUT modifies them to assert the override mechanism and it makes the different values between object metadata and container. That happened in the existing test in fact. It looks ok to me because it asserts the overrides mechanism. However, IMHO, any other tests doesn\u0027t follow the inconsistency test. That is why I was trying to encapsulate the inconsistent variable only into test_update_during_PUT.\n\nDoes it make sense?","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f9657d99c44e1c072786f3f21af897a832393ff8","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            \u0027Etag\u0027: \u0027%s\u0027 % md5(self.content).hexdigest(),"},{"line_number":315,"context_line":"            \u0027Content-Length\u0027: len(self.content),"},{"line_number":316,"context_line":"        }"},{"line_number":317,"context_line":"        # object meta will be compaired with a direct head response header so"},{"line_number":318,"context_line":"        # it should follow the header syntax"},{"line_number":319,"context_line":"        self.object_meta \u003d HeaderKeyDict({"},{"line_number":320,"context_line":"            \u0027Content-Type\u0027: \u0027text/plain\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_bcd10afe","line":317,"updated":"2016-06-06 10:56:29.000000000","message":"s/compaired/compared/","commit_id":"014eef87c3fee5cd0e7a89a420a7713da580c277"}]}
