)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"485d296a0a4472b4ad22ee090ca9f71cc0544ac0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"865cfe48_bfd3b892","updated":"2025-08-15 12:26:47.000000000","message":"recheck","commit_id":"74274ec8bccc47c80f7302e3ce14e430826fe1ac"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ec84e9d339c7b534e8fe2c4469531241fa4f312b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"01c7c708_ce5c1ab5","updated":"2025-08-14 15:54:09.000000000","message":"this seems fine to me!\n\nAlthough I was only able to test with isal installed via system packages:\n\n```\nvagrant@saio:~$ python3 -c \u0027from importlib.metadata import files; print([f.name.startswith(\"lib\") for f in files(\"pyeclib\")])\u0027\n[False, False, False, False, False, False, False, False, False, False, False, False]\n```\n\n... which isn\u0027t really related to this change?\n\nI don\u0027t actually know for sure how this \"magically somehow get isal from pyeclib wheels\" is actually used?  Presumably *someone* installs pyeclib from pypi?\n\n```\n\nvagrant@saio:/tmp$ python3 -m venv pyeclib-test\nvagrant@saio:/tmp$ cd pyeclib-test/\nvagrant@saio:/tmp/pyeclib-test$ . bin/activate\n(pyeclib-test) vagrant@saio:/tmp/pyeclib-test$ pip freeze | grep pyeclib\n(pyeclib-test) vagrant@saio:/tmp/pyeclib-test$ pip install pyeclib\nCollecting pyeclib\n  Downloading pyeclib-1.6.4-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (6.0 kB)\nDownloading pyeclib-1.6.4-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (531 kB)\n   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 531.7/531.7 kB 3.0 MB/s eta 0:00:00\nInstalling collected packages: pyeclib\nSuccessfully installed pyeclib-1.6.4\n(pyeclib-test) vagrant@saio:/tmp/pyeclib-test$ python3 -c \u0027from importlib.metadata import files; print([f.name for f in files(\"pyeclib\") if f.name.startswith(\"lib\")])\u0027\n[\u0027libXorcode-pyeclib.so.1\u0027, \u0027liberasurecode-pyeclib.so.1\u0027, \u0027liberasurecode_rs_vand-pyeclib.so.1\u0027, \u0027libisal-pyeclib.so.2\u0027, \u0027libnullcode-pyeclib.so.1\u0027]\n```\n\nUbuntu (who reported the bug) won\u0027t even install venv with CPython (you have to `sudo apt-get install python3-venv`) - so ... I don\u0027t think I\u0027d be shocked if their pyeclib dist doesn\u0027t include this isal.so - or that it would conflict with their isal package.\n\nHopefully all this effort is helping someone.","commit_id":"74274ec8bccc47c80f7302e3ce14e430826fe1ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ef7059640f6441ab4c9e32193fec1a35876b263f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1fa0da70_3900b977","in_reply_to":"01c7c708_ce5c1ab5","updated":"2025-08-21 00:36:02.000000000","message":"It helps me! I don\u0027t want to have to go installing distro-provided ISA-L if I\u0027m installing pyeclib from PyPI anyway, and if I\u0027ve got ISA-L available for EC, I don\u0027t see why I shouldn\u0027t have it for checksums, too.\n\nPlus as a result, we didn\u0027t need to add libisal2 to bindep to have [our gate jobs test CRC64NVME](https://zuul.opendev.org/t/openstack/build/9b2b41482bc3417a875caf06523c1925/log/job-output.txt#3730-3731).","commit_id":"74274ec8bccc47c80f7302e3ce14e430826fe1ac"}],"swift/common/utils/checksum.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ec84e9d339c7b534e8fe2c4469531241fa4f312b","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        else:"},{"line_number":50,"context_line":"            pyeclib_files \u003d pkg_files(\u0027pyeclib\u0027)"},{"line_number":51,"context_line":"            if not pyeclib_files:"},{"line_number":52,"context_line":"                # see https://docs.python.org/3/library/importlib.metadata.html"},{"line_number":53,"context_line":"                raise RuntimeError(\u0027pyeclib installed but missing files\u0027)"},{"line_number":54,"context_line":"            isal_libs \u003d [f for f in pyeclib_files"},{"line_number":55,"context_line":"                         if f.name.startswith(\"libisal\")]"}],"source_content_type":"text/x-python","patch_set":1,"id":"b85d773e_2c7fd2ad","line":52,"updated":"2025-08-14 15:54:09.000000000","message":"\u003e Raises PackageNotFoundError if the named distribution package is not installed in the current Python environment.\n\u003e\n\u003e Returns None if the distribution is found but the installation database records reporting the files associated with the distribuion package are missing.\n\n\nhttps://docs.python.org/3/library/importlib.metadata.html#importlib.metadata.files","commit_id":"74274ec8bccc47c80f7302e3ce14e430826fe1ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ef7059640f6441ab4c9e32193fec1a35876b263f","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        else:"},{"line_number":50,"context_line":"            pyeclib_files \u003d pkg_files(\u0027pyeclib\u0027)"},{"line_number":51,"context_line":"            if not pyeclib_files:"},{"line_number":52,"context_line":"                # see https://docs.python.org/3/library/importlib.metadata.html"},{"line_number":53,"context_line":"                raise RuntimeError(\u0027pyeclib installed but missing files\u0027)"},{"line_number":54,"context_line":"            isal_libs \u003d [f for f in pyeclib_files"},{"line_number":55,"context_line":"                         if f.name.startswith(\"libisal\")]"}],"source_content_type":"text/x-python","patch_set":1,"id":"41c2810a_3040f689","line":52,"in_reply_to":"b85d773e_2c7fd2ad","updated":"2025-08-21 00:36:02.000000000","message":"Looks like the way to pop that is to remove the `RECORD` in the package\u0027s dist-info; locally, something like\n```\nrm ~/py3/lib/python3.12/site-packages/pyeclib-1.6.4.dist-info/RECORD \n```\ndid it. Following that, sure enough, I can see the RuntimeError:\n```\n$ python -c \u0027from swift.common.utils.checksum import *\u0027\nTraceback (most recent call last):\n  File \"\u003cstring\u003e\", line 1, in \u003cmodule\u003e\n  File \"/home/tburke/code/swift/swift/common/utils/checksum.py\", line 62, in \u003cmodule\u003e\n    isal \u003d find_isal()\n           ^^^^^^^^^^^\n  File \"/home/tburke/code/swift/swift/common/utils/checksum.py\", line 53, in find_isal\n    raise RuntimeError(\u0027pyeclib installed but missing files\u0027)\nRuntimeError: pyeclib installed but missing files\n```\nBut I think we *want* to just proceed as though ISA-L is not available; if it turns out we wanted it, we\u0027d warn about it later. Switching the Ubuntu packager\u0027s `TypeError` to a `RuntimeError` isn\u0027t obviously an improvement. (Though I guess it\u0027s maybe flagging for them that their pyeclib build probably isn\u0027t right?)\n\nProposed https://review.opendev.org/c/openstack/swift/+/958131 as a more-thorough fix.","commit_id":"74274ec8bccc47c80f7302e3ce14e430826fe1ac"}]}
