)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5c17d44e8e5a96da1124a4a64ccda8774ce7c9c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d476d4b4_f881fb3f","updated":"2024-05-09 20:17:38.000000000","message":"Can confirm that this allows `swift-ring-builder` to function correctly on py2, where it would previously traceback:\n```\nTraceback (most recent call last):\n  File \".../swift-ring-builder\", line 7, in \u003cmodule\u003e\n    exec(compile(f.read(), __file__, \u0027exec\u0027))\n  File \".../swift/bin/swift-ring-builder\", line 34, in \u003cmodule\u003e\n    from swift.cli.ringbuilder import main\n  File \".../swift/cli/ringbuilder.py\", line 35, in \u003cmodule\u003e\n    from swift.common import exceptions\n  File \".../swift/common/exceptions.py\", line 17, in \u003cmodule\u003e\n    import swift.common.utils\n  File \".../swift/common/utils/__init__.py\", line 87, in \u003cmodule\u003e\n    from swift.common.utils.logs import (   # noqa\n  File \".../swift/common/utils/logs.py\", line 38, in \u003cmodule\u003e\n    from swift.common import statsd_client, exceptions\nImportError: cannot import name exceptions\n```\nSeems less invasive than https://review.opendev.org/c/openstack/swift/+/918809 -- ran unit tests locally on py2; about midway through probe tests now.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"fc63a7a6b8e7697b03aa849bfde1440a57ba9924","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0e56fccb_98978419","updated":"2024-05-09 21:51:59.000000000","message":"If you think that allowing to import Timestamp from utils is valuable, then I\u0027m okay with this, although I don\u0027t like it.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"58cc1373057add59a189ae396c4e996cbda68e3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c77995f4_a232e3c8","updated":"2024-05-09 21:19:45.000000000","message":"Unit, probe, and (non-in-process) func tests all pass on py2. Note that not all processes seem to be affected; I\u0027ve only seen tracebacks for\n\n- `swift-account-audit`\n- `swift-container-deleter`\n- `swift-container-sharder`\n- `swift-dispersion-populate`\n- `swift-get-nodes`\n- `swift-object-relinker`\n- `swift-reconciler-enqueue`\n- `swift-ring-builder`\n- `swift-ring-builder-analyzer`\n- `swift-ring-composer`","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"acec5a7263c5322969cf0087f18d2584d289f150","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f73b734e_29d03ce6","updated":"2024-05-09 19:23:47.000000000","message":"Why not import swift.common.utils.timestamp in swift/common/exceptions.py?\nI think it\u0027s simpler to break the circular import instead of helping\nthe lazy evaluation. And the simple class definitions like exceptions\nand Timestamp should be leaves.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"df91a891c3cb3516a7ba158bd3cac77f8930c321","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3801fe71_493c8ff4","updated":"2024-05-10 07:13:34.000000000","message":"Yeah py2 doesn\u0027t lazy load like py3. One more reason to drop py2.. let\u0027s hope we get to that soon.\n\nYeah Tim\u0027s right a good way to trigger the issue is using swift-ring-builder as that calls into the depths of swift.common.\n\nThis patch is fixing in the places I\u0027m managed to trigger it. So I think that\u0027s a win.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6f49f1f88c3765249be09b18e9d1f702e8118a54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4b9c9420_ba0d9371","updated":"2024-05-10 15:30:50.000000000","message":"recheck\n\nrsync error trying to collect logs etc.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5c17d44e8e5a96da1124a4a64ccda8774ce7c9c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"49421a8d_c2b4ca7d","in_reply_to":"f73b734e_29d03ce6","updated":"2024-05-09 20:17:38.000000000","message":"I tried that, but it wasn\u0027t enough. Since `timestamp` is under `utils`, `utils` would still get imported, causing `logs` to get imported, causing the bad form of `exceptions` to get imported.","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"}],"swift/common/utils/logs.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"df91a891c3cb3516a7ba158bd3cac77f8930c321","unresolved":true,"context_lines":[{"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"},{"line_number":42,"context_line":"# bodies fully qualifed module names can have their attributes lazily"},{"line_number":43,"context_line":"# evaluated); as the only other module with-in utils that imports exceptions:"}],"source_content_type":"text/x-python","patch_set":1,"id":"41a99b25_616912f6","line":40,"range":{"start_line":40,"start_character":44,"end_line":40,"end_character":52},"updated":"2024-05-10 07:13:34.000000000","message":"NIT: without","commit_id":"acbcdc9b8cb54f9e1a53939323b8e4a2aa7beb69"}]}
