)]}'
{"swift/obj/ssync_receiver.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fc331be466159a456c18345323cf6e23b9d69095","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            #   ValueError: invalid literal for int() with base 16"},{"line_number":141,"context_line":"            # in tests. Note we disconnect shortly after receiving a non-200"},{"line_number":142,"context_line":"            # response in the sender code, so this is not *so* crazy to do."},{"line_number":143,"context_line":"            request.environ[\u0027wsgi.input\u0027].chunked_input \u003d False"},{"line_number":144,"context_line":"            raise"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __call__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_7e2040b1","line":143,"updated":"2019-05-23 22:28:38.000000000","message":"This makes me nervous. It meant I could get tests passing on old eventlet again, but I\u0027m not sure how they passed *before* :-/\n\nFWIW, testing against master with eventlet\u003d\u003d0.17.4 on my local machine *fails*:\n\nFAIL: test_SSYNC_disconnect (test.unit.obj.test_ssync_receiver.TestSsyncRxServer)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/tburke/code/swift/test/unit/obj/test_ssync_receiver.py\", line 2084, in test_SSYNC_disconnect\n    stderr.getvalue())\nAssertionError: \u0027ValueError: invalid literal for int() with base 16\u0027 unexpectedly found in \u0027...\u0027\n\nwhere the cleaned-up version of that captured stderr is\n\nTraceback (most recent call last):\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/greenpool.py\", line 82, in _spawn_n_impl\n    func(*args, **kwargs)\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/wsgi.py\", line 686, in process_request\n    proto.__init__(sock, address, self)\n  File \"/usr/lib64/python2.7/SocketServer.py\", line 652, in __init__\n    self.handle()\n  File \"/usr/lib64/python2.7/BaseHTTPServer.py\", line 340, in handle\n    self.handle_one_request()\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/wsgi.py\", line 358, in handle_one_request\n    self.handle_one_response()\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/wsgi.py\", line 507, in handle_one_response\n    while self.environ[\u0027eventlet.input\u0027].read(MINIMUM_CHUNK_SIZE):\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/wsgi.py\", line 189, in read\n    return self._chunked_read(self.rfile, length)\n  File \"/home/tburke/py27/lib/python2.7/site-packages/eventlet/wsgi.py\", line 179, in _chunked_read\n    self.chunk_length \u003d int(rfile.readline().split(b\";\", 1)[0], 16)\nValueError: invalid literal for int() with base 16: \u0027\u0027\n\nWould it be better for us to bump out minimum eventlet to something like 0.18.2, which includes https://github.com/eventlet/eventlet/commit/b443de3 which I *think* is what fixed it? We\u0027re going to need an updated eventlet *anyway* for py3, and I don\u0027t know how much trouble it\u0027d be to have separate minimums for py2 vs py3...","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f063d4f3509d9685390518a17f414af0f4dbd555","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            #   ValueError: invalid literal for int() with base 16"},{"line_number":141,"context_line":"            # in tests. Note we disconnect shortly after receiving a non-200"},{"line_number":142,"context_line":"            # response in the sender code, so this is not *so* crazy to do."},{"line_number":143,"context_line":"            request.environ[\u0027wsgi.input\u0027].chunked_input \u003d False"},{"line_number":144,"context_line":"            raise"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __call__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_9eae96e5","line":143,"in_reply_to":"bfb3d3c7_7e2040b1","updated":"2019-06-04 21:23:07.000000000","message":"An eventlet 0.17.x is extremely old. Even the RDO on 7.5 comes with 0.20.1.","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":25251,"name":"Alexandre Lécuyer","email":"alexandre.lecuyer@corp.ovh.com","username":"alecuyer"},"change_message_id":"b32dce134747018c083cd16055184a5402881bef","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            #   ValueError: invalid literal for int() with base 16"},{"line_number":141,"context_line":"            # in tests. Note we disconnect shortly after receiving a non-200"},{"line_number":142,"context_line":"            # response in the sender code, so this is not *so* crazy to do."},{"line_number":143,"context_line":"            request.environ[\u0027wsgi.input\u0027].chunked_input \u003d False"},{"line_number":144,"context_line":"            raise"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __call__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_581fdb6b","line":143,"in_reply_to":"bfb3d3c7_7e2040b1","updated":"2019-06-04 15:44:48.000000000","message":"having a common minimum eventlet version for both py2 and py3 does not sound unreasonnable.","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":25251,"name":"Alexandre Lécuyer","email":"alexandre.lecuyer@corp.ovh.com","username":"alecuyer"},"change_message_id":"b32dce134747018c083cd16055184a5402881bef","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if not six.PY2:"},{"line_number":355,"context_line":"                try:"},{"line_number":356,"context_line":"                    line \u003d line.decode(\u0027ascii\u0027)"},{"line_number":357,"context_line":"                except UnicodeDecodeError:"},{"line_number":358,"context_line":"                    pass"},{"line_number":359,"context_line":"            raise Exception("},{"line_number":360,"context_line":"                \u0027Looking for :MISSING_CHECK: START got %r\u0027 % line[:1024])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_58335bac","line":357,"updated":"2019-06-04 15:44:48.000000000","message":"I don\u0027t understand that part, that means we could proceed with \"line\" being either a str or bytes?","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"79673e8088f2a15253b0bb9b6aa363ff516ff3b4","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if not six.PY2:"},{"line_number":355,"context_line":"                try:"},{"line_number":356,"context_line":"                    line \u003d line.decode(\u0027ascii\u0027)"},{"line_number":357,"context_line":"                except UnicodeDecodeError:"},{"line_number":358,"context_line":"                    pass"},{"line_number":359,"context_line":"            raise Exception("},{"line_number":360,"context_line":"                \u0027Looking for :MISSING_CHECK: START got %r\u0027 % line[:1024])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a1249fc7","line":357,"in_reply_to":"9fb8cfa7_3eee8a22","updated":"2019-06-04 23:30:51.000000000","message":"\u003e Tim is trying to make the output match the py2, so the tests work\n\nYup, otherwise we get some responses like\n\n Looking for :MISSING_CHECK: START got b\u0027...\u0027\n\nwhere the tests are expecting\n\n Looking for :MISSING_CHECK: START got \u0027...\u0027\n\nand I felt like it\u0027d be awkward to have different expectations between py2 and py3. Plus I figure, if we can successfully decode to ASCII, it\u0027s probably not entirely crazy to output it without the b.\n\n\u003e The tests need to be adjusted\n\nMaybe? IDK -- what are we really looking for out of them? We want to verify that if we hit some sort of protocol error and the client starts spouting nonsense, that we\n\n- don\u0027t just bomb out,\n- send a message saying what we were expecting, and\n- also indicate what we received.\n\nI don\u0027t particularly doubt that this code does that, and I feel like whatever future changes may happen here, the existing tests will like catch if we regress on those...\n\n*shrug*","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f063d4f3509d9685390518a17f414af0f4dbd555","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if not six.PY2:"},{"line_number":355,"context_line":"                try:"},{"line_number":356,"context_line":"                    line \u003d line.decode(\u0027ascii\u0027)"},{"line_number":357,"context_line":"                except UnicodeDecodeError:"},{"line_number":358,"context_line":"                    pass"},{"line_number":359,"context_line":"            raise Exception("},{"line_number":360,"context_line":"                \u0027Looking for :MISSING_CHECK: START got %r\u0027 % line[:1024])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_3eee8a22","line":357,"in_reply_to":"9fb8cfa7_58335bac","updated":"2019-06-04 21:23:07.000000000","message":"I think Tim is trying to make the output match the py2, so the tests work. With this patch, the %r will throw b\u0027foo\u0027 if not ASCII, but only then.\n\nWhen I looked at it at first, I thought it was okay, but now I realize it\u0027s an attempt to code for lazy tests. The tests need to be adjusted -- perhaps actually adding object names that are not ASCII, although I cannot insist of the latter. I never did it myself, so I don\u0027t have the moral right :-)","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"12fe805a72eabd4f48e75303e17a5c53a18f0e70","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if not six.PY2:"},{"line_number":355,"context_line":"                try:"},{"line_number":356,"context_line":"                    line \u003d line.decode(\u0027ascii\u0027)"},{"line_number":357,"context_line":"                except UnicodeDecodeError:"},{"line_number":358,"context_line":"                    pass"},{"line_number":359,"context_line":"            raise Exception("},{"line_number":360,"context_line":"                \u0027Looking for :MISSING_CHECK: START got %r\u0027 % line[:1024])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_7dccf2bb","line":357,"in_reply_to":"9fb8cfa7_8d12ea57","updated":"2019-06-05 20:26:01.000000000","message":"...sure. Done; may as well.\n\nI just branched our expectations for 2 vs 3; using regexpMatches would require that I also make assertions on the lengths of arrays and blah blah blah...\n\n if six.PY2:\n     expected \u003d \"... \u0027...\u0027\"\n else:\n     expected \u003d \"... b\u0027...\u0027\"\n\nseemed simpler and clearer.","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e8f45ce9640478b7dd3e7ac1b10681a88a16b25f","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if not six.PY2:"},{"line_number":355,"context_line":"                try:"},{"line_number":356,"context_line":"                    line \u003d line.decode(\u0027ascii\u0027)"},{"line_number":357,"context_line":"                except UnicodeDecodeError:"},{"line_number":358,"context_line":"                    pass"},{"line_number":359,"context_line":"            raise Exception("},{"line_number":360,"context_line":"                \u0027Looking for :MISSING_CHECK: START got %r\u0027 % line[:1024])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_8d12ea57","line":357,"in_reply_to":"9fb8cfa7_a1249fc7","updated":"2019-06-05 03:38:47.000000000","message":"I dunno, this seems a small problem to me. There are only 3 (THREE) of those tests, and there are         self.assertRegexpMatches() already in test_ssync_receiver.py. You can copy-paste and use the .........\u0027 got b?\\\u0027\\\u0027\"\u0027. We aren\u0027t talking dozens of tests to be fixed, nor the alternative is some insane, unprecedented code trick.","commit_id":"a4fa419aa920dc781a89c9e56c9be266ba9946c5"}],"swift/obj/ssync_sender.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"63fc01c8222f35d3a12007d7aa05f5b2ea548f22","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def send_subrequest(self, connection, method, url_path, headers, df):"},{"line_number":407,"context_line":"        msg \u003d [b\u0027%s %s\u0027 % (method.encode(\u0027ascii\u0027), url_path.encode(\u0027utf8\u0027))]"},{"line_number":408,"context_line":"        print(headers)"},{"line_number":409,"context_line":"        for key, value in sorted(headers.items()):"},{"line_number":410,"context_line":"            if six.PY2:"},{"line_number":411,"context_line":"                msg.append(b\u0027%s: %s\u0027 % (key, value))"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_7c007668","line":408,"updated":"2019-05-22 05:03:10.000000000","message":"Bah -- left over from debugging.","commit_id":"def20df5af70634c47dbf6a407011a713d441318"}]}
