)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c504ff43fedb3582ae537b6c8e78792734641856","unresolved":true,"context_lines":[{"line_number":7,"context_line":"privsep/nvmet: support both Port.setup signatures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"nvmetcli removed the ``root`` parameter from ``Port.setup()`` in its"},{"line_number":10,"context_line":"commit 3bb9795d (landed on master 2026-07-14):"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  - def setup(cls, root, n, err_func):"},{"line_number":13,"context_line":"  + def setup(cls, n, err_func):"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"f9b1dbd0_0d56a79d","line":10,"updated":"2026-08-14 21:48:50.000000000","message":"Please include a link to the gitweb interface to make it easy to see what\u0027s in the commit (and also because this thing isn\u0027t in any of the usual places):\nhttps://git.infradead.org/?p\u003dusers/hch/nvmetcli.git;a\u003dcommit;h\u003d3bb9795d","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d658c15613f3d9b36513acb08101119150709988","unresolved":false,"context_lines":[{"line_number":7,"context_line":"privsep/nvmet: support both Port.setup signatures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"nvmetcli removed the ``root`` parameter from ``Port.setup()`` in its"},{"line_number":10,"context_line":"commit 3bb9795d (landed on master 2026-07-14):"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  - def setup(cls, root, n, err_func):"},{"line_number":13,"context_line":"  + def setup(cls, n, err_func):"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"afbc78cb_d920bdb6","line":10,"in_reply_to":"f9b1dbd0_0d56a79d","updated":"2026-08-14 22:13:03.000000000","message":"Done","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"15835f9b824710f0d51f958b26008e08b2e9e23e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5c32051c_63625619","updated":"2026-08-10 20:51:29.000000000","message":"The cinder-tempest-plugin gate has been blocked by cinder-tempest-plugin-lvm-nvmet-barbican failing since 14 July:\nhttps://zuul.opendev.org/t/openstack/builds?job_name\u003dcinder-tempest-plugin-lvm-nvmet-barbican\u0026skip\u003d0","commit_id":"ab5c6043df1c1ddfc8c63cdbf002a76e8d004452"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f58e8b1c2422bca7ed11e1ee6f226246c8189aa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"69bdd093_d83e9363","updated":"2026-08-11 12:56:52.000000000","message":"recheck openstack-tox-py311 - fixture timeout in \u0007cinder.tests.unit.backup.drivers.test_backup_ceph.BackupCephTestCase.test_full_restore_without_snapshot_id_nor_src_snap - could be that something isn\u0027t mocked that should be","commit_id":"ab5c6043df1c1ddfc8c63cdbf002a76e8d004452"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c504ff43fedb3582ae537b6c8e78792734641856","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9d6d5f86_6dcd8cd7","updated":"2026-08-14 21:48:50.000000000","message":"A few things noted inline.  I made Elod\u0027s cinder-tempest-plugin DNM gate health test patch depend on this change; it runs the cinder-tempest-plugin-lvm-nvmet-barbican job, which has been failing and installs nvmetcli from source (master, which has the change), so we use https://review.opendev.org/c/openstack/cinder-tempest-plugin/+/1000178 to validate this change.","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"07a10ef6c89ab1de6902baeec401a03a53ee5406","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0d224c8b_e4f0538d","updated":"2026-08-13 22:10:31.000000000","message":"How is nvmetcli installed?  It\u0027s not in global-requirements; looks like we got around that by having a fake_nvmet_lib to take its place.  Looks like it\u0027s not available in pypi; guess it can only be installed via a distro package.  Just seems a bit strange.","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"f0efcb25128357c1f138bba15c43751da49b6b0c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"841d430f_bbe0550e","in_reply_to":"0d224c8b_e4f0538d","updated":"2026-08-13 22:22:58.000000000","message":"devstack installs it direct from github (git+https://git.infradead.org/users/hch/nvmetcli.git)","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d658c15613f3d9b36513acb08101119150709988","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6372ad57_6d9b1079","in_reply_to":"59a856d9_c38ac80c","updated":"2026-08-14 22:13:03.000000000","message":"Acknowledged","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c504ff43fedb3582ae537b6c8e78792734641856","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"59a856d9_c38ac80c","in_reply_to":"841d430f_bbe0550e","updated":"2026-08-14 21:48:50.000000000","message":"Thanks.  Just want to drop a reference here for other reviewers.  Devstack installs the nmve-cli from a distro package, and then installs the \u0027nvmet\u0027 python bindings to use it from source [0].  So we\u0027re using unreleased but merged changes in devstack.  I wonder what operators do in real life.  We can make devstack use only released changes by appending the release tag to the git url passed to pip; I wonder if we should be doing that.\n\n[0] https://opendev.org/openstack/devstack/src/commit/9b0a00865c2537338f72ed5b9b44a0d6bff16eb4/lib/cinder#L552-L589","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d658c15613f3d9b36513acb08101119150709988","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a777c723_d5bd6392","updated":"2026-08-14 22:13:03.000000000","message":"Agreed it\u0027s worth raising separately. Pinning devstack\u0027s nvmetcli to a release tag would have prevented this specific breakage, but the last tag (v0.8) predates the `Port.setup` change, so pinning there today would ship a `nvmet` that lacks fixes real deployments may need — this patch makes Cinder tolerant of both signatures either way. Thanks for wiring 1000178 as a live gate check.","commit_id":"a3b7eeee34e4d64a3ed8e92ac235831ef6d3d9e7"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fbbbafcd2640420dcffafedf9b3a527da97a6767","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"90a2ed27_09eb0f1a","updated":"2026-08-15 16:06:34.000000000","message":"This looks ok to me, and it looks like it does fix the lvm-nvmet-barbican job, as you can see on https://review.opendev.org/c/openstack/cinder/+/1001025","commit_id":"2a29bacf6c78cdb55484ac45a7626d071ea3119b"}],"cinder/privsep/targets/nvmet.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ec64227c97db1c739c99379b51f755a95181d279","unresolved":true,"context_lines":[{"line_number":227,"context_line":"        # library or the extra positional collides with ``err_func``.  We keep"},{"line_number":228,"context_line":"        # ``root`` in our own signature for call-site compatibility but ignore"},{"line_number":229,"context_line":"        # it."},{"line_number":230,"context_line":"        privsep_setup(cls.__name__, n, err_func)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def add_subsystem(self, nqn):"},{"line_number":233,"context_line":"        do_privsep_call(serialize(self), \u0027add_subsystem\u0027, nqn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5497b24_255f62ff","line":230,"updated":"2026-08-11 13:14:12.000000000","message":"It looks like we don\u0027t manage nvmet via requirements -- I think that means that this patch needs to handle both versions?\n\nOtherwise systems running a fairly recent nvmet package will break with this new code.","commit_id":"ab5c6043df1c1ddfc8c63cdbf002a76e8d004452"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"eb26b17b8605b3390b2f2c021128e846dbfa2abf","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        # library or the extra positional collides with ``err_func``.  We keep"},{"line_number":228,"context_line":"        # ``root`` in our own signature for call-site compatibility but ignore"},{"line_number":229,"context_line":"        # it."},{"line_number":230,"context_line":"        privsep_setup(cls.__name__, n, err_func)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def add_subsystem(self, nqn):"},{"line_number":233,"context_line":"        do_privsep_call(serialize(self), \u0027add_subsystem\u0027, nqn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b5e9078f_5339dc68","line":230,"in_reply_to":"e5497b24_255f62ff","updated":"2026-08-11 15:28:48.000000000","message":"Acknowledged","commit_id":"ab5c6043df1c1ddfc8c63cdbf002a76e8d004452"}],"cinder/tests/unit/privsep/targets/fake_nvmet_lib.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c504ff43fedb3582ae537b6c8e78792734641856","unresolved":true,"context_lines":[{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":"FAKE the nvmet library if it\u0027s not installed."},{"line_number":16,"context_line":"This must be imported before cinder/volume/targets/nvmet.py and"},{"line_number":17,"context_line":"cinder/privsep/targets/nvmet.py"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":2,"id":"bcbcd4d7_efdac716","line":17,"updated":"2026-08-14 21:48:50.000000000","message":"I think it would be useful to add info here about where to find the library that\u0027s being mocked and mention that it\u0027s not available in pypi but must be installed from source.","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d658c15613f3d9b36513acb08101119150709988","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":"FAKE the nvmet library if it\u0027s not installed."},{"line_number":16,"context_line":"This must be imported before cinder/volume/targets/nvmet.py and"},{"line_number":17,"context_line":"cinder/privsep/targets/nvmet.py"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":2,"id":"94502c2c_34ae6712","line":17,"in_reply_to":"bcbcd4d7_efdac716","updated":"2026-08-14 22:13:03.000000000","message":"Done","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"07a10ef6c89ab1de6902baeec401a03a53ee5406","unresolved":true,"context_lines":[{"line_number":34,"context_line":"                           Referral\u003dtype(\u0027Referral\u0027, (mock.Mock, ), {}),"},{"line_number":35,"context_line":"                           nvme\u003dmock.Mock(CFSNotFound\u003dexception.NotFound))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"sys.modules[\u0027nvmet\u0027] \u003d mock_nvmet_lib"},{"line_number":38,"context_line":"reset_mock \u003d mock_nvmet_lib.reset_mock"}],"source_content_type":"text/x-python","patch_set":2,"id":"02149cc3_0977c2cf","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":37},"updated":"2026-08-13 22:10:31.000000000","message":"So this is why we are able to load and pass unit tests without actually having the library available.","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"f0efcb25128357c1f138bba15c43751da49b6b0c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                           Referral\u003dtype(\u0027Referral\u0027, (mock.Mock, ), {}),"},{"line_number":35,"context_line":"                           nvme\u003dmock.Mock(CFSNotFound\u003dexception.NotFound))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"sys.modules[\u0027nvmet\u0027] \u003d mock_nvmet_lib"},{"line_number":38,"context_line":"reset_mock \u003d mock_nvmet_lib.reset_mock"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab02f4dd_22505573","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":37},"in_reply_to":"02149cc3_0977c2cf","updated":"2026-08-13 22:22:58.000000000","message":"Correct — `fake_nvmet_lib` unconditionally does `sys.modules[\u0027nvmet\u0027] \u003d mock_nvmet_lib` at import time (no \"is it installed\" check), so it shadows the real library for every unit-test run, which is why the tests must patch `inspect.signature` to simulate both the old and new nvmetcli signatures rather than reading a real one.","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"}],"releasenotes/notes/fix-nvmet-port-setup-root-9d3c1f7a2e4b6058.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c504ff43fedb3582ae537b6c8e78792734641856","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    LVM driver with the ``nvmet`` target helper: fixed volume export failing"},{"line_number":5,"context_line":"    with ``TypeError: Port.setup() got multiple values for argument"},{"line_number":6,"context_line":"    \u0027err_func\u0027`` against recent ``nvmetcli`` releases.  The ``nvmet`` library"},{"line_number":7,"context_line":"    removed the ``root`` argument from ``Port.setup()``; since ``nvmet`` is not"},{"line_number":8,"context_line":"    version-pinned, Cinder now detects the installed library\u0027s signature and"},{"line_number":9,"context_line":"    only forwards ``root`` when it is still accepted, working with both older"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"f765b2af_02049a9c","line":6,"range":{"start_line":6,"start_character":45,"end_line":6,"end_character":53},"updated":"2026-08-14 21:48:50.000000000","message":"s/releases/changes/ , because from what I can see in the repo [0], the most recent release is v0.8 which is 2 years old and doesn\u0027t contain this change.\n\n[0] https://git.infradead.org/?p\u003dusers/hch/nvmetcli.git;a\u003dsummary","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d658c15613f3d9b36513acb08101119150709988","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    LVM driver with the ``nvmet`` target helper: fixed volume export failing"},{"line_number":5,"context_line":"    with ``TypeError: Port.setup() got multiple values for argument"},{"line_number":6,"context_line":"    \u0027err_func\u0027`` against recent ``nvmetcli`` releases.  The ``nvmet`` library"},{"line_number":7,"context_line":"    removed the ``root`` argument from ``Port.setup()``; since ``nvmet`` is not"},{"line_number":8,"context_line":"    version-pinned, Cinder now detects the installed library\u0027s signature and"},{"line_number":9,"context_line":"    only forwards ``root`` when it is still accepted, working with both older"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"c9e13a10_bc56cecc","line":6,"range":{"start_line":6,"start_character":45,"end_line":6,"end_character":53},"in_reply_to":"f765b2af_02049a9c","updated":"2026-08-14 22:13:03.000000000","message":"Done","commit_id":"18dc293051cd59a217998f3d4fb264c9bab81287"}]}
