)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"03551947261dc5726a7bc5623f3dcd73b5690b75","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c554e142_e75d9232","updated":"2025-08-08 20:05:27.000000000","message":"I\u0027m bumping into all kinds of stuff looking at 933379: db-replicator: include container name in logs, not just db path | https://review.opendev.org/c/openstack/swift/+/933379","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd9df1390aaad207666ff493bbcedcd65b9459c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7f71b23b_8025ef23","updated":"2023-03-27 14:24:56.000000000","message":"this seems like a win, but I think we could make it harder to get wrong with better interfaces and adapters into node_iter/use_replication","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"}],"swift/container/sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd9df1390aaad207666ff493bbcedcd65b9459c0","unresolved":true,"context_lines":[{"line_number":1197,"context_line":"        except DirectClientException as err:"},{"line_number":1198,"context_line":"            self.warning(broker,"},{"line_number":1199,"context_line":"                         \u0027Failed to put shard ranges to %s:%s/%s %s/%s: %s\u0027,"},{"line_number":1200,"context_line":"                         node[\u0027ip\u0027], node[\u0027port\u0027], node[\u0027device\u0027],"},{"line_number":1201,"context_line":"                         quote(account), quote(container), err.http_status)"},{"line_number":1202,"context_line":"        except (Exception, Timeout) as err:"},{"line_number":1203,"context_line":"            self.exception(broker,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a58a559e_b3c7f33d","side":"PARENT","line":1200,"updated":"2023-03-27 14:24:56.000000000","message":"seems like the new format method is equivilent\n\n    return \u0027{}:{}/{}\u0027.format(node_ip, node_port, node_dict[\u0027device\u0027])\n    \nexcept replication ip","commit_id":"e15d6880e810cb2419865136e2cbb856acab8e73"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd9df1390aaad207666ff493bbcedcd65b9459c0","unresolved":true,"context_lines":[{"line_number":1213,"context_line":"                           headers\u003dNone):"},{"line_number":1214,"context_line":"        body \u003d json.dumps([dict(sr, reported\u003d0)"},{"line_number":1215,"context_line":"                           for sr in shard_ranges]).encode(\u0027ascii\u0027)"},{"line_number":1216,"context_line":"        part, nodes \u003d self.ring.get_nodes(account, container)"},{"line_number":1217,"context_line":"        headers \u003d headers or {}"},{"line_number":1218,"context_line":"        headers.update({\u0027X-Backend-Record-Type\u0027: RECORD_TYPE_SHARD,"},{"line_number":1219,"context_line":"                        USE_REPLICATION_NETWORK_HEADER: \u0027True\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e45df20_6eb60e7f","line":1216,"updated":"2023-03-27 14:24:56.000000000","message":"it seems like the only way to get annotated nodes is to pass a request object into InternalClient.app.iter_nodes","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd9df1390aaad207666ff493bbcedcd65b9459c0","unresolved":true,"context_lines":[{"line_number":1216,"context_line":"        part, nodes \u003d self.ring.get_nodes(account, container)"},{"line_number":1217,"context_line":"        headers \u003d headers or {}"},{"line_number":1218,"context_line":"        headers.update({\u0027X-Backend-Record-Type\u0027: RECORD_TYPE_SHARD,"},{"line_number":1219,"context_line":"                        USE_REPLICATION_NETWORK_HEADER: \u0027True\u0027,"},{"line_number":1220,"context_line":"                        \u0027User-Agent\u0027: \u0027container-sharder %s\u0027 % os.getpid(),"},{"line_number":1221,"context_line":"                        \u0027X-Timestamp\u0027: Timestamp.now().normal,"},{"line_number":1222,"context_line":"                        \u0027Content-Length\u0027: len(body),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e97945c_749b0f3a","line":1219,"updated":"2023-03-27 14:24:56.000000000","message":"this seems like the single source of truth, is there a version of node_to_string that takes a headers dict or a request instead of the explict boolean?","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"03551947261dc5726a7bc5623f3dcd73b5690b75","unresolved":true,"context_lines":[{"line_number":5281,"context_line":"        self.assertFalse(sharder.logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":5282,"context_line":"        self.assertEqual(set("},{"line_number":5283,"context_line":"            \u0027Failed to put shard ranges to %s a/c: FakeStatus Error, \u0027"},{"line_number":5284,"context_line":"            \u0027path: a/c, db: %s: \u0027 % (host, broker.db_file) for host in hosts),"},{"line_number":5285,"context_line":"            set(sharder.logger.get_lines_for_level(\u0027error\u0027)))"},{"line_number":5286,"context_line":"        res, sharder, _ \u003d do_test(replicas, eventlet.Timeout(), Exception)"},{"line_number":5287,"context_line":"        self.assertFalse(res)"}],"source_content_type":"text/x-python","patch_set":1,"id":"09f050ef_197a6e46","line":5284,"updated":"2025-08-08 20:05:27.000000000","message":"doesn\u0027t it look like this log message ends in `db: %(db_file): ` ???\n\nwhere we expecting a `path: %s`?  why would `: ` be the correct way to terminate the log line?  I assume this was pre-existing and this test just went with it?","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"33f2a7b9abb5eaa61e03d12424bc0d45fadf6b87","unresolved":true,"context_lines":[{"line_number":5281,"context_line":"        self.assertFalse(sharder.logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":5282,"context_line":"        self.assertEqual(set("},{"line_number":5283,"context_line":"            \u0027Failed to put shard ranges to %s a/c: FakeStatus Error, \u0027"},{"line_number":5284,"context_line":"            \u0027path: a/c, db: %s: \u0027 % (host, broker.db_file) for host in hosts),"},{"line_number":5285,"context_line":"            set(sharder.logger.get_lines_for_level(\u0027error\u0027)))"},{"line_number":5286,"context_line":"        res, sharder, _ \u003d do_test(replicas, eventlet.Timeout(), Exception)"},{"line_number":5287,"context_line":"        self.assertFalse(res)"}],"source_content_type":"text/x-python","patch_set":1,"id":"48bc779f_ae6f52a2","line":5284,"in_reply_to":"09f050ef_197a6e46","updated":"2025-08-08 21:31:53.000000000","message":"nvm, I think the message ends in a `:` because it\u0027s getting routed through `exception`\n\nfrom common.utils.logs.SwiftLogAdapter.exception\n```\n        call \u003d self.error\n        ...\n        call(\u0027%s: %s\u0027 % (msg, emsg), *args, **kwargs)\n```","commit_id":"6885b33676dbc4ee0cdfa20798e9a9cf89d14650"}]}
