)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":9,"context_line":"We need to be able to make a SwiftLogAdapter look like a"},{"line_number":10,"context_line":"StatsdClient. We also need to do it again when we clone it in"},{"line_number":11,"context_line":"get_prefixed_logger."},{"line_number":12,"context_line":"We would remove any Statsd related code from logs.py."},{"line_number":13,"context_line":"The new patch_statsd_methods helper function is therefore used to"},{"line_number":14,"context_line":"retrospectively patch a SwiftLogAdapter instance with the"},{"line_number":15,"context_line":"StatsdClient interface when necessary."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"95874f4b_14ec6f52","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":16},"updated":"2024-11-05 09:37:29.000000000","message":"typo, should be \"We would like to remove...\"","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We need to be able to make a SwiftLogAdapter look like a"},{"line_number":10,"context_line":"StatsdClient. We also need to do it again when we clone it in"},{"line_number":11,"context_line":"get_prefixed_logger."},{"line_number":12,"context_line":"We would remove any Statsd related code from logs.py."},{"line_number":13,"context_line":"The new patch_statsd_methods helper function is therefore used to"},{"line_number":14,"context_line":"retrospectively patch a SwiftLogAdapter instance with the"},{"line_number":15,"context_line":"StatsdClient interface when necessary."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"f0bdbf07_0edbcf39","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":16},"in_reply_to":"95874f4b_14ec6f52","updated":"2024-11-05 19:42:20.000000000","message":"Done","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":9,"context_line":"We need to be able to make a SwiftLogAdapter look like a"},{"line_number":10,"context_line":"StatsdClient. We also need to do it again when we clone it in"},{"line_number":11,"context_line":"get_prefixed_logger."},{"line_number":12,"context_line":"We would like to remove any Statsd related code from logs.py."},{"line_number":13,"context_line":"The new patch_statsd_methods helper function is therefore used to"},{"line_number":14,"context_line":"retrospectively patch a SwiftLogAdapter instance with the"},{"line_number":15,"context_line":"StatsdClient interface when necessary."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"a162e8ef_1ecf1b7b","line":12,"updated":"2024-11-14 20:15:13.000000000","message":"generally I expect an empty line between paragraphs in a commit message\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Examples_of_good_practice_2","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We need to be able to make a SwiftLogAdapter look like a"},{"line_number":10,"context_line":"StatsdClient. We also need to do it again when we clone it in"},{"line_number":11,"context_line":"get_prefixed_logger."},{"line_number":12,"context_line":"We would like to remove any Statsd related code from logs.py."},{"line_number":13,"context_line":"The new patch_statsd_methods helper function is therefore used to"},{"line_number":14,"context_line":"retrospectively patch a SwiftLogAdapter instance with the"},{"line_number":15,"context_line":"StatsdClient interface when necessary."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"09358421_49e6be61","line":12,"in_reply_to":"a162e8ef_1ecf1b7b","updated":"2024-11-15 16:54:31.000000000","message":"Done","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67f895f22d4e4be7c903606e4a6c221941e4a77b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3042d5af_6a0bb1ff","updated":"2024-10-04 11:05:06.000000000","message":"This is just a different suggestion vs the facade approach. \nWIP - I\u0027ve not completed the patch. \n\nI think it is obvious how code would move to utils to purify the logs module of statsd related stuff.\n\nThis patcher approach might help where we have to nest loggers to modify log prefix etc - just keep patching the outer log adapter to point to the core logger.","commit_id":"b34f013430d22b82bfad2807626977a69bac6464"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5f07ab7cad231cdc4c2d0e9936b746f90fdc630f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4bda9ace_08fb8717","updated":"2024-10-04 16:46:26.000000000","message":"i get it now!\n\nFWIW I like this better than 931344: wip: make the Facade is-a SwiftLogAdapter | https://review.opendev.org/c/openstack/swift/+/931344","commit_id":"b34f013430d22b82bfad2807626977a69bac6464"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d926c1d271c9694a50ad0e57ddcb68bb80292ebb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d47f662d_318e0ad5","updated":"2024-10-29 18:10:37.000000000","message":"I agree with this idea in principle and want to see it actually achive the *original* goal of \"Split statsd client from logger\" and update this patch to get mergeable.","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a1083d1240ede20dd413ea48bbcff9dd4b8ccfcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0a64e37b_82cdd783","updated":"2024-10-29 12:52:43.000000000","message":"WIP because the statsd related code should move to utils. For now I have left it where it is to make review easier.","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8549a8b5_4c1484f9","updated":"2024-10-31 09:42:34.000000000","message":"@Shreeya it might be easier to review if the functions are moved to utils (and the various imports changed) in a follow-on gerrit patch\n\nLet\u0027s try to get some other core reviewers to discuss my suggestion to actually move stuff to another new sub-utils module.","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"898a8530_d82122b8","updated":"2024-11-05 09:37:29.000000000","message":"I don\u0027t see any blockers, just a few potential improvements.","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"949f2565_f6cc07b0","updated":"2024-11-14 12:03:50.000000000","message":"I think the tests covering patch_statsd_methods that are in test_statsd_client.py (where I have left comments) were contributed by Clay - I\u0027d like to get his opinion on whether they remain useful or are superseded by (or could be combined with) those in test_logs.py\n\nOtherwise docstrings need fixing, plus a couple of nits.\n\nI\u0027m voting +1 to try to get rid of the \"Work In Progress\" status of the patch (I previously removed my Workflow \u003d -1 but that doesn\u0027t seem to have changed the status).","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"f6ef01a5_eca84f85","updated":"2024-11-14 20:15:13.000000000","message":"I think this is bleeding a lot more `statsd_client` into `test_logs` than was there previously (by design?  on accident?)\n\nWe\u0027ve talked in the past that as this change starts to rip `stats_client` out of `utils.logs` we may eventually want to separate the testing of `common.utils` log related functions from `utils.logs` related methods; my assumption being that `test_logs` would at that point only test `utils.logs` methods (i.e. ALSO no `statsd_client`)\n\nI\u0027m not strictly against bleeding more `statsd_client` into `test_logs` as an interim tho - since test_logs is already a jumble.  But maybe also noting that `test_statsd_client` already is a jumble of `utils.get_logger` calls; so there may be some reasonable justification to extend the TestCase there - or move the whole thing into `test_utils`\n\nRegardless of where the new tests should live - it\u0027s probably reasonable to try and make the new test methods exist in an isolated TestCase so they\u0027re easier to move later (rather than piggy-backing on `TestCases` in `test_logs`, which may someday become more focused on testing pure `swift_logger` methods?)\n\nDo we have any tests for `utils.logs.get_prefixed_swift_logger` directly - or only transitively through existing tests for `utils.get_prefixed_logger`?","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5ee3801e_c852eb61","updated":"2024-11-15 16:54:31.000000000","message":"I think I\u0027m missing something about requirements that lead to the given implementation of the new patch/delegate method wrt when/how the shape of `statsd_client_source` is assumed - but I\u0027m not sure I would have even noticed it without the very nice explicit new tests in `test_utils`, AND the doc-string makes it clear what\u0027s expected of users if they do somehow manage to notice it\u0027s not working like they expected.\n\nThis seems to accomplish the important goal as hinted at in the middle of the commit message:\n\n```\nWe would like to remove any Statsd related code\nfrom logs.py.\n```\n\nEven if there\u0027s still a minor statds reference in the docstring of `logs.get_swift_logger` - but that could be cleaned up later, so it\u0027s a minor thing IMHO.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"36741e2a_5f4b4890","updated":"2024-11-15 10:51:15.000000000","message":"I think we\u0027re in agreement that the tests have become muddled across the test_logs, test_statsd_client and test_utils.\n\nIn the latest patchset I have put the *new* tests for get_logger and get_prefixed_logger in a new TestCase in test_utils, to avoid further muddling. That new TestCase can be a home for future relocation of some of the existing tests.\n\nI\u0027ve removed tests that make assertions that SwiftLogAdapter doesn\u0027t have StatsdClient attributes, but mindful that others may wish to retain a reminder of the history I have proposed such a test in a follow-on https://review.opendev.org/c/openstack/swift/+/935276 .\n\nThe remaining tests in test_statsd_client were candidates to move to the new test_utils.TestSwiftLogAdapterDelegation class, but IMHO are now covered by the new tests there so I have removed them.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"b54c6ea8cccf1559cf8746d7eea5b8954e01215d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"bf592162_4f7adfc1","updated":"2024-11-18 19:03:46.000000000","message":"recheck","commit_id":"cb3e084665199e93c62d627ed56bed8cdbcf7468"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"29a7bd37385ed942c2483b1f8cd9955196c8186b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7078ec78_bb8fcdd2","updated":"2024-11-18 19:58:27.000000000","message":"recheck","commit_id":"fa0245a90624b667517ad0880ac450f18d84f46c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"8c0324ff86629e663126019f83659b56fea1b636","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"69dbc908_6c6e567d","updated":"2024-11-19 16:47:32.000000000","message":"recheck","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"63d60494f9ea9efd846d7b5ea3262f4d8e332a1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"74cf0fd0_9220d46f","updated":"2024-11-21 15:42:27.000000000","message":"recheck","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27e3a159ae616fd59ab0043329e64ed22abb3ee4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"20d2259d_09d630fc","updated":"2024-11-25 15:47:10.000000000","message":"We could keep polishing the tests in test_logs.py in this patch or in a follow-on.","commit_id":"2dd184e51a30462d58c8ff4449dd34fbeb9ec4ab"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"c1daaa59b21319685d322088705e3ac3686c18d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"d47a835b_9f05c3f7","updated":"2024-11-26 15:41:34.000000000","message":"tests related to get_prefixed_swift_logger are present in test_logs.py.\n\n\"test_get_prefixed_logger_calls_get_prefixed_swift_logger\" asserts that the prefixed logger’s core logger IS the original logger’s core logger\n\nThere are no extra tests in test_utils.py regarding get_prefixed_logger (except 2 that check for statsd clients) so maybe we don\u0027t need a followup on moving tests anymore. \n\nlogs.py has no residue of \u0027statsd\u0027 anymore.","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"ee82d835_1f1d5684","updated":"2024-11-26 17:31:46.000000000","message":"you can run pep8 checks locally (on a subset of the repo that you have modified) using\n\n```\nflake8 path/to/dir_or_file\n```\n\nwhich will save you time waiting for zuul","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"e0a762d6_020c3c6f","in_reply_to":"ee82d835_1f1d5684","updated":"2024-11-27 16:28:36.000000000","message":"I\u0027ll even bust out a `for file in $(git show --name-only | grep \".py$\"); do echo $file; flake8 $file; done` when I\u0027m not sure I caught everything in my editor.","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"7712f5b0_50fe2b45","updated":"2024-11-27 11:04:14.000000000","message":"I spotted a regression, will fix in next patchset","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"d91302e9_c1eeba65","updated":"2024-11-27 16:28:36.000000000","message":"I don\u0027t see any blockers here; I\u0027m happy with where we got to - big win I think pulling statsd out of logs to help us move forward with using the new labeled statsd client interface explicitly throughout the codebase and have our loggers just be loggers!\n\nI saw some things that I think are just nits about the behavior/robustness of the statsd_client delegration patching.  I think we\u0027ve mostly covered this before and I\u0027m happy with the ValueError in the `__init__` so I don\u0027t know how important it is that we try to any further.  If anyone else also thinks the new test for the un-asserted behaviors looks weird to them too maybe I can respin as a proper follow-up:\n\nhttps://review.opendev.org/c/openstack/swift/+/936387 sq? test for weird statsd_client_source robustness\nhttps://review.opendev.org/c/openstack/swift/+/936388 sq?  maybe just don\u0027t allow that?","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":33,"context_line":"    RateLimitedIterator, distribute_evenly, get_prefixed_logger, \\"},{"line_number":34,"context_line":"    non_negative_float, non_negative_int, config_auto_int_value, \\"},{"line_number":35,"context_line":"    dump_recon_cache, get_partition_from_path, get_hub"},{"line_number":36,"context_line":"from swift.common.utils.logs import SwiftLogAdapter"},{"line_number":37,"context_line":"from swift.obj import diskfile"},{"line_number":38,"context_line":"from swift.common.recon import RECON_RELINKER_FILE, DEFAULT_RECON_CACHE_PATH"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1d125660_ef79f679","line":36,"updated":"2024-11-27 16:28:36.000000000","message":"alas, `utils.logs.get_prefixed_logger` you were only with us a short time; but you burned bright!","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"swift/common/statsd_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    conf \u003d conf or {}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    host \u003d conf.get(\u0027log_statsd_host\u0027)"},{"line_number":48,"context_line":"    port \u003d int(conf.get(\u0027log_statsd_port\u0027, 8125))"},{"line_number":49,"context_line":"    base_prefix \u003d conf.get(\u0027log_statsd_metric_prefix\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5157e4f2_df8da981","side":"PARENT","line":46,"updated":"2024-11-05 09:37:29.000000000","message":"nit: unnecessary change","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    conf \u003d conf or {}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    host \u003d conf.get(\u0027log_statsd_host\u0027)"},{"line_number":48,"context_line":"    port \u003d int(conf.get(\u0027log_statsd_port\u0027, 8125))"},{"line_number":49,"context_line":"    base_prefix \u003d conf.get(\u0027log_statsd_metric_prefix\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f5fd76d2_d825744a","side":"PARENT","line":46,"in_reply_to":"5157e4f2_df8da981","updated":"2024-11-05 19:42:20.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":87,"context_line":"from swift.common.utils.logs import (   # noqa"},{"line_number":88,"context_line":"    SysLogHandler,  # t.u.helpers.setup_servers monkey patch is sketch"},{"line_number":89,"context_line":"    logging_monkey_patch,"},{"line_number":90,"context_line":"    get_swift_logger,"},{"line_number":91,"context_line":"    LogLevelFilter,"},{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0f99dbf6_ca508665","line":90,"updated":"2024-10-31 09:42:34.000000000","message":"hmmm, so we need to import this for it be called in get_logger. But I\u0027m not sure that we should establish a pattern of other modules importing ``get_swift_logger`` from utils rather than directly from utils.logs.\n\nIn fact, I wonder if we should put the ``get_logger``, ``get_prefixed_logger`` and ``patch_statsd_methods`` into a new module under utils (hybrid_logs.py ??) so that (a) we don\u0027t make this module bigger again and (b) we don\u0027t import ``get_swift_logger`` into this module.","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":87,"context_line":"from swift.common.utils.logs import (   # noqa"},{"line_number":88,"context_line":"    SysLogHandler,  # t.u.helpers.setup_servers monkey patch is sketch"},{"line_number":89,"context_line":"    logging_monkey_patch,"},{"line_number":90,"context_line":"    get_swift_logger,"},{"line_number":91,"context_line":"    LogLevelFilter,"},{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c01b0eaf_d161f394","line":90,"in_reply_to":"0f99dbf6_ca508665","updated":"2024-11-01 15:47:00.000000000","message":"We can have a follow-on patch if we would like to move stuff around. It might be confusing for reviews to have another file up and things shited there.","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d32fb5d9d33c7f7da9ed60277ec63bf7d57f95e","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    :param prefix: a string prefix."},{"line_number":246,"context_line":"    :returns: a new instance of ``SwiftLogAdapter``."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    new_logger \u003d swift.common.utils.logs.SwiftLogAdapter("},{"line_number":249,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":250,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":251,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":252,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":5,"id":"6cc406a9_a82bedd4","line":249,"range":{"start_line":248,"start_character":4,"end_line":249,"end_character":64},"updated":"2024-10-31 17:38:13.000000000","message":"this line gets replaced with a call to ``get_prefixed_swift_logger()`` in utils.logs","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    :param prefix: a string prefix."},{"line_number":246,"context_line":"    :returns: a new instance of ``SwiftLogAdapter``."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    new_logger \u003d swift.common.utils.logs.SwiftLogAdapter("},{"line_number":249,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":250,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":251,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":252,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":5,"id":"f3c5442b_52a62f4e","line":249,"range":{"start_line":248,"start_character":4,"end_line":249,"end_character":64},"in_reply_to":"6cc406a9_a82bedd4","updated":"2024-11-01 15:47:00.000000000","message":"Acknowledged","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"83433908958a03749980da30937b96175406ac9a","unresolved":true,"context_lines":[{"line_number":252,"context_line":"    return new_logger"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":256,"context_line":"    \"\"\""},{"line_number":257,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":258,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":5,"id":"0ccddd31_3d3f3381","line":255,"updated":"2024-10-31 09:51:14.000000000","message":"we should rename this with an ``_`` prefix. I don\u0027t think we want this to appear to be a generally useful \"public\" function","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    return new_logger"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":256,"context_line":"    \"\"\""},{"line_number":257,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":258,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":5,"id":"470f8292_4e6e0ae8","line":255,"in_reply_to":"0ccddd31_3d3f3381","updated":"2024-11-01 15:47:00.000000000","message":"Acknowledged","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d32fb5d9d33c7f7da9ed60277ec63bf7d57f95e","unresolved":true,"context_lines":[{"line_number":257,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":258,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"},{"line_number":259,"context_line":"    ``statsd_client_source``."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    Note: ``statsd_client_source`` is an object that *has a* ``StatsdClient``"},{"line_number":262,"context_line":"        and not an object that *is a* ``StatsdClient`` instance, because the"},{"line_number":263,"context_line":"        actual ``StatsdClient`` instance may change. The patched target"}],"source_content_type":"text/x-python","patch_set":5,"id":"7bc04017_0e0e1cb0","line":260,"updated":"2024-10-31 17:38:13.000000000","message":"let\u0027s add another note:\n\n``Note: this function is only used to create backwards compatibility legacy \"hybrid\" loggers that also have a StatsdClient interface. It should not otherwise be used to patch arbitrary objects to have a StatsdClient interface.``","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":258,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"},{"line_number":259,"context_line":"    ``statsd_client_source``."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    Note: ``statsd_client_source`` is an object that *has a* ``StatsdClient``"},{"line_number":262,"context_line":"        and not an object that *is a* ``StatsdClient`` instance, because the"},{"line_number":263,"context_line":"        actual ``StatsdClient`` instance may change. The patched target"}],"source_content_type":"text/x-python","patch_set":5,"id":"b39e0bb1_c02bd325","line":260,"in_reply_to":"7bc04017_0e0e1cb0","updated":"2024-11-01 15:47:00.000000000","message":"Acknowledged","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":242,"context_line":"    \"\"\""},{"line_number":243,"context_line":"    Return a clone of the given ``swift_logger`` with a new prefix string."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    :param swift_logger: an instance of ``SwiftLogAdapter``."},{"line_number":246,"context_line":"    :param prefix: a string prefix."}],"source_content_type":"text/x-python","patch_set":6,"id":"472b246c_542cd3ee","line":243,"updated":"2024-11-05 09:37:29.000000000","message":"Expand the docstring a little:\n\n```\nReturn a clone of the given ``swift_logger`` with a new prefix string that replaces the prefix string of the given ``swift_logger``\n\nIf the given ``swift_logger`` has been patched with an interface to a ``StatsdClient`` instance then the returned ``SwiftLogAdapter`` will also be patched with an interface to the same ``StatsdClient`` instance.\n```","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":242,"context_line":"    \"\"\""},{"line_number":243,"context_line":"    Return a clone of the given ``swift_logger`` with a new prefix string."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    :param swift_logger: an instance of ``SwiftLogAdapter``."},{"line_number":246,"context_line":"    :param prefix: a string prefix."}],"source_content_type":"text/x-python","patch_set":6,"id":"adbfa086_e8081ef4","line":243,"in_reply_to":"472b246c_542cd3ee","updated":"2024-11-05 19:42:20.000000000","message":"Acknowledged","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":246,"context_line":"    :param prefix: a string prefix."},{"line_number":247,"context_line":"    :returns: a new instance of ``SwiftLogAdapter``."},{"line_number":248,"context_line":"    \"\"\""},{"line_number":249,"context_line":"    new_logger \u003d get_prefixed_swift_logger("},{"line_number":250,"context_line":"        swift_logger, prefix\u003dprefix)"},{"line_number":251,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":252,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":253,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff354462_0a8f5cd5","line":250,"range":{"start_line":249,"start_character":4,"end_line":250,"end_character":36},"updated":"2024-11-05 09:37:29.000000000","message":"nit: this can all be on one line","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    :param prefix: a string prefix."},{"line_number":247,"context_line":"    :returns: a new instance of ``SwiftLogAdapter``."},{"line_number":248,"context_line":"    \"\"\""},{"line_number":249,"context_line":"    new_logger \u003d get_prefixed_swift_logger("},{"line_number":250,"context_line":"        swift_logger, prefix\u003dprefix)"},{"line_number":251,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":252,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":253,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":6,"id":"61ad0670_2248e3bd","line":250,"range":{"start_line":249,"start_character":4,"end_line":250,"end_character":36},"in_reply_to":"ff354462_0a8f5cd5","updated":"2024-11-05 19:42:20.000000000","message":"Acknowledged","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":253,"context_line":"    return new_logger"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":257,"context_line":"    \"\"\""},{"line_number":258,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":259,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."}],"source_content_type":"text/x-python","patch_set":6,"id":"9ba0bc22_3b221bbc","line":256,"range":{"start_line":256,"start_character":4,"end_line":256,"end_character":24},"updated":"2024-11-05 09:37:29.000000000","message":"IIRC the plan was to prefix the name of this function with ``_`` to signal that it is not \"public\"","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    return new_logger"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":257,"context_line":"    \"\"\""},{"line_number":258,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":259,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."}],"source_content_type":"text/x-python","patch_set":6,"id":"7477bfac_eabc6646","line":256,"range":{"start_line":256,"start_character":4,"end_line":256,"end_character":24},"in_reply_to":"9ba0bc22_3b221bbc","updated":"2024-11-05 19:42:20.000000000","message":"Done","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":325,"context_line":"    target.timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":326,"context_line":"    target.transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":327,"context_line":"    target.set_statsd_prefix \u003d set_statsd_prefix"},{"line_number":328,"context_line":"    target.statsd_client_source \u003d statsd_client_source"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"class InvalidHashPathConfigError(ValueError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a72cd05e_aa25f537","line":328,"updated":"2024-11-05 09:37:29.000000000","message":"I have a preference for helper functions being above their call sites...by habit I tend to page up to find helpers. The swift codebase is not consistent in this, and sometimes it just doesn\u0027t make sense or would cause a lot of churn. But in this case we could re order with no churn because it\u0027s fresh code in this module. i.e. move patch_statsd_methods above get_logger where it is first called.","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    target.timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":326,"context_line":"    target.transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":327,"context_line":"    target.set_statsd_prefix \u003d set_statsd_prefix"},{"line_number":328,"context_line":"    target.statsd_client_source \u003d statsd_client_source"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"class InvalidHashPathConfigError(ValueError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"d8571548_38e48185","line":328,"in_reply_to":"a72cd05e_aa25f537","updated":"2024-11-05 19:42:20.000000000","message":"Done","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _patch_statsd_methods(target, statsd_client_source):"},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":211,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."},{"line_number":212,"context_line":"    It should not otherwise be used to patch arbitrary"},{"line_number":213,"context_line":"    objects to have a StatsdClient interface."}],"source_content_type":"text/x-python","patch_set":15,"id":"95a40056_d08bbb31","line":210,"range":{"start_line":210,"start_character":57,"end_line":210,"end_character":70},"updated":"2024-11-14 12:03:50.000000000","message":"nit: should probably be \"compatible\"","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d641944d188ea2b6701a84fb59ccd5341a9d4ac2","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _patch_statsd_methods(target, statsd_client_source):"},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":211,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."},{"line_number":212,"context_line":"    It should not otherwise be used to patch arbitrary"},{"line_number":213,"context_line":"    objects to have a StatsdClient interface."}],"source_content_type":"text/x-python","patch_set":15,"id":"0a1c8ddd_fbf388a9","line":210,"range":{"start_line":210,"start_character":57,"end_line":210,"end_character":70},"in_reply_to":"95a40056_d08bbb31","updated":"2024-11-14 19:36:19.000000000","message":"Done","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":210,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":211,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."},{"line_number":212,"context_line":"    It should not otherwise be used to patch arbitrary"},{"line_number":213,"context_line":"    objects to have a StatsdClient interface."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":216,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":15,"id":"1270d476_3d3d7d76","line":213,"updated":"2024-11-14 12:03:50.000000000","message":"nit: looks like line-wrapping is wrong for lines 212-213","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d641944d188ea2b6701a84fb59ccd5341a9d4ac2","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    Note: this function is only used to create backwards compatibility"},{"line_number":211,"context_line":"    legacy \"hybrid\" loggers that also have a StatsdClient interface."},{"line_number":212,"context_line":"    It should not otherwise be used to patch arbitrary"},{"line_number":213,"context_line":"    objects to have a StatsdClient interface."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":216,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":15,"id":"af33b7f7_05558136","line":213,"in_reply_to":"1270d476_3d3d7d76","updated":"2024-11-14 19:36:19.000000000","message":"Acknowledged","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    Note: ``statsd_client_source`` is an object that *has a* ``StatsdClient``"},{"line_number":220,"context_line":"        and not an object that *is a* ``StatsdClient`` instance, because the"},{"line_number":221,"context_line":"        actual ``StatsdClient`` instance may change. The patched target"},{"line_number":222,"context_line":"        therefore forwards its methods to whatever instance of ``StatsdClient``"},{"line_number":223,"context_line":"        the ``statsd_client_source`` currently has."},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"f3083155_fc0ddd87","line":221,"updated":"2024-11-15 16:54:31.000000000","message":"it\u0027s good this is well documented and has a WHY - because the failure mode of passing in a `statds_client_source` that *doesn\u0027t* have a `statds_client` attribute (e.g. a StatsdClient *instance*) does not fail early/loudly.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    Note: ``statsd_client_source`` is an object that *has a* ``StatsdClient``"},{"line_number":220,"context_line":"        and not an object that *is a* ``StatsdClient`` instance, because the"},{"line_number":221,"context_line":"        actual ``StatsdClient`` instance may change. The patched target"},{"line_number":222,"context_line":"        therefore forwards its methods to whatever instance of ``StatsdClient``"},{"line_number":223,"context_line":"        the ``statsd_client_source`` currently has."},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"b55e499d_f21f3179","line":221,"in_reply_to":"f3083155_fc0ddd87","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        @functools.wraps(func)"},{"line_number":265,"context_line":"        def wrapped(*a, **kw):"},{"line_number":266,"context_line":"            if getattr(statsd_client_source, \u0027statsd_client\u0027, None):"},{"line_number":267,"context_line":"                func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":268,"context_line":"                               statsd_func_name)"},{"line_number":269,"context_line":"                return func(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff65072e_bca7d021","line":266,"updated":"2024-11-15 16:54:31.000000000","message":"I\u0027m not sure I understand the motivation of providing the default for `getattr` here - beyond maybe that it\u0027s \"too late\" to verify the `statdsd_client_source` we were provided when we were called actually confirms to the requirements of the value according to the doc string (i.e. must be a \"has-a-statsd_client\")","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        @functools.wraps(func)"},{"line_number":265,"context_line":"        def wrapped(*a, **kw):"},{"line_number":266,"context_line":"            if getattr(statsd_client_source, \u0027statsd_client\u0027, None):"},{"line_number":267,"context_line":"                func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":268,"context_line":"                               statsd_func_name)"},{"line_number":269,"context_line":"                return func(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":17,"id":"221e0e4c_971e3a89","line":266,"in_reply_to":"18e4480f_3fdc5ddf","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8010be03422639a4bd6990ab2a81b9bb476d05b9","unresolved":true,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        @functools.wraps(func)"},{"line_number":265,"context_line":"        def wrapped(*a, **kw):"},{"line_number":266,"context_line":"            if getattr(statsd_client_source, \u0027statsd_client\u0027, None):"},{"line_number":267,"context_line":"                func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":268,"context_line":"                               statsd_func_name)"},{"line_number":269,"context_line":"                return func(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":17,"id":"18e4480f_3fdc5ddf","line":266,"in_reply_to":"ff65072e_bca7d021","updated":"2024-11-18 14:51:33.000000000","message":"let\u0027s revert that to \n\n```\nif getattr(statsd_client_source, \u0027statsd_client\u0027):\n```","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":277,"context_line":"    target.timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":278,"context_line":"    target.transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":279,"context_line":"    target.set_statsd_prefix \u003d set_statsd_prefix"},{"line_number":280,"context_line":"    target.statsd_client_source \u003d statsd_client_source"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"db237bba_b0e7a035","line":280,"updated":"2024-11-15 16:54:31.000000000","message":"I added an assert here:\n\n```\n(.venv) clayg@ThinkStation:~/Workspace/vagrant-swift-all-in-one/swift$ git diff\ndiff --git a/swift/common/utils/__init__.py b/swift/common/utils/__init__.py\nindex 0d6f448be..3ec79d39b 100644\n--- a/swift/common/utils/__init__.py\n+++ b/swift/common/utils/__init__.py\n@@ -278,6 +278,7 @@ def _patch_statsd_methods(target, statsd_client_source):\n     target.transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)\n     target.set_statsd_prefix \u003d set_statsd_prefix\n     target.statsd_client_source \u003d statsd_client_source\n+    assert hasattr(statsd_client_source, \u0027statsd_client\u0027)\n \n \n def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,\n ```\n \n and only one test in `test.utils.commmon` failed:\n \n ```\n FAILED swift/test/unit/common/test_utils.py::TestLoggerStatsdClientDelegation::test_patch_statsd_methods_source_is_none - AssertionError\n ```\n \n I was actually expecting `test_patch_statsd_methods_source_statsd_client_is_none` to fail too, but when it didn\u0027t I got to read/think about both the test and the diff in `statsd_delegrate` more closely.\n \nPerhaps more interestingly...\n\n    assert getattr(statsd_client_source, \u0027statsd_client\u0027, None)\n    \n... causes BOTH tests to fail (and no others?)\n\nWhat can/should we do to ensure we\u0027re calling this method correctly?  For whom are these tests asserting the\"silently hides invalid/unexpected usage\" behavior of this new function?","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    target.timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":278,"context_line":"    target.transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":279,"context_line":"    target.set_statsd_prefix \u003d set_statsd_prefix"},{"line_number":280,"context_line":"    target.statsd_client_source \u003d statsd_client_source"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"c22703e2_73ff3484","line":280,"in_reply_to":"db237bba_b0e7a035","updated":"2024-11-18 16:25:00.000000000","message":"Fixed it!","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                      ``SwiftLogAdapter`` that is returned."},{"line_number":300,"context_line":"    :param fmt: Override log format."},{"line_number":301,"context_line":"    :param statsd_tail_prefix: tail prefix to pass to ``StatsdClient``; if None"},{"line_number":302,"context_line":"        then the tail prefix defaults to the value of ``name``."},{"line_number":303,"context_line":"    :return: an instance of ``SwiftLogAdapter``."},{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":"    swift_logger \u003d get_swift_logger("}],"source_content_type":"text/x-python","patch_set":17,"id":"0a8f2d3f_ae58b70e","line":302,"updated":"2024-11-15 16:54:31.000000000","message":"nice!","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                      ``SwiftLogAdapter`` that is returned."},{"line_number":300,"context_line":"    :param fmt: Override log format."},{"line_number":301,"context_line":"    :param statsd_tail_prefix: tail prefix to pass to ``StatsdClient``; if None"},{"line_number":302,"context_line":"        then the tail prefix defaults to the value of ``name``."},{"line_number":303,"context_line":"    :return: an instance of ``SwiftLogAdapter``."},{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":"    swift_logger \u003d get_swift_logger("}],"source_content_type":"text/x-python","patch_set":17,"id":"2a497a32_3d92f042","line":302,"in_reply_to":"0a8f2d3f_ae58b70e","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":309,"context_line":"    statsd_client \u003d get_statsd_client("},{"line_number":310,"context_line":"        conf, statsd_tail_prefix, swift_logger.logger)"},{"line_number":311,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":312,"context_line":"    _patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":313,"context_line":"    return swift_logger"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7ea03ba7_a41f259d","line":312,"updated":"2024-11-15 16:54:31.000000000","message":"`swift_logger.logger` always has a `statsd_client` - we just set it.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    statsd_client \u003d get_statsd_client("},{"line_number":310,"context_line":"        conf, statsd_tail_prefix, swift_logger.logger)"},{"line_number":311,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":312,"context_line":"    _patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":313,"context_line":"    return swift_logger"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"6e53d079_ca01b2ac","line":312,"in_reply_to":"7ea03ba7_a41f259d","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":328,"context_line":"    \"\"\""},{"line_number":329,"context_line":"    new_logger \u003d get_prefixed_swift_logger(swift_logger, prefix\u003dprefix)"},{"line_number":330,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":331,"context_line":"        _patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":332,"context_line":"    return new_logger"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"01ec896b_276a8930","line":331,"updated":"2024-11-15 16:54:31.000000000","message":"I guess here it\u0027s not clearly known if the `statsd_client_source` has a `statds_client` attribute; but I would assume it does.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    \"\"\""},{"line_number":329,"context_line":"    new_logger \u003d get_prefixed_swift_logger(swift_logger, prefix\u003dprefix)"},{"line_number":330,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":331,"context_line":"        _patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":332,"context_line":"    return new_logger"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"4eb40bc7_224438fc","line":331,"in_reply_to":"01ec896b_276a8930","updated":"2024-11-18 16:25:00.000000000","message":"It does. We can also add a check before patching to ensure that.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8010be03422639a4bd6990ab2a81b9bb476d05b9","unresolved":true,"context_lines":[{"line_number":225,"context_line":"    :param target: an object that will be patched to present an interface to a"},{"line_number":226,"context_line":"        ``StatsdClient``."},{"line_number":227,"context_line":"    :param statsd_client_source: an object that must have an attribute"},{"line_number":228,"context_line":"        ``statsd_client`` that should be an instance of a ``StatsdClient``."},{"line_number":229,"context_line":"        This is typically a core ``logging.Logger`` that has been patched with"},{"line_number":230,"context_line":"        a ``StatsdClient`` by ``get_logger()``."},{"line_number":231,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"4dc7998c_f139e517","line":228,"range":{"start_line":228,"start_character":31,"end_line":228,"end_character":37},"updated":"2024-11-18 14:51:33.000000000","message":"s/should/must/","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    :param target: an object that will be patched to present an interface to a"},{"line_number":226,"context_line":"        ``StatsdClient``."},{"line_number":227,"context_line":"    :param statsd_client_source: an object that must have an attribute"},{"line_number":228,"context_line":"        ``statsd_client`` that should be an instance of a ``StatsdClient``."},{"line_number":229,"context_line":"        This is typically a core ``logging.Logger`` that has been patched with"},{"line_number":230,"context_line":"        a ``StatsdClient`` by ``get_logger()``."},{"line_number":231,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"09c9c56b_c1870397","line":228,"range":{"start_line":228,"start_character":31,"end_line":228,"end_character":37},"in_reply_to":"4dc7998c_f139e517","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8010be03422639a4bd6990ab2a81b9bb476d05b9","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        ``statsd_client`` that should be an instance of a ``StatsdClient``."},{"line_number":229,"context_line":"        This is typically a core ``logging.Logger`` that has been patched with"},{"line_number":230,"context_line":"        a ``StatsdClient`` by ``get_logger()``."},{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def set_statsd_prefix(prefix):"},{"line_number":234,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"d24c4c0d_9980178f","line":231,"updated":"2024-11-18 14:51:33.000000000","message":"blow up early:\n\n```\nif not isinstance(statsd_client_source.statsd_client, StatsdClient):\n    raise ValueError()\n\n```\n\nThis is going to cause some tests to fail where they currently assert that it\u0027s ok to have statsd_client not exit or be None when calling the function. The tests need to be appropriately adapted (or removed)","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        ``statsd_client`` that should be an instance of a ``StatsdClient``."},{"line_number":229,"context_line":"        This is typically a core ``logging.Logger`` that has been patched with"},{"line_number":230,"context_line":"        a ``StatsdClient`` by ``get_logger()``."},{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def set_statsd_prefix(prefix):"},{"line_number":234,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"2e90ae34_b717f549","line":231,"in_reply_to":"d24c4c0d_9980178f","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8010be03422639a4bd6990ab2a81b9bb476d05b9","unresolved":true,"context_lines":[{"line_number":246,"context_line":"            \u0027``statsd_tail_prefix`` argument to ``get_logger`` instead.\u0027,"},{"line_number":247,"context_line":"            DeprecationWarning, stacklevel\u003d2"},{"line_number":248,"context_line":"        )"},{"line_number":249,"context_line":"        if getattr(statsd_client_source, \u0027statsd_client\u0027, None):"},{"line_number":250,"context_line":"            statsd_client_source.statsd_client._set_prefix(prefix)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def statsd_delegate(statsd_func_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"42cc7d88_2930ed97","line":249,"updated":"2024-11-18 14:51:33.000000000","message":"remove the ``None`` default so this is same as line 266 (see comment at 266)","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            \u0027``statsd_tail_prefix`` argument to ``get_logger`` instead.\u0027,"},{"line_number":247,"context_line":"            DeprecationWarning, stacklevel\u003d2"},{"line_number":248,"context_line":"        )"},{"line_number":249,"context_line":"        if getattr(statsd_client_source, \u0027statsd_client\u0027, None):"},{"line_number":250,"context_line":"            statsd_client_source.statsd_client._set_prefix(prefix)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def statsd_delegate(statsd_func_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"97369338_882a4776","line":249,"in_reply_to":"42cc7d88_2930ed97","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":"    if hasattr(target, \u0027statsd_client_source\u0027):"},{"line_number":233,"context_line":"        if getattr(target.statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":234,"context_line":"            raise ValueError()"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def set_statsd_prefix(prefix):"},{"line_number":237,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"5e694be4_e038b40f","line":234,"updated":"2024-11-25 15:25:42.000000000","message":"I don\u0027t understand this change, w.r.t. this comment https://review.opendev.org/c/openstack/swift/+/931473/comment/d24c4c0d_9980178f/\n\nThis doesn\u0027t seem to be covered by any test.\n\nI don\u0027t think we care if the target already has a statsd_client_source - it will just be replaced","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":"    if hasattr(target, \u0027statsd_client_source\u0027):"},{"line_number":233,"context_line":"        if getattr(target.statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":234,"context_line":"            raise ValueError()"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def set_statsd_prefix(prefix):"},{"line_number":237,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"cd794513_08ff5142","line":234,"in_reply_to":"5e694be4_e038b40f","updated":"2024-11-25 15:36:22.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":234,"context_line":"            raise ValueError()"},{"line_number":235,"context_line":"    except (AttributeError, ValueError):"},{"line_number":236,"context_line":"        raise ValueError("},{"line_number":237,"context_line":"            \u0027statsd_client_source must have a statsd_client attribute\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def set_statsd_prefix(prefix):"},{"line_number":240,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"dd5a37c9_17f10e63","line":237,"updated":"2024-11-27 16:28:36.000000000","message":"I dig it!  enforce that docstring.","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        @functools.wraps(func)"},{"line_number":271,"context_line":"        def wrapped(*a, **kw):"},{"line_number":272,"context_line":"            if getattr(statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":273,"context_line":"                func \u003d getattr(statsd_client_source.statsd_client,"},{"line_number":274,"context_line":"                               statsd_func_name)"},{"line_number":275,"context_line":"                return func(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":27,"id":"2d1059b0_9fd19c6f","line":272,"updated":"2024-11-27 16:28:36.000000000","message":"we\u0027re not testing this guard either","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":310,"context_line":"    conf \u003d conf or {}"},{"line_number":311,"context_line":"    swift_logger \u003d get_swift_logger("},{"line_number":312,"context_line":"        conf, name, log_to_console, log_route, fmt)"},{"line_number":313,"context_line":"    name \u003d conf.get(\u0027log_name\u0027, \u0027swift\u0027) if name is None else name"},{"line_number":314,"context_line":"    tail_prefix \u003d name if statsd_tail_prefix is None else statsd_tail_prefix"},{"line_number":315,"context_line":"    statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)"},{"line_number":316,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"cd4c3476_9a6c8c1b","line":313,"updated":"2024-11-27 16:28:36.000000000","message":"This seems to be duplicating the logic in `get_swift_logger` - I wasn\u0027t expecting this to be strictly equivalent:\n\n```\ndiff --git a/swift/common/utils/__init__.py b/swift/common/utils/__init__.py\nindex c6c322924..c4911dee8 100644\n--- a/swift/common/utils/__init__.py\n+++ b/swift/common/utils/__init__.py\n@@ -310,7 +310,7 @@ def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,\n     conf \u003d conf or {}\n     swift_logger \u003d get_swift_logger(\n         conf, name, log_to_console, log_route, fmt)\n-    name \u003d conf.get(\u0027log_name\u0027, \u0027swift\u0027) if name is None else name\n+    name \u003d swift_logger.name if name is None else name\n     tail_prefix \u003d name if statsd_tail_prefix is None else statsd_tail_prefix\n     statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)\n     swift_logger.logger.statsd_client \u003d statsd_client\n```\n\nbut `pytest swift/test/unit/common/test_utils.py -k test_get_logger_statsd_client_prefix` still passes...\n\nmaybe interesting that `name \u003d swift_logger.name` fails on \n\n```\n        statsd_client \u003d call_get_logger(conf, \u0027\u0027, None)\n\u003e       self.assertEqual(\u0027\u0027, statsd_client._prefix)\nE       AssertionError: \u0027\u0027 !\u003d \u0027root.\u0027\nE       + root.\n```\n\n... but no other assertions AFAICT; I guess `getLogger` doesn\u0027t really like the logger to be named the empty string!\n\nThere may be some merit in repeating the conf.get explicitly as opposed to \"just taking the default name from get_swift_logger\" - but it does lead to a *little* duplication?","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":313,"context_line":"    name \u003d conf.get(\u0027log_name\u0027, \u0027swift\u0027) if name is None else name"},{"line_number":314,"context_line":"    tail_prefix \u003d name if statsd_tail_prefix is None else statsd_tail_prefix"},{"line_number":315,"context_line":"    statsd_client \u003d get_statsd_client(conf, tail_prefix, swift_logger.logger)"},{"line_number":316,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":317,"context_line":"    _patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":318,"context_line":"    return swift_logger"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"d0292747_90965b84","line":316,"updated":"2024-11-27 16:28:36.000000000","message":"as fortold in the docstring of `_patch_statsd_methods` the `swift_logger.logger` is indeed \"a core `logging.Logger` that has been patched with a `StatsdClient` by `get_logger()`\"","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":333,"context_line":"    \"\"\""},{"line_number":334,"context_line":"    new_logger \u003d get_prefixed_swift_logger(swift_logger, prefix\u003dprefix)"},{"line_number":335,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":336,"context_line":"        if getattr(swift_logger.statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":337,"context_line":"            _patch_statsd_methods("},{"line_number":338,"context_line":"                new_logger, swift_logger.statsd_client_source)"},{"line_number":339,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":27,"id":"d3a4cf7f_980ddcdd","line":336,"updated":"2024-11-27 16:28:36.000000000","message":"this is an interesting guard...\n\nI expected removing it would cause a ValueError in at least *some* test - but apparently the \"call `get_prefxied_logger` with a logger who\u0027s `statsd_client_source` has mutilated it\u0027s `statsd_client`\" was removed?","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"swift/common/utils/logs.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5f07ab7cad231cdc4c2d0e9936b746f90fdc630f","unresolved":true,"context_lines":[{"line_number":708,"context_line":"    if statsd_tail_prefix is None:"},{"line_number":709,"context_line":"        statsd_tail_prefix \u003d name"},{"line_number":710,"context_line":"    logger.statsd_client \u003d statsd_client.get_statsd_client("},{"line_number":711,"context_line":"        conf, statsd_tail_prefix, logger)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"    adapted_logger \u003d SwiftLogAdapter(logger, name)"},{"line_number":714,"context_line":"    other_handlers \u003d conf.get(\u0027log_custom_handlers\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a19603e_eb6584f1","line":711,"updated":"2024-10-04 16:46:26.000000000","message":"oic, so this is where the stdlib (global) logger gets it\u0027s statsd_client reference","commit_id":"b34f013430d22b82bfad2807626977a69bac6464"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"eda9b36d58ae6718a3094be2172ab2e735d8a6d0","unresolved":false,"context_lines":[{"line_number":708,"context_line":"    if statsd_tail_prefix is None:"},{"line_number":709,"context_line":"        statsd_tail_prefix \u003d name"},{"line_number":710,"context_line":"    logger.statsd_client \u003d statsd_client.get_statsd_client("},{"line_number":711,"context_line":"        conf, statsd_tail_prefix, logger)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"    adapted_logger \u003d SwiftLogAdapter(logger, name)"},{"line_number":714,"context_line":"    other_handlers \u003d conf.get(\u0027log_custom_handlers\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"32768a5f_0d5a6a4e","line":711,"in_reply_to":"3a19603e_eb6584f1","updated":"2024-11-01 15:47:45.000000000","message":"Acknowledged","commit_id":"b34f013430d22b82bfad2807626977a69bac6464"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a1083d1240ede20dd413ea48bbcff9dd4b8ccfcf","unresolved":true,"context_lines":[{"line_number":391,"context_line":"        call(\u0027%s: %s\u0027 % (msg, emsg), *args, **kwargs)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":395,"context_line":"    \"\"\""},{"line_number":396,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":397,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":2,"id":"898df0f0_1bc70dfb","line":394,"updated":"2024-10-29 12:52:43.000000000","message":"the statsd related code needs to move to utils, but for now it will be easier to review w.r.t. the original in this module.","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"773b10a8b3e3598625412801365ac8d51aa85479","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        call(\u0027%s: %s\u0027 % (msg, emsg), *args, **kwargs)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"def patch_statsd_methods(target, statsd_client_source):"},{"line_number":395,"context_line":"    \"\"\""},{"line_number":396,"context_line":"    Patch the ``target`` object with methods that present an interface to a"},{"line_number":397,"context_line":"    ``StatsdClient`` instance that is an attribute ``statsd_client`` of"}],"source_content_type":"text/x-python","patch_set":2,"id":"99525f57_c49364b6","line":394,"in_reply_to":"898df0f0_1bc70dfb","updated":"2024-10-30 12:39:14.000000000","message":"Done","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d926c1d271c9694a50ad0e57ddcb68bb80292ebb","unresolved":true,"context_lines":[{"line_number":428,"context_line":"            DeprecationWarning, stacklevel\u003d2"},{"line_number":429,"context_line":"        )"},{"line_number":430,"context_line":"        if hasattr(statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":431,"context_line":"            statsd_client_source.statsd_client._set_prefix(prefix)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def statsd_delegate(statsd_func_name):"},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ab97a3cb_d50fbc44","line":431,"updated":"2024-10-29 18:10:37.000000000","message":"curious maybe that the thing we\u0027re asking to patch doesn\u0027t have a statsd_client?","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            DeprecationWarning, stacklevel\u003d2"},{"line_number":429,"context_line":"        )"},{"line_number":430,"context_line":"        if hasattr(statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":431,"context_line":"            statsd_client_source.statsd_client._set_prefix(prefix)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def statsd_delegate(statsd_func_name):"},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"52abed88_79c236b8","line":431,"in_reply_to":"36c5ef27_4e480855","updated":"2024-11-14 12:03:50.000000000","message":"Done","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"773b10a8b3e3598625412801365ac8d51aa85479","unresolved":true,"context_lines":[{"line_number":428,"context_line":"            DeprecationWarning, stacklevel\u003d2"},{"line_number":429,"context_line":"        )"},{"line_number":430,"context_line":"        if hasattr(statsd_client_source, \u0027statsd_client\u0027):"},{"line_number":431,"context_line":"            statsd_client_source.statsd_client._set_prefix(prefix)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def statsd_delegate(statsd_func_name):"},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"36c5ef27_4e480855","line":431,"in_reply_to":"ab97a3cb_d50fbc44","updated":"2024-10-30 12:39:14.000000000","message":"...or it *did* have a statsd_client but someone ``del``\u0027d it after this function executed 😮 Another fun aspect of the \"dynamic\"  statsd_client instance 😞\n\nI\u0027m torn: it\u0027s always been the case that if another caller disabled the statsd_client (host\u003dNone) or historically made it None, then current patched loggers would obviously cease to emit stats but wouldn\u0027t blow up. So it seems prudent to continue with the defensive approach. On the other hand I _think_ we no longer provide an interface that enables setting the client to None...apart from this new function.\n\nI\u0027m going to stick with defensive, and add some more tests, while we discuss further. If we switch to a more brittle implementation the new tests can switch too.","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d926c1d271c9694a50ad0e57ddcb68bb80292ebb","unresolved":true,"context_lines":[{"line_number":757,"context_line":"    if statsd_tail_prefix is None:"},{"line_number":758,"context_line":"        statsd_tail_prefix \u003d name"},{"line_number":759,"context_line":"    statsd_client \u003d get_statsd_client("},{"line_number":760,"context_line":"        conf, statsd_tail_prefix, swift_logger.logger)"},{"line_number":761,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":762,"context_line":"    patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":763,"context_line":"    return swift_logger"}],"source_content_type":"text/x-python","patch_set":2,"id":"f89eb414_695c36af","line":760,"updated":"2024-10-29 18:10:37.000000000","message":"this method looks great!  get_swift_logger, get_statsd_client - then put them together!","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"eda9b36d58ae6718a3094be2172ab2e735d8a6d0","unresolved":false,"context_lines":[{"line_number":757,"context_line":"    if statsd_tail_prefix is None:"},{"line_number":758,"context_line":"        statsd_tail_prefix \u003d name"},{"line_number":759,"context_line":"    statsd_client \u003d get_statsd_client("},{"line_number":760,"context_line":"        conf, statsd_tail_prefix, swift_logger.logger)"},{"line_number":761,"context_line":"    swift_logger.logger.statsd_client \u003d statsd_client"},{"line_number":762,"context_line":"    patch_statsd_methods(swift_logger, swift_logger.logger)"},{"line_number":763,"context_line":"    return swift_logger"}],"source_content_type":"text/x-python","patch_set":2,"id":"82e50146_5b660707","line":760,"in_reply_to":"f89eb414_695c36af","updated":"2024-11-01 15:47:45.000000000","message":"Done","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a1083d1240ede20dd413ea48bbcff9dd4b8ccfcf","unresolved":true,"context_lines":[{"line_number":773,"context_line":"    \"\"\""},{"line_number":774,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":775,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":776,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":777,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":778,"context_line":"    return new_logger"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e6c83599_2fad76ce","line":776,"updated":"2024-10-29 12:52:43.000000000","message":"in relinker.py we use get_prefixed_logger with a SwiftLogAdapter that does NOT have statsd methods.","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":false,"context_lines":[{"line_number":773,"context_line":"    \"\"\""},{"line_number":774,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":775,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":776,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":777,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":778,"context_line":"    return new_logger"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bd32fe4a_6876ce4d","line":776,"in_reply_to":"9c74e924_c03f2857","updated":"2024-11-14 12:03:50.000000000","message":"Acknowledged","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d926c1d271c9694a50ad0e57ddcb68bb80292ebb","unresolved":true,"context_lines":[{"line_number":773,"context_line":"    \"\"\""},{"line_number":774,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":775,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":776,"context_line":"    if hasattr(swift_logger, \u0027statsd_client_source\u0027):"},{"line_number":777,"context_line":"        patch_statsd_methods(new_logger, swift_logger.statsd_client_source)"},{"line_number":778,"context_line":"    return new_logger"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9c74e924_c03f2857","line":776,"in_reply_to":"e6c83599_2fad76ce","updated":"2024-10-29 18:10:37.000000000","message":"this is how you spell \"has the thing I\u0027m wrapping already been patched?\"","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":35,"context_line":"from swift.common.utils.base import md5, quote, split_path"},{"line_number":36,"context_line":"from swift.common.utils.timestamp import UTC"},{"line_number":37,"context_line":"from swift.common.utils.config import config_true_value"},{"line_number":38,"context_line":"from swift.common import statsd_client"},{"line_number":39,"context_line":"# common.utils imports a fully qualified common.exceptions so that"},{"line_number":40,"context_line":"# common.exceptions can import common.utils with out a circular import error"},{"line_number":41,"context_line":"# (if we only make reference to attributes of a module w/i our function/method"}],"source_content_type":"text/x-python","patch_set":5,"id":"759989dd_6f99d131","side":"PARENT","line":38,"updated":"2024-10-31 09:42:34.000000000","message":"yay!","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from swift.common.utils.base import md5, quote, split_path"},{"line_number":36,"context_line":"from swift.common.utils.timestamp import UTC"},{"line_number":37,"context_line":"from swift.common.utils.config import config_true_value"},{"line_number":38,"context_line":"from swift.common import statsd_client"},{"line_number":39,"context_line":"# common.utils imports a fully qualified common.exceptions so that"},{"line_number":40,"context_line":"# common.exceptions can import common.utils with out a circular import error"},{"line_number":41,"context_line":"# (if we only make reference to attributes of a module w/i our function/method"}],"source_content_type":"text/x-python","patch_set":5,"id":"41172f87_192a76bf","side":"PARENT","line":38,"in_reply_to":"759989dd_6f99d131","updated":"2024-11-01 15:47:00.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d32fb5d9d33c7f7da9ed60277ec63bf7d57f95e","unresolved":true,"context_lines":[{"line_number":714,"context_line":"    return adapted_logger"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf218c73_efc6b210","side":"PARENT","line":717,"updated":"2024-10-31 17:38:13.000000000","message":"this gets renamed ``get_prefixed_swift_logger()`` and stays here in this module\n\n...then in utils we have ``get_prefixed_logger()`` which calls this and then ``patch_statsd_methods`` the result is patched to be a hybrid logger","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":714,"context_line":"    return adapted_logger"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":5,"id":"db66a221_c9e6dbae","side":"PARENT","line":717,"in_reply_to":"bf218c73_efc6b210","updated":"2024-11-01 15:47:00.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":589,"context_line":"    if not hasattr(get_swift_logger, \u0027handler4logger\u0027):"},{"line_number":590,"context_line":"        get_swift_logger.handler4logger \u003d {}"},{"line_number":591,"context_line":"    if logger in get_swift_logger.handler4logger:"},{"line_number":592,"context_line":"        logger.removeHandler(get_swift_logger.handler4logger[logger])"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    # facility for this logger will be set by last call wins"},{"line_number":595,"context_line":"    facility \u003d getattr(SysLogHandler, conf.get(\u0027log_facility\u0027, \u0027LOG_LOCAL0\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"938a95d9_e3bef77e","line":592,"updated":"2024-10-31 09:42:34.000000000","message":"oh, good catch. This is a really weird pattern but it does make sense that the handler4logger thing should be pinned to this function which replaces get_logger for this purpose.","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    if not hasattr(get_swift_logger, \u0027handler4logger\u0027):"},{"line_number":590,"context_line":"        get_swift_logger.handler4logger \u003d {}"},{"line_number":591,"context_line":"    if logger in get_swift_logger.handler4logger:"},{"line_number":592,"context_line":"        logger.removeHandler(get_swift_logger.handler4logger[logger])"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    # facility for this logger will be set by last call wins"},{"line_number":595,"context_line":"    facility \u003d getattr(SysLogHandler, conf.get(\u0027log_facility\u0027, \u0027LOG_LOCAL0\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"33fda740_b5a6e5c8","line":592,"in_reply_to":"938a95d9_e3bef77e","updated":"2024-11-01 15:47:00.000000000","message":"Done","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":655,"context_line":"            except ValueError:"},{"line_number":656,"context_line":"                print(\u0027Invalid custom handler format [%s]\u0027 % hook,"},{"line_number":657,"context_line":"                      file\u003dsys.stderr)"},{"line_number":658,"context_line":"                "},{"line_number":659,"context_line":"    return adapted_logger"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7dc5d101_17215deb","line":658,"in_reply_to":"2df2febd_14366106","updated":"2024-11-01 15:47:00.000000000","message":"Done","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":655,"context_line":"            except ValueError:"},{"line_number":656,"context_line":"                print(\u0027Invalid custom handler format [%s]\u0027 % hook,"},{"line_number":657,"context_line":"                      file\u003dsys.stderr)"},{"line_number":658,"context_line":"                "},{"line_number":659,"context_line":"    return adapted_logger"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"2df2febd_14366106","line":658,"in_reply_to":"63374662_1f9b7946","updated":"2024-10-31 09:42:34.000000000","message":"\u003e pep8: W293 blank line contains whitespace\n\nPlease fix.\n\n@Shreeya FYI You can configure pycharm to delete all trailing whitespace every time  file is saved.","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":659,"context_line":"    return adapted_logger"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":664,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":665,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":6,"id":"1783d7b9_b6ab5c22","line":662,"updated":"2024-11-05 09:37:29.000000000","message":"Needs a docstring:\n\n```\nReturn a clone of the given ``swift_logger`` with a new prefix string that replaces the prefix string of the given ``swift_logger``.\n\n:param swift_logger: an instance of ``SwiftLogAdapter``.\n:param prefix: a string prefix.\n:returns: a new instance of ``SwiftLogAdapter``.\n```","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":659,"context_line":"    return adapted_logger"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":664,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":665,"context_line":"    return new_logger"}],"source_content_type":"text/x-python","patch_set":6,"id":"844c8c0a_5e5a7bf7","line":662,"in_reply_to":"1783d7b9_b6ab5c22","updated":"2024-11-05 19:42:20.000000000","message":"Done","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":664,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":665,"context_line":"    return new_logger"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"class NullLogger(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"d28c37d2_1be15721","line":665,"updated":"2024-11-05 09:37:29.000000000","message":"nit: this could be shortened to \n\n```\nreturn SwiftLogAdapter(\n    swift_logger.logger, swift_logger.server, prefix\u003dprefix)\n```","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":664,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":665,"context_line":"    return new_logger"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"class NullLogger(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"8daabb75_44487dbd","line":665,"in_reply_to":"d28c37d2_1be15721","updated":"2024-11-05 19:42:20.000000000","message":"Acknowledged","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    \u0027\u0027\u0027"},{"line_number":664,"context_line":"    Return a clone of the given ``swift_logger`` with a new prefix string"},{"line_number":665,"context_line":"    that replaces the prefix string of the given ``swift_logger``."},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"f722adda_5879b837","line":663,"updated":"2024-11-14 12:03:50.000000000","message":"docstrings should be quoted with triple *double* quotes\n\nhttps://peps.python.org/pep-0257/","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d641944d188ea2b6701a84fb59ccd5341a9d4ac2","unresolved":false,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"def get_prefixed_swift_logger(swift_logger, prefix):"},{"line_number":663,"context_line":"    \u0027\u0027\u0027"},{"line_number":664,"context_line":"    Return a clone of the given ``swift_logger`` with a new prefix string"},{"line_number":665,"context_line":"    that replaces the prefix string of the given ``swift_logger``."},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f1378b8_e40760f4","line":663,"in_reply_to":"f722adda_5879b837","updated":"2024-11-14 19:36:19.000000000","message":"Acknowledged","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        @functools.wraps(func)"},{"line_number":425,"context_line":"        def wrapped(self, *a, **kw):"},{"line_number":426,"context_line":"            if getattr(self.logger, \u0027statsd_client\u0027):"},{"line_number":427,"context_line":"                func \u003d getattr(self.logger.statsd_client, statsd_func_name)"},{"line_number":428,"context_line":"                return func(*a, **kw)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"2a707b8d_9feba3d4","side":"PARENT","line":426,"updated":"2024-11-15 16:54:31.000000000","message":"oh wow; so the existing pattern was you MUST *have* a `statds_client` *attribute* but it can be None.","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        @functools.wraps(func)"},{"line_number":425,"context_line":"        def wrapped(self, *a, **kw):"},{"line_number":426,"context_line":"            if getattr(self.logger, \u0027statsd_client\u0027):"},{"line_number":427,"context_line":"                func \u003d getattr(self.logger.statsd_client, statsd_func_name)"},{"line_number":428,"context_line":"                return func(*a, **kw)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"32d6eaf8_1ae276f9","side":"PARENT","line":426,"in_reply_to":"2a707b8d_9feba3d4","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":424,"context_line":"        @functools.wraps(func)"},{"line_number":425,"context_line":"        def wrapped(self, *a, **kw):"},{"line_number":426,"context_line":"            if getattr(self.logger, \u0027statsd_client\u0027):"},{"line_number":427,"context_line":"                func \u003d getattr(self.logger.statsd_client, statsd_func_name)"},{"line_number":428,"context_line":"                return func(*a, **kw)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        return wrapped"}],"source_content_type":"text/x-python","patch_set":17,"id":"a05e2e98_227e2998","side":"PARENT","line":427,"updated":"2024-11-15 16:54:31.000000000","message":"but if you DO have a `statds_client` (non-None) - it better *act* like a `statsd_client`!!!","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        @functools.wraps(func)"},{"line_number":425,"context_line":"        def wrapped(self, *a, **kw):"},{"line_number":426,"context_line":"            if getattr(self.logger, \u0027statsd_client\u0027):"},{"line_number":427,"context_line":"                func \u003d getattr(self.logger.statsd_client, statsd_func_name)"},{"line_number":428,"context_line":"                return func(*a, **kw)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        return wrapped"}],"source_content_type":"text/x-python","patch_set":17,"id":"a37c9f25_0090b1e4","side":"PARENT","line":427,"in_reply_to":"a05e2e98_227e2998","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":434,"context_line":"    decrement \u003d statsd_delegate(\u0027decrement\u0027)"},{"line_number":435,"context_line":"    timing \u003d statsd_delegate(\u0027timing\u0027)"},{"line_number":436,"context_line":"    timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":437,"context_line":"    transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"class SwiftLogFormatter(logging.Formatter):"}],"source_content_type":"text/x-python","patch_set":17,"id":"644af492_f9bf1357","side":"PARENT","line":437,"updated":"2024-11-15 16:54:31.000000000","message":"yay!  get out of here statds!\n\n```\n(.venv) clayg@ThinkStation:~/Workspace/vagrant-swift-all-in-one/swift$ grep statsd swift/common/utils/logs.py\n                 format, as the prefix for statsd messages, and as the default\n```","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    decrement \u003d statsd_delegate(\u0027decrement\u0027)"},{"line_number":435,"context_line":"    timing \u003d statsd_delegate(\u0027timing\u0027)"},{"line_number":436,"context_line":"    timing_since \u003d statsd_delegate(\u0027timing_since\u0027)"},{"line_number":437,"context_line":"    transfer_rate \u003d statsd_delegate(\u0027transfer_rate\u0027)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"class SwiftLogFormatter(logging.Formatter):"}],"source_content_type":"text/x-python","patch_set":17,"id":"c23d93f4_f025561a","side":"PARENT","line":437,"in_reply_to":"644af492_f9bf1357","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,"},{"line_number":593,"context_line":"               fmt\u003d\"%(server)s: %(message)s\", statsd_tail_prefix\u003dNone):"},{"line_number":594,"context_line":"    \"\"\""},{"line_number":595,"context_line":"    Get the current system logger using config settings."},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"de14f1e5_23fb22f6","side":"PARENT","line":593,"updated":"2024-11-15 16:54:31.000000000","message":"oic, the `statsd_tail_prefix` kwarg comes off `get_swift_logger` - excellent!","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"def get_logger(conf, name\u003dNone, log_to_console\u003dFalse, log_route\u003dNone,"},{"line_number":593,"context_line":"               fmt\u003d\"%(server)s: %(message)s\", statsd_tail_prefix\u003dNone):"},{"line_number":594,"context_line":"    \"\"\""},{"line_number":595,"context_line":"    Get the current system logger using config settings."},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5cd9b6f5_31cc74d4","side":"PARENT","line":593,"in_reply_to":"de14f1e5_23fb22f6","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    :param conf: Configuration dict to read settings from"},{"line_number":560,"context_line":"    :param name: This value is used to populate the ``server`` field in the log"},{"line_number":561,"context_line":"                 format, as the prefix for statsd messages, and as the default"},{"line_number":562,"context_line":"                 value for ``log_route``; defaults to the ``log_name`` value in"},{"line_number":563,"context_line":"                 ``conf``, if it exists, or to \u0027swift\u0027."},{"line_number":564,"context_line":"    :param log_to_console: Add handler which writes to console on stderr"}],"source_content_type":"text/x-python","patch_set":17,"id":"44881024_1f73883e","line":561,"updated":"2024-11-15 16:54:31.000000000","message":"\"as the prefix for statsd messages\" - this seems to be something provided by `utils.get_logger` now.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    :param conf: Configuration dict to read settings from"},{"line_number":560,"context_line":"    :param name: This value is used to populate the ``server`` field in the log"},{"line_number":561,"context_line":"                 format, as the prefix for statsd messages, and as the default"},{"line_number":562,"context_line":"                 value for ``log_route``; defaults to the ``log_name`` value in"},{"line_number":563,"context_line":"                 ``conf``, if it exists, or to \u0027swift\u0027."},{"line_number":564,"context_line":"    :param log_to_console: Add handler which writes to console on stderr"}],"source_content_type":"text/x-python","patch_set":17,"id":"e35bdd9f_b4c74b94","line":561,"in_reply_to":"44881024_1f73883e","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged and removed","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":559,"context_line":"    :param name: This value is used to populate the ``server`` field in"},{"line_number":560,"context_line":"                 the log format, as the default value for ``log_route``;"},{"line_number":561,"context_line":"                 defaults to the ``log_name`` value in ``conf``, if it exists,"},{"line_number":562,"context_line":"                  or to \u0027swift\u0027."},{"line_number":563,"context_line":"    :param log_to_console: Add handler which writes to console on stderr"},{"line_number":564,"context_line":"    :param log_route: Route for the logging, not emitted to the log, just used"},{"line_number":565,"context_line":"                      to separate logging configurations; defaults to the value"}],"source_content_type":"text/x-python","patch_set":25,"id":"8352cc2a_1e984939","line":562,"range":{"start_line":562,"start_character":17,"end_line":562,"end_character":18},"updated":"2024-11-26 17:31:46.000000000","message":"I think the docs test is failing because of the extra space before ``or`` at the start of this line\n\nyou can build the docs locally to test using:\n\n```\nsphinx-build -W -b html doc/source doc/build/html\n```\n\nyou may need to ``pip install sphinx``","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    :param name: This value is used to populate the ``server`` field in"},{"line_number":560,"context_line":"                 the log format, as the default value for ``log_route``;"},{"line_number":561,"context_line":"                 defaults to the ``log_name`` value in ``conf``, if it exists,"},{"line_number":562,"context_line":"                  or to \u0027swift\u0027."},{"line_number":563,"context_line":"    :param log_to_console: Add handler which writes to console on stderr"},{"line_number":564,"context_line":"    :param log_route: Route for the logging, not emitted to the log, just used"},{"line_number":565,"context_line":"                      to separate logging configurations; defaults to the value"}],"source_content_type":"text/x-python","patch_set":25,"id":"40345654_14b6ecf2","line":562,"range":{"start_line":562,"start_character":17,"end_line":562,"end_character":18},"in_reply_to":"8352cc2a_1e984939","updated":"2024-11-26 20:10:41.000000000","message":"Acknowledged","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":625,"context_line":"    if not conf:"},{"line_number":626,"context_line":"        conf \u003d {}"},{"line_number":627,"context_line":"    if name is None:"},{"line_number":628,"context_line":"        name \u003d conf.get(\u0027log_name\u0027, \u0027swift\u0027)"},{"line_number":629,"context_line":"    if not log_route:"},{"line_number":630,"context_line":"        log_route \u003d name"},{"line_number":631,"context_line":"    logger \u003d logging.getLogger(log_route)"}],"source_content_type":"text/x-python","patch_set":26,"id":"a4275582_0f2a0109","side":"PARENT","line":628,"updated":"2024-11-27 11:04:14.000000000","message":"there\u0027s a regression in how name is passed to get_statsd_client:\n\nname gets a default value here...and that is used at line 691","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":625,"context_line":"    if not conf:"},{"line_number":626,"context_line":"        conf \u003d {}"},{"line_number":627,"context_line":"    if name is None:"},{"line_number":628,"context_line":"        name \u003d conf.get(\u0027log_name\u0027, \u0027swift\u0027)"},{"line_number":629,"context_line":"    if not log_route:"},{"line_number":630,"context_line":"        log_route \u003d name"},{"line_number":631,"context_line":"    logger \u003d logging.getLogger(log_route)"}],"source_content_type":"text/x-python","patch_set":26,"id":"e10921f3_9640abf6","side":"PARENT","line":628,"in_reply_to":"a4275582_0f2a0109","updated":"2024-11-27 16:28:36.000000000","message":"Existing code clearly wanted to support the idea of explicitly setting `name\u003d\u0027\u0027` - but it seems like that results in a logger named `\u0027root\u0027`:\n\n```\n\u003e\u003e\u003e import logging\n\u003e\u003e\u003e logger \u003d logging.getLogger(\u0027\u0027)\n\u003e\u003e\u003e logger.name\n\u0027root\u0027\n```\n\n(same results as passing in `getLogger(None)` - which I guess we can never do!","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    # Setup logger with a StatsD client if so configured"},{"line_number":690,"context_line":"    if statsd_tail_prefix is None:"},{"line_number":691,"context_line":"        statsd_tail_prefix \u003d name"},{"line_number":692,"context_line":"    logger.statsd_client \u003d statsd_client.get_statsd_client("},{"line_number":693,"context_line":"        conf, statsd_tail_prefix, logger)"},{"line_number":694,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"d7367e5e_1a372553","side":"PARENT","line":691,"updated":"2024-11-27 11:04:14.000000000","message":"name is used here - but after we extract this to utils, name does not get a default any more cf line 628","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        @functools.wraps(func)"},{"line_number":424,"context_line":"        def wrapped(self, *a, **kw):"},{"line_number":425,"context_line":"            if getattr(self.logger, \u0027statsd_client\u0027):"},{"line_number":426,"context_line":"                func \u003d getattr(self.logger.statsd_client, statsd_func_name)"},{"line_number":427,"context_line":"                return func(*a, **kw)"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ec769b30_f222985e","side":"PARENT","line":425,"updated":"2024-11-27 16:28:36.000000000","message":"I *guess* this is trying to be robust against `self.logger.statsd_client \u003d None`, but that\u0027s probably only because we used to have to support \"no configured statsd_client is spelled None\" - when we *fixed* that this could have changed to a `hasattr`","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":666,"context_line":"    :param swift_logger: an instance of ``SwiftLogAdapter``."},{"line_number":667,"context_line":"    :param prefix: a string prefix."},{"line_number":668,"context_line":"    :returns: a new instance of ``SwiftLogAdapter``."},{"line_number":669,"context_line":"    \"\"\""},{"line_number":670,"context_line":"    return SwiftLogAdapter("},{"line_number":671,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":672,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9947b2d5_1023daf8","line":669,"updated":"2024-11-27 16:28:36.000000000","message":"docstrings are always nice.","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"test/debug_logger.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from collections import defaultdict"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from swift.common import utils, statsd_client"},{"line_number":24,"context_line":"from swift.common.utils import NOTICE, patch_statsd_methods"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WARN_DEPRECATED(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"2e5db253_98cc647c","line":24,"updated":"2024-11-05 09:37:29.000000000","message":"nit: there\u0027s two patterns here for importing utils. IDK if it\u0027s a big deal but maybe just for the sake of consistency we could converge on importing utils and then writing ``utils.patch_statsd_methods``?\n\nI\u0027m curious if other reviewers have opinions on the good, bad or indifference to mixed import patterns?","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from collections import defaultdict"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from swift.common import utils, statsd_client"},{"line_number":24,"context_line":"from swift.common.utils import NOTICE, patch_statsd_methods"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WARN_DEPRECATED(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fff92e7_cd8b2b8c","line":24,"in_reply_to":"2e5db253_98cc647c","updated":"2024-11-05 19:42:20.000000000","message":"Hmm, at multiple places I have done import get_logger and use it instead of utils.get_logger.\nDo we like utils.patch_statsd_methods just for patch_statsd_methods or for all methods imported from utils like get_logger and get_prefixed_logger?","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from collections import defaultdict"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from swift.common import utils, statsd_client"},{"line_number":24,"context_line":"from swift.common.utils import NOTICE, patch_statsd_methods"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WARN_DEPRECATED(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a45094f2_452c2874","line":24,"in_reply_to":"3fff92e7_cd8b2b8c","updated":"2024-11-14 12:03:50.000000000","message":"There\u0027s no hard-and-fast rule. I think that it\u0027s good to be consistent within a module, and that may mean sticking with whatever pattern previous authors have chosen.\n\nIn this case, previous authors have chosen both options...so it\u0027s down to preference. Given that *in this module* other logging related attributes are imported as ``utils.\u003cthing\u003e``, e.g. ``utils.SwiftLogFormatter``, ``utils.get_logger()`` then I suggested also using ``utils._patch_statsd_methods`` in this module.\n\nBut in other modules the existing pattern may be different and it would be fine to use:\n\n```\nfrom utils import get_logger()\n...\n\nget_logger({}, \u0027foo\u0027)\n```","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d641944d188ea2b6701a84fb59ccd5341a9d4ac2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from collections import defaultdict"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from swift.common import utils, statsd_client"},{"line_number":24,"context_line":"from swift.common.utils import NOTICE, patch_statsd_methods"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WARN_DEPRECATED(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"847a41dd_fe28ad2f","line":24,"in_reply_to":"a45094f2_452c2874","updated":"2024-11-14 19:36:19.000000000","message":"Acknowledged","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":327,"context_line":"    \"\"\""},{"line_number":328,"context_line":"    with mock.patch(\u0027swift.common.utils.logs.SwiftLogAdapter\u0027,"},{"line_number":329,"context_line":"                    CaptureLogAdapter):"},{"line_number":330,"context_line":"        log_adapter \u003d utils.logs.get_logger(conf, *args, **kwargs)"},{"line_number":331,"context_line":"    log_adapter.start_capture()"},{"line_number":332,"context_line":"    try:"},{"line_number":333,"context_line":"        yield log_adapter"}],"source_content_type":"text/x-python","patch_set":27,"id":"b1239a3d_b70c47e7","side":"PARENT","line":330,"updated":"2024-11-27 16:28:36.000000000","message":"i love that `utils.logs.get_logger` isn\u0027t even a name anymore - it will keep us honest about which interface we want in a given context.","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class DebugLogAdapter(utils.logs.SwiftLogAdapter):"},{"line_number":262,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":263,"context_line":"        super(DebugLogAdapter, self).__init__(*args, **kwargs)"},{"line_number":264,"context_line":"        self.txn_id \u003d None"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def __getattribute__(self, name):"}],"source_content_type":"text/x-python","patch_set":27,"id":"8c8cd343_6e90b4fb","line":263,"updated":"2024-11-27 16:28:36.000000000","message":"seems reasonable, the `DebugLogger` we pass in as the first argument of this `DebugLogAdapter` is a `FakeLogger` subclass; which gives it an instance of `FakeStatsdClient` as it\u0027s `statsd_client` attribute in `FakeLogger.__init__`","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":267,"context_line":"        try:"},{"line_number":268,"context_line":"            return object.__getattribute__(self, name)"},{"line_number":269,"context_line":"        except AttributeError:"},{"line_number":270,"context_line":"            return getattr(self.__dict__[\u0027logger\u0027], name)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"def debug_logger(name\u003d\u0027test\u0027):"}],"source_content_type":"text/x-python","patch_set":27,"id":"ca6546e0_f1fa24ca","line":270,"updated":"2024-11-27 16:28:36.000000000","message":"so this is mainly here so an adapted logger can reach for `app.logger.get_lines_for_level` off the `DebugLogger` instance","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"test/unit/common/middleware/test_proxy_logging.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":969,"context_line":"            FakeApp(),"},{"line_number":970,"context_line":"            {\u0027log_headers\u0027: \u0027yes\u0027,"},{"line_number":971,"context_line":"             \u0027access_log_facility\u0027: \u0027LOG_LOCAL7\u0027})"},{"line_number":972,"context_line":"        handler \u003d get_swift_logger.handler4logger[app.access_logger.logger]"},{"line_number":973,"context_line":"        self.assertEqual(SysLogHandler.LOG_LOCAL7, handler.facility)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def test_filter(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3845a99c_97f487ca","line":972,"updated":"2024-10-31 09:42:34.000000000","message":"ok so this indirectly gets some coverage for the change from get_logger to get_swift_logger \"hosting\" the handler4logger","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":969,"context_line":"            FakeApp(),"},{"line_number":970,"context_line":"            {\u0027log_headers\u0027: \u0027yes\u0027,"},{"line_number":971,"context_line":"             \u0027access_log_facility\u0027: \u0027LOG_LOCAL7\u0027})"},{"line_number":972,"context_line":"        handler \u003d get_swift_logger.handler4logger[app.access_logger.logger]"},{"line_number":973,"context_line":"        self.assertEqual(SysLogHandler.LOG_LOCAL7, handler.facility)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def test_filter(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"12ecd3ca_9d9113ca","line":972,"in_reply_to":"3845a99c_97f487ca","updated":"2024-11-01 15:47:00.000000000","message":"Acknowledged","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"}],"test/unit/common/test_statsd_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        adapted_logger.increment(\u0027buz\u0027)"},{"line_number":849,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":850,"context_line":"                         [(b\u0027some-name.buz:1|c\u0027, self.address)])"},{"line_number":851,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"098eb230_2088e17c","side":"PARENT","line":848,"updated":"2024-11-14 20:15:13.000000000","message":"this test makes the *strong* assertion that SwiftLogAdapter is what\u0027s providing the statsd_client method delegation and that\u0027s no longer true.\n\nI don\u0027t think adding the `_patch_statds_methods` call is the right direction here - that method can patch anything as demonstrated by the tests in `test_logs` (odd place for them?).\n\nProbably if anything the assertions should change to expect AttributeErrors in order to demonstrate that this pattern doesn\u0027t work anymore.","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        adapted_logger.increment(\u0027buz\u0027)"},{"line_number":849,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":850,"context_line":"                         [(b\u0027some-name.buz:1|c\u0027, self.address)])"},{"line_number":851,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"32731cb1_3b127df5","side":"PARENT","line":848,"in_reply_to":"098eb230_2088e17c","updated":"2024-11-15 10:51:15.000000000","message":"Right. The question in my mind is whether I want a test that has the value of reminding me that in the past a SwiftLogAdapter looked like a StatsdClient, but now it doesn\u0027t (i.e. asserting AttributeErrors), or whether that is what version control is for. In the absence of the historical context, testing that classes don\u0027t have certain attributes is odd, so I think I\u0027d choose to remove this test.\n\nTo be clear, I am not arguing that a different opinion is wrong. If someone feels that it would be useful to retain the \"anti-test\" because it reminds us of the journey then I\u0027m cool with that. I\u0027ve even proposed such a test here that can be squashed in if desired:\n\nhttps://review.opendev.org/c/openstack/swift/+/935276","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        adapted_logger.increment(\u0027buz\u0027)"},{"line_number":849,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":850,"context_line":"                         [(b\u0027some-name.buz:1|c\u0027, self.address)])"},{"line_number":851,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"c48db46e_7dd749dc","side":"PARENT","line":848,"in_reply_to":"32731cb1_3b127df5","updated":"2024-11-15 16:54:31.000000000","message":"\u003e the value of reminding me that in the past a SwiftLogAdapter looked like a StatsdClient, but now it doesn\u0027t\n\nI think there\u0027s some value of that for reviewers *in the diff/change that makes it \"now\" an orange* - and that assertion looses value the further it gets away from the change that made it happen.","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":854,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":855,"context_line":"        with self.assertRaises(AttributeError) as ctx:"},{"line_number":856,"context_line":"            wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":857,"context_line":"        self.assertIn(\"has no attribute \u0027statsd_client\u0027\", str(ctx.exception))"}],"source_content_type":"text/x-python","patch_set":15,"id":"046ed6d0_e6f77823","side":"PARENT","line":857,"updated":"2024-11-14 20:15:13.000000000","message":"this is actually gross; I think this test was intending to describe a *bad* behavior of creating a wrapped_adapter breaking the previously working statsd interface on the parent (adpated)logger.\n\nI don\u0027t know where we came down on the \"testing of wrapped adapter pattern\" in the Remove PrefixLogAdapter patch.  Apparently, some tests still do it - and it\u0027s mostly always a bad idea (as this test demonstrates)","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":854,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":855,"context_line":"        with self.assertRaises(AttributeError) as ctx:"},{"line_number":856,"context_line":"            wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":857,"context_line":"        self.assertIn(\"has no attribute \u0027statsd_client\u0027\", str(ctx.exception))"}],"source_content_type":"text/x-python","patch_set":15,"id":"2b9258ca_3946a553","side":"PARENT","line":857,"in_reply_to":"046ed6d0_e6f77823","updated":"2024-11-15 10:51:15.000000000","message":"I\u0027m comfortable if we choose to drop the testing of wrapped (aka stacked) adapters. As Clay says, it\u0027s not a pattern we want to promote.","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":854,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":855,"context_line":"        with self.assertRaises(AttributeError) as ctx:"},{"line_number":856,"context_line":"            wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":857,"context_line":"        self.assertIn(\"has no attribute \u0027statsd_client\u0027\", str(ctx.exception))"}],"source_content_type":"text/x-python","patch_set":15,"id":"e28ef6e1_0793ec32","side":"PARENT","line":857,"in_reply_to":"2b9258ca_3946a553","updated":"2024-11-15 16:54:31.000000000","message":"Acknowledged","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":821,"context_line":"        self.assertEqual([], warn_lines)"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"}],"source_content_type":"text/x-python","patch_set":15,"id":"27b7e0fd_6ba6b578","line":824,"updated":"2024-11-14 20:15:13.000000000","message":"I guess it\u0027s not really SwiftLogAdapter that\u0027s doing the delegation anymore; maybe this TestCase should be re-named","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":821,"context_line":"        self.assertEqual([], warn_lines)"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"}],"source_content_type":"text/x-python","patch_set":15,"id":"b1329176_fe6623e2","line":824,"in_reply_to":"27b7e0fd_6ba6b578","updated":"2024-11-15 16:54:31.000000000","message":"or even beter - removed!","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"},{"line_number":828,"context_line":"                                       \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":829,"context_line":"        self.mock_socket \u003d MockUdpSocket()"},{"line_number":830,"context_line":"        self.logger.logger.statsd_client._open_socket \u003d \\"},{"line_number":831,"context_line":"            lambda *_: self.mock_socket"}],"source_content_type":"text/x-python","patch_set":15,"id":"042dda0c_0b32d3c4","line":828,"updated":"2024-11-14 20:15:13.000000000","message":"I think the main reason these *existing* tests *continue* to work after this change is because `get_logger` continues to return a compatible/patched instance.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"},{"line_number":828,"context_line":"                                       \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":829,"context_line":"        self.mock_socket \u003d MockUdpSocket()"},{"line_number":830,"context_line":"        self.logger.logger.statsd_client._open_socket \u003d \\"},{"line_number":831,"context_line":"            lambda *_: self.mock_socket"}],"source_content_type":"text/x-python","patch_set":15,"id":"68485496_32142d0e","line":828,"in_reply_to":"042dda0c_0b32d3c4","updated":"2024-11-15 16:54:31.000000000","message":"Acknowledged","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":831,"context_line":"            lambda *_: self.mock_socket"},{"line_number":832,"context_line":"        self.address \u003d (\u0027some.host.com\u0027, 8125)"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def test_setup(self):"},{"line_number":835,"context_line":"        self.logger.increment(\u0027foo\u0027)"},{"line_number":836,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":837,"context_line":"                         [(b\u0027some-name.foo:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"8f8f37c2_39acaef5","line":834,"updated":"2024-11-14 12:03:50.000000000","message":"this overlaps with test_get_logger_provides_statsd_client in test_logs, although the assertion strategy is different (capturing socket rather than methods)","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":831,"context_line":"            lambda *_: self.mock_socket"},{"line_number":832,"context_line":"        self.address \u003d (\u0027some.host.com\u0027, 8125)"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def test_setup(self):"},{"line_number":835,"context_line":"        self.logger.increment(\u0027foo\u0027)"},{"line_number":836,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":837,"context_line":"                         [(b\u0027some-name.foo:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dd219ac1_b6201f47","line":834,"in_reply_to":"8f8f37c2_39acaef5","updated":"2024-11-15 16:54:31.000000000","message":"agreed.  assertion/mocking strategy is probably not significant to the behavioral assertions.  It seems like removing a test that was successfully demonstrating backwards compatibility might have looked better in a follow-up than along with the change that benefited from having that coverage to ensure the intention of maintaining compatibility.  But the new/explicit test in `test_utils` has the benifit of existing in a more reasonable location that `test_statds_client`.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":836,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":837,"context_line":"                         [(b\u0027some-name.foo:1|c\u0027, self.address)])"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def test_get_prefix_logger(self):"},{"line_number":840,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(self.logger, \u0027my-prefix\u0027)"},{"line_number":841,"context_line":"        prefixed_logger.increment(\u0027bar\u0027)"},{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"}],"source_content_type":"text/x-python","patch_set":15,"id":"a8ea1a82_0743229d","line":839,"updated":"2024-11-14 12:03:50.000000000","message":"this overlaps with test_get_prefixed_logger_adopts_statsd_client in test_logs, although the assertion strategy is different (capturing socket rather than methods)","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":836,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":837,"context_line":"                         [(b\u0027some-name.foo:1|c\u0027, self.address)])"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def test_get_prefix_logger(self):"},{"line_number":840,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(self.logger, \u0027my-prefix\u0027)"},{"line_number":841,"context_line":"        prefixed_logger.increment(\u0027bar\u0027)"},{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"}],"source_content_type":"text/x-python","patch_set":15,"id":"e4b76e34_56f93a9c","line":839,"in_reply_to":"a8ea1a82_0743229d","updated":"2024-11-14 20:15:13.000000000","message":"well, but that\u0027s a *new* test - where this is an *existing* test\n\nI wouldn\u0027t argue that we shouldn\u0027t also add `test_get_prefixed_logger_adopts_statsd_client` - it seems fine/reasonable, although it might make more sense in `test_statds_client` or `test_utils` than `test_logs` since the `logs.get_prefixed_swift_logger` doesn\u0027t actually have the behavior of preserving `statsd_client` methods.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":836,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":837,"context_line":"                         [(b\u0027some-name.foo:1|c\u0027, self.address)])"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def test_get_prefix_logger(self):"},{"line_number":840,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(self.logger, \u0027my-prefix\u0027)"},{"line_number":841,"context_line":"        prefixed_logger.increment(\u0027bar\u0027)"},{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"}],"source_content_type":"text/x-python","patch_set":15,"id":"d9ec6a9a_8d3d046b","line":839,"in_reply_to":"e4b76e34_56f93a9c","updated":"2024-11-15 16:54:31.000000000","message":"Done","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":843,"context_line":"                         [(b\u0027some-name.bar:1|c\u0027, self.address)])"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        utils._patch_statsd_methods(adapted_logger, self.logger.logger)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7486e45d_8df62c50","line":845,"updated":"2024-11-14 12:03:50.000000000","message":"this overlaps with the test_patch_statsd_methods tests in test_logs","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":843,"context_line":"                         [(b\u0027some-name.bar:1|c\u0027, self.address)])"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        utils._patch_statsd_methods(adapted_logger, self.logger.logger)"}],"source_content_type":"text/x-python","patch_set":15,"id":"206b7ab6_dbe1e706","line":845,"in_reply_to":"60cd08c5_831e64db","updated":"2024-11-15 16:54:31.000000000","message":"Acknowledged","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":843,"context_line":"                         [(b\u0027some-name.bar:1|c\u0027, self.address)])"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        utils._patch_statsd_methods(adapted_logger, self.logger.logger)"}],"source_content_type":"text/x-python","patch_set":15,"id":"82cb6b98_522915e7","line":845,"in_reply_to":"7486e45d_8df62c50","updated":"2024-11-14 20:15:13.000000000","message":"I don\u0027t think it *did* - but now that we\u0027ve adding the call to `_patch_statds_methods` directly it might as well.\n\nBut I think that belies the change-in-behavior this existing test calls out by demonstrating that SwiftLogAdapter no longer provides delegation.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":843,"context_line":"                         [(b\u0027some-name.bar:1|c\u0027, self.address)])"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("},{"line_number":847,"context_line":"            self.logger.logger, \u0027my-adapter\u0027)"},{"line_number":848,"context_line":"        utils._patch_statsd_methods(adapted_logger, self.logger.logger)"}],"source_content_type":"text/x-python","patch_set":15,"id":"60cd08c5_831e64db","line":845,"in_reply_to":"82cb6b98_522915e7","updated":"2024-11-15 10:51:15.000000000","message":"\u003e I don\u0027t think it did - but now that we\u0027ve adding the call to _patch_statds_methods directly it might as well.\n\nI agree that it didn\u0027t before this change.\n\nBefore, SwiftLogAdapter came with statds methods, and this test asserted that. Now, it doesn\u0027t come with statsd methods and I\u0027m not sure we need:\n\n(a) a test here that demonstrates that a SwiftLogAdapter *can* be patched with statsd methods just like any other object could\n(b) a test that shows that a SwiftLogAdapter isn\u0027t a StatsdClient (such as https://review.opendev.org/c/openstack/swift/+/935276)\n(c) neither of the above.\n\nI do think we need tests to show that get_logger() and get_prefixed_logger() will return a SwiftLogAdapter that has been patched and I\u0027m confident we have that covered.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":853,"context_line":"    def test_wrapped_adapter(self):"},{"line_number":854,"context_line":"        wrapped_adapter \u003d utils.logs.SwiftLogAdapter("},{"line_number":855,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":856,"context_line":"        utils._patch_statsd_methods(wrapped_adapter, self.logger.logger)"},{"line_number":857,"context_line":"        wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":859,"context_line":"                         [(b\u0027some-name.baz:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"e95a68c6_18f1b75f","line":856,"updated":"2024-11-14 12:03:50.000000000","message":"I\u0027m not sure what this test wants to verify:\n\nok, so there\u0027s now a ``_patch_statsd_methods`` helper that enables the wrapped adapter to be given a StatsdClient interface - but I\u0027m not sure we want to encourage that pattern in real code.\n\nIf anything, I think the test should remain as an assertion that the wrapped adapter doesn\u0027t have a StatsdClient interface, except the AttributeError changes such that:\n\n```\n    def test_wrapped_adapter(self):\n        wrapped_adapter \u003d utils.logs.SwiftLogAdapter(\n            self.logger, \u0027wrapped-adapter\u0027)\n        with self.assertRaises(AttributeError) as ctx:\n            wrapped_adapter.increment(\u0027baz\u0027)\n        self.assertIn(\"has no attribute \u0027increment\u0027\", str(ctx.exception))\n\n```","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":853,"context_line":"    def test_wrapped_adapter(self):"},{"line_number":854,"context_line":"        wrapped_adapter \u003d utils.logs.SwiftLogAdapter("},{"line_number":855,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":856,"context_line":"        utils._patch_statsd_methods(wrapped_adapter, self.logger.logger)"},{"line_number":857,"context_line":"        wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":859,"context_line":"                         [(b\u0027some-name.baz:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"d3ff9474_5c389353","line":856,"in_reply_to":"bf3f7a4a_db78b1a8","updated":"2024-11-15 10:51:15.000000000","message":"Let\u0027s drop this test. \n\nIf we revert the previous test ``test_adapted_logger`` such that it asserts that a SwiftLogAdapter is not a StatsdClient, then this test is going to double-down on that by asserting that a wrapped SwiftLogAdapter is also not a StatsdClient...and how far do we go with asserting that an apple is not an orange :) ?\n\nI have also suggested dropping the previous ``test_adapted_logger`` but acknowledge that it would be reasonable to counter-argue that we retain that as a reminder that things changed.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":853,"context_line":"    def test_wrapped_adapter(self):"},{"line_number":854,"context_line":"        wrapped_adapter \u003d utils.logs.SwiftLogAdapter("},{"line_number":855,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":856,"context_line":"        utils._patch_statsd_methods(wrapped_adapter, self.logger.logger)"},{"line_number":857,"context_line":"        wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":859,"context_line":"                         [(b\u0027some-name.baz:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"a3721562_93508534","line":856,"in_reply_to":"d3ff9474_5c389353","updated":"2024-11-15 16:54:31.000000000","message":"I think tests for wrapped adapters is mostly a smell, and I\u0027m happy to see that afer this diff we only create SwiftLogAdapter\u0027s in test_logs\n\n```\n(.venv) clayg@ThinkStation:~/Workspace/vagrant-swift-all-in-one/swift$ ag SwiftLogAdapter test/unit/\ntest/unit/common/test_daemon.py\n62:        self.assertIsInstance(d.logger, utils.logs.SwiftLogAdapter)\n\ntest/unit/common/utils/test_logs.py\n51:from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter\n1114:class TestSwiftLogAdapter(unittest.TestCase):\n1133:        adapter \u003d SwiftLogAdapter(self.core_logger, \u0027my-server\u0027)\n1141:        adapter \u003d SwiftLogAdapter(self.core_logger, \u0027my-server\u0027, \u0027my-prefix: \u0027)\n1152:        adapter \u003d SwiftLogAdapter(self.core_logger, \u0027my-server\u0027)\n1161:        adapter1 \u003d SwiftLogAdapter(self.core_logger, \u0027foo\u0027)\n1162:        adapter2 \u003d SwiftLogAdapter(self.core_logger, \u0027foo\u0027)\n1195:        adapter1 \u003d SwiftLogAdapter(self.core_logger, \u0027foo\u0027)\n1197:        adapter2 \u003d SwiftLogAdapter(adapter1, \u0027foo\u0027)\n1218:        # verify that the adapter routes exception calls to SwiftLogAdapter\n1220:        adapter \u003d SwiftLogAdapter(self.core_logger, \u0027foo\u0027)\n\ntest/unit/common/test_utils.py\n7521:        # SwiftLogAdapter that does *not* have a StatsdClient interface\n\ntest/unit/obj/test_auditor.py\n45:from swift.common.utils.logs import SwiftLogAdapter\n1701:        self.assertIsInstance(calls[0][2], SwiftLogAdapter)\n```\n\nKUDOS!","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":853,"context_line":"    def test_wrapped_adapter(self):"},{"line_number":854,"context_line":"        wrapped_adapter \u003d utils.logs.SwiftLogAdapter("},{"line_number":855,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":856,"context_line":"        utils._patch_statsd_methods(wrapped_adapter, self.logger.logger)"},{"line_number":857,"context_line":"        wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":859,"context_line":"                         [(b\u0027some-name.baz:1|c\u0027, self.address)])"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf3f7a4a_db78b1a8","line":856,"in_reply_to":"e95a68c6_18f1b75f","updated":"2024-11-14 20:15:13.000000000","message":"I agree the original intent of the test was to demonstrate that a wrapped adapter looses statsd functionality; but you could also extend the test to demonstrate how you can now *patch anything*!!!\n\nOr we delete it and say \"creating wrapped adapters is an anti-pattern - always\"","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":821,"context_line":"        self.assertEqual([], warn_lines)"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"}],"source_content_type":"text/x-python","patch_set":17,"id":"573ccfc4_06fd7c9f","side":"PARENT","line":824,"updated":"2024-11-15 10:51:15.000000000","message":"replaced by tests in test_utils.TestLoggerStatsdClientDelegation","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":821,"context_line":"        self.assertEqual([], warn_lines)"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"}],"source_content_type":"text/x-python","patch_set":17,"id":"c72f4d1c_785a9d49","side":"PARENT","line":824,"in_reply_to":"573ccfc4_06fd7c9f","updated":"2024-11-15 16:54:31.000000000","message":"Acknowledged","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":854,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":855,"context_line":"        with self.assertRaises(AttributeError) as ctx:"},{"line_number":856,"context_line":"            wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":857,"context_line":"        self.assertIn(\"has no attribute \u0027statsd_client\u0027\", str(ctx.exception))"}],"source_content_type":"text/x-python","patch_set":17,"id":"07b4dd68_10f3849a","side":"PARENT","line":857,"updated":"2024-11-15 16:54:31.000000000","message":"some form of these last two tests - which was apparently the only place we were using `SwiftLogAdapter` directly and asserting that it provided statds_client method delegation may have been useful *in this diff* to clearly demonstrate to reviewers:\n\n\"we\u0027ve changed the apple to an orange - on purpose\"","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":854,"context_line":"            self.logger, \u0027wrapped-adapter\u0027)"},{"line_number":855,"context_line":"        with self.assertRaises(AttributeError) as ctx:"},{"line_number":856,"context_line":"            wrapped_adapter.increment(\u0027baz\u0027)"},{"line_number":857,"context_line":"        self.assertIn(\"has no attribute \u0027statsd_client\u0027\", str(ctx.exception))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ed2f4f74_9b2e804d","side":"PARENT","line":857,"in_reply_to":"07b4dd68_10f3849a","updated":"2024-11-18 16:25:00.000000000","message":"Added a test to verify this in utils","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"},{"line_number":828,"context_line":"                                       \u0027some-name\u0027, log_route\u003d\u0027some-route\u0027)"},{"line_number":829,"context_line":"        self.mock_socket \u003d MockUdpSocket()"},{"line_number":830,"context_line":"        self.logger.logger.statsd_client._open_socket \u003d \\"}],"source_content_type":"text/x-python","patch_set":27,"id":"fc808299_2685c5fc","side":"PARENT","line":827,"updated":"2024-11-27 16:28:36.000000000","message":"there\u0027s like... SO MANY calls to `utils.get_logger` in this test module; but these were ostensibly explicitly about the behaviors of code in `common.utils` rather than the StatsdClient itself: so I think it makes sense to move them.","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":840,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(self.logger, \u0027my-prefix\u0027)"},{"line_number":841,"context_line":"        prefixed_logger.increment(\u0027bar\u0027)"},{"line_number":842,"context_line":"        self.assertEqual(self.mock_socket.sent,"},{"line_number":843,"context_line":"                         [(b\u0027some-name.bar:1|c\u0027, self.address)])"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_adapted_logger(self):"},{"line_number":846,"context_line":"        adapted_logger \u003d utils.logs.SwiftLogAdapter("}],"source_content_type":"text/x-python","patch_set":27,"id":"baa85ba9_388010aa","side":"PARENT","line":843,"updated":"2024-11-27 16:28:36.000000000","message":"these two tests were probably the only ones that were useful - and they\u0027ve essentially just moved moved into `common.test_utils` - which I think makes sense.","commit_id":"ffbf17e47c0c76d4daa6e40811338e4abec1beb4"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7411,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7412,"context_line":"        utils._patch_statsd_methods(target, None)"},{"line_number":7413,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7414,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7415,"context_line":""},{"line_number":7416,"context_line":"    def test_patch_statsd_methods_source_statsd_client_is_none(self):"},{"line_number":7417,"context_line":"        source \u003d argparse.Namespace()"}],"source_content_type":"text/x-python","patch_set":17,"id":"e2f62daa_c86949c6","line":7414,"updated":"2024-11-15 16:54:31.000000000","message":"oh that\u0027s kind of an interesting behvaior - but None doesn\u0027t have a `statds_client` attribute: so this is technically basically pre-existing.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7411,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7412,"context_line":"        utils._patch_statsd_methods(target, None)"},{"line_number":7413,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7414,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7415,"context_line":""},{"line_number":7416,"context_line":"    def test_patch_statsd_methods_source_statsd_client_is_none(self):"},{"line_number":7417,"context_line":"        source \u003d argparse.Namespace()"}],"source_content_type":"text/x-python","patch_set":17,"id":"1111f0cf_82a94a13","line":7414,"in_reply_to":"e2f62daa_c86949c6","updated":"2024-11-18 16:25:00.000000000","message":"Removing tests as they are no longer relevant because it shouldn\u0027t be None","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7419,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7420,"context_line":"        utils._patch_statsd_methods(target, source)"},{"line_number":7421,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7422,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7423,"context_line":""},{"line_number":7424,"context_line":"    def test_patch_statsd_methods_client_deleted_from_source(self):"},{"line_number":7425,"context_line":"        client \u003d FakeStatsdClient(\u0027host.com\u0027, 1234)"}],"source_content_type":"text/x-python","patch_set":17,"id":"10270ccc_2130175f","line":7422,"updated":"2024-11-15 16:54:31.000000000","message":"maybe even MORE interesting.\n\nWhat seems to be going on under the hood is that source *has* a `statsd_client` attribute, but since it\u0027s *None* this is NOW a now-op; I think that\u0027s different from existing behavior of the delegration methods that assumed \"if you have a statds_client it better be a statds_client\"\n\nit seems like this could hide some bugs i.e. you call patch with source\u003dstatds_client instead of \"a thing that *has* a statds_client\" and patch/increment \"works\" - but does nothing unexpectedly","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7419,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7420,"context_line":"        utils._patch_statsd_methods(target, source)"},{"line_number":7421,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7422,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7423,"context_line":""},{"line_number":7424,"context_line":"    def test_patch_statsd_methods_client_deleted_from_source(self):"},{"line_number":7425,"context_line":"        client \u003d FakeStatsdClient(\u0027host.com\u0027, 1234)"}],"source_content_type":"text/x-python","patch_set":17,"id":"825e5070_bc662e1f","line":7422,"in_reply_to":"10270ccc_2130175f","updated":"2024-11-18 16:25:00.000000000","message":"Removing tests as they are no longer relevant because it shouldn\u0027t be None","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7434,"context_line":"        }"},{"line_number":7435,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7436,"context_line":""},{"line_number":7437,"context_line":"        # if the statsd_client is deleted you won\u0027t blow up..."},{"line_number":7438,"context_line":"        del source.statsd_client"},{"line_number":7439,"context_line":"        target.increment(\u0027b\u0027)"},{"line_number":7440,"context_line":"        exp \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"6840bf11_3147e95a","line":7437,"updated":"2024-11-15 16:54:31.000000000","message":"surprising and good to know","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7434,"context_line":"        }"},{"line_number":7435,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7436,"context_line":""},{"line_number":7437,"context_line":"        # if the statsd_client is deleted you won\u0027t blow up..."},{"line_number":7438,"context_line":"        del source.statsd_client"},{"line_number":7439,"context_line":"        target.increment(\u0027b\u0027)"},{"line_number":7440,"context_line":"        exp \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"afcc5e95_ef6447b0","line":7437,"in_reply_to":"6840bf11_3147e95a","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7488,"context_line":"        self.assertTrue(hasattr(new_adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7489,"context_line":"        new_client \u003d new_adapted_logger.logger.statsd_client"},{"line_number":7490,"context_line":"        # same core Logger..."},{"line_number":7491,"context_line":"        self.assertIs(orig_logger.logger, new_adapted_logger.logger)"},{"line_number":7492,"context_line":"        # ... different StatsdClient !"},{"line_number":7493,"context_line":"        self.assertIsNot(new_client, orig_client)"},{"line_number":7494,"context_line":"        self.assertIs(new_client, orig_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3cbc581d_2ba37fc0","line":7491,"updated":"2024-11-15 16:54:31.000000000","message":"this is because `get_logger` is called with the same name (?)","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":true,"context_lines":[{"line_number":7488,"context_line":"        self.assertTrue(hasattr(new_adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7489,"context_line":"        new_client \u003d new_adapted_logger.logger.statsd_client"},{"line_number":7490,"context_line":"        # same core Logger..."},{"line_number":7491,"context_line":"        self.assertIs(orig_logger.logger, new_adapted_logger.logger)"},{"line_number":7492,"context_line":"        # ... different StatsdClient !"},{"line_number":7493,"context_line":"        self.assertIsNot(new_client, orig_client)"},{"line_number":7494,"context_line":"        self.assertIs(new_client, orig_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9d880481_59d65986","line":7491,"in_reply_to":"3cbc581d_2ba37fc0","updated":"2024-11-18 16:25:00.000000000","message":"Yes, I tried renaming the adapted logged naming \u0027boo\u0027 and the loggers are no longer the same. \nAssertionError: \u003cLogger server (INFO)\u003e is not \u003cLogger boo (INFO)\u003e","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":false,"context_lines":[{"line_number":7488,"context_line":"        self.assertTrue(hasattr(new_adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7489,"context_line":"        new_client \u003d new_adapted_logger.logger.statsd_client"},{"line_number":7490,"context_line":"        # same core Logger..."},{"line_number":7491,"context_line":"        self.assertIs(orig_logger.logger, new_adapted_logger.logger)"},{"line_number":7492,"context_line":"        # ... different StatsdClient !"},{"line_number":7493,"context_line":"        self.assertIsNot(new_client, orig_client)"},{"line_number":7494,"context_line":"        self.assertIs(new_client, orig_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fceb2e0f_b7be2c2c","line":7491,"in_reply_to":"9d880481_59d65986","updated":"2024-11-25 15:25:42.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7501,"context_line":"        with mock.patch("},{"line_number":7502,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027):"},{"line_number":7503,"context_line":"            adapted_logger \u003d utils.get_logger(None, name\u003dself.logger_name)"},{"line_number":7504,"context_line":"        self.assertTrue(hasattr(adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7505,"context_line":""},{"line_number":7506,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7507,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"922e2f5b_3e8b622c","line":7504,"updated":"2024-11-15 16:54:31.000000000","message":"this doesn\u0027t assert that the statsd_client attribute is a [Fake]StatsdClient (I guess it\u0027s actually a mock?) or that increment would *do* anything.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7501,"context_line":"        with mock.patch("},{"line_number":7502,"context_line":"                \u0027swift.common.statsd_client.StatsdClient\u0027):"},{"line_number":7503,"context_line":"            adapted_logger \u003d utils.get_logger(None, name\u003dself.logger_name)"},{"line_number":7504,"context_line":"        self.assertTrue(hasattr(adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7505,"context_line":""},{"line_number":7506,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7507,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"61c5b929_4700eaa8","line":7504,"in_reply_to":"922e2f5b_3e8b622c","updated":"2024-11-18 16:25:00.000000000","message":"Yes\n(Pdb) adapted_logger.logger.statsd_client\n\u003cMagicMock name\u003d\u0027StatsdClient()\u0027 id\u003d\u0027140078891811744\u0027\u003e","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7506,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7507,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7508,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":7509,"context_line":"                      adapted_logger.logger.statsd_client)"},{"line_number":7510,"context_line":""},{"line_number":7511,"context_line":"        prefixed_logger.increment(\u0027foo\u0027)"},{"line_number":7512,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":17,"id":"2e7333ab_47687c23","line":7509,"updated":"2024-11-15 16:54:31.000000000","message":"but whatever it was it\u0027s carried over 👍","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7506,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7507,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7508,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":7509,"context_line":"                      adapted_logger.logger.statsd_client)"},{"line_number":7510,"context_line":""},{"line_number":7511,"context_line":"        prefixed_logger.increment(\u0027foo\u0027)"},{"line_number":7512,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":17,"id":"c19e076a_358737f3","line":7509,"in_reply_to":"2e7333ab_47687c23","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":7529,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7530,"context_line":"        self.assertFalse(hasattr(prefixed_logger, \u0027statsd_client_source\u0027))"},{"line_number":7531,"context_line":"        self.assertFalse(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7532,"context_line":"        self.assertFalse(hasattr(prefixed_logger, \u0027increment\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ba5f242_f1cbbab2","line":7532,"updated":"2024-11-15 16:54:31.000000000","message":"ok, this seems like what we want.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":7529,"context_line":"        prefixed_logger \u003d utils.get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":7530,"context_line":"        self.assertFalse(hasattr(prefixed_logger, \u0027statsd_client_source\u0027))"},{"line_number":7531,"context_line":"        self.assertFalse(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7532,"context_line":"        self.assertFalse(hasattr(prefixed_logger, \u0027increment\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"45bcc549_6e92cfab","line":7532,"in_reply_to":"1ba5f242_f1cbbab2","updated":"2024-11-18 16:25:00.000000000","message":"Done","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":7419,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7420,"context_line":"        utils._patch_statsd_methods(target, source)"},{"line_number":7421,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7422,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7423,"context_line":""},{"line_number":7424,"context_line":"    def test_patch_statsd_methods_client_deleted_from_source(self):"},{"line_number":7425,"context_line":"        client \u003d FakeStatsdClient(\u0027host.com\u0027, 1234)"}],"source_content_type":"text/x-python","patch_set":18,"id":"016dcccc_d1a7c836","line":7422,"updated":"2024-11-25 15:25:42.000000000","message":"the intention was for these tests to remain but make opposite assertions, i.e. that it\u0027s NOT ok to have no source","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":false,"context_lines":[{"line_number":7419,"context_line":"        target \u003d argparse.Namespace()"},{"line_number":7420,"context_line":"        utils._patch_statsd_methods(target, source)"},{"line_number":7421,"context_line":"        self.assertTrue(hasattr(target, \u0027increment\u0027))"},{"line_number":7422,"context_line":"        target.increment(\u0027a\u0027)  # it\u0027s callable"},{"line_number":7423,"context_line":""},{"line_number":7424,"context_line":"    def test_patch_statsd_methods_client_deleted_from_source(self):"},{"line_number":7425,"context_line":"        client \u003d FakeStatsdClient(\u0027host.com\u0027, 1234)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ac120117_cf461eb7","line":7422,"in_reply_to":"016dcccc_d1a7c836","updated":"2024-11-25 15:36:22.000000000","message":"Done","commit_id":"7cdb41648080acd55a109d365c699b6abb32ab84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":7370,"context_line":"        self.assertEqual(pool.running(), 0)"},{"line_number":7371,"context_line":""},{"line_number":7372,"context_line":""},{"line_number":7373,"context_line":"class TestLoggerStatsdClientDelegation(unittest.TestCase):"},{"line_number":7374,"context_line":"    def setUp(self):"},{"line_number":7375,"context_line":"        self.logger_name \u003d \u0027server\u0027"},{"line_number":7376,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"70148df0_8e0f3ef0","line":7373,"updated":"2024-11-25 15:25:42.000000000","message":"now that the tests in test_logs are rightly changing to get_swift_logger, we should have a test that verifies that get_logger forward to get_swift_logger","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":true,"context_lines":[{"line_number":7370,"context_line":"        self.assertEqual(pool.running(), 0)"},{"line_number":7371,"context_line":""},{"line_number":7372,"context_line":""},{"line_number":7373,"context_line":"class TestLoggerStatsdClientDelegation(unittest.TestCase):"},{"line_number":7374,"context_line":"    def setUp(self):"},{"line_number":7375,"context_line":"        self.logger_name \u003d \u0027server\u0027"},{"line_number":7376,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"eba5bb66_51f631d4","line":7373,"in_reply_to":"70148df0_8e0f3ef0","updated":"2024-11-25 15:36:22.000000000","message":"Done - test_get_logger_provides_a_swift_log_adapter","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fdf5bea9851f48a28d7c6922012aec22f0625db0","unresolved":false,"context_lines":[{"line_number":7370,"context_line":"        self.assertEqual(pool.running(), 0)"},{"line_number":7371,"context_line":""},{"line_number":7372,"context_line":""},{"line_number":7373,"context_line":"class TestLoggerStatsdClientDelegation(unittest.TestCase):"},{"line_number":7374,"context_line":"    def setUp(self):"},{"line_number":7375,"context_line":"        self.logger_name \u003d \u0027server\u0027"},{"line_number":7376,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"b88b1765_f3b8750c","line":7373,"in_reply_to":"eba5bb66_51f631d4","updated":"2024-11-26 15:20:19.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":7428,"context_line":"            self.assertEqual("},{"line_number":7429,"context_line":"                str(err),"},{"line_number":7430,"context_line":"                \"\u0027Namespace\u0027 object has no attribute \u0027statsd_client\u0027\")"},{"line_number":7431,"context_line":"        exp \u003d {"},{"line_number":7432,"context_line":"            \u0027increment\u0027: [((\u0027a\u0027,), {})],"},{"line_number":7433,"context_line":"            \u0027update_stats\u0027: [((\u0027a\u0027, 1, None), {})],"},{"line_number":7434,"context_line":"        }"},{"line_number":7435,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7436,"context_line":""},{"line_number":7437,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7438,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":22,"id":"ea63d5b6_99f961e5","line":7435,"range":{"start_line":7431,"start_character":8,"end_line":7435,"end_character":43},"updated":"2024-11-25 15:25:42.000000000","message":"these lines are now redundant","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fdf5bea9851f48a28d7c6922012aec22f0625db0","unresolved":false,"context_lines":[{"line_number":7428,"context_line":"            self.assertEqual("},{"line_number":7429,"context_line":"                str(err),"},{"line_number":7430,"context_line":"                \"\u0027Namespace\u0027 object has no attribute \u0027statsd_client\u0027\")"},{"line_number":7431,"context_line":"        exp \u003d {"},{"line_number":7432,"context_line":"            \u0027increment\u0027: [((\u0027a\u0027,), {})],"},{"line_number":7433,"context_line":"            \u0027update_stats\u0027: [((\u0027a\u0027, 1, None), {})],"},{"line_number":7434,"context_line":"        }"},{"line_number":7435,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7436,"context_line":""},{"line_number":7437,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7438,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":22,"id":"fb4dd256_07f0df36","line":7435,"range":{"start_line":7431,"start_character":8,"end_line":7435,"end_character":43},"in_reply_to":"ea63d5b6_99f961e5","updated":"2024-11-26 15:20:19.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":7540,"context_line":"            hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7541,"context_line":"        self.assertFalse(hasattr(swift_logger, \u0027statsd_client_source\u0027))"},{"line_number":7542,"context_line":"        self.assertFalse(hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7543,"context_line":"        self.assertFalse(hasattr(swift_logger, \u0027increment\u0027))"}],"source_content_type":"text/x-python","patch_set":22,"id":"d84f05a1_644ec389","line":7543,"updated":"2024-11-25 15:25:42.000000000","message":"we decided over here https://review.opendev.org/c/openstack/swift/+/935276/2\nthat this kind of test wasn\u0027t necessary or desirable\n\nIf we did want this test it would beong in test_logs::TestSwiftLogAdapter","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":false,"context_lines":[{"line_number":7540,"context_line":"            hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7541,"context_line":"        self.assertFalse(hasattr(swift_logger, \u0027statsd_client_source\u0027))"},{"line_number":7542,"context_line":"        self.assertFalse(hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7543,"context_line":"        self.assertFalse(hasattr(swift_logger, \u0027increment\u0027))"}],"source_content_type":"text/x-python","patch_set":22,"id":"696c4685_f191c9c3","line":7543,"in_reply_to":"d84f05a1_644ec389","updated":"2024-11-25 15:36:22.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":7490,"context_line":"                fake_get_prefixed_swift_logger):"},{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"8b70aa62_91b4a087","line":7493,"updated":"2024-11-26 17:31:46.000000000","message":"+1 so this proves that get_prefixed_logger returns the result of get_prefixed_swift_logger, and we test get_prefixed_swift_logger elsewhere.","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":7490,"context_line":"                fake_get_prefixed_swift_logger):"},{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"c7a3815d_117adc28","line":7493,"in_reply_to":"8b70aa62_91b4a087","updated":"2024-11-26 20:10:41.000000000","message":"Done","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7497,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":25,"id":"85cbd339_fce2993a","line":7494,"range":{"start_line":7494,"start_character":41,"end_line":7494,"end_character":46},"updated":"2024-11-26 17:31:46.000000000","message":"+1 this proves that the prefix was modified as expected.\n\nthe next test asserts that get_prefixed_logger also patches the logger with statsd methods.","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7497,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":25,"id":"b6670492_ff2d46f0","line":7494,"range":{"start_line":7494,"start_character":25,"end_line":7494,"end_character":40},"updated":"2024-11-26 17:31:46.000000000","message":"this might be clearer if it referred to ``logger`` i.e.\n\n```self.assertEqual(logger.prefix, \u0027boo\u0027)```\n\nthey are the same thing as line 7493 proves, just more intuitive to read IMHO","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7497,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":25,"id":"c6b27f6b_85d2c0ba","line":7494,"range":{"start_line":7494,"start_character":41,"end_line":7494,"end_character":46},"in_reply_to":"85cbd339_fce2993a","updated":"2024-11-26 20:10:41.000000000","message":"Done","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(calls[0].prefix,\u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7497,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":25,"id":"83281fe9_3547539f","line":7494,"range":{"start_line":7494,"start_character":25,"end_line":7494,"end_character":40},"in_reply_to":"b6670492_ff2d46f0","updated":"2024-11-26 20:10:41.000000000","message":"Acknowledged","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":7475,"context_line":"            calls[0][:2])"},{"line_number":7476,"context_line":"        self.assertIs(calls[0][2], logger)"},{"line_number":7477,"context_line":""},{"line_number":7478,"context_line":"    def test_get_prefixed_logger_calls_get_prefixed_swift_logger(self):"},{"line_number":7479,"context_line":"        orig_get_prefixed_swift_logger \u003d utils.logs.get_prefixed_swift_logger"},{"line_number":7480,"context_line":"        base_logger \u003d utils.logs.get_swift_logger(None)"},{"line_number":7481,"context_line":"        calls \u003d []"}],"source_content_type":"text/x-python","patch_set":26,"id":"cd7c179a_fc268a98","line":7478,"updated":"2024-11-27 11:04:14.000000000","message":"nit: probably better to have this test adjacent to the other get_prefixed_logger tests below","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":7482,"context_line":""},{"line_number":7483,"context_line":"        def fake_get_prefixed_swift_logger(*args, **kwargs):"},{"line_number":7484,"context_line":"            result \u003d orig_get_prefixed_swift_logger(*args, **kwargs)"},{"line_number":7485,"context_line":"            calls.append(result)"},{"line_number":7486,"context_line":"            return result"},{"line_number":7487,"context_line":""},{"line_number":7488,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":26,"id":"361a5f97_cd423582","line":7485,"updated":"2024-11-27 11:04:14.000000000","message":"nit: we could also capture the args and kwargs here","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":7490,"context_line":"                fake_get_prefixed_swift_logger):"},{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(logger.prefix, \u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"b39c33fa_468526c4","line":7493,"updated":"2024-11-27 11:04:14.000000000","message":"nit: we could also verify the args and kwargs here","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":7491,"context_line":"            logger \u003d utils.get_prefixed_logger(base_logger, \u0027boo\u0027)"},{"line_number":7492,"context_line":"        self.assertEqual(1, len(calls))"},{"line_number":7493,"context_line":"        self.assertEqual(calls[0], logger)"},{"line_number":7494,"context_line":"        self.assertEqual(logger.prefix, \u0027boo\u0027)"},{"line_number":7495,"context_line":""},{"line_number":7496,"context_line":"    def test_get_logger_provides_statsd_client(self):"},{"line_number":7497,"context_line":"        with mock.patch("}],"source_content_type":"text/x-python","patch_set":26,"id":"afe101eb_e65ba6a2","line":7494,"updated":"2024-11-27 11:04:14.000000000","message":"nit: the other assertions in this tests have args ordered (expected, actual)","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7444,"context_line":"        }"},{"line_number":7445,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7446,"context_line":""},{"line_number":7447,"context_line":"        # if the statsd_client is deleted you will blow up..."},{"line_number":7448,"context_line":"        del source.statsd_client"},{"line_number":7449,"context_line":"        try:"},{"line_number":7450,"context_line":"            target.increment(\u0027b\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"c7e04ddb_26841ab7","line":7447,"updated":"2024-11-27 16:28:36.000000000","message":"but if you set it to None!?","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7453,"context_line":"                str(err),"},{"line_number":7454,"context_line":"                \"\u0027Namespace\u0027 object has no attribute \u0027statsd_client\u0027\")"},{"line_number":7455,"context_line":""},{"line_number":7456,"context_line":"    def test_get_logger_provides_a_swift_log_adapter(self):"},{"line_number":7457,"context_line":"        orig_get_swift_logger \u003d utils.logs.get_swift_logger"},{"line_number":7458,"context_line":"        calls \u003d []"},{"line_number":7459,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"56f773a2_2e742ff4","line":7456,"updated":"2024-11-27 16:28:36.000000000","message":"I would sort of expect an IsInstance assert given the name of the test - maybe we know from some other test in `utils.test_logs` that `get_swift_logger` returns a `SwiftLogAdapter`?","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7482,"context_line":"        self.assertTrue(hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7483,"context_line":"        self.assertIsInstance(swift_logger.logger.statsd_client,"},{"line_number":7484,"context_line":"                              FakeStatsdClient)"},{"line_number":7485,"context_line":"        swift_logger.increment(\u0027a\u0027)"},{"line_number":7486,"context_line":"        swift_logger.decrement(\u0027b\u0027)"},{"line_number":7487,"context_line":"        swift_logger.update_stats(\u0027c\u0027, 4)"},{"line_number":7488,"context_line":"        swift_logger.timing(\u0027d\u0027, 23.4)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1856d290_61dcd4ef","line":7485,"updated":"2024-11-27 16:28:36.000000000","message":"this is the assert I was looking for!","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0be57e77ad066c9c0155742145143681e5f853ec","unresolved":true,"context_lines":[{"line_number":7503,"context_line":"        client \u003d swift_logger.logger.statsd_client"},{"line_number":7504,"context_line":"        self.assertEqual(exp, client.calls)"},{"line_number":7505,"context_line":""},{"line_number":7506,"context_line":"    def test_get_logger_statsd_client_prefix(self):"},{"line_number":7507,"context_line":"        def call_get_logger(conf, name, statsd_tail_prefix):"},{"line_number":7508,"context_line":"            with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":7509,"context_line":"                            FakeStatsdClient):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f487889_91da8482","line":7506,"updated":"2024-11-27 11:09:32.000000000","message":"FYI this test passes with master version of utils","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7512,"context_line":"            self.assertTrue(hasattr(swift_logger.logger, \u0027statsd_client\u0027))"},{"line_number":7513,"context_line":"            self.assertIsInstance(swift_logger.logger.statsd_client,"},{"line_number":7514,"context_line":"                                  FakeStatsdClient)"},{"line_number":7515,"context_line":"            return swift_logger.logger.statsd_client"},{"line_number":7516,"context_line":""},{"line_number":7517,"context_line":"        # tail prefix defaults to swift"},{"line_number":7518,"context_line":"        statsd_client \u003d call_get_logger(None, None, None)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a557155_8ef5579c","line":7515,"updated":"2024-11-27 16:28:36.000000000","message":"I mean at this point why not have the closure just return the prefix!","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7588,"context_line":"        self.assertEqual(\u0027new.\u0027, new_client._prefix)"},{"line_number":7589,"context_line":"        self.assertEqual(5678, new_client._port)"},{"line_number":7590,"context_line":""},{"line_number":7591,"context_line":"    def test_get_prefixed_logger_calls_get_prefixed_swift_logger(self):"},{"line_number":7592,"context_line":"        orig_get_prefixed_swift_logger \u003d utils.logs.get_prefixed_swift_logger"},{"line_number":7593,"context_line":"        base_logger \u003d utils.logs.get_swift_logger(None)"},{"line_number":7594,"context_line":"        calls \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"05af938f_56a6faa3","line":7591,"updated":"2024-11-27 16:28:36.000000000","message":"seems a little on the nose, curious about the motivation for this test.","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":7622,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":7623,"context_line":"                      adapted_logger.logger.statsd_client)"},{"line_number":7624,"context_line":""},{"line_number":7625,"context_line":"        prefixed_logger.increment(\u0027foo\u0027)"},{"line_number":7626,"context_line":"        prefixed_logger.decrement(\u0027boo\u0027)"},{"line_number":7627,"context_line":""},{"line_number":7628,"context_line":"        exp \u003d {"}],"source_content_type":"text/x-python","patch_set":27,"id":"32652184_ab1ef34b","line":7625,"updated":"2024-11-27 16:28:36.000000000","message":"this one too!","commit_id":"8699af83c9ee1cbc5691ed12a6f57fa1134aab41"}],"test/unit/common/utils/test_logs.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7692a7644853a5b5660a65b41bc7301310275f2f","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        # ... different StatsdClient !"},{"line_number":924,"context_line":"        self.assertIsNot(new_client, orig_client)"},{"line_number":925,"context_line":"        self.assertEqual(\u0027new.\u0027, new_client._prefix)"},{"line_number":926,"context_line":"        self.assertEqual(5678, new_client._port)"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"    def test_get_prefixed_logger_adopts_statsd_client(self):"},{"line_number":929,"context_line":"        # verify that get_prefixed_logger installs an interface to any existing"}],"source_content_type":"text/x-python","patch_set":2,"id":"138d9da8_f8a50064","line":926,"updated":"2024-10-29 18:00:58.000000000","message":"belt and braces , we could also assert that ``adapted_logger.logger.statsd_client \u003d\u003d new_client``","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"773b10a8b3e3598625412801365ac8d51aa85479","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        # ... different StatsdClient !"},{"line_number":924,"context_line":"        self.assertIsNot(new_client, orig_client)"},{"line_number":925,"context_line":"        self.assertEqual(\u0027new.\u0027, new_client._prefix)"},{"line_number":926,"context_line":"        self.assertEqual(5678, new_client._port)"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"    def test_get_prefixed_logger_adopts_statsd_client(self):"},{"line_number":929,"context_line":"        # verify that get_prefixed_logger installs an interface to any existing"}],"source_content_type":"text/x-python","patch_set":2,"id":"9593ee13_872ec460","line":926,"in_reply_to":"138d9da8_f8a50064","updated":"2024-10-30 12:39:14.000000000","message":"Done","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a1083d1240ede20dd413ea48bbcff9dd4b8ccfcf","unresolved":true,"context_lines":[{"line_number":947,"context_line":"            [mock.call(\u0027foo\u0027)],"},{"line_number":948,"context_line":"            adapted_logger.logger.statsd_client.increment.call_args_list)"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    @reset_logger_state"},{"line_number":951,"context_line":"    def test_get_prefixed_logger_no_statsd_client(self):"},{"line_number":952,"context_line":"        # verify get_prefixed_logger can be used to mutate the prefix of a"},{"line_number":953,"context_line":"        # SwiftLogAdapter that does *not* have a StatsdClient interface"}],"source_content_type":"text/x-python","patch_set":2,"id":"591b6ba3_f723e813","line":950,"updated":"2024-10-29 12:52:43.000000000","message":"reset_logger_state probably isn\u0027t needed here","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"773b10a8b3e3598625412801365ac8d51aa85479","unresolved":false,"context_lines":[{"line_number":947,"context_line":"            [mock.call(\u0027foo\u0027)],"},{"line_number":948,"context_line":"            adapted_logger.logger.statsd_client.increment.call_args_list)"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    @reset_logger_state"},{"line_number":951,"context_line":"    def test_get_prefixed_logger_no_statsd_client(self):"},{"line_number":952,"context_line":"        # verify get_prefixed_logger can be used to mutate the prefix of a"},{"line_number":953,"context_line":"        # SwiftLogAdapter that does *not* have a StatsdClient interface"}],"source_content_type":"text/x-python","patch_set":2,"id":"034fb9e1_21b4ee85","line":950,"in_reply_to":"591b6ba3_f723e813","updated":"2024-10-30 12:39:14.000000000","message":"Done","commit_id":"f2de7f390a568dcb791bd854467c4a1c2db03cbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":49,"context_line":"from swift.common import utils"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"from swift.common.swob import Request, Response"},{"line_number":52,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":53,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"e893b5f0_669b60ab","line":52,"updated":"2024-10-31 09:42:34.000000000","message":"we should move the tests that cover get_prefixed_logger into test_utils now that get_prefixed_logger is moved to utils","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from swift.common import utils"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"from swift.common.swob import Request, Response"},{"line_number":52,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":53,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"4b9a9988_ed8cb377","line":52,"in_reply_to":"e893b5f0_669b60ab","updated":"2024-11-05 09:37:29.000000000","message":"Agreed to leave this for follow-on","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"from swift.common.swob import Request, Response"},{"line_number":52,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":53,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def reset_loggers():"}],"source_content_type":"text/x-python","patch_set":5,"id":"107040f9_7590e09f","line":53,"updated":"2024-10-31 09:42:34.000000000","message":"we should import get_swift_logger here and not use ``utils.get_swift_logger``","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d32b1ffae6483d0091dd3c173aca650aab8ae665","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"from swift.common.swob import Request, Response"},{"line_number":52,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":53,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def reset_loggers():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ec4b55a_e32bbc96","line":53,"in_reply_to":"107040f9_7590e09f","updated":"2024-11-01 15:47:00.000000000","message":"Acknowledged","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"68d0378742310f5243312dfbfa4e50cf5f1235f7","unresolved":true,"context_lines":[{"line_number":851,"context_line":"        self.assertIs(new_client, orig_logger.logger.statsd_client)"},{"line_number":852,"context_line":"        self.assertEqual(\u0027new.\u0027, new_client._prefix)"},{"line_number":853,"context_line":"        self.assertEqual(5678, new_client._port)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    @reset_logger_state"},{"line_number":856,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":857,"context_line":"        # setup stream logging"}],"source_content_type":"text/x-python","patch_set":5,"id":"c5e1c4b9_8ad253af","line":854,"updated":"2024-10-31 09:42:34.000000000","message":"all these new tests ^^^ should move to test_utils.py because they test functions that are now in utils\n\nSame for the existing tests for get_prefixed_logger below...","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        self.assertIs(new_client, orig_logger.logger.statsd_client)"},{"line_number":852,"context_line":"        self.assertEqual(\u0027new.\u0027, new_client._prefix)"},{"line_number":853,"context_line":"        self.assertEqual(5678, new_client._port)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    @reset_logger_state"},{"line_number":856,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":857,"context_line":"        # setup stream logging"}],"source_content_type":"text/x-python","patch_set":5,"id":"cb8cad68_ef505191","line":854,"in_reply_to":"c5e1c4b9_8ad253af","updated":"2024-11-05 09:37:29.000000000","message":"Agreed to leave this for follow-on","commit_id":"02042094d3ac433f2075c3fb0a8a88c29c3dcd2f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86a4f9fb9c8f9f4757878ccc0435874cc531bd88","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    return wrapper"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def purge_logger_statsd_client(name):"},{"line_number":85,"context_line":"    core_logger \u003d logging.getLogger(name)"},{"line_number":86,"context_line":"    if hasattr(core_logger, \u0027statsd_client\u0027):"},{"line_number":87,"context_line":"        del core_logger.statsd_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"729024b0_c119d9f2","line":84,"updated":"2024-11-05 09:37:29.000000000","message":"pls add a docstring:\n\n```\nAvoid test coupling by removing any StatsdClient instance that may have been patched on to a Logger.\n```","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"146a973ac499ff6dbe48aa3b3e93b5c875e9cd44","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return wrapper"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def purge_logger_statsd_client(name):"},{"line_number":85,"context_line":"    core_logger \u003d logging.getLogger(name)"},{"line_number":86,"context_line":"    if hasattr(core_logger, \u0027statsd_client\u0027):"},{"line_number":87,"context_line":"        del core_logger.statsd_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"76f915c2_24f551fd","line":84,"in_reply_to":"729024b0_c119d9f2","updated":"2024-11-05 19:42:20.000000000","message":"Done","commit_id":"b435be66189be82538792fa0729e3114dabc6816"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a3f72153ded03048052bfcffaa559c9090959508","unresolved":true,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def purge_logger_statsd_client(name):"},{"line_number":85,"context_line":"    \u0027\u0027\u0027"},{"line_number":86,"context_line":"    Avoid test coupling by removing any StatsdClient instance"},{"line_number":87,"context_line":"    that may have been patched on to a Logger."},{"line_number":88,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"bb432b30_b92b46d7","line":85,"updated":"2024-11-14 12:03:50.000000000","message":"as before, use triple-double quotes for doocstring ``\"\"\"...\"\"\"``","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"d641944d188ea2b6701a84fb59ccd5341a9d4ac2","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def purge_logger_statsd_client(name):"},{"line_number":85,"context_line":"    \u0027\u0027\u0027"},{"line_number":86,"context_line":"    Avoid test coupling by removing any StatsdClient instance"},{"line_number":87,"context_line":"    that may have been patched on to a Logger."},{"line_number":88,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fe4feead_b6c89f00","line":85,"in_reply_to":"bb432b30_b92b46d7","updated":"2024-11-14 19:36:19.000000000","message":"Acknowledged","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":1020,"context_line":"            adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":1021,"context_line":"        self.assertTrue(hasattr(adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"        prefixed_logger \u003d get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":1024,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1025,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":1026,"context_line":"                      adapted_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"d27931f8_1a3e0f58","line":1023,"updated":"2024-11-14 20:15:13.000000000","message":"in theory this test should already work on master?","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":1021,"context_line":"        self.assertTrue(hasattr(adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"        prefixed_logger \u003d get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":1024,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1025,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":1026,"context_line":"                      adapted_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"a24b20fb_1224aeb0","line":1023,"in_reply_to":"5588cf6a_b1304127","updated":"2024-11-15 16:54:31.000000000","message":"too bad!  glad to have the coverage now.","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":1020,"context_line":"            adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":1021,"context_line":"        self.assertTrue(hasattr(adapted_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"        prefixed_logger \u003d get_prefixed_logger(adapted_logger, \u0027test\u0027)"},{"line_number":1024,"context_line":"        self.assertTrue(hasattr(prefixed_logger.logger, \u0027statsd_client\u0027))"},{"line_number":1025,"context_line":"        self.assertIs(prefixed_logger.logger.statsd_client,"},{"line_number":1026,"context_line":"                      adapted_logger.logger.statsd_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5588cf6a_b1304127","line":1023,"in_reply_to":"d27931f8_1a3e0f58","updated":"2024-11-15 10:51:15.000000000","message":"yes I just think we lacked coverage","commit_id":"03ac40858d147fb125dfc57fd4913026f3866822"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9ce36395c597e05c6d2e3bbaedd0ffcece81f58","unresolved":true,"context_lines":[{"line_number":34,"context_line":"from six import StringIO"},{"line_number":35,"context_line":"from six.moves import http_client"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from test.debug_logger import FakeStatsdClient"},{"line_number":38,"context_line":"from test.unit import with_tempdir"},{"line_number":39,"context_line":"from test.unit import quiet_eventlet_exceptions"},{"line_number":40,"context_line":"from test.unit.common.test_utils import MockOs, MockSys"}],"source_content_type":"text/x-python","patch_set":16,"id":"afed0b74_8c4c2868","line":37,"updated":"2024-11-14 20:15:13.000000000","message":"it\u0027s a bit of a smell that test_logs imports FakeStatsdClient where it did not before.","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6da6cdaf9ec7397c86ef702e6079d2922577cf70","unresolved":true,"context_lines":[{"line_number":34,"context_line":"from six import StringIO"},{"line_number":35,"context_line":"from six.moves import http_client"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from test.debug_logger import FakeStatsdClient"},{"line_number":38,"context_line":"from test.unit import with_tempdir"},{"line_number":39,"context_line":"from test.unit import quiet_eventlet_exceptions"},{"line_number":40,"context_line":"from test.unit.common.test_utils import MockOs, MockSys"}],"source_content_type":"text/x-python","patch_set":16,"id":"eb83c78e_0a6778bd","line":37,"in_reply_to":"afed0b74_8c4c2868","updated":"2024-11-15 10:51:15.000000000","message":"I agree. I have previously pointed out that there are tests in this module that belong in test_utils https://review.opendev.org/c/openstack/swift/+/931473/comment/e893b5f0_669b60ab/ but the feedback I got was to leave moving tests for a follow-on to avoid too much churn. I therefore added new tests in this module for ``get_logger()`` and ``get_prefixed_logger()`` adjacent to existing tests for those functions.\n\nI\u0027m now going to move the *new* tests to a new TestCase in test_utils and leave the existing tests (that should IMHO also move eventually).","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from six import StringIO"},{"line_number":35,"context_line":"from six.moves import http_client"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from test.debug_logger import FakeStatsdClient"},{"line_number":38,"context_line":"from test.unit import with_tempdir"},{"line_number":39,"context_line":"from test.unit import quiet_eventlet_exceptions"},{"line_number":40,"context_line":"from test.unit.common.test_utils import MockOs, MockSys"}],"source_content_type":"text/x-python","patch_set":16,"id":"3db46eb2_4692997b","line":37,"in_reply_to":"eb83c78e_0a6778bd","updated":"2024-11-15 16:54:31.000000000","message":"agree, as much as possible I think the tests in `test_logs` should be updated to use `get_swift_logger` and in `test_statsd_client` probably we could try to use `get_statds_client`\n\nWhen we need to assert `get_logger` returns a thing that does both those tests will make the most sense in the new TestCase in `test_utils`\n\nKUDOS!","commit_id":"3067dd425415f42f10b623f278c0df1615eb2057"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":822,"context_line":"    def test_get_prefixed_logger_replaces_prefix(self):"},{"line_number":823,"context_line":"        # setup stream logging"},{"line_number":824,"context_line":"        sio \u003d StringIO()"},{"line_number":825,"context_line":"        base_logger \u003d utils.get_swift_logger(None)"},{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"32a8d11f_05832ef1","line":825,"updated":"2024-11-15 16:54:31.000000000","message":"I think `utils` imports `get_swift_logger` as part of it\u0027s implementation of `get_logger` - but maybe in general we should try to use `logs.get_swift_logger` or `utils.logs.get_swift_logger` (if we only have a reference to `utils`)","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    def test_get_prefixed_logger_replaces_prefix(self):"},{"line_number":823,"context_line":"        # setup stream logging"},{"line_number":824,"context_line":"        sio \u003d StringIO()"},{"line_number":825,"context_line":"        base_logger \u003d utils.get_swift_logger(None)"},{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9388b9f8_8999b078","line":825,"in_reply_to":"32a8d11f_05832ef1","updated":"2024-11-18 16:25:00.000000000","message":"Acknowledged","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed49d52650d69e2d65f41d0edba92473533ed0e1","unresolved":true,"context_lines":[{"line_number":886,"context_line":"    @reset_logger_state"},{"line_number":887,"context_line":"    def test_capture_stdio(self):"},{"line_number":888,"context_line":"        # stubs"},{"line_number":889,"context_line":"        logger \u003d utils.get_logger(None, \u0027dummy\u0027)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        # mock utils system modules"},{"line_number":892,"context_line":"        mock_os \u003d MockOs()"}],"source_content_type":"text/x-python","patch_set":17,"id":"b223ef7e_ce8b34aa","line":889,"updated":"2024-11-15 16:54:31.000000000","message":"This seems to work with `utils.logs.get_swift_logger` and still do it\u0027s job.\n\nAs written this diff reads more about asserting `utils.get_logger` is backwards compat with `utils.logs.get_logger` - except that I don\u0027t think `test_capture_stdio` is actually trying to say anything about the statds_client/increment behaviors that are transparently compatible if you use `utils.get_logger` instead of `logs.get_swift_logger`\n\nI think if I was trying to clean up `test_logs`, I\u0027d start by replacing calls to `utils.get_logger` with `utils.logs.get_swift_logger` and only move tests that break.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"04dd4ad85e84fa51794c7bfd5a50408a645db89d","unresolved":false,"context_lines":[{"line_number":886,"context_line":"    @reset_logger_state"},{"line_number":887,"context_line":"    def test_capture_stdio(self):"},{"line_number":888,"context_line":"        # stubs"},{"line_number":889,"context_line":"        logger \u003d utils.get_logger(None, \u0027dummy\u0027)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        # mock utils system modules"},{"line_number":892,"context_line":"        mock_os \u003d MockOs()"}],"source_content_type":"text/x-python","patch_set":17,"id":"fdda3529_062405a3","line":889,"in_reply_to":"b223ef7e_ce8b34aa","updated":"2024-11-18 16:25:00.000000000","message":"Agree, I think a better use would be to import utils.logs.get_swift_logger and use get_swift_logger as it would be used at quite a lot places in this test file atleast.","commit_id":"89198c728a34a1510839580c843dd95682b18704"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":47,"context_line":"from swift.common import utils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"from swift.common.swob import Request, Response"},{"line_number":50,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":51,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter, \\"},{"line_number":52,"context_line":"    get_swift_logger"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"e21ec734_f8831876","line":50,"updated":"2024-11-25 15:25:42.000000000","message":"ok, we\u0027re just changing the import source for get_prefixed_logger, but not actually calling it any more than we were in this module. It is a follow-up task to move get_prefixed_logger tests from this module to test_utils.py","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":false,"context_lines":[{"line_number":47,"context_line":"from swift.common import utils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"from swift.common.swob import Request, Response"},{"line_number":50,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":51,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter, \\"},{"line_number":52,"context_line":"    get_swift_logger"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"4da4f8a0_86d7e13b","line":50,"in_reply_to":"e21ec734_f8831876","updated":"2024-11-25 15:36:22.000000000","message":"Acknowledged","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b760b067e185c50126ecb00e386ee5c6f3fbc247","unresolved":true,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(\u0027name1\u0027, logger1.server)"},{"line_number":294,"context_line":"        # oh dear, the statsd client on the common logging.Logger instance got"},{"line_number":295,"context_line":"        # mutated when logger2 was created"},{"line_number":296,"context_line":"        self.assertEqual(\u0027name2.\u0027, logger1.logger.statsd_client._prefix)"},{"line_number":297,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.name)"},{"line_number":298,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.logger.name)"},{"line_number":299,"context_line":"        self.assertEqual(\u0027name2\u0027, logger2.server)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ed41b7ce_b1976c6b","line":296,"updated":"2024-11-25 15:36:22.000000000","message":"these statsd prefix mutations are now covered by test_get_logger_replaces_statsd_client in test_utils.py","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(\u0027name1\u0027, logger1.server)"},{"line_number":294,"context_line":"        # oh dear, the statsd client on the common logging.Logger instance got"},{"line_number":295,"context_line":"        # mutated when logger2 was created"},{"line_number":296,"context_line":"        self.assertEqual(\u0027name2.\u0027, logger1.logger.statsd_client._prefix)"},{"line_number":297,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.name)"},{"line_number":298,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.logger.name)"},{"line_number":299,"context_line":"        self.assertEqual(\u0027name2\u0027, logger2.server)"}],"source_content_type":"text/x-python","patch_set":22,"id":"534cf434_4c13717c","line":296,"in_reply_to":"6fbd4b5b_73fbc3a9","updated":"2024-11-27 11:04:14.000000000","message":"leaving comment unresolved so that it\u0027s visible as an FYI to other viewers","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fdf5bea9851f48a28d7c6922012aec22f0625db0","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(\u0027name1\u0027, logger1.server)"},{"line_number":294,"context_line":"        # oh dear, the statsd client on the common logging.Logger instance got"},{"line_number":295,"context_line":"        # mutated when logger2 was created"},{"line_number":296,"context_line":"        self.assertEqual(\u0027name2.\u0027, logger1.logger.statsd_client._prefix)"},{"line_number":297,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.name)"},{"line_number":298,"context_line":"        self.assertEqual(\u0027route\u0027, logger2.logger.name)"},{"line_number":299,"context_line":"        self.assertEqual(\u0027name2\u0027, logger2.server)"}],"source_content_type":"text/x-python","patch_set":22,"id":"6fbd4b5b_73fbc3a9","line":296,"in_reply_to":"ed41b7ce_b1976c6b","updated":"2024-11-26 15:20:19.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7dce3b0fe35baf4eae8ac76d013ff6a3e042013a","unresolved":true,"context_lines":[{"line_number":733,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":734,"context_line":"        # setup stream logging"},{"line_number":735,"context_line":"        sio \u003d StringIO()"},{"line_number":736,"context_line":"        base_logger \u003d get_swift_logger(None)"},{"line_number":737,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":738,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":739,"context_line":"        logger \u003d get_prefixed_logger(base_logger, \u0027some prefix: \u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"dc0e5bc0_464b7af7","line":736,"updated":"2024-11-25 15:25:42.000000000","message":"ok, so some of the tests are migrating to call get_swift_logger, which is how they should be in test_logs, ... but not *all* of them? Let\u0027s change them all to use get_swift_logger","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c910d6070ccc5543acc80d2e16bd0dbb0399baae","unresolved":false,"context_lines":[{"line_number":733,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":734,"context_line":"        # setup stream logging"},{"line_number":735,"context_line":"        sio \u003d StringIO()"},{"line_number":736,"context_line":"        base_logger \u003d get_swift_logger(None)"},{"line_number":737,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":738,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":739,"context_line":"        logger \u003d get_prefixed_logger(base_logger, \u0027some prefix: \u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba6ea854_c73a917a","line":736,"in_reply_to":"dc0e5bc0_464b7af7","updated":"2024-11-25 15:38:43.000000000","message":"Done","commit_id":"1fa3d6b738f307b5f5508c6cf8afede1776f2fe5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c910d6070ccc5543acc80d2e16bd0dbb0399baae","unresolved":true,"context_lines":[{"line_number":724,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    @reset_logger_state"},{"line_number":727,"context_line":"    def test_get_prefixed_swift_logger(self):"},{"line_number":728,"context_line":"        # setup stream logging"},{"line_number":729,"context_line":"        sio \u003d StringIO()"},{"line_number":730,"context_line":"        base_logger \u003d get_swift_logger(None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"0aa350f6_02338038","line":727,"updated":"2024-11-25 15:38:43.000000000","message":"I added this because all the other prefixed logger tests call get_prefixed_logger.\n\nBut I *think* that maybe all the other get_prefixed_... tests *in this module* could migrate to call get_prefixed_swift_logger, and then in test_logs we need a test that checks that get_prefixed_logger calls though to get_prefixed_swift_logger (similar to the test added for get_swift_logger).","commit_id":"2dd184e51a30462d58c8ff4449dd34fbeb9ec4ab"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fdf5bea9851f48a28d7c6922012aec22f0625db0","unresolved":false,"context_lines":[{"line_number":724,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    @reset_logger_state"},{"line_number":727,"context_line":"    def test_get_prefixed_swift_logger(self):"},{"line_number":728,"context_line":"        # setup stream logging"},{"line_number":729,"context_line":"        sio \u003d StringIO()"},{"line_number":730,"context_line":"        base_logger \u003d get_swift_logger(None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"dc503f0e_5d53135d","line":727,"in_reply_to":"0aa350f6_02338038","updated":"2024-11-26 15:20:19.000000000","message":"Done","commit_id":"2dd184e51a30462d58c8ff4449dd34fbeb9ec4ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27e3a159ae616fd59ab0043329e64ed22abb3ee4","unresolved":true,"context_lines":[{"line_number":755,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    @reset_logger_state"},{"line_number":758,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":759,"context_line":"        # setup stream logging"},{"line_number":760,"context_line":"        sio \u003d StringIO()"},{"line_number":761,"context_line":"        base_logger \u003d get_swift_logger(None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"c21dbd96_2032f2f4","line":758,"updated":"2024-11-25 15:47:10.000000000","message":"this almost duplicates the test above but is calling get_prefixed_logger ... this could be removed if we add a check in test_utils that get_prefixed_logger does in fact call get_prefixed_swift_logger","commit_id":"2dd184e51a30462d58c8ff4449dd34fbeb9ec4ab"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fdf5bea9851f48a28d7c6922012aec22f0625db0","unresolved":false,"context_lines":[{"line_number":755,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    @reset_logger_state"},{"line_number":758,"context_line":"    def test_get_prefixed_logger(self):"},{"line_number":759,"context_line":"        # setup stream logging"},{"line_number":760,"context_line":"        sio \u003d StringIO()"},{"line_number":761,"context_line":"        base_logger \u003d get_swift_logger(None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"a6bd9b47_64688810","line":758,"in_reply_to":"c21dbd96_2032f2f4","updated":"2024-11-26 15:20:19.000000000","message":"Acknowledged. Adding a test_get_prefixed_logger_calls_get_prefixed_swift_logger","commit_id":"2dd184e51a30462d58c8ff4449dd34fbeb9ec4ab"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b9dd1c6ecff81a774b4d9fa2ac0344ae23887a4","unresolved":true,"context_lines":[{"line_number":46,"context_line":"from swift.common import utils"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"from swift.common.swob import Request, Response"},{"line_number":49,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":50,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter, \\"},{"line_number":51,"context_line":"    get_swift_logger, get_prefixed_swift_logger"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"d144052e_33222f3f","line":49,"range":{"start_line":49,"start_character":31,"end_line":49,"end_character":50},"updated":"2024-11-27 11:04:14.000000000","message":"let\u0027s go all the way and stop importing this into test_logs by migrating all the get_prefixed_logger tests to call get_prefixed_swift_logger","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f090665cec804383ee5b1d46aa425e5318e58fbe","unresolved":true,"context_lines":[{"line_number":46,"context_line":"from swift.common import utils"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"from swift.common.swob import Request, Response"},{"line_number":49,"context_line":"from swift.common.utils import get_prefixed_logger"},{"line_number":50,"context_line":"from swift.common.utils.logs import SwiftLogFormatter, SwiftLogAdapter, \\"},{"line_number":51,"context_line":"    get_swift_logger, get_prefixed_swift_logger"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"6d20dfcd_9b926c14","line":49,"range":{"start_line":49,"start_character":31,"end_line":49,"end_character":50},"in_reply_to":"d144052e_33222f3f","updated":"2024-11-27 16:28:36.000000000","message":"ok, but it\u0027s still a half measure:\n\n```\n(.venv) clayg@ThinkStation:~/Workspace/vagrant-swift-all-in-one/swift$ grep statsd test/unit/common/utils/test_logs.py \n        logger1 \u003d utils.get_swift_logger({\u0027log_statsd_host\u0027: \u00271.2.3.4\u0027},\n        logger2 \u003d utils.get_swift_logger({\u0027log_statsd_host\u0027: \u00271.2.3.5\u0027},\n        logger1 \u003d utils.get_swift_logger({\u0027log_statsd_host\u0027: \u00271.2.3.4\u0027},\n        logger2 \u003d utils.get_swift_logger({\u0027log_statsd_host\u0027: \u00271.2.3.5\u0027},\n```\n\nmaybe this change is the motivation for the \"`get_prefixed_logger` just calls `get_prefixed_swift_logger` test - we want all these assertions to continue to \"transitively\" apply to the original `get_prefixed_logger`","commit_id":"2c6affe916e9796a649837679e9d7317d8bcf725"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":2295,"context_line":"        use \u003d egg:swift#proxy"},{"line_number":2296,"context_line":"        \"\"\" % self.tempdir"},{"line_number":2297,"context_line":"        conf_path \u003d self._write_conf(dedent(conf_sections))"},{"line_number":2298,"context_line":"        conf \u003d {"},{"line_number":2299,"context_line":"            \u0027log_statsd_host\u0027: \u0027example.com\u0027,"},{"line_number":2300,"context_line":"            \u0027log_statsd_port\u0027: \u00278125\u0027,"},{"line_number":2301,"context_line":"            \u0027log_statsd_metric_prefix\u0027: \u0027\u0027,"},{"line_number":2302,"context_line":"            \u0027log_statsd_default_sample_rate\u0027: \u00271.0\u0027,"},{"line_number":2303,"context_line":"            \u0027log_statsd_sample_rate_factor\u0027: \u00271.0\u0027"},{"line_number":2304,"context_line":"        }"},{"line_number":2305,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":2306,"context_line":"                        FakeStatsdClient):"},{"line_number":2307,"context_line":"            app \u003d loadapp(conf_path, allow_modify_pipeline\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"19f59054_1183bd4c","line":2304,"range":{"start_line":2298,"start_character":8,"end_line":2304,"end_character":9},"updated":"2024-11-26 17:31:46.000000000","message":"this shouldn\u0027t be necessary\n\nloadapp is reading the conf from conf_path. Most of the StatsdClient options will be their defaults except ``log_statsd_host\u003dexample.com``","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":2295,"context_line":"        use \u003d egg:swift#proxy"},{"line_number":2296,"context_line":"        \"\"\" % self.tempdir"},{"line_number":2297,"context_line":"        conf_path \u003d self._write_conf(dedent(conf_sections))"},{"line_number":2298,"context_line":"        conf \u003d {"},{"line_number":2299,"context_line":"            \u0027log_statsd_host\u0027: \u0027example.com\u0027,"},{"line_number":2300,"context_line":"            \u0027log_statsd_port\u0027: \u00278125\u0027,"},{"line_number":2301,"context_line":"            \u0027log_statsd_metric_prefix\u0027: \u0027\u0027,"},{"line_number":2302,"context_line":"            \u0027log_statsd_default_sample_rate\u0027: \u00271.0\u0027,"},{"line_number":2303,"context_line":"            \u0027log_statsd_sample_rate_factor\u0027: \u00271.0\u0027"},{"line_number":2304,"context_line":"        }"},{"line_number":2305,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":2306,"context_line":"                        FakeStatsdClient):"},{"line_number":2307,"context_line":"            app \u003d loadapp(conf_path, allow_modify_pipeline\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da7fb7ab_525916a4","line":2304,"range":{"start_line":2298,"start_character":8,"end_line":2304,"end_character":9},"in_reply_to":"19f59054_1183bd4c","updated":"2024-11-26 20:10:41.000000000","message":"Acknowledged","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":2305,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":2306,"context_line":"                        FakeStatsdClient):"},{"line_number":2307,"context_line":"            app \u003d loadapp(conf_path, allow_modify_pipeline\u003dFalse)"},{"line_number":2308,"context_line":"            client \u003d get_statsd_client(conf, tail_prefix \u003d \u0027proxy-server\u0027)"},{"line_number":2309,"context_line":"        # logger name is hard-wired \u0027proxy-server\u0027"},{"line_number":2310,"context_line":"        self.assertEqual(\u0027proxy-server\u0027, app.logger.name)"},{"line_number":2311,"context_line":"        self.assertEqual(\u0027swift\u0027, app.logger.server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"8bee0d4c_a30cfbaa","line":2308,"range":{"start_line":2308,"start_character":21,"end_line":2308,"end_character":38},"updated":"2024-11-26 17:31:46.000000000","message":"this will be returning a different instance of FakeStatsdClient vs the one that get_logger constructed\n\nI don\u0027t think this is necessary","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":2305,"context_line":"        with mock.patch(\u0027swift.common.statsd_client.StatsdClient\u0027,"},{"line_number":2306,"context_line":"                        FakeStatsdClient):"},{"line_number":2307,"context_line":"            app \u003d loadapp(conf_path, allow_modify_pipeline\u003dFalse)"},{"line_number":2308,"context_line":"            client \u003d get_statsd_client(conf, tail_prefix \u003d \u0027proxy-server\u0027)"},{"line_number":2309,"context_line":"        # logger name is hard-wired \u0027proxy-server\u0027"},{"line_number":2310,"context_line":"        self.assertEqual(\u0027proxy-server\u0027, app.logger.name)"},{"line_number":2311,"context_line":"        self.assertEqual(\u0027swift\u0027, app.logger.server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ed0eb689_5c4d5b2a","line":2308,"range":{"start_line":2308,"start_character":21,"end_line":2308,"end_character":38},"in_reply_to":"8bee0d4c_a30cfbaa","updated":"2024-11-26 20:10:41.000000000","message":"Acknowledged","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":2309,"context_line":"        # logger name is hard-wired \u0027proxy-server\u0027"},{"line_number":2310,"context_line":"        self.assertEqual(\u0027proxy-server\u0027, app.logger.name)"},{"line_number":2311,"context_line":"        self.assertEqual(\u0027swift\u0027, app.logger.server)"},{"line_number":2312,"context_line":"        self.assertEqual(client.calls, {})"},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":"        conf_sections \u003d \"\"\""},{"line_number":2315,"context_line":"        [DEFAULT]"}],"source_content_type":"text/x-python","patch_set":25,"id":"a5af1cdd_c37800b9","line":2312,"updated":"2024-11-26 17:31:46.000000000","message":"We want to check that the statsd options got plumbed through to the statsd client, so instead of this, we can get the app.logger.statsd_client and make assertions about it\u0027s attributes such as ``_host``, ``_port``, ``_prefix`` etc\n\ne.g.\n\n```\nself.assertIsInstance(app.logger.statsd_client._host, StatsdClient)\nself.assertEqual(\u0027example.com\u0027, app.logger.statsd_client._host)\n```","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        # logger name is hard-wired \u0027proxy-server\u0027"},{"line_number":2310,"context_line":"        self.assertEqual(\u0027proxy-server\u0027, app.logger.name)"},{"line_number":2311,"context_line":"        self.assertEqual(\u0027swift\u0027, app.logger.server)"},{"line_number":2312,"context_line":"        self.assertEqual(client.calls, {})"},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":"        conf_sections \u003d \"\"\""},{"line_number":2315,"context_line":"        [DEFAULT]"}],"source_content_type":"text/x-python","patch_set":25,"id":"daed05ed_708bd350","line":2312,"in_reply_to":"a5af1cdd_c37800b9","updated":"2024-11-26 20:10:41.000000000","message":"Done","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2df8bb762dbeaac8a906a2235750a81fd01ec898","unresolved":true,"context_lines":[{"line_number":2334,"context_line":"        # server is defined by log_name option"},{"line_number":2335,"context_line":"        self.assertEqual(\u0027test-name\u0027, app.logger.server)"},{"line_number":2336,"context_line":"        # statsd tail prefix is hard-wired \u0027proxy-server\u0027"},{"line_number":2337,"context_line":"        self.assertEqual(client.calls, {})"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"class TestProxyServerConfigStringLoading(TestProxyServerConfigLoading):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1245db5c_b13a64a1","line":2337,"updated":"2024-11-26 17:31:46.000000000","message":"same comments as above - ``client`` isn\u0027t useful, let\u0027s make assertions about app.logger.statsd_client","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5f7017cadb192198f94a43ef61ab9ba4e9d13747","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        # server is defined by log_name option"},{"line_number":2335,"context_line":"        self.assertEqual(\u0027test-name\u0027, app.logger.server)"},{"line_number":2336,"context_line":"        # statsd tail prefix is hard-wired \u0027proxy-server\u0027"},{"line_number":2337,"context_line":"        self.assertEqual(client.calls, {})"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"class TestProxyServerConfigStringLoading(TestProxyServerConfigLoading):"}],"source_content_type":"text/x-python","patch_set":25,"id":"edda2aaf_1db3611a","line":2337,"in_reply_to":"1245db5c_b13a64a1","updated":"2024-11-26 20:10:41.000000000","message":"Acknowledged","commit_id":"787ac3fe8314fc752ed3cccd3e963f191b48def5"}]}
