)]}'
{"doc/source/overview_large_objects.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"  so you can tell where it\u0027s getting its segments from."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* When updating a manifest object using a POST request, a"},{"line_number":61,"context_line":"  \u0027X-Object-Manifest\u0027 header must be included for the object to"},{"line_number":62,"context_line":"  continue to behave as a manifest object."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* The response\u0027s ``Content-Length`` for a ``GET`` or ``HEAD`` on the manifest"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3ac371cc_e18661da","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":21},"updated":"2016-08-18 20:23:59.000000000","message":"nit: rst\u0027s ``double back-ticks`` seems more consistent with the rest of the section.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"22dc3e05bc1664fb427dae22777a716ff91fa177","unresolved":false,"context_lines":[{"line_number":58,"context_line":"  so you can tell where it\u0027s getting its segments from."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* When updating a manifest object using a POST request, a"},{"line_number":61,"context_line":"  \u0027X-Object-Manifest\u0027 header must be included for the object to"},{"line_number":62,"context_line":"  continue to behave as a manifest object."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* The response\u0027s ``Content-Length`` for a ``GET`` or ``HEAD`` on the manifest"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ac06dbe_14ce22b4","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":21},"in_reply_to":"3ac371cc_e18661da","updated":"2016-08-22 02:38:10.000000000","message":"good catch - copy/paste error i expect","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"}],"swift/common/middleware/copy.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"            if \u0027X-Static-Large-Object\u0027 in source_resp.headers:"},{"line_number":489,"context_line":"                params[\u0027multipart-manifest\u0027] \u003d \u0027put\u0027"},{"line_number":490,"context_line":"            if \u0027X-Object-Manifest\u0027 in source_resp.headers:"},{"line_number":491,"context_line":"                del params[\u0027multipart-manifest\u0027]"},{"line_number":492,"context_line":"                sink_req.headers[\u0027X-Object-Manifest\u0027] \u003d \\"},{"line_number":493,"context_line":"                    source_resp.headers[\u0027X-Object-Manifest\u0027]"},{"line_number":494,"context_line":"            sink_req.params \u003d params"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_2ed7c8c0","line":491,"updated":"2016-08-18 20:23:59.000000000","message":"Would it be better for us to add\n\n if \u0027swift.post_as_copy\u0027 not in sink_req.environ:\n\nhere? Then sink_req should still have X-Object-Manifest from the client request.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"}],"swift/common/middleware/dlo.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    The manifest file should have no content. However, this is not enforced."},{"line_number":93,"context_line":"    If the manifest path itself conforms to container/prefix specified in"},{"line_number":94,"context_line":"    X-Object-Manifest, and if manifest has some content/data in it, it would"},{"line_number":95,"context_line":"    also be considered as segment and manifest\u0027s content will be part of the"},{"line_number":96,"context_line":"    concatenated GET response. The order of concatenation follows the usual DLO"},{"line_number":97,"context_line":"    logic which is - the order of concatenation adheres to order returned when"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_a1f1096d","line":94,"range":{"start_line":94,"start_character":4,"end_line":94,"end_character":21},"updated":"2016-08-18 20:23:59.000000000","message":"nit: we probably want ``double back-ticks`` here, too.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"}],"test/functional/tests.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":2686,"context_line":"        self.assertEqual(expected_contents, contents)"},{"line_number":2687,"context_line":""},{"line_number":2688,"context_line":"        # POST a modified x-object-manifest value"},{"line_number":2689,"context_line":"        new_x_o_m \u003d x_o_m.rstrip(\u0027lower\u0027) + \u0027upper\u0027"},{"line_number":2690,"context_line":"        file_item.post({\u0027x-object-meta-foo\u0027: \u0027bar\u0027,"},{"line_number":2691,"context_line":"                        \u0027x-object-manifest\u0027: new_x_o_m})"},{"line_number":2692,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_219239a0","line":2689,"updated":"2016-08-18 20:23:59.000000000","message":"Probably better as\n\n new_x_o_m \u003d x_o_m[:-5] + \u0027upper\u0027\n\nor just explicitly\n\n new_x_o_m \u003d \u0027%s/%s/seg_upper\u0027 % (\n     self.env.container.name, self.env.segment_prefix)","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b2adaa7b30aa6d8004fbf04689f53aecb68a9d79","unresolved":false,"context_lines":[{"line_number":2686,"context_line":"        self.assertEqual(expected_contents, contents)"},{"line_number":2687,"context_line":""},{"line_number":2688,"context_line":"        # POST a modified x-object-manifest value"},{"line_number":2689,"context_line":"        new_x_o_m \u003d x_o_m.rstrip(\u0027lower\u0027) + \u0027upper\u0027"},{"line_number":2690,"context_line":"        file_item.post({\u0027x-object-meta-foo\u0027: \u0027bar\u0027,"},{"line_number":2691,"context_line":"                        \u0027x-object-manifest\u0027: new_x_o_m})"},{"line_number":2692,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_b3156841","line":2689,"in_reply_to":"1ac06dbe_149d8259","updated":"2016-08-22 17:45:24.000000000","message":"It just seems like a minor abuse of rstrip() is all. Since we\u0027ve got the underscore in the path, it seems unlikely to lead to bugs, but in general I worry whether future-us will remember how\n\n \u0027foo bar baz quux\u0027.lstrip(\u0027foo bar\u0027) \u003d\u003d \u0027z quux\u0027","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"22dc3e05bc1664fb427dae22777a716ff91fa177","unresolved":false,"context_lines":[{"line_number":2686,"context_line":"        self.assertEqual(expected_contents, contents)"},{"line_number":2687,"context_line":""},{"line_number":2688,"context_line":"        # POST a modified x-object-manifest value"},{"line_number":2689,"context_line":"        new_x_o_m \u003d x_o_m.rstrip(\u0027lower\u0027) + \u0027upper\u0027"},{"line_number":2690,"context_line":"        file_item.post({\u0027x-object-meta-foo\u0027: \u0027bar\u0027,"},{"line_number":2691,"context_line":"                        \u0027x-object-manifest\u0027: new_x_o_m})"},{"line_number":2692,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_149d8259","line":2689,"in_reply_to":"3ac371cc_219239a0","updated":"2016-08-22 02:38:10.000000000","message":"I am still thinking on this one.  we can chat on Monday.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"},{"line_number":2729,"context_line":"        # x-object-manifest header will cause the existing x-object-manifest"},{"line_number":2730,"context_line":"        # header to be lost"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":"        # create a new manifest for this test to avoid test coupling."},{"line_number":2733,"context_line":"        x_o_m \u003d self.env.container.file(\u0027man1\u0027).info()[\u0027x_object_manifest\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_41f815c5","line":2730,"updated":"2016-08-18 20:23:59.000000000","message":"Should we include a functest for the converse? That POSTing an X-Object-Manifest header to a regular object turns it into a manifest?","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"ef6861b095cb9e2f84c63c42b18b0c9d505c541e","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"},{"line_number":2729,"context_line":"        # x-object-manifest header will cause the existing x-object-manifest"},{"line_number":2730,"context_line":"        # header to be lost"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":"        # create a new manifest for this test to avoid test coupling."},{"line_number":2733,"context_line":"        x_o_m \u003d self.env.container.file(\u0027man1\u0027).info()[\u0027x_object_manifest\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_ad3981d9","line":2730,"in_reply_to":"1ac06dbe_afe85ee3","updated":"2016-08-29 16:34:09.000000000","message":"argh, the test i had run was setup in a way that the manifest name matched the prefix.  sorry about that!","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b2adaa7b30aa6d8004fbf04689f53aecb68a9d79","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"},{"line_number":2729,"context_line":"        # x-object-manifest header will cause the existing x-object-manifest"},{"line_number":2730,"context_line":"        # header to be lost"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":"        # create a new manifest for this test to avoid test coupling."},{"line_number":2733,"context_line":"        x_o_m \u003d self.env.container.file(\u0027man1\u0027).info()[\u0027x_object_manifest\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_afe85ee3","line":2730,"in_reply_to":"1ac06dbe_f41266b3","updated":"2016-08-22 17:45:24.000000000","message":"\u003e Because if there are contents, then that will prefix the large object contents on a GET.\n\nDoes it? Tracing resp_iter through handle_request [1], it doesn\u0027t seem like it should. And experimentally, that doesn\u0027t seem to happen for me [2]. Maybe during your testing the x-o-m header had a prefix that would include the manifest object?\n\nAs to your original question, though, I can\u0027t think of a good reason. A non-zero-byte DLO manifest seems an awful lot like dark data. Not quite so dark as objects that never show up in container listings, but still generally inaccessible and filling up your quota in a non-obvious way. One more reason that I would\u0027ve liked to see DLO-ness only set on PUT, where we could actually enforce that they be zero-bytes :-(\n\n[1] https://github.com/openstack/swift/blob/2.9.0/swift/common/middleware/dlo.py#L332-L351\n\n[2] http://paste.openstack.org/show/562255/","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"e07945ccfa593b4950095f4f79cfab11b1f78359","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"},{"line_number":2729,"context_line":"        # x-object-manifest header will cause the existing x-object-manifest"},{"line_number":2730,"context_line":"        # header to be lost"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":"        # create a new manifest for this test to avoid test coupling."},{"line_number":2733,"context_line":"        x_o_m \u003d self.env.container.file(\u0027man1\u0027).info()[\u0027x_object_manifest\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_acc0ce2b","line":2730,"in_reply_to":"3ac371cc_41f815c5","updated":"2016-08-19 05:12:05.000000000","message":"+1. with that, these tests will cover the three cases. with and without X_O_M, and X_O_M at a regular object.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"22dc3e05bc1664fb427dae22777a716ff91fa177","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"},{"line_number":2729,"context_line":"        # x-object-manifest header will cause the existing x-object-manifest"},{"line_number":2730,"context_line":"        # header to be lost"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":"        # create a new manifest for this test to avoid test coupling."},{"line_number":2733,"context_line":"        x_o_m \u003d self.env.container.file(\u0027man1\u0027).info()[\u0027x_object_manifest\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_f41266b3","line":2730,"in_reply_to":"3ac371cc_acc0ce2b","updated":"2016-08-22 02:38:10.000000000","message":"Sure.  This brings up something I have wondered about before.  Is there ever a reason that somebody would want their DLO manifest to have contents?  Because if there are contents, then that will prefix the large object contents on a GET.  I would expect the only time a user would change a regular object to a manifest is when the object has an empty body.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":2722,"context_line":"        # verify that updated manifest points new content"},{"line_number":2723,"context_line":"        expected_contents \u003d \u0027\u0027.join([(c * 10) for c in \u0027abcde\u0027])"},{"line_number":2724,"context_line":"        contents \u003d file_item.read(parms\u003d{})"},{"line_number":2725,"context_line":"        self.assertEqual(expected_contents, contents)"},{"line_number":2726,"context_line":""},{"line_number":2727,"context_line":"    def test_dlo_post_without_manifest_header(self):"},{"line_number":2728,"context_line":"        # verify that a POST to a DLO manifest object with no"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_a5520133","line":2725,"updated":"2016-09-08 14:22:01.000000000","message":"ok. fails with fix reverted:\n\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAIL: test_dlo_post_with_manifest_header (test.functional.tests.TestDlo)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/swift/swift/test/functional/tests.py\", line 2696, in test_dlo_post_with_manifest_header\n    self.assertIn((\u0027x-object-manifest\u0027, new_x_o_m), resp_headers)\nAssertionError: (\u0027x-object-manifest\u0027, \u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_upper\u0027) not found in [(\u0027content-length\u0027, \u002750\u0027), (\u0027date\u0027, \u0027Thu, 08 Sep 2016 14:12:30 GMT\u0027), (\u0027x-object-manifest\u0027, \u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_lower\u0027), (\u0027accept-ranges\u0027, \u0027bytes\u0027), (\u0027last-modified\u0027, \u0027Thu, 08 Sep 2016 14:12:31 GMT\u0027), (\u0027etag\u0027, \u0027\"c88a9b01deca4035c4fb9ccffdd2f343\"\u0027), (\u0027x-timestamp\u0027, \u00271473343950.21959\u0027), (\u0027x-trans-id\u0027, \u0027tx36d3db2f64724bafa9c22-0057d171ce\u0027), (\u0027x-object-meta-foo\u0027, \u0027bar\u0027), (\u0027content-type\u0027, \u0027application/octet-stream\u0027)]\n    \"\"\"Fail immediately, with the given message.\"\"\"\n\u003e\u003e  raise self.failureException(\u0027(\\\u0027x-object-manifest\\\u0027, \\\u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_upper\\\u0027) not found in [(\\\u0027content-length\\\u0027, \\\u002750\\\u0027), (\\\u0027date\\\u0027, \\\u0027Thu, 08 Sep 2016 14:12:30 GMT\\\u0027), (\\\u0027x-object-manifest\\\u0027, \\\u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_lower\\\u0027), (\\\u0027accept-ranges\\\u0027, \\\u0027bytes\\\u0027), (\\\u0027last-modified\\\u0027, \\\u0027Thu, 08 Sep 2016 14:12:31 GMT\\\u0027), (\\\u0027etag\\\u0027, \\\u0027\"c88a9b01deca4035c4fb9ccffdd2f343\"\\\u0027), (\\\u0027x-timestamp\\\u0027, \\\u00271473343950.21959\\\u0027), (\\\u0027x-trans-id\\\u0027, \\\u0027tx36d3db2f64724bafa9c22-0057d171ce\\\u0027), (\\\u0027x-object-meta-foo\\\u0027, \\\u0027bar\\\u0027), (\\\u0027content-type\\\u0027, \\\u0027application/octet-stream\\\u0027)]\u0027)","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":2754,"context_line":""},{"line_number":2755,"context_line":"        # verify that object is no longer a manifest"},{"line_number":2756,"context_line":"        contents \u003d file_item.read(parms\u003d{})"},{"line_number":2757,"context_line":"        self.assertEqual(\u0027manifest-contents\u0027, contents)"},{"line_number":2758,"context_line":""},{"line_number":2759,"context_line":"    def test_dlo_post_with_manifest_regular_object(self):"},{"line_number":2760,"context_line":"        # verify that performing a POST to a regular object"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_652399bd","line":2757,"updated":"2016-09-08 14:22:01.000000000","message":"ok fails with fix reverted:\n\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAIL: test_dlo_post_without_manifest_header (test.functional.tests.TestDlo)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/swift/swift/test/functional/tests.py\", line 2749, in test_dlo_post_without_manifest_header\n    self.assertNotIn(\u0027x_object_manifest\u0027, info)\nAssertionError: \u0027x_object_manifest\u0027 unexpectedly found in {\u0027content_length\u0027: 50, \u0027last_modified\u0027: \u0027Thu, 08 Sep 2016 14:12:31 GMT\u0027, \u0027etag\u0027: \u0027c88a9b01deca4035c4fb9ccffdd2f343\u0027, \u0027content_type\u0027: \u0027application/octet-stream\u0027, \u0027x_object_manifest\u0027: \u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_lower\u0027}\n    \"\"\"Fail immediately, with the given message.\"\"\"\n\u003e\u003e  raise self.failureException(\"\u0027x_object_manifest\u0027 unexpectedly found in {\u0027content_length\u0027: 50, \u0027last_modified\u0027: \u0027Thu, 08 Sep 2016 14:12:31 GMT\u0027, \u0027etag\u0027: \u0027c88a9b01deca4035c4fb9ccffdd2f343\u0027, \u0027content_type\u0027: \u0027application/octet-stream\u0027, \u0027x_object_manifest\u0027: \u0027398e5060a287471789f739b860e29bb3/8b25f7035a/seg_lower\u0027}\")","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":2781,"context_line":"        contents \u003d file_item.read(parms\u003d{})"},{"line_number":2782,"context_line":"        self.assertEqual(expected_contents, contents)"},{"line_number":2783,"context_line":"        file_item.info()"},{"line_number":2784,"context_line":"        resp_headers \u003d file_item.conn.response.getheaders()"},{"line_number":2785,"context_line":"        self.assertIn((\u0027x-object-manifest\u0027, x_o_m), resp_headers)"},{"line_number":2786,"context_line":""},{"line_number":2787,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_c27b7bf3","line":2784,"updated":"2016-09-08 14:22:01.000000000","message":"nit: this inspection of resp_headers isn\u0027t necessary in this case (although I do remember us discussing this pattern?):\n\n        info \u003dfile_item.info()\n        self.assertIn(\u0027x_object_manifest\u0027, info)\n        self.assertEqual(x_o_m, info[\u0027x_object_manifest\u0027])\n\nno matter, either works.","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"}],"test/unit/common/middleware/test_copy.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dd28be2389d8319c66a0235614d24451033348c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.app.register(\u0027GET\u0027, \u0027/v1/a/c/o\u0027, swob.HTTPOk,"},{"line_number":215,"context_line":"                          {\u0027X-Object-Manifest\u0027: \u0027orig_manifest\u0027}, \u0027passed\u0027)"},{"line_number":216,"context_line":"        self.app.register(\u0027PUT\u0027, \u0027/v1/a/c/o\u0027, swob.HTTPAccepted,"},{"line_number":217,"context_line":"                          {\u0027X-Object-Manifest\u0027: \u0027new_manifest\u0027})"},{"line_number":218,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027POST\u0027,"},{"line_number":219,"context_line":"                            headers\u003d{\u0027X-Object-Manifest\u0027: \u0027new_manifest\u0027})"},{"line_number":220,"context_line":"        status, headers, body \u003d self.call_ssc(req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_a1b909ce","line":217,"updated":"2016-08-18 20:23:59.000000000","message":"nit: This isn\u0027t quite representative of the PUT response -- it would respond 201 Created (which we translate to a 202 in the copy middleware, although I suppose that\u0027s already tested in test_POST_as_COPY_201_return_202), and not include the X-Object-Manifest header.","commit_id":"31defb90ed2e53a186c042bccdb6ef5dc1be0aa3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        calls \u003d self.app.calls_with_headers"},{"line_number":223,"context_line":"        method, path, req_headers \u003d calls[1]"},{"line_number":224,"context_line":"        self.assertEqual(\u0027PUT\u0027, method)"},{"line_number":225,"context_line":"        self.assertEqual(\u0027new_manifest\u0027, req_headers[\u0027x-object-manifest\u0027])"},{"line_number":226,"context_line":"        self.assertEqual(len(self.authorized), 1)"},{"line_number":227,"context_line":"        self.assertRequestEqual(req, self.authorized[0])"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_afeca0bb","line":225,"updated":"2016-09-08 14:22:01.000000000","message":"yep. with fix reverted:\n\n  Failure\nExpected :\u0027new_manifest\u0027\nActual   :\u0027orig_manifest\u0027\n \u003cClick to see difference\u003e\n\nTraceback (most recent call last):\n  File \"/home/anc/0dev/swift/test/unit/common/middleware/test_copy.py\", line 225, in test_POST_as_COPY_dynamic_large_object_manifest\n    self.assertEqual(\u0027new_manifest\u0027, req_headers[\u0027x-object-manifest\u0027])\nAssertionError: \u0027new_manifest\u0027 !\u003d \u0027orig_manifest\u0027","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        calls \u003d self.app.calls_with_headers"},{"line_number":239,"context_line":"        method, path, req_headers \u003d calls[1]"},{"line_number":240,"context_line":"        self.assertEqual(\u0027PUT\u0027, method)"},{"line_number":241,"context_line":"        self.assertNotIn(\u0027X-Object-Manifest\u0027, req_headers)"},{"line_number":242,"context_line":"        self.assertEqual(len(self.authorized), 1)"},{"line_number":243,"context_line":"        self.assertRequestEqual(req, self.authorized[0])"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_efe228d4","line":241,"updated":"2016-09-08 14:22:01.000000000","message":"yep. with fix reverted:\n\n  Failure\nTraceback (most recent call last):\n  File \"/home/anc/0dev/swift/test/unit/common/middleware/test_copy.py\", line 241, in test_POST_as_COPY_dynamic_large_object_no_manifest\n    self.assertNotIn(\u0027X-Object-Manifest\u0027, req_headers)\nAssertionError: \u0027X-Object-Manifest\u0027 unexpectedly found in {\u0027Host\u0027: \u0027localhost:80\u0027, \u0027X-Object-Manifest\u0027: \u0027orig_manifest\u0027, \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027, \u0027Content-Length\u0027: \u00276\u0027, \u0027User-Agent\u0027: \u0027Bruce Wayne\u0027}","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"52f5ec0494d89e8c8663be026bf05f65c9e1be82","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.assertNotIn(\u0027X-Object-Manifest\u0027, req_headers)"},{"line_number":242,"context_line":"        self.assertEqual(len(self.authorized), 1)"},{"line_number":243,"context_line":"        self.assertRequestEqual(req, self.authorized[0])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test_basic_put_with_x_copy_from(self):"},{"line_number":246,"context_line":"        self.app.register(\u0027GET\u0027, \u0027/v1/a/c/o\u0027, swob.HTTPOk, {}, \u0027passed\u0027)"},{"line_number":247,"context_line":"        self.app.register(\u0027PUT\u0027, \u0027/v1/a/c/o2\u0027, swob.HTTPCreated, {})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_2f5a50f2","line":244,"updated":"2016-09-08 14:22:01.000000000","message":"ok. test_basic_DLO_manifest already covers the case of a regular copy of a DLO manifest","commit_id":"06ff865d19b522c48e23637d1234fc8f6b9401ab"}]}
