)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":21,"context_line":"and turn them into something more like"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    logger \u003d logs.get_adapted_logger(conf)"},{"line_number":24,"context_line":"    statsd_client \u003d statsd_client.get_statsd_client(conf, logger\u003dlogger)"},{"line_number":25,"context_line":"    ..."},{"line_number":26,"context_line":"    logger.info(...)"},{"line_number":27,"context_line":"    statsd_client.increment(...)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"31fa6ffb_46294eb9","line":24,"updated":"2024-05-15 22:52:51.000000000","message":"FWIW, i\u0027ve been recommending `self.logger` and `self.stats`\n\nIt\u0027s possible with the new labeled metrics interface calls to `self.stats.increment(\u0027metric\u0027, **labels)` could eventually be something else not statsd and all we\u0027d have to do:\n\n    - self.stats \u003d common.get_statsd_client(conf)\n    + self.stats \u003d common.get_stats_client(conf)`\n    \n... without having to rename a bunch of attributes call-sites.  Plus who wants to time self.statsd_client; esp. when we already have a module named statsd_client","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":false,"context_lines":[{"line_number":21,"context_line":"and turn them into something more like"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    logger \u003d logs.get_adapted_logger(conf)"},{"line_number":24,"context_line":"    statsd_client \u003d statsd_client.get_statsd_client(conf, logger\u003dlogger)"},{"line_number":25,"context_line":"    ..."},{"line_number":26,"context_line":"    logger.info(...)"},{"line_number":27,"context_line":"    statsd_client.increment(...)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"8ffbd5ce_c88b61af","line":24,"in_reply_to":"31fa6ffb_46294eb9","updated":"2024-05-16 15:40:18.000000000","message":"Done","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":29,"context_line":"Take a lesson from logging: callers don\u0027t need to know whether the"},{"line_number":30,"context_line":"log_level is high enough that their message will be logged, or even"},{"line_number":31,"context_line":"whether logging is enabled at all. Code wanting to emit stats shouldn\u0027t"},{"line_number":32,"context_line":"need to know whether statsd collection has been configured, either."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I6eb5b27a387cc2b7310ee11cc49d38fd2b6cbab8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"de3e2de1_c761bd52","line":32,"updated":"2024-05-15 22:52:51.000000000","message":"this 100% - the current `self.logger.increment` interface already works this way, but only by way of the weird \"dispatch\" stuff on `utils.logs.AdaptedLogger`","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Take a lesson from logging: callers don\u0027t need to know whether the"},{"line_number":30,"context_line":"log_level is high enough that their message will be logged, or even"},{"line_number":31,"context_line":"whether logging is enabled at all. Code wanting to emit stats shouldn\u0027t"},{"line_number":32,"context_line":"need to know whether statsd collection has been configured, either."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I6eb5b27a387cc2b7310ee11cc49d38fd2b6cbab8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"96dd3bf4_ac09231a","line":32,"in_reply_to":"de3e2de1_c761bd52","updated":"2024-05-16 15:40:18.000000000","message":"Acknowledged","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025c2c89fd3e93514094c6f9ef9a930df9df1ceb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a3ca2465_19647640","updated":"2024-05-16 08:38:47.000000000","message":"nice!","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1429ccd3_91669d63","updated":"2024-05-15 22:52:51.000000000","message":"this is a neat idea, might be useful as we start to refactor get_logger/AdaptedLogger to remove all the statsd client/interface references.","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ac4410e7268bf4cbb5c315182cc6eb4fd5a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"582bdb24_8cc05b78","updated":"2024-05-17 16:03:55.000000000","message":"This seems good. I would like us to start testing directly, see https://review.opendev.org/c/openstack/swift/+/919936 which could be squashed into here - it\u0027s just start!","commit_id":"f8d6eaade58afb4e2da69314030e34c45675e402"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"98074ae82e9c2e5a35d61e1608112da61c668ae6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0c0f63d4_54806ed9","updated":"2024-05-16 22:45:07.000000000","message":"recheck","commit_id":"f8d6eaade58afb4e2da69314030e34c45675e402"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7167120ce8490ed1b1e6733943bdf0ca858a1ed5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c649e574_9055afc7","updated":"2024-05-17 17:32:45.000000000","message":"Wow, that\u0027s a lot of captured errors!\n```\n2024-05-16 23:22:28.869205 | ubuntu-jammy | test/unit/account/test_auditor.py: 8 warnings\n2024-05-16 23:22:28.869221 | ubuntu-jammy | test/unit/account/test_reaper.py: 68 warnings\n2024-05-16 23:22:28.869236 | ubuntu-jammy | test/unit/account/test_replicator.py: 64 warnings\n2024-05-16 23:22:28.869251 | ubuntu-jammy | test/unit/account/test_server.py: 832 warnings\n2024-05-16 23:22:28.869266 | ubuntu-jammy | test/unit/cli/test_relinker.py: 420 warnings\n2024-05-16 23:22:28.869282 | ubuntu-jammy | test/unit/common/middleware/crypto/test_crypto_utils.py: 44 warnings\n2024-05-16 23:22:28.869297 | ubuntu-jammy | test/unit/common/middleware/crypto/test_decrypter.py: 432 warnings\n2024-05-16 23:22:28.869312 | ubuntu-jammy | test/unit/common/middleware/crypto/test_encrypter.py: 404 warnings\n2024-05-16 23:22:28.869327 | ubuntu-jammy | test/unit/common/middleware/crypto/test_encryption.py: 52 warnings\n2024-05-16 23:22:28.869342 | ubuntu-jammy | test/unit/common/middleware/crypto/test_keymaster.py: 92 warnings\n2024-05-16 23:22:28.869357 | ubuntu-jammy | test/unit/common/middleware/crypto/test_kms_keymaster.py: 76 warnings\n2024-05-16 23:22:28.869392 | ubuntu-jammy | test/unit/common/middleware/s3api/test_acl.py: 56 warnings\n2024-05-16 23:22:28.869409 | ubuntu-jammy | test/unit/common/middleware/s3api/test_acl_utils.py: 4 warnings\n2024-05-16 23:22:28.869424 | ubuntu-jammy | test/unit/common/middleware/s3api/test_bucket.py: 320 warnings\n2024-05-16 23:22:28.869439 | ubuntu-jammy | test/unit/common/middleware/s3api/test_location.py: 8 warnings\n2024-05-16 23:22:28.869454 | ubuntu-jammy | test/unit/common/middleware/s3api/test_logging.py: 16 warnings\n2024-05-16 23:22:28.869469 | ubuntu-jammy | test/unit/common/middleware/s3api/test_multi_delete.py: 128 warnings\n2024-05-16 23:22:28.869484 | ubuntu-jammy | test/unit/common/middleware/s3api/test_multi_get.py: 160 warnings\n2024-05-16 23:22:28.869500 | ubuntu-jammy | test/unit/common/middleware/s3api/test_multi_upload.py: 1208 warnings\n2024-05-16 23:22:28.869515 | ubuntu-jammy | test/unit/common/middleware/s3api/test_obj.py: 960 warnings\n2024-05-16 23:22:28.869530 | ubuntu-jammy | test/unit/common/middleware/s3api/test_object_lock.py: 8 warnings\n2024-05-16 23:22:28.869545 | ubuntu-jammy | test/unit/common/middleware/s3api/test_s3_acl.py: 168 warnings\n2024-05-16 23:22:28.869560 | ubuntu-jammy | test/unit/common/middleware/s3api/test_s3api.py: 296 warnings\n2024-05-16 23:22:28.869576 | ubuntu-jammy | test/unit/common/middleware/s3api/test_s3request.py: 176 warnings\n2024-05-16 23:22:28.869591 | ubuntu-jammy | test/unit/common/middleware/s3api/test_s3token.py: 200 warnings\n2024-05-16 23:22:28.869606 | ubuntu-jammy | test/unit/common/middleware/s3api/test_service.py: 36 warnings\n2024-05-16 23:22:28.869621 | ubuntu-jammy | test/unit/common/middleware/s3api/test_versioning.py: 52 warnings\n2024-05-16 23:22:28.869636 | ubuntu-jammy | test/unit/common/middleware/test_account_quotas.py: 156 warnings\n2024-05-16 23:22:28.869651 | ubuntu-jammy | test/unit/common/middleware/test_backend_ratelimit.py: 640 warnings\n2024-05-16 23:22:28.869666 | ubuntu-jammy | test/unit/common/middleware/test_bulk.py: 244 warnings\n2024-05-16 23:22:28.869687 | ubuntu-jammy | test/unit/common/middleware/test_container_sync.py: 24 warnings\n2024-05-16 23:22:28.869703 | ubuntu-jammy | test/unit/common/middleware/test_copy.py: 260 warnings\n2024-05-16 23:22:28.869718 | ubuntu-jammy | test/unit/common/middleware/test_dlo.py: 176 warnings\n2024-05-16 23:22:28.869733 | ubuntu-jammy | test/unit/common/middleware/test_etag_quoter.py: 72 warnings\n2024-05-16 23:22:28.869748 | ubuntu-jammy | test/unit/common/middleware/test_formpost.py: 172 warnings\n2024-05-16 23:22:28.869763 | ubuntu-jammy | test/unit/common/middleware/test_helpers.py: 144 warnings\n2024-05-16 23:22:28.869778 | ubuntu-jammy | test/unit/common/middleware/test_keystoneauth.py: 476 warnings\n2024-05-16 23:22:28.869793 | ubuntu-jammy | test/unit/common/middleware/test_listing_formats.py: 128 warnings\n2024-05-16 23:22:28.869809 | ubuntu-jammy | test/unit/common/middleware/test_object_versioning.py: 364 warnings\n2024-05-16 23:22:28.869824 | ubuntu-jammy | test/unit/common/middleware/test_proxy_logging.py: 582 warnings\n2024-05-16 23:22:28.869840 | ubuntu-jammy | test/unit/common/middleware/test_quotas.py: 48 warnings\n2024-05-16 23:22:28.869855 | ubuntu-jammy | test/unit/common/middleware/test_ratelimit.py: 8 warnings\n2024-05-16 23:22:28.869870 | ubuntu-jammy | test/unit/common/middleware/test_read_only.py: 48 warnings\n2024-05-16 23:22:28.869885 | ubuntu-jammy | test/unit/common/middleware/test_recon.py: 172 warnings\n2024-05-16 23:22:28.869900 | ubuntu-jammy | test/unit/common/middleware/test_slo.py: 1288 warnings\n2024-05-16 23:22:28.869915 | ubuntu-jammy | test/unit/common/middleware/test_subrequest_logging.py: 80 warnings\n2024-05-16 23:22:28.869930 | ubuntu-jammy | test/unit/common/middleware/test_symlink.py: 272 warnings\n2024-05-16 23:22:28.869956 | ubuntu-jammy | test/unit/common/middleware/test_tempauth.py: 6 warnings\n2024-05-16 23:22:28.869973 | ubuntu-jammy | test/unit/common/middleware/test_tempurl.py: 284 warnings\n2024-05-16 23:22:28.869989 | ubuntu-jammy | test/unit/common/middleware/test_versioned_writes.py: 172 warnings\n2024-05-16 23:22:28.870004 | ubuntu-jammy | test/unit/common/test_container_sync_realms.py: 36 warnings\n2024-05-16 23:22:28.870019 | ubuntu-jammy | test/unit/common/test_daemon.py: 68 warnings\n2024-05-16 23:22:28.870035 | ubuntu-jammy | test/unit/common/test_db_auditor.py: 16 warnings\n2024-05-16 23:22:28.870050 | ubuntu-jammy | test/unit/common/test_db_replicator.py: 280 warnings\n2024-05-16 23:22:28.870065 | ubuntu-jammy | test/unit/common/test_digest.py: 24 warnings\n2024-05-16 23:22:28.870080 | ubuntu-jammy | test/unit/common/test_direct_client.py: 16 warnings\n2024-05-16 23:22:28.870102 | ubuntu-jammy | test/unit/common/test_http_protocol.py: 128 warnings\n2024-05-16 23:22:28.870118 | ubuntu-jammy | test/unit/common/test_internal_client.py: 140 warnings\n2024-05-16 23:22:28.870133 | ubuntu-jammy | test/unit/common/test_memcached.py: 224 warnings\n2024-05-16 23:22:28.870148 | ubuntu-jammy | test/unit/common/test_request_helpers.py: 16 warnings\n2024-05-16 23:22:28.870173 | ubuntu-jammy | test/unit/common/test_storage_policy.py: 12 warnings\n2024-05-16 23:22:28.870190 | ubuntu-jammy | test/unit/common/test_utils.py: 132 warnings\n2024-05-16 23:22:28.870205 | ubuntu-jammy | test/unit/common/test_wsgi.py: 60 warnings\n2024-05-16 23:22:28.870220 | ubuntu-jammy | test/unit/common/utils/test_libc.py: 4 warnings\n2024-05-16 23:22:28.870235 | ubuntu-jammy | test/unit/container/test_auditor.py: 4 warnings\n2024-05-16 23:22:28.870250 | ubuntu-jammy | test/unit/container/test_backend.py: 224 warnings\n2024-05-16 23:22:28.870265 | ubuntu-jammy | test/unit/container/test_reconciler.py: 432 warnings\n2024-05-16 23:22:28.870280 | ubuntu-jammy | test/unit/container/test_replicator.py: 1368 warnings\n2024-05-16 23:22:28.870295 | ubuntu-jammy | test/unit/container/test_server.py: 1200 warnings\n2024-05-16 23:22:28.870310 | ubuntu-jammy | test/unit/container/test_sharder.py: 692 warnings\n2024-05-16 23:22:28.870325 | ubuntu-jammy | test/unit/container/test_sync.py: 84 warnings\n2024-05-16 23:22:28.870340 | ubuntu-jammy | test/unit/container/test_sync_store.py: 28 warnings\n2024-05-16 23:22:28.870355 | ubuntu-jammy | test/unit/container/test_updater.py: 44 warnings\n2024-05-16 23:22:28.870370 | ubuntu-jammy | test/unit/obj/test_auditor.py: 180 warnings\n2024-05-16 23:22:28.870385 | ubuntu-jammy | test/unit/obj/test_diskfile.py: 2088 warnings\n2024-05-16 23:22:28.870400 | ubuntu-jammy | test/unit/obj/test_expirer.py: 188 warnings\n2024-05-16 23:22:28.870415 | ubuntu-jammy | test/unit/obj/test_reconstructor.py: 1212 warnings\n2024-05-16 23:22:28.870430 | ubuntu-jammy | test/unit/obj/test_replicator.py: 268 warnings\n2024-05-16 23:22:28.870445 | ubuntu-jammy | test/unit/obj/test_server.py: 908 warnings\n2024-05-16 23:22:28.870460 | ubuntu-jammy | test/unit/obj/test_ssync.py: 168 warnings\n2024-05-16 23:22:28.870475 | ubuntu-jammy | test/unit/obj/test_ssync_receiver.py: 256 warnings\n2024-05-16 23:22:28.870489 | ubuntu-jammy | test/unit/obj/test_ssync_sender.py: 288 warnings\n2024-05-16 23:22:28.870504 | ubuntu-jammy | test/unit/obj/test_updater.py: 128 warnings\n2024-05-16 23:22:28.870519 | ubuntu-jammy | test/unit/proxy/controllers/test_base.py: 296 warnings\n2024-05-16 23:22:28.870534 | ubuntu-jammy | test/unit/proxy/controllers/test_container.py: 456 warnings\n2024-05-16 23:22:28.870549 | ubuntu-jammy | test/unit/proxy/controllers/test_info.py: 56 warnings\n2024-05-16 23:22:28.870564 | ubuntu-jammy | test/unit/proxy/controllers/test_obj.py: 1608 warnings\n2024-05-16 23:22:28.870578 | ubuntu-jammy | test/unit/proxy/test_mem_server.py: 938 warnings\n2024-05-16 23:22:28.870593 | ubuntu-jammy | test/unit/proxy/test_server.py: 1362 warnings\n2024-05-16 23:22:28.870608 | ubuntu-jammy | test/unit/proxy/test_sysmeta.py: 56 warnings\n2024-05-16 23:22:28.870623 | ubuntu-jammy |   /home/zuul/src/opendev.org/openstack/swift/.tox/py311/lib/python3.11/site-packages/eventlet/support/greendns.py:379: DeprecationWarning: please use dns.resolver.Resolver.resolve() instead\n2024-05-16 23:22:28.870642 | ubuntu-jammy |     a \u003d fun(*args, **kwargs)\n```","commit_id":"76659d1ea4fb4ae35fe2dcacd8be66d7bc584e30"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3ee568e2_c9598760","updated":"2024-05-17 18:50:32.000000000","message":"LGTM!","commit_id":"b447234b2f1e005025b5ce50010993ca226c2283"}],"swift/common/statsd_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":37,"context_line":"        self.logger \u003d logger"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        if not self._host:"},{"line_number":40,"context_line":"            return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Determine if host is IPv4 or IPv6"},{"line_number":43,"context_line":"        addr_info, self._sock_family \u003d self._determine_sock_family(host, port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3fe0d7a_aed5aec3","line":40,"updated":"2024-05-15 22:52:51.000000000","message":"maybe set `self._socket_family` and `self._target` to None for \"consistency\" with the normaly return path (or method-extract)","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.logger \u003d logger"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        if not self._host:"},{"line_number":40,"context_line":"            return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Determine if host is IPv4 or IPv6"},{"line_number":43,"context_line":"        addr_info, self._sock_family \u003d self._determine_sock_family(host, port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2454a6ac_3bd721fa","line":40,"in_reply_to":"def5c75a_f2929b01","updated":"2024-05-16 15:40:18.000000000","message":"Done","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025c2c89fd3e93514094c6f9ef9a930df9df1ceb","unresolved":true,"context_lines":[{"line_number":37,"context_line":"        self.logger \u003d logger"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        if not self._host:"},{"line_number":40,"context_line":"            return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Determine if host is IPv4 or IPv6"},{"line_number":43,"context_line":"        addr_info, self._sock_family \u003d self._determine_sock_family(host, port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"def5c75a_f2929b01","line":40,"in_reply_to":"e3fe0d7a_aed5aec3","updated":"2024-05-16 08:38:47.000000000","message":"+1 something like \n\n```\nif self._host:\n    self._target, self._sock_family \u003d self.setup_target()\nelse:\n    self._target \u003d self._sock_family \u003d None\n```","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _send(self, m_name, m_value, m_type, sample_rate):"},{"line_number":121,"context_line":"        if not self._host:"},{"line_number":122,"context_line":"            # StatsD not configured"},{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if sample_rate is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bc3d1366_e888397b","line":122,"updated":"2024-05-15 22:52:51.000000000","message":"is that all it takes?  this avoids anyone ever calling `_open_socket()` - that\u0027s pretty cool!","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _send(self, m_name, m_value, m_type, sample_rate):"},{"line_number":121,"context_line":"        if not self._host:"},{"line_number":122,"context_line":"            # StatsD not configured"},{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if sample_rate is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f63047bd_175589c7","line":122,"in_reply_to":"bc3d1366_e888397b","updated":"2024-05-16 15:40:18.000000000","message":"Acknowledged","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"}],"swift/common/utils/logs.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ac4410e7268bf4cbb5c315182cc6eb4fd5a8","unresolved":true,"context_lines":[{"line_number":748,"context_line":"            statsd_host, statsd_port, base_prefix, statsd_tail_prefix,"},{"line_number":749,"context_line":"            default_sample_rate, sample_rate_factor, logger\u003dlogger)"},{"line_number":750,"context_line":"    else:"},{"line_number":751,"context_line":"        logger.statsd_client \u003d None"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    adapted_logger \u003d LogAdapter(logger, name)"},{"line_number":754,"context_line":"    other_handlers \u003d conf.get(\u0027log_custom_handlers\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"76b52de6_9bfb3560","side":"PARENT","line":751,"updated":"2024-05-17 16:03:55.000000000","message":"I went looking for anywhere that might access logger.statsd_client (and care that it will now never be None).\n\nI found nowhere other than LogAdapter.[statsd_delegate, set_statsd_prefix]:\n\nstatsd_delegate will now plumb through to the no-op client instance rather than install a no-op method.\n\nset_statsd_prefix will now forward to _set_prefix which is harmless.\n\nOtherwise, we don\u0027t appear to have anywhere accessing logger.statsd_client which is testament to how ingrained the \"logger is a statsd client\" pattern has become!","commit_id":"d47811fc3eceacc11c66c2028cad0ce8be41075e"}],"test/unit/common/middleware/s3api/test_s3api.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        proxy_logger \u003d get_logger({}, log_route\u003d\u0027proxy-server\u0027).logger"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":222,"context_line":"                        FakeStatsdClient):"},{"line_number":223,"context_line":"            s3api \u003d S3ApiMiddleware(None, {})"},{"line_number":224,"context_line":"            s3api.logger.increment(\u0027test-metric\u0027)"},{"line_number":225,"context_line":"        self.assertEqual(\u0027s3api\u0027, s3api.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3b13b44_2e9c27dd","line":222,"updated":"2024-05-15 22:52:51.000000000","message":"is this mocking *required* - if so it might be a smell that `S3ApiMiddleware(None, {})` didn\u0027t previously require any mocking to not blow up.","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        proxy_logger \u003d get_logger({}, log_route\u003d\u0027proxy-server\u0027).logger"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":222,"context_line":"                        FakeStatsdClient):"},{"line_number":223,"context_line":"            s3api \u003d S3ApiMiddleware(None, {})"},{"line_number":224,"context_line":"            s3api.logger.increment(\u0027test-metric\u0027)"},{"line_number":225,"context_line":"        self.assertEqual(\u0027s3api\u0027, s3api.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f9971d3a_0db19f34","line":222,"in_reply_to":"e0a983ec_ccebf250","updated":"2024-05-17 18:50:32.000000000","message":"Done","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        proxy_logger \u003d get_logger({}, log_route\u003d\u0027proxy-server\u0027).logger"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":222,"context_line":"                        FakeStatsdClient):"},{"line_number":223,"context_line":"            s3api \u003d S3ApiMiddleware(None, {})"},{"line_number":224,"context_line":"            s3api.logger.increment(\u0027test-metric\u0027)"},{"line_number":225,"context_line":"        self.assertEqual(\u0027s3api\u0027, s3api.logger.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e0a983ec_ccebf250","line":222,"in_reply_to":"e3b13b44_2e9c27dd","updated":"2024-05-16 15:40:18.000000000","message":"Only if we want to be able to make assertions about the lack of `sendto` calls. If our bar is simply \"don\u0027t blow up\" then no, no patching required.","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(\u0027swift\u0027, s3api.logger.server)"},{"line_number":229,"context_line":"        self.assertIsNone(s3api.logger.logger.statsd_client._host)"},{"line_number":230,"context_line":"        client \u003d s3api.logger.logger.statsd_client"},{"line_number":231,"context_line":"        self.assertEqual([], client.sendto_calls)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":234,"context_line":"                        FakeStatsdClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e81e005_a500446a","line":231,"updated":"2024-05-15 22:52:51.000000000","message":"any particular reason you decided to update *this* test?  Is it even that interesting that a FakeStatsdClient didn\u0027t get any `sendto_cals` - I feel like the test would be stronger a *real* StatsdClient that didn\u0027t have a host in the config.","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(\u0027swift\u0027, s3api.logger.server)"},{"line_number":229,"context_line":"        self.assertIsNone(s3api.logger.logger.statsd_client._host)"},{"line_number":230,"context_line":"        client \u003d s3api.logger.logger.statsd_client"},{"line_number":231,"context_line":"        self.assertEqual([], client.sendto_calls)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":234,"context_line":"                        FakeStatsdClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"cf0ad4b4_9ab1c479","line":231,"in_reply_to":"4e81e005_a500446a","updated":"2024-05-16 15:40:18.000000000","message":"`self.assertIsNone(s3api.logger.logger.statsd_client)` failed -- otherwise I never would\u0027ve looked here at all. As long as I needed to touch *that*, I figured I may as well add a few more assertions in line with that the rest of the test is doing.","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(\u0027swift\u0027, s3api.logger.server)"},{"line_number":229,"context_line":"        self.assertIsNone(s3api.logger.logger.statsd_client._host)"},{"line_number":230,"context_line":"        client \u003d s3api.logger.logger.statsd_client"},{"line_number":231,"context_line":"        self.assertEqual([], client.sendto_calls)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":234,"context_line":"                        FakeStatsdClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"601fca15_cca12729","line":231,"in_reply_to":"cf0ad4b4_9ab1c479","updated":"2024-05-17 18:50:32.000000000","message":"Done","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":230,"context_line":"                        FakeStatsdClient):"},{"line_number":231,"context_line":"            s3api \u003d S3ApiMiddleware(None, {\u0027log_name\u0027: \u0027proxy-server\u0027,"},{"line_number":232,"context_line":"                                           \u0027log_statsd_host\u0027: \u00271.2.3.4\u0027})"},{"line_number":233,"context_line":"            s3api.logger.increment(\u0027test-metric\u0027)"},{"line_number":234,"context_line":"        self.assertEqual(\u0027s3api\u0027, s3api.logger.name)"},{"line_number":235,"context_line":"        self.assertEqual(\u0027s3api\u0027, s3api.logger.logger.name)"},{"line_number":236,"context_line":"        self.assertIsNot(s3api.logger.logger, proxy_logger)"}],"source_content_type":"text/x-python","patch_set":6,"id":"577cd6f6_236c24bb","line":233,"updated":"2024-05-17 18:50:32.000000000","message":"the change to IsNone(._host) seems reasoable given the existing testing to assert when a statsd _host *is* configured we can capture send calls with the FakeStatsdClient","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"}],"test/unit/common/middleware/test_tempauth.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":101,"context_line":"    def test_statsd_prefix(self):"},{"line_number":102,"context_line":"        app \u003d FakeApp()"},{"line_number":103,"context_line":"        ath \u003d auth.filter_factory({})(app)"},{"line_number":104,"context_line":"        self.assertIsNotNone(ath.logger.logger.statsd_client)"},{"line_number":105,"context_line":"        self.assertIsInstance(ath.logger.logger.statsd_client,"},{"line_number":106,"context_line":"                              StatsdClient)"},{"line_number":107,"context_line":"        self.assertEqual(\u0027tempauth.AUTH_.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"31436b2e_af4d1634","line":104,"updated":"2024-05-17 18:50:32.000000000","message":"originally concerned the config change might be a departure in spirt with this assertIsNotNone call, but decided the existing test was just peaking under the covers a bit too much.","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        self.assertIsInstance(ath.logger.logger.statsd_client,"},{"line_number":123,"context_line":"                              StatsdClient)"},{"line_number":124,"context_line":"        self.assertEqual(\u0027foo.tempauth.TEST_.\u0027,"},{"line_number":125,"context_line":"                         ath.logger.logger.statsd_client._prefix)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_reseller_prefix_init(self):"},{"line_number":128,"context_line":"        app \u003d FakeApp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"13b58e75_235ff9cf","line":125,"updated":"2024-05-17 18:50:32.000000000","message":"it seems like *this* was the main point of the test, its kind of neat we can now observe the internal state of the configured StatsdClient instance w/o requiring us to configure an example.com statsd_host!\n\nI wonder if any production auth middlewares have adopted the pattern of adding their reseller prefix into their metric names...","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"}],"test/unit/common/test_statsd.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5b33c126d7670cf521ab0050a9aeb30ae1edfa5","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        self.assertIsInstance(logger.logger.statsd_client, StatsdClient)"},{"line_number":68,"context_line":"        self.assertIsNone(logger.logger.statsd_client._host)"},{"line_number":69,"context_line":"        with mock.patch.object(logger.logger.statsd_client,"},{"line_number":70,"context_line":"                               \u0027_open_socket\u0027) as mock_open:"},{"line_number":71,"context_line":"            logger.increment(\u0027tunafish\u0027)"},{"line_number":72,"context_line":"        self.assertFalse(mock_open.mock_calls)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da8052ac_f7c975ef","line":70,"updated":"2024-05-15 22:52:51.000000000","message":"test might be stronger if you patch `statsd_client.socket`","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bd6d0afbfda6997b8d969f6b6fa077c5827827ee","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        self.assertIsInstance(logger.logger.statsd_client, StatsdClient)"},{"line_number":68,"context_line":"        self.assertIsNone(logger.logger.statsd_client._host)"},{"line_number":69,"context_line":"        with mock.patch.object(logger.logger.statsd_client,"},{"line_number":70,"context_line":"                               \u0027_open_socket\u0027) as mock_open:"},{"line_number":71,"context_line":"            logger.increment(\u0027tunafish\u0027)"},{"line_number":72,"context_line":"        self.assertFalse(mock_open.mock_calls)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b3852c08_de6b864f","line":70,"in_reply_to":"da8052ac_f7c975ef","updated":"2024-05-16 15:40:18.000000000","message":"`statsd_client.socket`? Or `socket`? Or `eventlet.green.socket`, or ...\n\nWhat\u0027s the point of `_open_socket` if not for doing this sort of test, similar to what we\u0027re doing down around L300-380?","commit_id":"55a6597b616d8e6828cefc3305a9c3aeaaf66526"}],"test/unit/common/test_statsd_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ac4410e7268bf4cbb5c315182cc6eb4fd5a8","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        self.addCleanup(self.getaddrinfo_patcher.stop)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_get_logger_statsd_client_not_specified(self):"},{"line_number":63,"context_line":"        logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":64,"context_line":"        # white-box construction validation:"},{"line_number":65,"context_line":"        # there may be a client instance, but it won\u0027t send anything;"},{"line_number":66,"context_line":"        # won\u0027t even open a socket"}],"source_content_type":"text/x-python","patch_set":4,"id":"558c8ca0_eca0ddd5","line":63,"updated":"2024-05-17 16:03:55.000000000","message":"I think we should start to migrate these tests to call StatsdClient directly: see https://review.opendev.org/c/openstack/swift/+/919936 for a start","commit_id":"f8d6eaade58afb4e2da69314030e34c45675e402"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        self.addCleanup(self.getaddrinfo_patcher.stop)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_get_logger_statsd_client_not_specified(self):"},{"line_number":63,"context_line":"        logger \u003d utils.get_logger({}, \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":64,"context_line":"        # white-box construction validation:"},{"line_number":65,"context_line":"        # there may be a client instance, but it won\u0027t send anything;"},{"line_number":66,"context_line":"        # won\u0027t even open a socket"}],"source_content_type":"text/x-python","patch_set":4,"id":"adb8f8dd_427e6612","line":63,"in_reply_to":"558c8ca0_eca0ddd5","updated":"2024-05-17 18:50:32.000000000","message":"oh oh!  are we gunna do one of those tricks where we have a _get_client method and TestStatsdClient and TestSTatsdLogging all run the same tests but in one TestCase they call get_statsd_client and in the other they call get_logger!?","commit_id":"f8d6eaade58afb4e2da69314030e34c45675e402"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":32,"context_line":"from swift.common import statsd_client"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from test.debug_logger import debug_logger"},{"line_number":35,"context_line":"from test.unit.common.test_utils import MockUdpSocket"},{"line_number":36,"context_line":"from swift.common.swob import Response"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d87a73a7_3d3d8067","side":"PARENT","line":35,"updated":"2024-05-17 18:50:32.000000000","message":"how strange","commit_id":"a1916855c204e0a18d57d855d2e684f1a291709c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        self.assertEqual([(\u0027myhost\u0027, 1234)], self.getaddrinfo_calls)"},{"line_number":85,"context_line":"        with mock.patch.object(client, \u0027_open_socket\u0027) as mock_open:"},{"line_number":86,"context_line":"            self.assertIs(client.increment(\u0027tunafish\u0027),"},{"line_number":87,"context_line":"                          mock_open.return_value.sendto.return_value)"},{"line_number":88,"context_line":"        self.assertEqual(mock_open.mock_calls, ["},{"line_number":89,"context_line":"            mock.call(),"},{"line_number":90,"context_line":"            mock.call().sendto(b\u0027tunafish:1|c\u0027, (\u0027myhost\u0027, 1234)),"}],"source_content_type":"text/x-python","patch_set":6,"id":"e54ca6c2_d2a7bfdf","line":87,"updated":"2024-05-17 18:50:32.000000000","message":"this assertIs call is *wild* - \"increment returns the value of calling sendto on the value returned from our mocked open\" :mindblown:","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":95,"context_line":"        client \u003d StatsdClient(None, None)"},{"line_number":96,"context_line":"        self.assertIsNone(client._host)"},{"line_number":97,"context_line":"        self.assertFalse(self.getaddrinfo_calls)"},{"line_number":98,"context_line":"        with mock.patch.object(client, \u0027_open_socket\u0027) as mock_open:"},{"line_number":99,"context_line":"            self.assertIsNone(client.increment(\u0027tunafish\u0027))"},{"line_number":100,"context_line":"        self.assertFalse(mock_open.mock_calls)"},{"line_number":101,"context_line":"        self.assertFalse(self.getaddrinfo_calls)"}],"source_content_type":"text/x-python","patch_set":6,"id":"93e1b3a2_79ca1ff2","line":98,"updated":"2024-05-17 18:50:32.000000000","message":"I have (had?) this sentiment that this test would *only* be better as:\n\n        diff --git a/test/unit/common/test_statsd_client.py b/test/unit/common/test_statsd_client.py\n        index 3a71ff6b0..98814bc83 100644\n        --- a/test/unit/common/test_statsd_client.py\n        +++ b/test/unit/common/test_statsd_client.py\n        @@ -95,10 +95,9 @@ class TestStatsdClient(BaseTestStasdClient):\n                 client \u003d StatsdClient(None, None)\n                 self.assertIsNone(client._host)\n                 self.assertFalse(self.getaddrinfo_calls)\n        -        with mock.patch.object(client, \u0027_open_socket\u0027) as mock_open:\n        +        with mock.patch(\u0027swift.common.statsd_client.socket\u0027) as mock_socket:\n                     self.assertIsNone(client.increment(\u0027tunafish\u0027))\n        -        self.assertFalse(mock_open.mock_calls)\n        -        self.assertFalse(self.getaddrinfo_calls)\n        +        self.assertFalse(mock_socket.mock_calls)\n         \n         \n         class TestStatsdLogging(BaseTestStasdClient):\n\nI don\u0027t *really* understand the preference towards the pattern of \"mock the internal method of the thing your testing\" - but I use it sometime when convienent and safe.\n\n\n... and since we have\n\nswift/test/unit/common/test_statsd_client.py::TestStatsdLogging::test_bad_hostname_instantiation\n\nand the like that *actually* test `_open_socket` directly and catch bugs like:\n\n        diff --git a/swift/common/statsd_client.py b/swift/common/statsd_client.py\n        index 492d264bb..bf4cd37a1 100644\n        --- a/swift/common/statsd_client.py\n        +++ b/swift/common/statsd_client.py\n        @@ -143,7 +143,7 @@ class StatsdClient(object):\n                                 {\u0027target\u0027: self._target, \u0027err\u0027: err})\n         \n             def _open_socket(self):\n        -        return socket.socket(self._sock_family, socket.SOCK_DGRAM)\n        +        return socket.socket(self._sock_family, socket.BOO_BERRIES)\n         \n             def update_stats(self, m_name, m_value, sample_rate\u003dNone):\n                 return self._send(m_name, m_value, \u0027c\u0027, sample_rate)\n\n... maybe `_open_socket` *is* a good place to draw a line around \"what happens when you call `__init__`?\"","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":380,"context_line":"        self.assertEqual(len(mock_socket.sent), 0)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        client.random \u003d lambda: 0.49999"},{"line_number":383,"context_line":"        self.assertIsInstance(logger.increment(\u0027tribbles\u0027, sample_rate\u003d0.5), int)"},{"line_number":384,"context_line":"        self.assertEqual(len(mock_socket.sent), 1)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        payload \u003d mock_socket.sent[0][0]"}],"source_content_type":"text/x-python","patch_set":6,"id":"63995eb2_65771579","line":383,"updated":"2024-05-17 18:50:32.000000000","message":"boo flake8!","commit_id":"c2233238efbe96135cafc55237db673bc37ee18f"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"996116d29e0c0a68d24bfe198c5334de3a494dab","unresolved":true,"context_lines":[{"line_number":148,"context_line":"        self.sent.append((data, target))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def close(self):"},{"line_number":151,"context_line":"        pass"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class MockSys(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9be7db4e_d4a61834","side":"PARENT","line":151,"updated":"2024-05-17 18:50:32.000000000","message":"nice find!","commit_id":"a1916855c204e0a18d57d855d2e684f1a291709c"}]}
