)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ccbf0643c326393987e4bc0ac313c95ce4c572be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2f1510da_92dc7795","updated":"2021-11-16 15:57:25.000000000","message":"maybe this is fine, I do think it helps with some tracebacks - and the sender shouldn\u0027t be doing this; it\u0027s a protocol violation if we get stuck on an EAGAIN halfway through a send until we MessageTimeout and then pop and throw this garbage on the wire when the chunked-transfer is still expecting more bytes!\n\nI wonder if I could get a better test to show the wonky-ness a recv\u0027r reads","commit_id":"6e823151b7c7bb3a4904278d4a6b2ed302d18d62"}],"swift/obj/ssync_sender.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"66855e8d97a68ae7d32424fee8b00af31d5986da","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                    self.node.get(\u0027replication_port\u0027),"},{"line_number":218,"context_line":"                    self.node.get(\u0027device\u0027), self.job.get(\u0027partition\u0027))"},{"line_number":219,"context_line":"            finally:"},{"line_number":220,"context_line":"                self.disconnect(connection, success\u003dsuccess)"},{"line_number":221,"context_line":"        except Exception:"},{"line_number":222,"context_line":"            # We don\u0027t want any exceptions to escape our code and possibly"},{"line_number":223,"context_line":"            # mess up the original replicator code that called us since it"}],"source_content_type":"text/x-python","patch_set":2,"id":"6ad2d858_d78dd264","line":220,"updated":"2021-11-16 16:06:48.000000000","message":"IDK if there are times we may want to send the empty line to signal to the receiver that the sender is bailing out (e.g. https://github.com/openstack/swift/blob/1dceafa7d5999ad7366b2df49887954bb5695992/swift/obj/ssync_receiver.py#L450) but there\u0027s definitely times when we don\u0027t, specifically when the sender has only successfully sent part of a \u0027line\u0027 and then bails out (which we have observed).","commit_id":"6e823151b7c7bb3a4904278d4a6b2ed302d18d62"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ccbf0643c326393987e4bc0ac313c95ce4c572be","unresolved":true,"context_lines":[{"line_number":512,"context_line":"            try:"},{"line_number":513,"context_line":"                with exceptions.MessageTimeout("},{"line_number":514,"context_line":"                        self.daemon.node_timeout, \u0027disconnect\u0027):"},{"line_number":515,"context_line":"                    connection.send(b\u00270\\r\\n\\r\\n\u0027)"},{"line_number":516,"context_line":"            except (Exception, exceptions.Timeout):"},{"line_number":517,"context_line":"                pass  # We\u0027re okay with the above failing."},{"line_number":518,"context_line":"        connection.close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"02543dcb_27f48983","line":515,"updated":"2021-11-16 15:57:25.000000000","message":"ssync recv\u0027r keeps a self.disconnect attr around - but I don\u0027t think it has this same \"gracefully close protocol shutdown\" on success - it\u0027s more like \"blow up harder on disconnect\"","commit_id":"6e823151b7c7bb3a4904278d4a6b2ed302d18d62"}]}
