)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"9e5488e3c3c6658582dc608128d01240ac5fe38a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Addresses Expect: 100-continue client behavior"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updates to the object storage object services cases with"},{"line_number":10,"context_line":"Expect: 100-continue.   The current test case sends data"},{"line_number":11,"context_line":"along with the Expect: 100-continue header, which does"},{"line_number":12,"context_line":"not properly mimic expected behavior.    Updated the"},{"line_number":13,"context_line":"method to send no body with the proper content length"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_79198421","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":23},"updated":"2016-04-21 10:59:23.000000000","message":"Too many blanks","commit_id":"0454177378722d372ef09cb9ab451b3e75e1b805"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"9e5488e3c3c6658582dc608128d01240ac5fe38a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Updates to the object storage object services cases with"},{"line_number":10,"context_line":"Expect: 100-continue.   The current test case sends data"},{"line_number":11,"context_line":"along with the Expect: 100-continue header, which does"},{"line_number":12,"context_line":"not properly mimic expected behavior.    Updated the"},{"line_number":13,"context_line":"method to send no body with the proper content length"},{"line_number":14,"context_line":"along with the Expect header then sending the body once"},{"line_number":15,"context_line":"the 100-continue is received."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_59fda8af","line":12,"range":{"start_line":12,"start_character":37,"end_line":12,"end_character":40},"updated":"2016-04-21 10:59:23.000000000","message":"same here","commit_id":"0454177378722d372ef09cb9ab451b3e75e1b805"}],"tempest/services/object_storage/object_client.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b3f90a0365da049192c47406a323a4b42f666a3b","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            send_data \u003d None"},{"line_number":182,"context_line":"        elif \u0027Expect\u0027 in headers:"},{"line_number":183,"context_line":"            headers[\u0027content-length\u0027] \u003d len(data)"},{"line_number":184,"context_line":"            send_data \u003d None"},{"line_number":185,"context_line":"        else:"},{"line_number":186,"context_line":"            send_data \u003d data"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_6a732016","line":184,"updated":"2016-05-09 13:33:56.000000000","message":"A client MUST NOT send an Expect request-header field     (section\n        14.20) with the \"100-continue\" expectation if it does not intend\n        to send a request body.\n\n\nLooks like we will violate the rfc anyway, so the connection should be closed after this call to not make more trouble.\n\nOur normal/OK expect sequence should be.:\n1. connect to the server\n2. send request with expect 100-continue \u003cwithout body\u003e\n3. wait for 100 (tempest waiting..)  (we will stop !\u003d 100 )\n4. send the body\n5. wait for  the actual status\n\nThe tcp channel expected to be re usable at this state if the connection is keep-alive ..","commit_id":"27b0badcc495a6a73c7172b14142ad04410eaf78"},{"author":{"_account_id":20553,"name":"Brian Ober","email":"bober@us.ibm.com","username":"ober37"},"change_message_id":"a66dfe44d75357ccd64dfa52dd7b36ce9f5a1ed9","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            send_data \u003d None"},{"line_number":182,"context_line":"        elif \u0027Expect\u0027 in headers:"},{"line_number":183,"context_line":"            headers[\u0027content-length\u0027] \u003d len(data)"},{"line_number":184,"context_line":"            send_data \u003d None"},{"line_number":185,"context_line":"        else:"},{"line_number":186,"context_line":"            send_data \u003d data"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_9f4e7f6d","line":184,"in_reply_to":"dab17558_6a732016","updated":"2016-05-09 15:28:20.000000000","message":"Thanks for the comments.     I am trying to understand exactly what changes you are proposing here...\n\n1) I agree that checking for data \u003d None here and flagging not allowing it  due to RFC violation makes sense (Jordan raised a similar comment on using exceptions for cases such as this)\n\n2) I am not sure I fully understand your comment with respect to the connection closing.     Essentially the sequencing itself is controlled by the object services tests not in the object client.    For example your step #3 is an assert up at the object services test case level.    \n\nSo I can make the change for #1.    But I am not sure there is anything connection wise to do in this method since the sequencing is done in the test services itself.","commit_id":"27b0badcc495a6a73c7172b14142ad04410eaf78"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"7416786499d92e36549c407f91fb259f83278484","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            details \u003d pattern.format(status, 100)"},{"line_number":202,"context_line":"            raise exceptions.UnexpectedResponseCode(details)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # Remove the Expect header and send the request on the same connection"},{"line_number":205,"context_line":"        del headers[\u0027Expect\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        conn \u003d put_object_connection(self.base_url, container, object_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_69b92415","line":204,"updated":"2016-05-10 16:40:19.000000000","message":"IMHO you needs to get two response without repeating the request.\n\n 1. send  method + url + headers (without body)\n 2. wait for 100\n 3. send body\n 4  wait for 2xx","commit_id":"7a45234d25940a1ff3e54a49af60f88c4d55514e"},{"author":{"_account_id":20553,"name":"Brian Ober","email":"bober@us.ibm.com","username":"ober37"},"change_message_id":"8ce1821722432f7604f6c9fe550ce307a8a53d03","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            details \u003d pattern.format(status, 100)"},{"line_number":202,"context_line":"            raise exceptions.UnexpectedResponseCode(details)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # Remove the Expect header and send the request on the same connection"},{"line_number":205,"context_line":"        del headers[\u0027Expect\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        conn \u003d put_object_connection(self.base_url, container, object_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_df43a211","line":204,"in_reply_to":"dab17558_69b92415","updated":"2016-05-10 17:14:21.000000000","message":"yeah you are right.   thanks for the quick feedback.    I am hoping to get this out + unit test updates today.","commit_id":"7a45234d25940a1ff3e54a49af60f88c4d55514e"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"428383edd4123d6043ee0bf7f3d8d93b18bd7cdf","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":199,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":200,"context_line":"                                       method\u003dconn._method)"},{"line_number":201,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # toss the CRLF at the end of the response"},{"line_number":204,"context_line":"        response._safe_read(2)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_d364ade6","line":201,"updated":"2016-05-13 06:39:02.000000000","message":"Does the class offers anything similar which does not starts with _ ?","commit_id":"f2deb18a8a6df8d8ca849705e884133e429f9099"},{"author":{"_account_id":20553,"name":"Brian Ober","email":"bober@us.ibm.com","username":"ober37"},"change_message_id":"b57a221d8b166577a99cc313cdc44fece929d966","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":199,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":200,"context_line":"                                       method\u003dconn._method)"},{"line_number":201,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # toss the CRLF at the end of the response"},{"line_number":204,"context_line":"        response._safe_read(2)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_e8c9ee26","line":201,"in_reply_to":"dab17558_d364ade6","updated":"2016-05-13 11:06:41.000000000","message":"Not that I have found.","commit_id":"f2deb18a8a6df8d8ca849705e884133e429f9099"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"428383edd4123d6043ee0bf7f3d8d93b18bd7cdf","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                                       method\u003dconn._method)"},{"line_number":201,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # toss the CRLF at the end of the response"},{"line_number":204,"context_line":"        response._safe_read(2)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Expecting a 100 here, if not close and throw an exception"}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_133115ed","line":203,"updated":"2016-05-13 06:39:02.000000000","message":"\u0027toss\u0027 is word for writing it is about reading.","commit_id":"f2deb18a8a6df8d8ca849705e884133e429f9099"},{"author":{"_account_id":20553,"name":"Brian Ober","email":"bober@us.ibm.com","username":"ober37"},"change_message_id":"b57a221d8b166577a99cc313cdc44fece929d966","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                                       method\u003dconn._method)"},{"line_number":201,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # toss the CRLF at the end of the response"},{"line_number":204,"context_line":"        response._safe_read(2)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Expecting a 100 here, if not close and throw an exception"}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_e82d6efe","line":203,"in_reply_to":"dab17558_133115ed","updated":"2016-05-13 11:06:41.000000000","message":"toss here means to throw away.   It\u0027s the same comment used within the httplib in python for the same use case.","commit_id":"f2deb18a8a6df8d8ca849705e884133e429f9099"}],"tempest/tests/services/object_storage/test_object_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"dabc004a3a156747a9a7976caf3b36fbb8033aff","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        expected_hdrs \u003d {\u0027Expect\u0027: \u0027100-continue\u0027,"},{"line_number":66,"context_line":"                         \u0027X-Auth-Token\u0027: self.fake_auth.get_token(),"},{"line_number":67,"context_line":"                         \u0027content-length\u0027: 0}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # No data is expected and the content length will be overwritten"},{"line_number":70,"context_line":"        # to 0 since there is no data present"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_13f81ee5","line":67,"updated":"2016-05-06 09:13:45.000000000","message":"This test case shows that it would be better if the client raises an exception in that case. No data with a content-length of 100 ? That\u0027s a invalid request that the client should not even try to send. But the current code already has this pb, so no need to fix that in that patch.","commit_id":"27b0badcc495a6a73c7172b14142ad04410eaf78"}]}
