)]}'
{"api-ref/source/parameters.yaml":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"8e69529926105abcf64888b455cb4651c772d98f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"ETag_obj_req:"},{"line_number":161,"context_line":"  description: |"},{"line_number":162,"context_line":"    The MD5 checksum value of the request body. For"},{"line_number":163,"context_line":"    example, the MD5 checksum value of the object content. For"},{"line_number":164,"context_line":"    manifest objects, this value is the MD5 checksum of the"},{"line_number":165,"context_line":"    concatenated string of ETag values for each of the segments in"},{"line_number":166,"context_line":"    the manifest. You are strongly recommended to compute"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a6eadb0_9756845a","line":163,"updated":"2016-12-14 20:52:07.000000000","message":"The second sentence here is seems redundant.  Maybe just have \u0027The MD5 checksum value of the object content.  For ...\u0027","commit_id":"a070076a519029ddec55dcdf0403399538db6b0a"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"498557182ce64ab64a8769bb05faa495d47030f7","unresolved":false,"context_lines":[{"line_number":160,"context_line":"ETag_obj_req:"},{"line_number":161,"context_line":"  description: |"},{"line_number":162,"context_line":"    The MD5 checksum value of the request body. For"},{"line_number":163,"context_line":"    example, the MD5 checksum value of the object content. For"},{"line_number":164,"context_line":"    manifest objects, this value is the MD5 checksum of the"},{"line_number":165,"context_line":"    concatenated string of ETag values for each of the segments in"},{"line_number":166,"context_line":"    the manifest. You are strongly recommended to compute"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da4df55a_ac653ae2","line":163,"in_reply_to":"1a6eadb0_9756845a","updated":"2016-12-22 15:02:50.000000000","message":"I think I\u0027d leave it as is. I think it\u0027s intentional, we do want to specify that it is of \"Request body\". It also would help differentiate from description of line#152","commit_id":"a070076a519029ddec55dcdf0403399538db6b0a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3fb2874297324a3cb74cbea5ab770a7ea71d42c4","unresolved":false,"context_lines":[{"line_number":161,"context_line":"  description: |"},{"line_number":162,"context_line":"    The MD5 checksum value of the request body. For"},{"line_number":163,"context_line":"    example, the MD5 checksum value of the object content. For"},{"line_number":164,"context_line":"    manifest objects, this value is the MD5 checksum of the"},{"line_number":165,"context_line":"    concatenated string of ETag values for each of the segments in"},{"line_number":166,"context_line":"    the manifest. You are strongly recommended to compute"},{"line_number":167,"context_line":"    the MD5 checksum value and include it in the request. This "}],"source_content_type":"text/x-yaml","patch_set":12,"id":"7a3c09a3_9ea5ada3","line":164,"updated":"2017-01-16 19:11:35.000000000","message":"SLO manifest only yeah?  DLO is just zero-byte md5?","commit_id":"fd6edf7bc5de2309edd744d20c29d367dc8785df"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"4fd647010583470bae97d6a0129c1bb0b1168273","unresolved":false,"context_lines":[{"line_number":161,"context_line":"  description: |"},{"line_number":162,"context_line":"    The MD5 checksum value of the request body. For"},{"line_number":163,"context_line":"    example, the MD5 checksum value of the object content. For"},{"line_number":164,"context_line":"    manifest objects, this value is the MD5 checksum of the"},{"line_number":165,"context_line":"    concatenated string of ETag values for each of the segments in"},{"line_number":166,"context_line":"    the manifest. You are strongly recommended to compute"},{"line_number":167,"context_line":"    the MD5 checksum value and include it in the request. This "}],"source_content_type":"text/x-yaml","patch_set":12,"id":"7a3c09a3_f354fbfe","line":164,"in_reply_to":"7a3c09a3_9ea5ada3","updated":"2017-01-17 15:24:05.000000000","message":"Yup, will do a follow-up for this. Thanks!","commit_id":"fd6edf7bc5de2309edd744d20c29d367dc8785df"}],"doc/source/api/large_objects.rst":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"8e69529926105abcf64888b455cb4651c772d98f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"json content—not the length of the segment objects. However, after the"},{"line_number":107,"context_line":"**PUT** operation completes, the ``Content-Length`` metadata is set to"},{"line_number":108,"context_line":"the total length of all the object segments. The ``ETag`` request"},{"line_number":109,"context_line":"header, when used in the **PUT** operation must contain the MD5 checksum"},{"line_number":110,"context_line":"of the concatenated ``ETag`` values of the object segments. You can also"},{"line_number":111,"context_line":"set the ``Content-Type`` request header and custom object metadata."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a6eadb0_f28b4666","line":109,"updated":"2016-12-14 20:52:07.000000000","message":"nit: This might read smoother as:\n\"When using the ``ETag`` request header in a **PUT** operation, it must contain the MD5 checksum of the ...\"","commit_id":"a070076a519029ddec55dcdf0403399538db6b0a"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"498557182ce64ab64a8769bb05faa495d47030f7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"json content—not the length of the segment objects. However, after the"},{"line_number":107,"context_line":"**PUT** operation completes, the ``Content-Length`` metadata is set to"},{"line_number":108,"context_line":"the total length of all the object segments. The ``ETag`` request"},{"line_number":109,"context_line":"header, when used in the **PUT** operation must contain the MD5 checksum"},{"line_number":110,"context_line":"of the concatenated ``ETag`` values of the object segments. You can also"},{"line_number":111,"context_line":"set the ``Content-Type`` request header and custom object metadata."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da4df55a_8c4b162b","line":109,"in_reply_to":"1a6eadb0_f28b4666","updated":"2016-12-22 15:02:50.000000000","message":"Done","commit_id":"a070076a519029ddec55dcdf0403399538db6b0a"}],"swift/common/middleware/slo.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4c47f0c4556883b3adf255c1d5471bd6788d71af","unresolved":false,"context_lines":[{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"            req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        env \u003d req.environ"},{"line_number":987,"context_line":"        if not env.get(\u0027CONTENT_TYPE\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_adaacb17","line":984,"updated":"2016-10-26 16:41:45.000000000","message":"I\u0027m inclined to do this regardless of whether the client provided an etag or not.","commit_id":"03eefc7d45ba88b5de2902071ca90c4e1a1c6a1e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ac0e6553068657b9bff86a23a00a087cfaab1e54","unresolved":false,"context_lines":[{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"            req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        env \u003d req.environ"},{"line_number":987,"context_line":"        if not env.get(\u0027CONTENT_TYPE\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_ba7d45e9","line":984,"in_reply_to":"3a71b18c_4f5ab550","updated":"2016-12-02 20:00:27.000000000","message":"It provides validation that the object-server wrote what we created correctly. Plus it\u0027s fairly trivial for us to compute, and there\u0027s no added overhead on the object-server (it was going to compute that MD5 anyway).\n\nIt\u0027s like how we always set footers[\u0027Etag\u0027] for crypto at https://github.com/openstack/swift/blob/2.11.0/swift/common/middleware/crypto/encrypter.py#L121 -- it doesn\u0027t matter whether the client sent their own etag; we know what we expect it to be, so we ought to send it.","commit_id":"03eefc7d45ba88b5de2902071ca90c4e1a1c6a1e"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"171486fcc120f7acb1a2725cbd39b910413a4b25","unresolved":false,"context_lines":[{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"            req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        env \u003d req.environ"},{"line_number":987,"context_line":"        if not env.get(\u0027CONTENT_TYPE\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_4f5ab550","line":984,"in_reply_to":"ba5da102_adaacb17","updated":"2016-12-02 19:38:25.000000000","message":"Interesting.  Is there a reason why?  That means that there will be an unnecessary validation check on the backend if the client does not supply the etag.","commit_id":"03eefc7d45ba88b5de2902071ca90c4e1a1c6a1e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"780cd9da48f53fbce1098104ef959536bfb639f8","unresolved":false,"context_lines":[{"line_number":964,"context_line":"                out_content_type, {}, problem_segments)"},{"line_number":965,"context_line":"            raise HTTPBadRequest(resp_body, content_type\u003dout_content_type)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        slo_etag \u003d slo_etag.hexdigest()"},{"line_number":968,"context_line":"        req.headers.update({"},{"line_number":969,"context_line":"            SYSMETA_SLO_ETAG: slo_etag,"},{"line_number":970,"context_line":"            SYSMETA_SLO_SIZE: total_size,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_b0dd9744","line":967,"updated":"2016-10-28 09:20:53.000000000","message":"*this* would be the ideal place for\n\n\u0027if client_etag and client_etag !\u003d slo_etag\u0027","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66eda9aaa01e93b58885aabdcaa139aa8aa99503","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        client_etag \u003d req.headers.get(\u0027Etag\u0027)"},{"line_number":980,"context_line":"        body_etag \u003d md5(json_data).hexdigest()"},{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"        req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_36ca7ba2","line":982,"updated":"2016-10-27 09:36:06.000000000","message":"nit: now we could simplify this to\n\n if client_etag and client_etag !\u003d slo_etag:","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2852ece7c960ac45e5a498ea98b499d182ce8333","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        client_etag \u003d req.headers.get(\u0027Etag\u0027)"},{"line_number":980,"context_line":"        body_etag \u003d md5(json_data).hexdigest()"},{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"        req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_c3bb2771","line":982,"in_reply_to":"ba5da102_301b471d","updated":"2016-10-28 09:37:03.000000000","message":"Good call. yeah, we should totally get rid of the body_etag variable; we only ever use that value once.","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"780cd9da48f53fbce1098104ef959536bfb639f8","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        client_etag \u003d req.headers.get(\u0027Etag\u0027)"},{"line_number":980,"context_line":"        body_etag \u003d md5(json_data).hexdigest()"},{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"        req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_301b471d","line":982,"in_reply_to":"ba5da102_36ca7ba2","updated":"2016-10-28 09:20:53.000000000","message":"i got *so* confused about body_etag vs. slo_etag","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"0c3a1b5ba79bc34f22f7829c583a2028fc1ed6ca","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        client_etag \u003d req.headers.get(\u0027Etag\u0027)"},{"line_number":980,"context_line":"        body_etag \u003d md5(json_data).hexdigest()"},{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"        req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_b5601037","line":982,"in_reply_to":"ba5da102_c3bb2771","updated":"2016-10-29 11:50:14.000000000","message":"yeah, I was using this in an earlier change, I didn\u0027t it cleanup, my bad.","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"780cd9da48f53fbce1098104ef959536bfb639f8","unresolved":false,"context_lines":[{"line_number":981,"context_line":"        if client_etag:"},{"line_number":982,"context_line":"            if client_etag !\u003d slo_etag:"},{"line_number":983,"context_line":"                raise HTTPUnprocessableEntity(request\u003dreq)"},{"line_number":984,"context_line":"        req.headers[\u0027Etag\u0027] \u003d body_etag"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        env \u003d req.environ"},{"line_number":987,"context_line":"        if not env.get(\u0027CONTENT_TYPE\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_90bfb3cf","line":984,"updated":"2016-10-28 09:20:53.000000000","message":"yeah I\u0027m cool with always setting forcing the req etag to md5 of json_data","commit_id":"a9c6abe16d26b643169d875151d4788e18d668e0"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"561a9b1cc4e4125db7e576449963a09f74c1f030","unresolved":false,"context_lines":[{"line_number":89,"context_line":"sub-SLO in the manifest to the parent SLO."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"While uploading a manifest user can send Etag for verification. It needs to be"},{"line_number":92,"context_line":"md5 of the segments\u0027 etags. For example if the manifest to be uploaded looks"},{"line_number":93,"context_line":"like this:"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  .. code::"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_c9132565","line":92,"updated":"2016-12-02 22:29:35.000000000","message":"grammatic nit: Change to \"While uploading a manifest, a user can send ...\"","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"62efa17696aa13d189e4b5a0fb27a8a236f63b44","unresolved":false,"context_lines":[{"line_number":89,"context_line":"sub-SLO in the manifest to the parent SLO."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"While uploading a manifest user can send Etag for verification. It needs to be"},{"line_number":92,"context_line":"md5 of the segments\u0027 etags. For example if the manifest to be uploaded looks"},{"line_number":93,"context_line":"like this:"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  .. code::"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_516473e4","line":92,"in_reply_to":"3a71b18c_c9132565","updated":"2016-12-07 15:08:20.000000000","message":"Done","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"561a9b1cc4e4125db7e576449963a09f74c1f030","unresolved":false,"context_lines":[{"line_number":103,"context_line":"      \"size_bytes\": 10485760,"},{"line_number":104,"context_line":"      \"range\": \"1048576-2097151\"}]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Etag of the above manifest would be md5 of etagoftheobjectsegment1 and"},{"line_number":107,"context_line":"etagoftheobjectsegment2. This could be computed in the following way:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  .. code::"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_94006003","line":106,"updated":"2016-12-02 22:29:35.000000000","message":"grammatic nit: Change to \"the Etag of ...\"","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"62efa17696aa13d189e4b5a0fb27a8a236f63b44","unresolved":false,"context_lines":[{"line_number":103,"context_line":"      \"size_bytes\": 10485760,"},{"line_number":104,"context_line":"      \"range\": \"1048576-2097151\"}]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Etag of the above manifest would be md5 of etagoftheobjectsegment1 and"},{"line_number":107,"context_line":"etagoftheobjectsegment2. This could be computed in the following way:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  .. code::"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_915e0b11","line":106,"in_reply_to":"3a71b18c_94006003","updated":"2016-12-07 15:08:20.000000000","message":"Done","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"561a9b1cc4e4125db7e576449963a09f74c1f030","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        for seg_data in data_for_storage:"},{"line_number":1001,"context_line":"            if seg_data.get(\u0027range\u0027):"},{"line_number":1002,"context_line":"                slo_etag.update(\u0027%s:%s;\u0027 % (seg_data[\u0027hash\u0027],"},{"line_number":1003,"context_line":"                                            seg_data[\u0027range\u0027]))"},{"line_number":1004,"context_line":"            else:"},{"line_number":1005,"context_line":"                slo_etag.update(seg_data[\u0027hash\u0027])"},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_e0faabbc","line":1003,"updated":"2016-12-02 22:29:35.000000000","message":"Maybe add an example in the class docs above of what an etag would look like if you had a range for one of the segments.  Unless that is well documented somewhere else - it might not be clear that it is the hash:range; that is used.","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"62efa17696aa13d189e4b5a0fb27a8a236f63b44","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        for seg_data in data_for_storage:"},{"line_number":1001,"context_line":"            if seg_data.get(\u0027range\u0027):"},{"line_number":1002,"context_line":"                slo_etag.update(\u0027%s:%s;\u0027 % (seg_data[\u0027hash\u0027],"},{"line_number":1003,"context_line":"                                            seg_data[\u0027range\u0027]))"},{"line_number":1004,"context_line":"            else:"},{"line_number":1005,"context_line":"                slo_etag.update(seg_data[\u0027hash\u0027])"},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_31ae17e8","line":1003,"in_reply_to":"3a71b18c_e0faabbc","updated":"2016-12-07 15:08:20.000000000","message":"Nice point! Updated.","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"ebfc35644ec73af4d72ece6cceca5295eccbef4f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"  .. code::"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    echo -n \u0027etagoftheobjectsegmentone:1-2;etagoftheobjectsegmenttwo:3-4;\u0027 \\"},{"line_number":131,"context_line":"    | md5sum"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"-------------------"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_b838e33e","line":131,"updated":"2016-12-12 03:41:01.000000000","message":"nice!  Thanks","commit_id":"3423abce8568d2ce0f38f05b4f0053fec1e8dcaa"}],"test/functional/test_slo.py":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"561a9b1cc4e4125db7e576449963a09f74c1f030","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                    \u0027etag\u0027: hashlib.md5(\u0027a\u0027 * 1024 * 1024).hexdigest(),"},{"line_number":461,"context_line":"                    \u0027path\u0027: \u0027/%s/%s\u0027 % (self.env.container.name, \u0027seg_a\u0027)}]),"},{"line_number":462,"context_line":"                parms\u003d{\u0027multipart-manifest\u0027: \u0027put\u0027},"},{"line_number":463,"context_line":"                hdrs\u003d{\u0027Etag\u0027: \u0027asdadsfasdfjshdfjh\u0027})"},{"line_number":464,"context_line":"        except ResponseError as err:"},{"line_number":465,"context_line":"            self.assertEqual(422, err.status)"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_d4a01846","line":463,"updated":"2016-12-02 22:29:35.000000000","message":"nit: may as well make the etag reveal it is a mismatch from the string itself - like you did in the unit test. maybe just \u0027NOTetagofthesegments\u0027","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"62efa17696aa13d189e4b5a0fb27a8a236f63b44","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                    \u0027etag\u0027: hashlib.md5(\u0027a\u0027 * 1024 * 1024).hexdigest(),"},{"line_number":461,"context_line":"                    \u0027path\u0027: \u0027/%s/%s\u0027 % (self.env.container.name, \u0027seg_a\u0027)}]),"},{"line_number":462,"context_line":"                parms\u003d{\u0027multipart-manifest\u0027: \u0027put\u0027},"},{"line_number":463,"context_line":"                hdrs\u003d{\u0027Etag\u0027: \u0027asdadsfasdfjshdfjh\u0027})"},{"line_number":464,"context_line":"        except ResponseError as err:"},{"line_number":465,"context_line":"            self.assertEqual(422, err.status)"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_b17227af","line":463,"in_reply_to":"3a71b18c_d4a01846","updated":"2016-12-07 15:08:20.000000000","message":"Done","commit_id":"238f9e0122833faab597fcdd4f2bfe9e9fbe3645"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3fb2874297324a3cb74cbea5ab770a7ea71d42c4","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            method\u003d\u0027PUT\u0027, body\u003dtest_json_data)"},{"line_number":458,"context_line":"        req.headers[\u0027Etag\u0027] \u003d \u0027\"%s\"\u0027 % md5hex(\u0027etagoftheobjectsegment\u0027)"},{"line_number":459,"context_line":"        resp \u003d req.get_response(self.slo)"},{"line_number":460,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def test_manifest_put_bad_etag_fail(self):"},{"line_number":463,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_be76e9d4","line":460,"updated":"2017-01-16 19:11:35.000000000","message":"liberal in what you accept - i like it.","commit_id":"fd6edf7bc5de2309edd744d20c29d367dc8785df"}]}
