)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"sysmeta so that override values are persisted. This allows a general"},{"line_number":27,"context_line":"mechanism in the object server to apply the override values (if any"},{"line_number":28,"context_line":"have been set) from object sysmeta when constructing a container"},{"line_number":29,"context_line":"update for a PUT or a POST. Middleware should use the"},{"line_number":30,"context_line":"x-object-sysmeta-container-update-override-* namespace when setting"},{"line_number":31,"context_line":"container update overrides."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7aa08908_af0e2d38","line":29,"range":{"start_line":29,"start_character":46,"end_line":29,"end_character":49},"updated":"2016-06-14 21:41:10.000000000","message":"By overwriting, or using setdefault? Or will it vary by application?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"sysmeta so that override values are persisted. This allows a general"},{"line_number":27,"context_line":"mechanism in the object server to apply the override values (if any"},{"line_number":28,"context_line":"have been set) from object sysmeta when constructing a container"},{"line_number":29,"context_line":"update for a PUT or a POST. Middleware should use the"},{"line_number":30,"context_line":"x-object-sysmeta-container-update-override-* namespace when setting"},{"line_number":31,"context_line":"container update overrides."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7aa08908_bb59175e","line":29,"range":{"start_line":29,"start_character":46,"end_line":29,"end_character":49},"in_reply_to":"7aa08908_af0e2d38","updated":"2016-06-22 11:00:00.000000000","message":"It may vary - for example in the encrypter we set it having encrypted any value that was already there. Other middlewares should probably setdefault, but they may know better.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"use x-object-sysmeta-container-update-override-* headers."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Change-Id: Ib80b4db57dfc2d37ea8ed3745084a3981d082784"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7aa08908_57659fde","line":50,"updated":"2016-06-14 21:41:10.000000000","message":"Probably deserves an UpgradeImpact, if only something like\n\n\u003e Middleware developers that are currently using x-backend-container-update-override-* headers should transition to using x-object-sysmeta-container-update-override-* headers to remain compatible with encryption. If targeting multiple versions of swift, it may be necessary to send headers from both namespaces.\n\nMight also be worth re-iterating the accepted wisdom of upgrading storage nodes before proxy nodes in a rolling upgrade. I\u0027m fairly certain it isn\u0027t safe to turn on crypto (or any other middleware using x-object-sysmeta-container-update-override-* headers) unless all of your object-servers are upgraded to be post-crypto.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"use x-object-sysmeta-container-update-override-* headers."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Change-Id: Ib80b4db57dfc2d37ea8ed3745084a3981d082784"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7aa08908_269eaa63","line":50,"in_reply_to":"7aa08908_57659fde","updated":"2016-06-22 11:00:00.000000000","message":"Done","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"679779c21ca70bf07166ba6088c00e48e59fe612","unresolved":false,"context_lines":[{"line_number":26,"context_line":"sysmeta so that override values are persisted. This allows a general"},{"line_number":27,"context_line":"mechanism in the object server to apply the override values (if any"},{"line_number":28,"context_line":"have been set) from object sysmeta when constructing a container"},{"line_number":29,"context_line":"update for a PUT or a POST. Middleware should use the"},{"line_number":30,"context_line":"x-object-sysmeta-container-update-override-* namespace when setting"},{"line_number":31,"context_line":"container update overrides."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_bbaabe6e","line":29,"range":{"start_line":29,"start_character":28,"end_line":29,"end_character":49},"updated":"2016-06-22 01:41:13.000000000","message":"Still curious if we can offer some guidance here. Will this be by overwriting, or using setdefault? Or will it vary by application?","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2e7150916ea7e6cf4b73a9115b31eb0e56ff02a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"sysmeta so that override values are persisted. This allows a general"},{"line_number":27,"context_line":"mechanism in the object server to apply the override values (if any"},{"line_number":28,"context_line":"have been set) from object sysmeta when constructing a container"},{"line_number":29,"context_line":"update for a PUT or a POST. Middleware should use the"},{"line_number":30,"context_line":"x-object-sysmeta-container-update-override-* namespace when setting"},{"line_number":31,"context_line":"container update overrides."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_d8516c64","line":29,"range":{"start_line":29,"start_character":28,"end_line":29,"end_character":49},"in_reply_to":"3aaa91ec_bbaabe6e","updated":"2016-06-22 13:59:32.000000000","message":"I\u0027ll add some text as a headsup that there might be values already set by other middleware, but we cannot prescribe how a middleware should react to that - the encrypter for example overwrites, whereas other middlewares might need to setdefault.","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"679779c21ca70bf07166ba6088c00e48e59fe612","unresolved":false,"context_lines":[{"line_number":49,"context_line":"be compatible with other middleware such as encryption and to ensure"},{"line_number":50,"context_line":"that container updates during POST requests carry correct values. If"},{"line_number":51,"context_line":"targeting multiple versions of Swift object servers it may be"},{"line_number":52,"context_line":"necessary to send headers from both namespaces. However, in general it"},{"line_number":53,"context_line":"is recommended to upgrade all backend servers before upgrading proxy"},{"line_number":54,"context_line":"servers."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_1b8f9224","line":54,"range":{"start_line":52,"start_character":48,"end_line":54,"end_character":8},"updated":"2016-06-22 01:41:13.000000000","message":"I was thinking more for something like Swift3, which claims support for swift\u003e\u003d2.1.0 and which operators may wish to upgrade independently of Swift.","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7326907d8f93b42eabe0fc94ede31e56a205afec","unresolved":false,"context_lines":[{"line_number":49,"context_line":"be compatible with other middleware such as encryption and to ensure"},{"line_number":50,"context_line":"that container updates during POST requests carry correct values. If"},{"line_number":51,"context_line":"targeting multiple versions of Swift object servers it may be"},{"line_number":52,"context_line":"necessary to send headers from both namespaces. However, in general it"},{"line_number":53,"context_line":"is recommended to upgrade all backend servers before upgrading proxy"},{"line_number":54,"context_line":"servers."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_64d38e39","line":54,"range":{"start_line":52,"start_character":48,"end_line":54,"end_character":8},"in_reply_to":"3aaa91ec_1b8f9224","updated":"2016-06-22 06:49:13.000000000","message":"Yes, third party middleware can be upgraded independently but... if the third party middleware attempts to use the newer feature of swift, in most cases, we need to update the version restriction like swift\u003e\u003d2.9.0. And then, that way, we need to upgrade the swift cluster anyway, and in the way, we should start to upgrade from backend servers so this context sounds reasonable to me.","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2e7150916ea7e6cf4b73a9115b31eb0e56ff02a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"be compatible with other middleware such as encryption and to ensure"},{"line_number":50,"context_line":"that container updates during POST requests carry correct values. If"},{"line_number":51,"context_line":"targeting multiple versions of Swift object servers it may be"},{"line_number":52,"context_line":"necessary to send headers from both namespaces. However, in general it"},{"line_number":53,"context_line":"is recommended to upgrade all backend servers before upgrading proxy"},{"line_number":54,"context_line":"servers."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_0bc28b85","line":54,"range":{"start_line":52,"start_character":48,"end_line":54,"end_character":8},"in_reply_to":"3aaa91ec_64d38e39","updated":"2016-06-22 13:59:32.000000000","message":"I\u0027ll try again to find the right incantation","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"}],"swift/obj/server.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"dc9c86d8feab8bcacf5e19c71849dc283b7b5ad1","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        preferred and is used by proxy middlewares. The latter is historical"},{"line_number":456,"context_line":"        but is still used with EC policy PUT requests; for backwards"},{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way a newer proxy is"},{"line_number":459,"context_line":"        compatible with an object server that pre-dates the introduction of the"},{"line_number":460,"context_line":"        x-object-sysmeta-container-update- namespace and vice-versa."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        :param update_headers: a dict of headers used in the container update"},{"line_number":463,"context_line":"        :param metadata: a dict that may container override items"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_f8334cf4","line":460,"range":{"start_line":458,"start_character":47,"end_line":460,"end_character":68},"updated":"2016-06-17 08:49:24.000000000","message":"Maybe a newer *object-server* is compatible with *older proxy server*?","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5341a805edd9d9d5610f8c0b33ad55bf9a7edbe3","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        preferred and is used by proxy middlewares. The latter is historical"},{"line_number":456,"context_line":"        but is still used with EC policy PUT requests; for backwards"},{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way a newer proxy is"},{"line_number":459,"context_line":"        compatible with an object server that pre-dates the introduction of the"},{"line_number":460,"context_line":"        x-object-sysmeta-container-update- namespace and vice-versa."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        :param update_headers: a dict of headers used in the container update"},{"line_number":463,"context_line":"        :param metadata: a dict that may container override items"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_13202b9b","line":460,"range":{"start_line":458,"start_character":47,"end_line":460,"end_character":68},"in_reply_to":"5a9d85d2_3b41b90c","updated":"2016-06-21 18:24:06.000000000","message":"I see the misunderstnding - A newer *proxy object controller EC PUT path* remains compatible with an older object server.\n\nEncryption (or other middleware) using the new sysmeta override headers will require the object server to be updated for the container updates to work.\nBut we can do a rolling upgrade of object and proxy servers *before* then introducing encryption (see the discussion in the overview doc).\n\nI will change this comment","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"49c0a9ed27f317bec74f2f77efc10dbdd89bd861","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        preferred and is used by proxy middlewares. The latter is historical"},{"line_number":456,"context_line":"        but is still used with EC policy PUT requests; for backwards"},{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way a newer proxy is"},{"line_number":459,"context_line":"        compatible with an object server that pre-dates the introduction of the"},{"line_number":460,"context_line":"        x-object-sysmeta-container-update- namespace and vice-versa."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        :param update_headers: a dict of headers used in the container update"},{"line_number":463,"context_line":"        :param metadata: a dict that may container override items"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_3b41b90c","line":460,"range":{"start_line":458,"start_character":47,"end_line":460,"end_character":68},"in_reply_to":"7aa08908_14dff1d6","updated":"2016-06-20 05:55:56.000000000","message":"Oh really!? Can newer proxy (with x-object-sysmeta-container-update-xxx) talk with older object-server (support only x-backend-container-overrides-xxx) correctly?\n\nI thought that\u0027s not true because...\n\ne.g.\n Proxy sends:\n   x-object-sysmeta-container-update-etag: \u003ccrypto_etag\u003e\n   x-backend-container-overrides: \u003cec_etag\u003e\n\n Object-Server resolved them as:\n   Save crypto_etag as object sysmeta\n   Update container db via ec_etag\n\nExactly we won\u0027t loose the sysmeta yet, it will be kept in object metadata and we *may* be able to update asnynchronously(?) To enable older object servers to update crypted etag to container-db, the resolver like this should be in proxy side too, IMHO... Is it right?\n\n\nAh, I might be missing the \"compatible\" meaning, though. Does it mean, \"If upgrading has not been completed yet on whole servers, it should behave as older one (i.e. update container db with ec etag) (even if it\u0027s already encrypted at proxy middleware)\"? I need to look at Upgrading Impact docs again.","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3d28b40506af71d30e3dac7b0794f843dfbced3","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        preferred and is used by proxy middlewares. The latter is historical"},{"line_number":456,"context_line":"        but is still used with EC policy PUT requests; for backwards"},{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way a newer proxy is"},{"line_number":459,"context_line":"        compatible with an object server that pre-dates the introduction of the"},{"line_number":460,"context_line":"        x-object-sysmeta-container-update- namespace and vice-versa."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        :param update_headers: a dict of headers used in the container update"},{"line_number":463,"context_line":"        :param metadata: a dict that may container override items"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_14dff1d6","line":460,"range":{"start_line":458,"start_character":47,"end_line":460,"end_character":68},"in_reply_to":"7aa08908_f8334cf4","updated":"2016-06-17 13:36:14.000000000","message":"Both are true - hence \"vice-versa\" at end.","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7326907d8f93b42eabe0fc94ede31e56a205afec","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way the EC PUT path of a"},{"line_number":459,"context_line":"        newer proxy will remain compatible with an object server that pre-dates"},{"line_number":460,"context_line":"        the introduction of the x-object-sysmeta-container-update- namespace"},{"line_number":461,"context_line":"        and vice-versa."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        :param update_headers: a dict of headers used in the container update"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_a4b456f2","line":460,"updated":"2016-06-22 06:49:13.000000000","message":"Thanks for addressing. Current one makes me sense :D","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2e7150916ea7e6cf4b73a9115b31eb0e56ff02a","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        compatibility the header names used with EC policy requests have not"},{"line_number":458,"context_line":"        been changed to the sysmeta namespace - that way the EC PUT path of a"},{"line_number":459,"context_line":"        newer proxy will remain compatible with an object server that pre-dates"},{"line_number":460,"context_line":"        the introduction of the x-object-sysmeta-container-update- namespace"},{"line_number":461,"context_line":"        and vice-versa."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        :param update_headers: a dict of headers used in the container update"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_38e6b0b4","line":460,"in_reply_to":"3aaa91ec_a4b456f2","updated":"2016-06-22 13:59:32.000000000","message":"Done","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"}],"test/probe/test_object_async_update.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Etag\u0027: \u0027override-etag\u0027,"},{"line_number":75,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Content-Type\u0027:"},{"line_number":76,"context_line":"                \u0027override-type\u0027,"},{"line_number":77,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Size\u0027: \u00271999\u0027"},{"line_number":78,"context_line":"        }"},{"line_number":79,"context_line":"        client.put_container(self.url, self.token, \u0027c1\u0027,"},{"line_number":80,"context_line":"                             headers\u003d{\u0027X-Storage-Policy\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_77b25b95","line":77,"updated":"2016-06-14 21:41:10.000000000","message":"Did we just lose probe-test coverage for X-Backend-*?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Etag\u0027: \u0027override-etag\u0027,"},{"line_number":75,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Content-Type\u0027:"},{"line_number":76,"context_line":"                \u0027override-type\u0027,"},{"line_number":77,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Size\u0027: \u00271999\u0027"},{"line_number":78,"context_line":"        }"},{"line_number":79,"context_line":"        client.put_container(self.url, self.token, \u0027c1\u0027,"},{"line_number":80,"context_line":"                             headers\u003d{\u0027X-Storage-Policy\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_72d6b7c4","line":77,"in_reply_to":"7aa08908_77b25b95","updated":"2016-06-22 11:00:00.000000000","message":"not really, since TestUpdateOverridesEC exercises the X-Backend-* style headers that are still used with EC and never expected with replication policies.\n\nGranted, there isn\u0027t  test case there for the synchronous update during PUT but that is pretty well covered by unit tests and Kota has a patch to make these two test classes share their tests. https://review.openstack.org/322773","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        # check that listing meta returned to client is consistent with object"},{"line_number":143,"context_line":"        # meta returned to client"},{"line_number":144,"context_line":"        hdrs, listing \u003d client.get_container(self.url, self.token, \u0027c1\u0027)"},{"line_number":145,"context_line":"        self.assertEqual(1, len(listing))"},{"line_number":146,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":147,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":148,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_ba75cafa","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":41},"updated":"2016-06-14 21:41:10.000000000","message":"(Imagine this comment and next for the other blocks, too.)\n\nI kinda want this assertion up in that for-loop, too.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        # check that listing meta returned to client is consistent with object"},{"line_number":143,"context_line":"        # meta returned to client"},{"line_number":144,"context_line":"        hdrs, listing \u003d client.get_container(self.url, self.token, \u0027c1\u0027)"},{"line_number":145,"context_line":"        self.assertEqual(1, len(listing))"},{"line_number":146,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":147,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":148,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_926c00d2","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":41},"in_reply_to":"7aa08908_ba75cafa","updated":"2016-06-22 11:00:00.000000000","message":"Done","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.assertEqual(1, len(listing))"},{"line_number":146,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":147,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":148,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_update_during_POST_only(self):"},{"line_number":151,"context_line":"        # verify correct update values when PUT update is missed but then a"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_bac66a65","line":148,"updated":"2016-06-14 21:41:10.000000000","message":"Maybe also worth checking content-type?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.assertEqual(1, len(listing))"},{"line_number":146,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":147,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":148,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_update_during_POST_only(self):"},{"line_number":151,"context_line":"        # verify correct update values when PUT update is missed but then a"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_727194a8","line":148,"in_reply_to":"7aa08908_bac66a65","updated":"2016-06-22 11:00:00.000000000","message":"Done","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"dc9c86d8feab8bcacf5e19c71849dc283b7b5ad1","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":270,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":271,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"},{"line_number":272,"context_line":"        self.assertEqual(\u0027test/ctype\u0027, listing[0][\u0027content_type\u0027])"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_1376f9a2","line":272,"updated":"2016-06-17 08:49:24.000000000","message":"Is that worth that we have the test case for the request which has both x-backend-container-override- and x-object-sysmeta-container-override-?","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3d28b40506af71d30e3dac7b0794f843dfbced3","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":270,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":271,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"},{"line_number":272,"context_line":"        self.assertEqual(\u0027test/ctype\u0027, listing[0][\u0027content_type\u0027])"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_efa36e9c","line":272,"in_reply_to":"7aa08908_1376f9a2","updated":"2016-06-17 13:36:14.000000000","message":"We cannot *force* that case to occur in a probe test because we cannot send either of those headers with a client request. But when encryption middleware is installed then this probe test will have both x-backend-container-override- (EC) and x-object-sysmeta-container-override- (encrypter) footers sent to the object server so that will be tested.","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"49c0a9ed27f317bec74f2f77efc10dbdd89bd861","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.assertEqual(\u0027o1\u0027, listing[0][\u0027name\u0027])"},{"line_number":270,"context_line":"        self.assertEqual(len(content), listing[0][\u0027bytes\u0027])"},{"line_number":271,"context_line":"        self.assertEqual(meta[\u0027etag\u0027], listing[0][\u0027hash\u0027])"},{"line_number":272,"context_line":"        self.assertEqual(\u0027test/ctype\u0027, listing[0][\u0027content_type\u0027])"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_9b48ad5d","line":272,"in_reply_to":"7aa08908_efa36e9c","updated":"2016-06-20 05:55:56.000000000","message":"Alright, great.","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"}],"test/unit/common/middleware/test_copy.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":633,"context_line":"        verify_response(\u0027201 Created\u0027, source_headers.copy(), [])"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy1\u0027, method\u003d\u0027GET\u0027)"},{"line_number":636,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":637,"context_line":"        verify_response(\u0027200 OK\u0027, source_headers.copy(), [])"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_b5c15b50","line":635,"updated":"2016-06-14 21:41:10.000000000","message":"These subsequent GETs... how much are they testing COPY vs. FakeSwift? I suppose both have to work properly for this to pass... I\u0027d just feel a little better if we were inspecting the PUT call directly.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":633,"context_line":"        verify_response(\u0027201 Created\u0027, source_headers.copy(), [])"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy1\u0027, method\u003d\u0027GET\u0027)"},{"line_number":636,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":637,"context_line":"        verify_response(\u0027200 OK\u0027, source_headers.copy(), [])"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_558d6229","line":635,"in_reply_to":"7aa08908_b5c15b50","updated":"2016-06-22 11:00:00.000000000","message":"either way we need code that captures the requests, which is basically what FakeSwift does, but I agree there\u0027s more code there that could go bad. Will add a direct assertion on the PUT call logged in FakeSwift.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027,"},{"line_number":642,"context_line":"                            headers\u003d{\u0027Content-Length\u0027: 0,"},{"line_number":643,"context_line":"                                     \u0027Destination\u0027: \u0027c/o-copy1\u0027,"},{"line_number":644,"context_line":"                                     \u0027Range\u0027: \u0027bytes\u003d1-2\u0027})"},{"line_number":645,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":646,"context_line":"        expected_headers \u003d source_headers.copy()"},{"line_number":647,"context_line":"        unexpected_headers \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_550d97e6","line":644,"range":{"start_line":644,"start_character":38,"end_line":644,"end_character":43},"updated":"2016-06-14 21:41:10.000000000","message":"So FakeSwift is smart enough to handle this and turn it into a 206 for us? Nice.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027,"},{"line_number":642,"context_line":"                            headers\u003d{\u0027Content-Length\u0027: 0,"},{"line_number":643,"context_line":"                                     \u0027Destination\u0027: \u0027c/o-copy1\u0027,"},{"line_number":644,"context_line":"                                     \u0027Range\u0027: \u0027bytes\u003d1-2\u0027})"},{"line_number":645,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":646,"context_line":"        expected_headers \u003d source_headers.copy()"},{"line_number":647,"context_line":"        unexpected_headers \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_b59e4652","line":644,"range":{"start_line":644,"start_character":38,"end_line":644,"end_character":43},"in_reply_to":"7aa08908_550d97e6","updated":"2016-06-22 11:00:00.000000000","message":"It\u0027s swob.Response that is smart IIRC","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy2\u0027, method\u003d\u0027GET\u0027)"},{"line_number":668,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":669,"context_line":"        verify_response(\u0027200 OK\u0027, source_headers.copy(), [])"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"    def test_COPY_no_destination_header(self):"},{"line_number":672,"context_line":"        req \u003d Request.blank("},{"line_number":673,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027, headers\u003d{\u0027Content-Length\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_75c1b37f","line":670,"updated":"2016-06-14 21:41:10.000000000","message":"I think we\u0027re missing tests for the presence/absence of an Etag header in the PUT half of a COPY.\n\nhttp://paste.openstack.org/raw/516065/ is a pretty good start, though we probably want some coverage for Range requests.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy2\u0027, method\u003d\u0027GET\u0027)"},{"line_number":668,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":669,"context_line":"        verify_response(\u0027200 OK\u0027, source_headers.copy(), [])"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"    def test_COPY_no_destination_header(self):"},{"line_number":672,"context_line":"        req \u003d Request.blank("},{"line_number":673,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027, headers\u003d{\u0027Content-Length\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_35e096cc","line":670,"in_reply_to":"7aa08908_75c1b37f","updated":"2016-06-22 11:00:00.000000000","message":"do you intend that as a follow on? or I can apply diff to a later version of this patch.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"dc9c86d8feab8bcacf5e19c71849dc283b7b5ad1","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        method, path, headers \u003d self.app.calls_with_headers[-1]"},{"line_number":635,"context_line":"        self.assertEqual(\u0027PUT\u0027, method)"},{"line_number":636,"context_line":"        self.assertEqual(\u0027/v1/a/c/o-copy0\u0027, path)"},{"line_number":637,"context_line":"        verify_headers(source_headers.copy(), [], headers.items())"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy0\u0027, method\u003d\u0027GET\u0027)"},{"line_number":640,"context_line":"        status, headers, body \u003d self.call_ssc(req)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_4ee9f6b6","line":637,"updated":"2016-06-17 08:49:24.000000000","message":"FOR FOLLOWUP:\n\nHeh, the returned header of call_ssc is a list of tuple and the headers stored in calls_with_headers formatted as HeaderKeyDict. That\u0027s why we need a couple of formats (i.e. headers and headers.items()) for calling verify_headers.\n\nI bet we can change the call_app return value like as swift3 does[1] that helps us like all headers is formatted in HeadersKeyDict in unit test cases.\n\nI know that affects other existing tests so that it should be in follow up though.\n\nhttps://github.com/openstack/swift3/blob/master/swift3/test/unit/__init__.py#L124","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3d28b40506af71d30e3dac7b0794f843dfbced3","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        method, path, headers \u003d self.app.calls_with_headers[-1]"},{"line_number":635,"context_line":"        self.assertEqual(\u0027PUT\u0027, method)"},{"line_number":636,"context_line":"        self.assertEqual(\u0027/v1/a/c/o-copy0\u0027, path)"},{"line_number":637,"context_line":"        verify_headers(source_headers.copy(), [], headers.items())"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o-copy0\u0027, method\u003d\u0027GET\u0027)"},{"line_number":640,"context_line":"        status, headers, body \u003d self.call_ssc(req)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_af3de68f","line":637,"in_reply_to":"7aa08908_4ee9f6b6","updated":"2016-06-17 13:36:14.000000000","message":"ok, follow up","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"679779c21ca70bf07166ba6088c00e48e59fe612","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":685,"context_line":"        self.assertEqual(\u0027200 OK\u0027, status)"},{"line_number":686,"context_line":"        verify_headers(source_headers.copy(), [], headers)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def test_COPY_no_destination_header(self):"},{"line_number":689,"context_line":"        req \u003d Request.blank("},{"line_number":690,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027, headers\u003d{\u0027Content-Length\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_db206afa","line":687,"updated":"2016-06-22 01:41:13.000000000","message":"Still no ETag assertions? http://paste.openstack.org/raw/516065/ is a starting point.","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2e7150916ea7e6cf4b73a9115b31eb0e56ff02a","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        status, headers, body \u003d self.call_ssc(req)"},{"line_number":685,"context_line":"        self.assertEqual(\u0027200 OK\u0027, status)"},{"line_number":686,"context_line":"        verify_headers(source_headers.copy(), [], headers)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def test_COPY_no_destination_header(self):"},{"line_number":689,"context_line":"        req \u003d Request.blank("},{"line_number":690,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027COPY\u0027, headers\u003d{\u0027Content-Length\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_f889c8cb","line":687,"in_reply_to":"3aaa91ec_db206afa","updated":"2016-06-22 13:59:32.000000000","message":"Done. Needed to tweak the tests slightly because the order of query string params is not predictable.\n\nAlso added assertions w.r.t. etag when a Range header is sent.","commit_id":"a2df0f3644b207d23a636822eecc8b86843f6ba8"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            # make PUT with given headers and verify correct etag is sent in"},{"line_number":732,"context_line":"            # container update"},{"line_number":733,"context_line":"            headers[\u0027X-Timestamp\u0027] \u003d ts_put.internal"},{"line_number":734,"context_line":"            headers[\u0027Content-Length\u0027] \u003d len(body)"},{"line_number":735,"context_line":"            req \u003d Request.blank(\u0027/sda1/p/a/c/o\u0027,"},{"line_number":736,"context_line":"                                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":737,"context_line":"                                headers\u003dheaders, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_503925f1","line":734,"updated":"2016-06-14 21:41:10.000000000","message":"nit: we could move these into the update().","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            # make PUT with given headers and verify correct etag is sent in"},{"line_number":732,"context_line":"            # container update"},{"line_number":733,"context_line":"            headers[\u0027X-Timestamp\u0027] \u003d ts_put.internal"},{"line_number":734,"context_line":"            headers[\u0027Content-Length\u0027] \u003d len(body)"},{"line_number":735,"context_line":"            req \u003d Request.blank(\u0027/sda1/p/a/c/o\u0027,"},{"line_number":736,"context_line":"                                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":737,"context_line":"                                headers\u003dheaders, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_b53ac632","line":734,"in_reply_to":"7aa08908_503925f1","updated":"2016-06-22 11:00:00.000000000","message":"Done. hmmm ,why did I not do that? I blame code-evolution.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":769,"context_line":"            self.assertEqual(1, len(calls_made))"},{"line_number":770,"context_line":"            expected_headers \u003d HeaderKeyDict({"},{"line_number":771,"context_line":"                \u0027x-size\u0027: \u00274\u0027,"},{"line_number":772,"context_line":"                \u0027x-content-type\u0027:"},{"line_number":773,"context_line":"                    \u0027application/octet-stream;swift_bytes\u003d123456789\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_0b076eca","line":770,"updated":"2016-06-14 21:41:10.000000000","message":"Maybe worth just update()ing the expected_headers from the PUT?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":769,"context_line":"            self.assertEqual(1, len(calls_made))"},{"line_number":770,"context_line":"            expected_headers \u003d HeaderKeyDict({"},{"line_number":771,"context_line":"                \u0027x-size\u0027: \u00274\u0027,"},{"line_number":772,"context_line":"                \u0027x-content-type\u0027:"},{"line_number":773,"context_line":"                    \u0027application/octet-stream;swift_bytes\u003d123456789\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_55ec4292","line":770,"in_reply_to":"7aa08908_0b076eca","updated":"2016-06-22 11:00:00.000000000","message":"Done","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            \u0027X-Backend-Container-Update-Override-Size\u0027: \u00274\u0027,"},{"line_number":785,"context_line":"            \u0027X-Object-Sysmeta-Ec-Etag\u0027: \u0027expected\u0027,"},{"line_number":786,"context_line":"            \u0027X-Object-Sysmeta-Ec-Content-Length\u0027: \u00274\u0027}"},{"line_number":787,"context_line":"        do_test(\u0027test ec frag longer than 4\u0027, headers, POLICIES[1])"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        # middleware overrides take precedence over EC overrides"},{"line_number":790,"context_line":"        headers \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_068ac31a","line":787,"range":{"start_line":787,"start_character":55,"end_line":787,"end_character":66},"updated":"2016-06-14 21:41:10.000000000","message":"Out of curiosity, what would happen if we sent an X-Object-Sysmeta-Ec-* header with the index of a replicated policy? Would anything blow up?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            \u0027X-Backend-Container-Update-Override-Size\u0027: \u00274\u0027,"},{"line_number":785,"context_line":"            \u0027X-Object-Sysmeta-Ec-Etag\u0027: \u0027expected\u0027,"},{"line_number":786,"context_line":"            \u0027X-Object-Sysmeta-Ec-Content-Length\u0027: \u00274\u0027}"},{"line_number":787,"context_line":"        do_test(\u0027test ec frag longer than 4\u0027, headers, POLICIES[1])"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        # middleware overrides take precedence over EC overrides"},{"line_number":790,"context_line":"        headers \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_d55cb24e","line":787,"range":{"start_line":787,"start_character":55,"end_line":787,"end_character":66},"in_reply_to":"7aa08908_068ac31a","updated":"2016-06-22 11:00:00.000000000","message":"Haven\u0027t tried but I think the object server controller doesn\u0027t differentiate between policy types.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        do_test(\u0027longer than 4\u0027, headers, POLICIES[0])"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        # middleware overrides take precedence over EC-style overrides with"},{"line_number":806,"context_line":"        # replication policy - should never happen but test anyway"},{"line_number":807,"context_line":"        headers \u003d {"},{"line_number":808,"context_line":"            \u0027X-Backend-Container-Update-Override-Etag\u0027: \u0027unexpected\u0027,"},{"line_number":809,"context_line":"            \u0027X-Backend-Container-Update-Override-Size\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_cb7566fa","line":806,"range":{"start_line":806,"start_character":38,"end_line":806,"end_character":43},"updated":"2016-06-14 21:41:10.000000000","message":"I don\u0027t know about \"never\". This could happen if you enable both encryption and some third-party middleware which wants container overrides but predates crypto.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        do_test(\u0027longer than 4\u0027, headers, POLICIES[0])"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        # middleware overrides take precedence over EC-style overrides with"},{"line_number":806,"context_line":"        # replication policy - should never happen but test anyway"},{"line_number":807,"context_line":"        headers \u003d {"},{"line_number":808,"context_line":"            \u0027X-Backend-Container-Update-Override-Etag\u0027: \u0027unexpected\u0027,"},{"line_number":809,"context_line":"            \u0027X-Backend-Container-Update-Override-Size\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_38024d0a","line":806,"range":{"start_line":806,"start_character":38,"end_line":806,"end_character":43},"in_reply_to":"7aa08908_cb7566fa","updated":"2016-06-22 11:00:00.000000000","message":"Done","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Etag\u0027: \u0027expected\u0027,"},{"line_number":811,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Size\u0027: \u00274\u0027}"},{"line_number":812,"context_line":"        do_test(\u0027longer than 4\u0027, headers, POLICIES[0])"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"    def _test_PUT_then_POST_async_pendings(self, policy, update_etag\u003dNone):"},{"line_number":815,"context_line":"        # Test that PUT and POST requests result in distinct async pending"},{"line_number":816,"context_line":"        # files when sync container update fails."}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_0ba3eeb2","line":813,"updated":"2016-06-14 21:41:10.000000000","message":"Should we have any tests for just X-Backend-* headers? For example, such as may happen with third-party middleware and a replicated policy?\n\nShould we have a control case that doesn\u0027t send any of the override headers but sends a 4-byte body? Or will that be non-trivial because of the Etag?","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Etag\u0027: \u0027expected\u0027,"},{"line_number":811,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Size\u0027: \u00274\u0027}"},{"line_number":812,"context_line":"        do_test(\u0027longer than 4\u0027, headers, POLICIES[0])"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"    def _test_PUT_then_POST_async_pendings(self, policy, update_etag\u003dNone):"},{"line_number":815,"context_line":"        # Test that PUT and POST requests result in distinct async pending"},{"line_number":816,"context_line":"        # files when sync container update fails."}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_3807ed82","line":813,"in_reply_to":"7aa08908_0ba3eeb2","updated":"2016-06-22 11:00:00.000000000","message":"1) the test would fail. old style x-backend- headers don\u0027t work for the POST container updates with replication polices because they are not persisted. That\u0027s why we\u0027re adding the new style headers :)\n\n2) see test_POST_container_updates_with_replication_policy","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a8cfd084b055f6d2384c8b88748cf418cca9aff6","unresolved":false,"context_lines":[{"line_number":4416,"context_line":"            req \u003d Request.blank(\u0027/sda1/0/a/c/o\u0027, method\u003d\u0027PUT\u0027,"},{"line_number":4417,"context_line":"                                headers\u003dheaders, body\u003d\u0027\u0027)"},{"line_number":4418,"context_line":"            with mocked_http_conn("},{"line_number":4419,"context_line":"                    200, give_connect\u003dcapture_updates) as fake_conn:"},{"line_number":4420,"context_line":"                with fake_spawn():"},{"line_number":4421,"context_line":"                    resp \u003d req.get_response(self.object_controller)"},{"line_number":4422,"context_line":"            self.assertRaises(StopIteration, fake_conn.code_iter.next)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_26ffff66","line":4419,"updated":"2016-06-14 21:41:10.000000000","message":"Do we have more isolated tests for swift.obj.server.ObjectController.container_update? Can we mock that out here (like we did above) instead of going all the way down to http_connect_raw?\n\nMaybe better as a follow-up, as this preserves the existing test fairly well as-is.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"724d272a017befbd82b522daf39e20e529c70afd","unresolved":false,"context_lines":[{"line_number":4416,"context_line":"            req \u003d Request.blank(\u0027/sda1/0/a/c/o\u0027, method\u003d\u0027PUT\u0027,"},{"line_number":4417,"context_line":"                                headers\u003dheaders, body\u003d\u0027\u0027)"},{"line_number":4418,"context_line":"            with mocked_http_conn("},{"line_number":4419,"context_line":"                    200, give_connect\u003dcapture_updates) as fake_conn:"},{"line_number":4420,"context_line":"                with fake_spawn():"},{"line_number":4421,"context_line":"                    resp \u003d req.get_response(self.object_controller)"},{"line_number":4422,"context_line":"            self.assertRaises(StopIteration, fake_conn.code_iter.next)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_9839c1f5","line":4419,"in_reply_to":"7aa08908_26ffff66","updated":"2016-06-22 11:00:00.000000000","message":"I see some e.g. test_container_update_no_async_update,  test_container_update_bad_args but mostly the tests seem to check from request in to requests out.","commit_id":"771d6bd30aef3d1d7be3ff3488ff0b4000ae0688"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"dc9c86d8feab8bcacf5e19c71849dc283b7b5ad1","unresolved":false,"context_lines":[{"line_number":4430,"context_line":"            with mocked_http_conn("},{"line_number":4431,"context_line":"                    200, give_connect\u003dcapture_updates) as fake_conn:"},{"line_number":4432,"context_line":"                with fake_spawn():"},{"line_number":4433,"context_line":"                    resp \u003d req.get_response(self.object_controller)"},{"line_number":4434,"context_line":"            self.assertRaises(StopIteration, fake_conn.code_iter.next)"},{"line_number":4435,"context_line":"            self.assertEqual(resp.status_int, 201)"},{"line_number":4436,"context_line":"            self.assertEqual(len(container_updates), 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_e9489cce","line":4433,"updated":"2016-06-17 08:49:24.000000000","message":"Ah, the difference with POST case makes me nervous but yeah, this test just keeping the existing logic. Ok, I could be able to look at again after encryption landed.","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"dc9c86d8feab8bcacf5e19c71849dc283b7b5ad1","unresolved":false,"context_lines":[{"line_number":4473,"context_line":"            \u0027X-Object-Sysmeta-Container-Update-Override-Foo\u0027: \u0027bar\u0027,"},{"line_number":4474,"context_line":"            \u0027X-Backend-Container-Update-Override-Etag\u0027: \u0027ignored\u0027,"},{"line_number":4475,"context_line":"            \u0027X-Backend-Container-Update-Override-Content-Type\u0027: \u0027ignored\u0027,"},{"line_number":4476,"context_line":"            \u0027X-Backend-Container-Update-Override-Foo\u0027: \u0027ignored\u0027})"},{"line_number":4477,"context_line":""},{"line_number":4478,"context_line":"    def test_container_update_async(self):"},{"line_number":4479,"context_line":"        policy \u003d random.choice(list(POLICIES))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_e94d3cc5","line":4476,"updated":"2016-06-17 08:49:24.000000000","message":"Nice, middleware can win via sysmeta override :)","commit_id":"ba6c80cc5e542f7431b4358b85514cbf4d035ce4"}]}
