)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"54d834211867c044d03c3e1d504b143e77408089","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"217ac54e_f135d8db","updated":"2022-01-13 14:49:09.000000000","message":"I tested this change on recent tripleo-current undercloud and it fixes the issue previously seen when deleting introspection rules.","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3b655d2e60f2955c36fad030ea85e01bedb5ab1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"01583e0b_a723701b","updated":"2022-01-12 20:11:13.000000000","message":"I think this is an appropriate defensive solution for a particular server environment behavior, even though that behavior only shows on an older python stack.","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3fa37b6bd05d9eac6a7dbea0e2ef5e80f98b4f46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9ed3e47b_f91761c2","updated":"2022-01-13 17:33:22.000000000","message":"Julia and I have found an issue in eventlet that may explain this bug. TL;DR eventlet sends `Transfer-Encoding: chunked` for empty responses, including for HTTP 204 where it\u0027s forbidden by https://httpwg.org/specs/rfc7230.html#header.transfer-encoding.","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ecba08d83da019825509874d20bb38be8573ec4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2fd44317_8630d8c3","updated":"2022-01-14 20:30:12.000000000","message":"Marking WF-1 for now.\n\nWE *might* want to consider conneciton:close, but since we think we\u0027ve found the issue, lets wait and see to make sure everything is resolved. The other fix\u0027s backport has already been posted and is in CI now, so just a matter of time.","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"fefd27b078c2f3bc1d2c456c3c625097cda300bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ea6d8cbf_d08a47a7","updated":"2022-03-01 19:11:22.000000000","message":"Wondering if we want this before creating the stable/yoga \u003d)","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8a08e2d7ae8518c10e59dfd6f4b6a0223d19ae7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ad2dae07_e6498da9","updated":"2022-01-12 20:19:54.000000000","message":"tested this on a misbehaving environment and successfully deleted a rule","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e915a5dd1f242a210b1feca030c9992d863c8e16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bbb9fdb1_810182d1","in_reply_to":"ea6d8cbf_d08a47a7","updated":"2022-03-02 03:47:20.000000000","message":"So realistically, we *should* merge a connection close flag, but it is not required. We\u0027ve identified the cause as being in eventlet.","commit_id":"b14cb12b853e46e4991909c0e062c9280331faa2"}],"ironic_inspector_client/common/http.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba43cc4042e70e9194e3e93acf243012a9bae43d","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        # NOTE(TheJulia): Always add a Connection close header to explicitly"},{"line_number":208,"context_line":"        # tell the server to close the socket and the client not to just"},{"line_number":209,"context_line":"        # expect the socket to stay open."},{"line_number":210,"context_line":"        headers[\u0027Connection\u0027] \u003d \u0027close\u0027"},{"line_number":211,"context_line":"        url \u003d self._base_url + \u0027/\u0027 + url.lstrip(\u0027/\u0027)"},{"line_number":212,"context_line":"        LOG.debug(\u0027Requesting %(method)s %(url)s (API version %(ver)s) \u0027"},{"line_number":213,"context_line":"                  \u0027with %(args)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df0140a1_bbad5557","line":210,"updated":"2022-01-11 22:54:15.000000000","message":"This doesn\u0027t solve the Connection broken: IncompleteRead issue on rule delete downstream :(","commit_id":"bed93178dcb2ed2778b739bf105dffef9dd0b027"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba43cc4042e70e9194e3e93acf243012a9bae43d","unresolved":true,"context_lines":[{"line_number":214,"context_line":"                  {\u0027method\u0027: method.upper(), \u0027url\u0027: url,"},{"line_number":215,"context_line":"                   \u0027ver\u0027: self._version_str, \u0027args\u0027: kwargs})"},{"line_number":216,"context_line":"        res \u003d self._session.request(url, method, headers\u003dheaders,"},{"line_number":217,"context_line":"                                    raise_exc\u003dFalse, **kwargs)"},{"line_number":218,"context_line":"        LOG.debug(\u0027Got response for %(method)s %(url)s with status code \u0027"},{"line_number":219,"context_line":"                  \u0027%(code)s\u0027, {\u0027url\u0027: url, \u0027method\u0027: method.upper(),"},{"line_number":220,"context_line":"                               \u0027code\u0027: res.status_code})"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee0507b9_88d130eb","line":217,"range":{"start_line":217,"start_character":51,"end_line":217,"end_character":53},"updated":"2022-01-11 22:54:15.000000000","message":"setting stream\u003dTrue here *does* solve the rule delete issue. We could propose that as a fix even though it is not clear why it is required.","commit_id":"bed93178dcb2ed2778b739bf105dffef9dd0b027"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"34e746070c7f0d941fb0c5283d4f5e20af2c5627","unresolved":true,"context_lines":[{"line_number":214,"context_line":"                  {\u0027method\u0027: method.upper(), \u0027url\u0027: url,"},{"line_number":215,"context_line":"                   \u0027ver\u0027: self._version_str, \u0027args\u0027: kwargs})"},{"line_number":216,"context_line":"        res \u003d self._session.request(url, method, headers\u003dheaders,"},{"line_number":217,"context_line":"                                    raise_exc\u003dFalse, **kwargs)"},{"line_number":218,"context_line":"        LOG.debug(\u0027Got response for %(method)s %(url)s with status code \u0027"},{"line_number":219,"context_line":"                  \u0027%(code)s\u0027, {\u0027url\u0027: url, \u0027method\u0027: method.upper(),"},{"line_number":220,"context_line":"                               \u0027code\u0027: res.status_code})"}],"source_content_type":"text/x-python","patch_set":2,"id":"31de4f88_a0ba99c4","line":217,"range":{"start_line":217,"start_character":51,"end_line":217,"end_character":53},"in_reply_to":"ee0507b9_88d130eb","updated":"2022-01-12 17:48:40.000000000","message":"So basically we have a blend of components and things doing evil things.\n\nAnd by evil, I mean everything with the best of intentions, the issue, in part, is the way this operates together.\n\n- We reply with empty bodies, with the appropriate code. In the API that is. Well, Null bodies which can\u0027t be read as json, but hey is still valid http wise.\n\n- The WSGI/App/Interface is converting responses to be marked with chunked encoding. Because surely everything *must* have a response body. (unless it is a redirect...)\n\n- The client, upon seeing it thinks \"Oh, there surely must be a body, lets iterate over it because of what WSGI injects says \"There is a body here!\" But in reality, there is no body.\n\nI believe Harold has commented that he tried in forcing a content length parameter to be injected into the response which would be the most appropriate thing for these bodies for the client, but yeah. No dice.\n\nSo moving to stream, *does* change request reading/iteration behavior. It does navigate away from the issue we\u0027re seeing as the intermediate entries *are* trying to load the response body.  I\u0027ve got the patch I did to fix the server side complaints Apache was making a while back, so going through each request and flaging them as they would be streamed and gets us out of the land where requests is trying to populate a content body object.\n\nUltimately, I think we should change the API to just include a body. Technically breaking but I don\u0027t think it would be noticed at all and it is clear everything is expecting bodies on responses at this point even things which traditionally are no content responses.","commit_id":"bed93178dcb2ed2778b739bf105dffef9dd0b027"}]}
