)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"49b9339c68c3c4af4b1cfed4d94a12038815b171","unresolved":false,"context_lines":[{"line_number":10,"context_line":"- complain that a client disconnected even though they finished their"},{"line_number":11,"context_line":"  chunked transfer just fine, and"},{"line_number":12,"context_line":"- on EC, send a X-Backend-Obj-Content-Length for pre-allocation even"},{"line_number":13,"context_line":"  though Content-Length doesn\u0027t determine request body size."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ia80e595f713695cbb41dab575963f2cb9bebfa09"},{"line_number":16,"context_line":"Related-Bug: 1840507"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_32438515","line":13,"updated":"2019-09-27 04:02:58.000000000","message":"I do not understand how exactly this additional sending happens. The code does not seem to change at all. Sorry if I do not see the obvious.","commit_id":"291873e784aeac30c2adcaaaca6ab43c2393b289"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c5b2e833804c603f1f556b9443ed87fcab3c951b","unresolved":false,"context_lines":[{"line_number":2787,"context_line":"        policy \u003d POLICIES.get_by_index(policy_index)"},{"line_number":2788,"context_line":""},{"line_number":2789,"context_line":"        expected_frag_size \u003d None"},{"line_number":2790,"context_line":"        ml \u003d req.message_length()"},{"line_number":2791,"context_line":"        if ml:"},{"line_number":2792,"context_line":"            # TODO: PyECLib \u003c\u003d 1.2.0 looks to return the segment info"},{"line_number":2793,"context_line":"            # different from the input for aligned data efficiency but"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_12aa0984","line":2790,"updated":"2019-09-27 04:26:42.000000000","message":"Previously, whenever the client sent a Content-Length header, we\u0027d calculate an expected_frag_size and send it as X-Backend-Obj-Content-Length (which would get used in some fallocate call down in the object-server).\n\nSignificantly, this would happen even if the client *was actually sending* a chunk-encoded transfer. (Since the Transfer-Encoding header trumps Content-Length -- see https://tools.ietf.org/html/rfc7230#section-3.3.3, item 3, paragraph 3. Jesus, that\u0027s a lot of threes.)\n\nNow, we\u0027ll let message_length() return None in that case, and rely on the earlier invocation over in check_object_creation() (called as part of the main PUT method) to enforce that any Transfer-Encoding *only* specifies \u0027chunked\u0027.","commit_id":"291873e784aeac30c2adcaaaca6ab43c2393b289"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c5b2e833804c603f1f556b9443ed87fcab3c951b","unresolved":false,"context_lines":[{"line_number":7325,"context_line":"        chunk \u003d \u0027a\u0027 * 64 * 2 ** 10"},{"line_number":7326,"context_line":"        sock \u003d connect_tcp((\u0027localhost\u0027, prolis.getsockname()[1]))"},{"line_number":7327,"context_line":"        fd \u003d sock.makefile(\u0027rwb\u0027)"},{"line_number":7328,"context_line":"        fd.write((\u0027PUT /v1/a/%s-discon/test HTTP/1.1\\r\\n\u0027"},{"line_number":7329,"context_line":"                  \u0027Host: localhost\\r\\n\u0027"},{"line_number":7330,"context_line":"                  \u0027Transfer-Encoding: chunked\\r\\n\u0027"},{"line_number":7331,"context_line":"                  \u0027Content-Length: 999999999999999999999999\\r\\n\u0027"},{"line_number":7332,"context_line":"                  \u0027X-Storage-Token: t\\r\\n\u0027"},{"line_number":7333,"context_line":"                  \u0027Content-Type: donuts\\r\\n\u0027"},{"line_number":7334,"context_line":"                  \u0027\\r\\n\u0027 % (self.ec_policy.name,)).encode(\u0027ascii\u0027))"},{"line_number":7335,"context_line":"        fd.write((\u0027%x\\r\\n%s\\r\\n0\\r\\n\\r\\n\u0027 % ("},{"line_number":7336,"context_line":"            len(chunk), chunk)).encode(\u0027ascii\u0027))"},{"line_number":7337,"context_line":"        # no zero-byte end chunk"},{"line_number":7338,"context_line":"        fd.flush()"},{"line_number":7339,"context_line":"        headers \u003d readuntil2crlfs(fd)"},{"line_number":7340,"context_line":"        exp \u003d b\u0027HTTP/1.1 201\u0027"},{"line_number":7341,"context_line":"        self.assertEqual(headers[:len(exp)], exp)"},{"line_number":7342,"context_line":"        fd.close()"},{"line_number":7343,"context_line":"        sock.close()"},{"line_number":7344,"context_line":"        warns \u003d _test_servers[0].logger.get_lines_for_level(\u0027warning\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d2a551a3","line":7341,"range":{"start_line":7328,"start_character":18,"end_line":7341,"end_character":49},"updated":"2019-09-27 04:26:42.000000000","message":"Without that change specifically, this request 503s -- we calculate some insane X-Backend-Obj-Content-Length value and send it to the object servers, each of whom 500s like\n\nERROR: ERROR __call__ error with PUT /sdh1/1/a/ec-discon/test : \nTraceback (most recent call last):\n  File \".../swift/swift/obj/server.py\", line 1286, in __call__\n    res \u003d getattr(self, req.method)(req)\n  File \".../swift/swift/common/utils.py\", line 1980, in _timing_stats\n    resp \u003d func(ctrl, *args, **kwargs)\n  File \".../swift/swift/obj/server.py\", line 1007, in PUT\n    request, device, obj_input, writer, fsize)\n  File \".../swift/swift/obj/server.py\", line 859, in _stage_obj_data\n    writer.open()\n  File \".../swift/swift/obj/diskfile.py\", line 1724, in open\n    fallocate(self._fd, self._size)\n  File \".../swift/swift/common/utils.py\", line 1028, in fallocate\n    raise ValueError(\u0027size must be less than 2 ** 63\u0027)\nValueError: size must be less than 2 ** 63","commit_id":"291873e784aeac30c2adcaaaca6ab43c2393b289"}]}
