)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e960a7ec2d67f62ae2d00296be54e199d7f755ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1815e332_e2a40f4e","updated":"2024-12-05 15:52:14.000000000","message":"I got distracted by something more important midway through this patch so I may have lost track of some necessary moves... I welcome other eyes! 😊","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c65094f1a858c8f35ee1aaac8fea1a75eae1936e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"354efb74_8a3a2be2","updated":"2024-12-06 13:28:08.000000000","message":"recheck","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"7f8fe153c0959203267b4e2f665dc7d30ddd44f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a186a9d3_c66d0e11","updated":"2025-01-08 03:20:26.000000000","message":"Comments on the previous patch explain what\u0027s going on. Sadly they are lost if a sheer repository is considered.","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"555bad2f_4e2e23c2","updated":"2025-01-07 22:41:24.000000000","message":"nearly all of the calls to `get_logger` in `common.test_utils` are actually in `TestLoggerStatsdClientDelegation`\n\n```\n$ ag logger test/unit/common/test_utils.py  | wc -l\n221\n$ ag statsd_client test/unit/common/test_utils.py  | wc -l\n88\n```\n\nAnd `common.test_statsd_client` and `common.test_logs` *exclusively* use their own `get_statsd_client` and `get_swift_logger` interfaces respectively.\n\nThis is a very thorough cleanup.\n\nThe migrated tests for the timing decorators that got moved from statsd_client to utils got some modernization as they went, but I think we should have gone further:\n\n938630: tests: use a method to test a method | https://review.opendev.org/c/openstack/swift/+/938630","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c92e673f7d98f628af6e90c7abd3da24d3d318e","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        @functools.wraps(func)"},{"line_number":271,"context_line":"        def wrapped(*a, **kw):"},{"line_number":272,"context_line":"            func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":273,"context_line":"                           statsd_func_name)"},{"line_number":274,"context_line":"            return func(*a, **kw)"},{"line_number":275,"context_line":"        return wrapped"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"cf551112_912765fb","line":273,"updated":"2025-01-06 16:59:46.000000000","message":"I don\u0027t think this behavioural change should be made in this patch. This patch is only about relocating tests so nothing should change outside of the test/unit directory","commit_id":"5299610d03b5468e614691a717a3b400215b9f14"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5bd93fd042c2539e9f1c939091e673e8091e1751","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        @functools.wraps(func)"},{"line_number":271,"context_line":"        def wrapped(*a, **kw):"},{"line_number":272,"context_line":"            func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":273,"context_line":"                           statsd_func_name)"},{"line_number":274,"context_line":"            return func(*a, **kw)"},{"line_number":275,"context_line":"        return wrapped"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"a770362b_5b86aeb5","line":273,"in_reply_to":"cf551112_912765fb","updated":"2025-01-07 14:31:10.000000000","message":"Acknowledged","commit_id":"5299610d03b5468e614691a717a3b400215b9f14"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c92e673f7d98f628af6e90c7abd3da24d3d318e","unresolved":true,"context_lines":[{"line_number":309,"context_line":"    conf \u003d conf or {}"},{"line_number":310,"context_line":"    swift_logger \u003d get_swift_logger("},{"line_number":311,"context_line":"        conf, name, log_to_console, log_route, fmt)"},{"line_number":312,"context_line":"    name \u003d swift_logger.server"},{"line_number":313,"context_line":"    tail_prefix \u003d name if statsd_tail_prefix is None else statsd_tail_prefix"},{"line_number":314,"context_line":"    statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)"},{"line_number":315,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a0e9816_73901e50","line":312,"updated":"2025-01-06 16:59:46.000000000","message":"I preferred the original version","commit_id":"5299610d03b5468e614691a717a3b400215b9f14"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    conf \u003d conf or {}"},{"line_number":310,"context_line":"    swift_logger \u003d get_swift_logger("},{"line_number":311,"context_line":"        conf, name, log_to_console, log_route, fmt)"},{"line_number":312,"context_line":"    name \u003d swift_logger.server"},{"line_number":313,"context_line":"    tail_prefix \u003d name if statsd_tail_prefix is None else statsd_tail_prefix"},{"line_number":314,"context_line":"    statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)"},{"line_number":315,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"}],"source_content_type":"text/x-python","patch_set":5,"id":"de31269a_1023ede1","line":312,"in_reply_to":"5a0e9816_73901e50","updated":"2025-01-07 22:41:24.000000000","message":"The `swift_logger.name` got reverted to `conf.get(\u0027log_name\u0027)`","commit_id":"5299610d03b5468e614691a717a3b400215b9f14"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":316,"context_line":"    statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)"},{"line_number":317,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":318,"context_line":"    _patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    return swift_logger"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d6bdb11f_772ac314","line":319,"updated":"2025-01-07 22:41:24.000000000","message":"unrelated white space changes","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"}],"test/unit/common/test_statsd_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assertFalse(self.getaddrinfo_calls)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class TestStatsdLogging(BaseTestStasdClient):"},{"line_number":122,"context_line":"    def test_get_logger_statsd_client_not_specified(self):"},{"line_number":123,"context_line":"        logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":124,"context_line":"        # white-box construction validation:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfe4f499_f9aa1e75","side":"PARENT","line":121,"updated":"2024-12-05 15:57:02.000000000","message":"moved to or already covered in test_utils","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.assertFalse(self.getaddrinfo_calls)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class TestStatsdLogging(BaseTestStasdClient):"},{"line_number":122,"context_line":"    def test_get_logger_statsd_client_not_specified(self):"},{"line_number":123,"context_line":"        logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":124,"context_line":"        # white-box construction validation:"}],"source_content_type":"text/x-python","patch_set":1,"id":"39dba1b7_afd8236b","side":"PARENT","line":121,"in_reply_to":"dfe4f499_f9aa1e75","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":444,"context_line":"            suffix \u003d suffix.encode(\u0027utf-8\u0027)"},{"line_number":445,"context_line":"        self.assertTrue(payload.endswith(suffix), payload)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_timing_stats(self):"},{"line_number":448,"context_line":"        class MockController(object):"},{"line_number":449,"context_line":"            def __init__(self, status):"},{"line_number":450,"context_line":"                self.status \u003d status"}],"source_content_type":"text/x-python","patch_set":1,"id":"33b322be_3f171278","side":"PARENT","line":447,"updated":"2024-12-05 15:57:02.000000000","message":"gone to test_utils","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            suffix \u003d suffix.encode(\u0027utf-8\u0027)"},{"line_number":445,"context_line":"        self.assertTrue(payload.endswith(suffix), payload)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_timing_stats(self):"},{"line_number":448,"context_line":"        class MockController(object):"},{"line_number":449,"context_line":"            def __init__(self, status):"},{"line_number":450,"context_line":"                self.status \u003d status"}],"source_content_type":"text/x-python","patch_set":1,"id":"f1840ca1_da0713a2","side":"PARENT","line":447,"in_reply_to":"33b322be_3f171278","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":509,"context_line":"        self.assertEqual(mock_controller.args[0], \u0027METHOD.errors.timing\u0027)"},{"line_number":510,"context_line":"        self.assertTrue(mock_controller.args[1] \u003e 0)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    def test_memcached_timing_stats(self):"},{"line_number":513,"context_line":"        class MockMemcached(object):"},{"line_number":514,"context_line":"            def __init__(self):"},{"line_number":515,"context_line":"                self.logger \u003d self"}],"source_content_type":"text/x-python","patch_set":1,"id":"89dd9241_ab8c5302","side":"PARENT","line":512,"updated":"2024-12-05 15:57:02.000000000","message":"gone to test_utils","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        self.assertEqual(mock_controller.args[0], \u0027METHOD.errors.timing\u0027)"},{"line_number":510,"context_line":"        self.assertTrue(mock_controller.args[1] \u003e 0)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    def test_memcached_timing_stats(self):"},{"line_number":513,"context_line":"        class MockMemcached(object):"},{"line_number":514,"context_line":"            def __init__(self):"},{"line_number":515,"context_line":"                self.logger \u003d self"}],"source_content_type":"text/x-python","patch_set":1,"id":"75580570_05399478","side":"PARENT","line":512,"in_reply_to":"89dd9241_ab8c5302","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        self.assertEqual(\u0027some-name.more-specific.\u0027, client._prefix)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class TestModuleFunctions(BaseTestStatsdClient):"},{"line_number":138,"context_line":"    def test_get_statsd_client_defaults(self):"},{"line_number":139,"context_line":"        # no options configured"},{"line_number":140,"context_line":"        client \u003d statsd_client.get_statsd_client({})"}],"source_content_type":"text/x-python","patch_set":1,"id":"1027b4f1_824886f5","line":137,"updated":"2024-12-05 15:57:02.000000000","message":"tests that call get_statsd_client\n\nsome have moved to get_utils where they still call get_logger","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.assertEqual(\u0027some-name.more-specific.\u0027, client._prefix)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class TestModuleFunctions(BaseTestStatsdClient):"},{"line_number":138,"context_line":"    def test_get_statsd_client_defaults(self):"},{"line_number":139,"context_line":"        # no options configured"},{"line_number":140,"context_line":"        client \u003d statsd_client.get_statsd_client({})"}],"source_content_type":"text/x-python","patch_set":1,"id":"f1a9ec93_a92be052","line":137,"in_reply_to":"1027b4f1_824886f5","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":369,"context_line":"        self.assertTrue(payload.endswith(suffix), payload)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"class TestStatsdClientOutput(unittest.TestCase):"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def setUp(self):"},{"line_number":375,"context_line":"        self.sock \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"}],"source_content_type":"text/x-python","patch_set":1,"id":"de45ea70_832c7889","line":372,"updated":"2024-12-05 15:57:02.000000000","message":"these are further tests calling get_statsd_client, but test the on-the-wire messages\n\nthey could have remained calling get_logger and moved to test_utils, but it seemed to me that they are StatsdClient tests","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        self.assertTrue(payload.endswith(suffix), payload)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"class TestStatsdClientOutput(unittest.TestCase):"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def setUp(self):"},{"line_number":375,"context_line":"        self.sock \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b723558b_5ad1e76d","line":372,"in_reply_to":"de45ea70_832c7889","updated":"2025-01-07 22:41:24.000000000","message":"+1 keep the weird `_send_and_get` while True loop in here!","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"60db9a29f1844a8d251b854d20a0330b80970aeb","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            \u0027log_statsd_port\u0027: str(self.port),"},{"line_number":438,"context_line":"        }, \u0027some-name\u0027)"},{"line_number":439,"context_line":"        # Delegate methods are no-ops"},{"line_number":440,"context_line":"        self.assertIsNone(self.client.update_stats(\u0027foo\u0027, 88))"},{"line_number":441,"context_line":"        self.assertIsNone(self.client.update_stats(\u0027foo\u0027, 88, 0.57))"},{"line_number":442,"context_line":"        self.assertIsNone(self.client.update_stats(\u0027foo\u0027, 88,"},{"line_number":443,"context_line":"                                                   sample_rate\u003d0.61))"}],"source_content_type":"text/x-python","patch_set":4,"id":"52bea1a0_f0d736f5","line":440,"range":{"start_line":440,"start_character":26,"end_line":440,"end_character":50},"updated":"2025-01-06 17:04:24.000000000","message":"yey, finally!!","commit_id":"b81a7fa1a07de2a5ce3249cb0c05d5d0b88d6c07"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                if str(warning.message).startswith(\u0027set_statsd_prefix\u0027)]"},{"line_number":237,"context_line":"        self.assertEqual("},{"line_number":238,"context_line":"            [\u0027set_statsd_prefix() is deprecated; use the \u0027"},{"line_number":239,"context_line":"             \u0027``statsd_tail_prefix`` argument to ``get_logger`` instead.\u0027],"},{"line_number":240,"context_line":"            msgs)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_ipv4_or_ipv6_hostname_defaults_to_ipv4(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"b52e03ea_97481d1b","side":"PARENT","line":239,"updated":"2025-01-07 22:41:24.000000000","message":"... and just this second half of this test gets moved to `test_utils`\n\ndid `StatsdClient.set_prefix` and `SwiftLogAdapter.set_statsd_prefix` get introduced and/or deprecated at the same time?  It looks like the share the common \"private\" `StatsdClient._set_prefix` in-order to have their own deprecation warnings.\n\nI think it\u0027s good they\u0027ve both still tests to invoke and assert on the warnings.","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                if str(warning.message).startswith(\u0027set_statsd_prefix\u0027)]"},{"line_number":237,"context_line":"        self.assertEqual("},{"line_number":238,"context_line":"            [\u0027set_statsd_prefix() is deprecated; use the \u0027"},{"line_number":239,"context_line":"             \u0027``statsd_tail_prefix`` argument to ``get_logger`` instead.\u0027],"},{"line_number":240,"context_line":"            msgs)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_ipv4_or_ipv6_hostname_defaults_to_ipv4(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"f370bc4e_0afbe87c","side":"PARENT","line":239,"in_reply_to":"b52e03ea_97481d1b","updated":"2025-01-08 09:37:01.000000000","message":"\u003e did StatsdClient.set_prefix and SwiftLogAdapter.set_statsd_prefix get introduced and/or deprecated at the same time?\n\nyes:\nhttps://review.opendev.org/c/openstack/swift/+/827845","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                \u0027log_statsd_host\u0027: \u0027::1\u0027,"},{"line_number":310,"context_line":"                \u0027log_statsd_port\u0027: \u00279876\u0027,"},{"line_number":311,"context_line":"            }, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":312,"context_line":"        client \u003d logger.logger.statsd_client"},{"line_number":313,"context_line":"        self.assertEqual([socket.AF_INET, socket.AF_INET6], calls)"},{"line_number":314,"context_line":"        self.assertEqual(client._sock_family, socket.AF_INET6)"},{"line_number":315,"context_line":"        self.assertEqual(client._target, (\u0027::1\u0027, 9876, 0, 0))"}],"source_content_type":"text/x-python","patch_set":6,"id":"e9c1122f_9750d65d","side":"PARENT","line":312,"updated":"2025-01-07 22:41:24.000000000","message":"it\u0027s comforting to see that lot of these existing tests were just calling get_logger to create the client - then they grab it immediately.","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027})"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        mock_socket \u003d MockUdpSocket()"},{"line_number":389,"context_line":"        # encapsulation? what\u0027s that?"},{"line_number":390,"context_line":"        client \u003d logger.logger.statsd_client"},{"line_number":391,"context_line":"        self.assertTrue(client.random is random.random)"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1de8c3ae_628961dd","side":"PARENT","line":389,"updated":"2025-01-07 22:41:24.000000000","message":"look we\u0027re learning how to encapsulate ;)","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":448,"context_line":"        class MockController(object):"},{"line_number":449,"context_line":"            def __init__(self, status):"},{"line_number":450,"context_line":"                self.status \u003d status"},{"line_number":451,"context_line":"                self.logger \u003d self"},{"line_number":452,"context_line":"                self.args \u003d ()"},{"line_number":453,"context_line":"                self.called \u003d \u0027UNKNOWN\u0027"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"05cddc6a_037f0855","side":"PARENT","line":451,"updated":"2025-01-07 22:41:24.000000000","message":"oh wow, that\u0027s a little crazy - so it\u0027s probably good that we fixed these to use FakeStatsdClient","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        class MockController(object):"},{"line_number":449,"context_line":"            def __init__(self, status):"},{"line_number":450,"context_line":"                self.status \u003d status"},{"line_number":451,"context_line":"                self.logger \u003d self"},{"line_number":452,"context_line":"                self.args \u003d ()"},{"line_number":453,"context_line":"                self.called \u003d \u0027UNKNOWN\u0027"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"68e42c5c_2ad6a82f","side":"PARENT","line":451,"in_reply_to":"05cddc6a_037f0855","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self.logger.increment(\u0027STOP\u0027)"},{"line_number":567,"context_line":"        self.reader_thread.join(timeout\u003d4)"},{"line_number":568,"context_line":"        self.sock.close()"},{"line_number":569,"context_line":"        del self.logger"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def statsd_reader(self):"},{"line_number":572,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":6,"id":"0b00cf27_58df154e","side":"PARENT","line":569,"updated":"2025-01-07 22:41:24.000000000","message":"this was probably un-needed but I sort imagine the idea was that no one should be able to use `self.client.increment` during the `statsd_reader` shutdown; I\u0027m not sure I see where that could have happened or that this would prevent it.  I think it\u0027s fine to let normal GC do it\u0027s thing.","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        self.assertEqual(1.0, client._sample_rate_factor)"},{"line_number":798,"context_line":"        self.assertIsNone(client.logger)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"    def test_get_statsd_client_options(self):"},{"line_number":801,"context_line":"        # legacy options..."},{"line_number":802,"context_line":"        conf \u003d {"},{"line_number":803,"context_line":"            \u0027log_statsd_host\u0027: \u0027example.com\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a16a511_a560582b","side":"PARENT","line":800,"updated":"2025-01-07 22:41:24.000000000","message":"these two to moved up and swallowed into `TestModuleFunctions` ~L138","commit_id":"c2f25214002a85e8c6b892115bc1819973f33f28"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class BaseTestStatsdClient(unittest.TestCase):"},{"line_number":54,"context_line":"    def setUp(self):"},{"line_number":55,"context_line":"        self.getaddrinfo_calls \u003d []"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"f5640cd8_226b3927","line":53,"updated":"2025-01-07 22:41:24.000000000","message":"LOL @ `Stasd`-client","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class BaseTestStatsdClient(unittest.TestCase):"},{"line_number":54,"context_line":"    def setUp(self):"},{"line_number":55,"context_line":"        self.getaddrinfo_calls \u003d []"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3d9ff4dc_d12fec09","line":53,"in_reply_to":"f5640cd8_226b3927","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            warnings.resetwarnings()"},{"line_number":124,"context_line":"            warnings.simplefilter(\u0027always\u0027, DeprecationWarning)"},{"line_number":125,"context_line":"            client \u003d StatsdClient(None, None)"},{"line_number":126,"context_line":"            client.set_prefix(\u0027some-name.more-specific\u0027)"},{"line_number":127,"context_line":"        msgs \u003d [str(warning.message)"},{"line_number":128,"context_line":"                for warning in cm"},{"line_number":129,"context_line":"                if str(warning.message).startswith(\u0027set_prefix\u0027)]"}],"source_content_type":"text/x-python","patch_set":6,"id":"00076215_ab7e9a93","line":126,"updated":"2025-01-07 22:41:24.000000000","message":"so the behavioral assertion of the warning on `client.set_prefix` stays here","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        client._open_socket \u003d lambda *_: mock_socket"},{"line_number":308,"context_line":"        client.increment(\u0027tunafish\u0027)"},{"line_number":309,"context_line":"        expected \u003d [\"Error sending UDP message to (\u0027some.host.com\u0027, 8125): \""},{"line_number":310,"context_line":"                    \"[Errno 1] test errno 1\"]"},{"line_number":311,"context_line":"        self.assertEqual(fl.get_lines_for_level(\u0027warning\u0027), expected)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_sample_rates(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a1f1509f_a3fbe9f9","line":310,"updated":"2025-01-07 22:41:24.000000000","message":"essentially all the remaining references to `logger` in this test module are for the one and only log message that a `statsd_client` will emit.","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        client._open_socket \u003d lambda *_: mock_socket"},{"line_number":308,"context_line":"        client.increment(\u0027tunafish\u0027)"},{"line_number":309,"context_line":"        expected \u003d [\"Error sending UDP message to (\u0027some.host.com\u0027, 8125): \""},{"line_number":310,"context_line":"                    \"[Errno 1] test errno 1\"]"},{"line_number":311,"context_line":"        self.assertEqual(fl.get_lines_for_level(\u0027warning\u0027), expected)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_sample_rates(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"70c963cd_d0238d45","line":310,"in_reply_to":"a1f1509f_a3fbe9f9","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"67bf493ae565607b9bbaf0cd1fa930db13073bf8","unresolved":true,"context_lines":[{"line_number":7506,"context_line":"    def test_get_logger_statsd_client_default_conf(self):"},{"line_number":7507,"context_line":"        with mock.patch("},{"line_number":7508,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027, FakeStatsdClient):"},{"line_number":7509,"context_line":"            logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7510,"context_line":"        # white-box construction validation"},{"line_number":7511,"context_line":"        self.assertIsInstance(logger.logger.statsd_client,"},{"line_number":7512,"context_line":"                              FakeStatsdClient)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e58d0770_0961a0df","line":7509,"updated":"2024-12-12 22:26:58.000000000","message":"wonder if the mock.patch is needed other than the instance type in assert?","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"60db9a29f1844a8d251b854d20a0330b80970aeb","unresolved":false,"context_lines":[{"line_number":7506,"context_line":"    def test_get_logger_statsd_client_default_conf(self):"},{"line_number":7507,"context_line":"        with mock.patch("},{"line_number":7508,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027, FakeStatsdClient):"},{"line_number":7509,"context_line":"            logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7510,"context_line":"        # white-box construction validation"},{"line_number":7511,"context_line":"        self.assertIsInstance(logger.logger.statsd_client,"},{"line_number":7512,"context_line":"                              FakeStatsdClient)"}],"source_content_type":"text/x-python","patch_set":1,"id":"71ca60af_3245e057","line":7509,"in_reply_to":"96c960a9_cf8d359d","updated":"2025-01-06 17:04:24.000000000","message":"Done","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f119372514018b6303182defc8f6b83e0f8f3a59","unresolved":true,"context_lines":[{"line_number":7506,"context_line":"    def test_get_logger_statsd_client_default_conf(self):"},{"line_number":7507,"context_line":"        with mock.patch("},{"line_number":7508,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027, FakeStatsdClient):"},{"line_number":7509,"context_line":"            logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7510,"context_line":"        # white-box construction validation"},{"line_number":7511,"context_line":"        self.assertIsInstance(logger.logger.statsd_client,"},{"line_number":7512,"context_line":"                              FakeStatsdClient)"}],"source_content_type":"text/x-python","patch_set":1,"id":"96c960a9_cf8d359d","line":7509,"in_reply_to":"e58d0770_0961a0df","updated":"2024-12-16 14:41:50.000000000","message":"good point. The mock was needed in the previous test which asserts captured metrics, but here it isn\u0027t necessary. Nor the next 2 tests.","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"67bf493ae565607b9bbaf0cd1fa930db13073bf8","unresolved":true,"context_lines":[{"line_number":7515,"context_line":"        self.assertEqual(logger.logger.statsd_client._prefix, \u0027some-name.\u0027)"},{"line_number":7516,"context_line":"        self.assertEqual(logger.logger.statsd_client._default_sample_rate, 1)"},{"line_number":7517,"context_line":""},{"line_number":7518,"context_line":"    def test_get_logger_statsd_client_non_defaut_conf(self):"},{"line_number":7519,"context_line":"        with mock.patch("},{"line_number":7520,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027, FakeStatsdClient):"},{"line_number":7521,"context_line":"            logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"833bcea5_84567e8a","line":7518,"updated":"2024-12-12 22:26:58.000000000","message":"nit: typo, default","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f119372514018b6303182defc8f6b83e0f8f3a59","unresolved":false,"context_lines":[{"line_number":7515,"context_line":"        self.assertEqual(logger.logger.statsd_client._prefix, \u0027some-name.\u0027)"},{"line_number":7516,"context_line":"        self.assertEqual(logger.logger.statsd_client._default_sample_rate, 1)"},{"line_number":7517,"context_line":""},{"line_number":7518,"context_line":"    def test_get_logger_statsd_client_non_defaut_conf(self):"},{"line_number":7519,"context_line":"        with mock.patch("},{"line_number":7520,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027, FakeStatsdClient):"},{"line_number":7521,"context_line":"            logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"78dbe78f_5137a538","line":7518,"in_reply_to":"833bcea5_84567e8a","updated":"2024-12-16 14:41:50.000000000","message":"Done","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"67bf493ae565607b9bbaf0cd1fa930db13073bf8","unresolved":true,"context_lines":[{"line_number":7522,"context_line":"                                       \u0027log_statsd_port\u0027: 1234,"},{"line_number":7523,"context_line":"                                       \u0027log_statsd_default_sample_rate\u0027: 1.2,"},{"line_number":7524,"context_line":"                                       \u0027log_statsd_sample_rate_factor\u0027: 3.4},"},{"line_number":7525,"context_line":"                                      \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7526,"context_line":"        # white-box construction validation"},{"line_number":7527,"context_line":"        self.assertIsInstance(logger.logger.statsd_client,"},{"line_number":7528,"context_line":"                              FakeStatsdClient)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6fd45727_4ce3eb47","line":7525,"updated":"2024-12-12 22:26:58.000000000","message":"the original test have statsd_tail_prefix although seems we already have tests for statsd_tail_prefix in test_utils.py so this looks good","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f119372514018b6303182defc8f6b83e0f8f3a59","unresolved":false,"context_lines":[{"line_number":7522,"context_line":"                                       \u0027log_statsd_port\u0027: 1234,"},{"line_number":7523,"context_line":"                                       \u0027log_statsd_default_sample_rate\u0027: 1.2,"},{"line_number":7524,"context_line":"                                       \u0027log_statsd_sample_rate_factor\u0027: 3.4},"},{"line_number":7525,"context_line":"                                      \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7526,"context_line":"        # white-box construction validation"},{"line_number":7527,"context_line":"        self.assertIsInstance(logger.logger.statsd_client,"},{"line_number":7528,"context_line":"                              FakeStatsdClient)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6669ff6f_b2259d2c","line":7525,"in_reply_to":"6fd45727_4ce3eb47","updated":"2024-12-16 14:41:50.000000000","message":"Acknowledged","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":7696,"context_line":"            msgs)"},{"line_number":7697,"context_line":""},{"line_number":7698,"context_line":""},{"line_number":7699,"context_line":"class TestTimingStatsDecorators(unittest.TestCase):"},{"line_number":7700,"context_line":"    def test_timing_stats(self):"},{"line_number":7701,"context_line":"        class MockController(object):"},{"line_number":7702,"context_line":"            def __init__(self, status):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c996074c_9d728d54","line":7699,"updated":"2024-12-05 15:57:02.000000000","message":"moved from test_statsd_client","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7696,"context_line":"            msgs)"},{"line_number":7697,"context_line":""},{"line_number":7698,"context_line":""},{"line_number":7699,"context_line":"class TestTimingStatsDecorators(unittest.TestCase):"},{"line_number":7700,"context_line":"    def test_timing_stats(self):"},{"line_number":7701,"context_line":"        class MockController(object):"},{"line_number":7702,"context_line":"            def __init__(self, status):"}],"source_content_type":"text/x-python","patch_set":1,"id":"db511937_115a15fb","line":7699,"in_reply_to":"c996074c_9d728d54","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":61,"context_line":"from shutil import rmtree"},{"line_number":62,"context_line":"from functools import partial"},{"line_number":63,"context_line":"from tempfile import TemporaryFile, NamedTemporaryFile, mkdtemp"},{"line_number":64,"context_line":"from mock import MagicMock, patch"},{"line_number":65,"context_line":"from six.moves.configparser import NoSectionError, NoOptionError"},{"line_number":66,"context_line":"from uuid import uuid4"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"f3f7c7e1_2794ea68","line":64,"updated":"2025-01-07 22:41:24.000000000","message":"lol, so this file imports mock at L37, but keeps these short hand alias around too.","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":7525,"context_line":"        self.assertEqual(logger.logger.statsd_client._port, 1234)"},{"line_number":7526,"context_line":"        self.assertEqual(logger.logger.statsd_client._default_sample_rate, 1.2)"},{"line_number":7527,"context_line":"        self.assertEqual(logger.logger.statsd_client._sample_rate_factor, 3.4)"},{"line_number":7528,"context_line":"        self.assertEqual(logger.logger.statsd_client._prefix, \u0027some-name.\u0027)"},{"line_number":7529,"context_line":""},{"line_number":7530,"context_line":"    def test_get_logger_statsd_client_prefix(self):"},{"line_number":7531,"context_line":"        def call_get_logger(conf, name, statsd_tail_prefix):"}],"source_content_type":"text/x-python","patch_set":6,"id":"78f4387b_3954ed62","line":7528,"updated":"2025-01-07 22:41:24.000000000","message":"these seem pretty ok in a `TestLoggerStatsdClientDelegation`","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7525,"context_line":"        self.assertEqual(logger.logger.statsd_client._port, 1234)"},{"line_number":7526,"context_line":"        self.assertEqual(logger.logger.statsd_client._default_sample_rate, 1.2)"},{"line_number":7527,"context_line":"        self.assertEqual(logger.logger.statsd_client._sample_rate_factor, 3.4)"},{"line_number":7528,"context_line":"        self.assertEqual(logger.logger.statsd_client._prefix, \u0027some-name.\u0027)"},{"line_number":7529,"context_line":""},{"line_number":7530,"context_line":"    def test_get_logger_statsd_client_prefix(self):"},{"line_number":7531,"context_line":"        def call_get_logger(conf, name, statsd_tail_prefix):"}],"source_content_type":"text/x-python","patch_set":6,"id":"0aaeb5b5_91a91c89","line":7528,"in_reply_to":"78f4387b_3954ed62","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":false,"context_lines":[{"line_number":7679,"context_line":"            warnings.simplefilter(\u0027always\u0027, DeprecationWarning)"},{"line_number":7680,"context_line":"            logger \u003d utils.get_logger("},{"line_number":7681,"context_line":"                conf, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":7682,"context_line":"            logger.set_statsd_prefix(\u0027some-name.more-specific\u0027)"},{"line_number":7683,"context_line":"        msgs \u003d [str(warning.message)"},{"line_number":7684,"context_line":"                for warning in cm"},{"line_number":7685,"context_line":"                if str(warning.message).startswith(\u0027set_statsd_prefix\u0027)]"}],"source_content_type":"text/x-python","patch_set":6,"id":"13ef6d9f_d177691b","line":7682,"updated":"2025-01-07 22:41:24.000000000","message":"apparently `logger.set_statsd_prefix` has been around and deprecated since before the `_patch_statsd_methods` implementation.","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":7697,"context_line":"                with mock.patch("},{"line_number":7698,"context_line":"                        \u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":7699,"context_line":"                        FakeStatsdClient):"},{"line_number":7700,"context_line":"                    self.logger \u003d utils.get_logger({}, \u0027name\u0027)"},{"line_number":7701,"context_line":""},{"line_number":7702,"context_line":"        @utils.timing_stats()"},{"line_number":7703,"context_line":"        def METHOD(controller):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ce0c4784_f886df3d","line":7700,"updated":"2025-01-07 22:41:24.000000000","message":"I think these tests are really more about `utils.timing_stats` than logger or statsd; maybe:\n\n```\ndiff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py\nindex 983765927..3952300bc 100644\n--- a/test/unit/common/test_utils.py\n+++ b/test/unit/common/test_utils.py\n@@ -7694,10 +7694,7 @@ class TestTimingStatsDecorators(unittest.TestCase):\n         class MockController(object):\n             def __init__(self, status):\n                 self.status \u003d status\n-                with mock.patch(\n-                        \u0027swift.common.statsd_client.StatsdClient\u0027,\n-                        FakeStatsdClient):\n-                    self.logger \u003d utils.get_logger({}, \u0027name\u0027)\n+                self.logger \u003d debug_logger()\n \n         @utils.timing_stats()\n         def METHOD(controller):\n```","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7697,"context_line":"                with mock.patch("},{"line_number":7698,"context_line":"                        \u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":7699,"context_line":"                        FakeStatsdClient):"},{"line_number":7700,"context_line":"                    self.logger \u003d utils.get_logger({}, \u0027name\u0027)"},{"line_number":7701,"context_line":""},{"line_number":7702,"context_line":"        @utils.timing_stats()"},{"line_number":7703,"context_line":"        def METHOD(controller):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1e259475_93459983","line":7700,"in_reply_to":"ce0c4784_f886df3d","updated":"2025-01-08 09:37:01.000000000","message":"+1 I think this diff is in the follow up patch https://review.opendev.org/c/openstack/swift/+/938630","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":7708,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"},{"line_number":7709,"context_line":"            METHOD(mock_controller)"},{"line_number":7710,"context_line":"        self.assertEqual({\u0027timing_since\u0027: [((\u0027METHOD.timing\u0027, now), {})]},"},{"line_number":7711,"context_line":"                         mock_controller.logger.logger.statsd_client.calls)"},{"line_number":7712,"context_line":""},{"line_number":7713,"context_line":"        mock_controller \u003d MockController(400)"},{"line_number":7714,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"}],"source_content_type":"text/x-python","patch_set":6,"id":"2706cee0_9c37ccda","line":7711,"updated":"2025-01-07 22:41:24.000000000","message":"I prefer this assertion style to the original","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7708,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"},{"line_number":7709,"context_line":"            METHOD(mock_controller)"},{"line_number":7710,"context_line":"        self.assertEqual({\u0027timing_since\u0027: [((\u0027METHOD.timing\u0027, now), {})]},"},{"line_number":7711,"context_line":"                         mock_controller.logger.logger.statsd_client.calls)"},{"line_number":7712,"context_line":""},{"line_number":7713,"context_line":"        mock_controller \u003d MockController(400)"},{"line_number":7714,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"}],"source_content_type":"text/x-python","patch_set":6,"id":"942bf97b_c230ce35","line":7711,"in_reply_to":"2706cee0_9c37ccda","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":7714,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"},{"line_number":7715,"context_line":"            METHOD(mock_controller)"},{"line_number":7716,"context_line":"        self.assertEqual({\u0027timing_since\u0027: [((\u0027METHOD.timing\u0027, now), {})]},"},{"line_number":7717,"context_line":"                         mock_controller.logger.logger.statsd_client.calls)"},{"line_number":7718,"context_line":""},{"line_number":7719,"context_line":"        mock_controller \u003d MockController(404)"},{"line_number":7720,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c4559d52_4dcf5452","line":7717,"updated":"2025-01-07 22:41:24.000000000","message":"N.B. every iteration of this `MockController(\u003cstats\u003e)` gets it\u0027s own/fresh `logger`/`statsd_client` - so there\u0027s only the one `timing_since` call captured.","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7714,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"},{"line_number":7715,"context_line":"            METHOD(mock_controller)"},{"line_number":7716,"context_line":"        self.assertEqual({\u0027timing_since\u0027: [((\u0027METHOD.timing\u0027, now), {})]},"},{"line_number":7717,"context_line":"                         mock_controller.logger.logger.statsd_client.calls)"},{"line_number":7718,"context_line":""},{"line_number":7719,"context_line":"        mock_controller \u003d MockController(404)"},{"line_number":7720,"context_line":"        with mock.patch(\u0027swift.common.utils.time.time\u0027, return_value\u003dnow):"}],"source_content_type":"text/x-python","patch_set":6,"id":"41661cf4_5da627d8","line":7717,"in_reply_to":"c4559d52_4dcf5452","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":7757,"context_line":"                    self.logger \u003d utils.get_logger({}, \u0027name\u0027)"},{"line_number":7758,"context_line":""},{"line_number":7759,"context_line":"        @utils.memcached_timing_stats()"},{"line_number":7760,"context_line":"        def set(cache):"},{"line_number":7761,"context_line":"            pass"},{"line_number":7762,"context_line":""},{"line_number":7763,"context_line":"        @utils.memcached_timing_stats()"}],"source_content_type":"text/x-python","patch_set":6,"id":"d721c161_8c0e5a4f","line":7760,"updated":"2025-01-07 22:41:24.000000000","message":"pre-existing: the name of this closure shadows a builtin\n\nI actually am not sure I understand why the was implemented as a function instead of a method...","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":7757,"context_line":"                    self.logger \u003d utils.get_logger({}, \u0027name\u0027)"},{"line_number":7758,"context_line":""},{"line_number":7759,"context_line":"        @utils.memcached_timing_stats()"},{"line_number":7760,"context_line":"        def set(cache):"},{"line_number":7761,"context_line":"            pass"},{"line_number":7762,"context_line":""},{"line_number":7763,"context_line":"        @utils.memcached_timing_stats()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fd06e356_b3434ded","line":7760,"in_reply_to":"d721c161_8c0e5a4f","updated":"2025-01-08 09:37:01.000000000","message":"fixed in follow up https://review.opendev.org/c/openstack/swift/+/938630","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"}],"test/unit/common/utils/test_logs.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f022bf53dd9245ba54b288db56fd7f5edc36ee6","unresolved":true,"context_lines":[{"line_number":283,"context_line":"            self.assertEqual(\u0027swift: testing\\n\u0027, sio.getvalue())"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # same log_route, different names..."},{"line_number":286,"context_line":"        logger1 \u003d utils.get_swift_logger({}, name\u003d\u0027name1\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":287,"context_line":"        logger2 \u003d utils.get_swift_logger({}, name\u003d\u0027name2\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":288,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.name)"},{"line_number":289,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ca9ec18_cfe16aaa","line":286,"updated":"2024-12-05 15:57:02.000000000","message":"these changes are drive-by really","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            self.assertEqual(\u0027swift: testing\\n\u0027, sio.getvalue())"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # same log_route, different names..."},{"line_number":286,"context_line":"        logger1 \u003d utils.get_swift_logger({}, name\u003d\u0027name1\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":287,"context_line":"        logger2 \u003d utils.get_swift_logger({}, name\u003d\u0027name2\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":288,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.name)"},{"line_number":289,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4244a21e_ae8c4e00","line":286,"in_reply_to":"483bd62e_c2c9deba","updated":"2025-01-08 09:37:01.000000000","message":"the provenance may be cut and paste ?? It used to be that the logger would only get a StatsdClient if there was a log_statsd_host configured. More recently, the logger always gets a StatsdClient but it no ops if host is not configured. So it was probably a widely used pattern to configure a host when calling get_logger for tests. Just a guess though.","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":283,"context_line":"            self.assertEqual(\u0027swift: testing\\n\u0027, sio.getvalue())"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # same log_route, different names..."},{"line_number":286,"context_line":"        logger1 \u003d utils.get_swift_logger({}, name\u003d\u0027name1\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":287,"context_line":"        logger2 \u003d utils.get_swift_logger({}, name\u003d\u0027name2\u0027, log_route\u003d\u0027route\u0027)"},{"line_number":288,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.name)"},{"line_number":289,"context_line":"        self.assertEqual(\u0027route\u0027, logger1.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"483bd62e_c2c9deba","line":286,"in_reply_to":"6ca9ec18_cfe16aaa","updated":"2025-01-07 22:41:24.000000000","message":"oic, but it helps with the greps - good thinking.\n\nand unlike `utils.get_logger` `get_swift_logger` should ignore the `statsd` config options if any, i wonder how these settings crept into these tests in the first place.","commit_id":"f6f0c8ef963c739a05e3ac4f9d3ef77e562513b1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9d14a1906186061d52af0a6b4f616aecb9a0d5e","unresolved":true,"context_lines":[{"line_number":290,"context_line":"        self.assertEqual(\u0027name1\u0027, logger1.server)"},{"line_number":291,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.name)"},{"line_number":292,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.logger.name)"},{"line_number":293,"context_line":"        self.assertEqual(\u0027name2\u0027, logger2.server)"},{"line_number":294,"context_line":"        self.assertIs(logger2.logger, logger1.logger)"},{"line_number":295,"context_line":"        with add_log_handler(logger1) as sio:"},{"line_number":296,"context_line":"            logger1.info(\u0027testing\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"24b8997a_3fd55f3b","line":293,"updated":"2025-01-07 22:41:24.000000000","message":"there\u0027s a similar set of tests for the statsd_client with `tail_prefix` in `test_statsd_client.TestModuleFunctions` and `test_utils` has `test_get_logger_statsd_client_prefix`\n\nif we have to change any of this name/route/prefix stuff - it shouldn\u0027t be hard to find some test coverage to update relative to the code change, be it in `statsd_client`, `utils.logs` or `common.utils`","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77e1e571e904320b6b3732f5c3ecd6cdfda8e27b","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        self.assertEqual(\u0027name1\u0027, logger1.server)"},{"line_number":291,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.name)"},{"line_number":292,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.logger.name)"},{"line_number":293,"context_line":"        self.assertEqual(\u0027name2\u0027, logger2.server)"},{"line_number":294,"context_line":"        self.assertIs(logger2.logger, logger1.logger)"},{"line_number":295,"context_line":"        with add_log_handler(logger1) as sio:"},{"line_number":296,"context_line":"            logger1.info(\u0027testing\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"608a054a_f520dde9","line":293,"in_reply_to":"24b8997a_3fd55f3b","updated":"2025-01-08 09:37:01.000000000","message":"Acknowledged","commit_id":"7d3a32d107997c7cf1b6df590d57c0ccc4d13a42"}]}
