)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0286e93143a044f76997f9da2f068c66da9fc8be","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This needs to be either \"rsync\" or \"ssync\"; any other value leads to"},{"line_number":10,"context_line":"error messages that at best indirectly tell operators that their"},{"line_number":11,"context_line":"configs are wrong."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #2165785"},{"line_number":14,"context_line":"Change-Id: I557cae2d0cb4578794d687eb342662a6fb9b3d6a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a23fc8b_3b4abe6b","line":11,"updated":"2026-08-28 22:53:03.000000000","message":"oh i bet those are funny!\n\nOMGBBQQ *so* funny!!!\n\n```\n    [Previous line repeated 981 more times]\n  RecursionError: maximum recursion depth exceeded\n```\n\nhttps://bugs.launchpad.net/swift/+bug/2165785","commit_id":"4c29fc60d4826261e466584c62975dea16b35b51"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0286e93143a044f76997f9da2f068c66da9fc8be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a3fbba6e_7ac66478","updated":"2026-08-28 22:53:03.000000000","message":"this obviously fixes a problem; we\u0027re *normally* pretty good about validating configuration early - I guess this one was just extra old?  And not been previously reported?\n\nwe don\u0027t do a lot of this dynamic dispatch, only recently I remember doing something similar in a patch that hasn\u0027t landed yet:\n\nhttps://review.opendev.org/c/openstack/swift/+/918366/64/swift/obj/expirer.py#368\n\nin the other example I can think of on master we have `write_affinity_node_count_fn` - which I think *is* a \"nested closure returned by affinity_locality_predicate()—not a bound method.\"\n\nSo I would suggest I would prefer to maintain this fix as\n\n```\nself.sync_method \u003d getattr(self, self._configured_sync_method_option_value)\n```\n\n... but am not opposed to fixing the naming in a follow-up and banking the bug fix if it\u0027s hurting operators.","commit_id":"4c29fc60d4826261e466584c62975dea16b35b51"}],"swift/obj/replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0286e93143a044f76997f9da2f068c66da9fc8be","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        if self.sync_method not in (\u0027rsync\u0027, \u0027ssync\u0027):"},{"line_number":181,"context_line":"            raise ValueError(f\"sync_method must be either \u0027rsync\u0027 or \""},{"line_number":182,"context_line":"                             f\"\u0027ssync\u0027, not {self.sync_method!r}\")"},{"line_number":183,"context_line":"        self.sync_function \u003d getattr(self, self.sync_method)"},{"line_number":184,"context_line":"        self.network_chunk_size \u003d int(conf.get(\u0027network_chunk_size\u0027, 65536))"},{"line_number":185,"context_line":"        self.default_headers \u003d {"},{"line_number":186,"context_line":"            \u0027Content-Length\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4d3657f2_421e82ee","line":183,"updated":"2026-08-28 22:53:03.000000000","message":"heh, I don\u0027t think I like how how sync_method is a string and sync_function is a method","commit_id":"4c29fc60d4826261e466584c62975dea16b35b51"}]}
