)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Miles Lee \u003cmiles.lee@qsan.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-10-13 05:23:56 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add QSAN iSCSI and NVMe-TCP Cinder volume drivers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"QSAN Technology is an enterprise storage vendor. This change adds"},{"line_number":10,"context_line":"Cinder volume drivers for QSAN arrays running XEVO2, XEVO3, or QSM4."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bc5aa2d3_44ad4230","line":7,"updated":"2026-10-15 14:40:15.000000000","message":"Worth stating in the message which array firmware versions the drivers were tested against for each transport, and linking the CI wiki page once it exists.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"298b81b983ac5206d73d3c9fc1239640d7dde518","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"65ad8f8f_71e1d41f","updated":"2026-09-18 10:59:35.000000000","message":"Hi Lee, thanks for your contribution.\n\nCI still running but could you expand your commit message to explain:\n\nWhat is QSAN? (Brief background)\nKey features enabled\nConfiguration requirements\nLinks to QSAN documentation","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":39468,"name":"Miles Lee","display_name":"Miles Lee","email":"miles.lee@qsan.com","username":"mileslee"},"change_message_id":"2cd8adf1b63b1f3e3f4926cc08493b170cf0ec68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"109b9e4d_b8862a45","updated":"2026-10-13 05:31:28.000000000","message":"Patch set 4 adds driver fixes, expanded unit tests, configuration\ndocumentation, and support matrix entries.\n\nLocal validation:\n- 480 QSAN unit tests passed\n- tox -e pep8 passed\n- tox -e docs passed\n\nHardware Tempest validation is ongoing.\nThird-party CI compliance is still in progress.\n\nWe would appreciate review and guidance on the remaining requirements\nfor upstream inclusion.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"275540eb_cfa15d99","updated":"2026-10-15 14:40:15.000000000","message":"Thanks for the thorough submission; the iSCSI and NVMe plumbing, the REST client and the unit tests are in good shape, and the commit message answers Jean Pierre\u0027s questions well.\n\nI\u0027m -1 for now on architectural grounds rather than details. A Cinder volume driver must not drive Nova attachments, read or write the Cinder database, bypass SSH host-key verification, or depend on eventlet, and this change does all four. The backup driver needs to be its own change, and the shared NVMe host group needs an answer on per-host isolation before it can be considered multi-tenant safe. Details inline; the smaller items can follow once those are settled.\n\nProcess: `CI_WIKI_NAME \u003d \u0027QSAN_Storage_CI\u0027` has no ThirdPartySystems wiki page yet, nothing is reporting on this change, and the blueprint is undefined. Cinder cannot merge a new driver without a reporting CI, and the NVMe results in particular are needed to judge the access-model question. Please plan around the 2027.1 new-driver deadline.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/tests/unit/volume/drivers/qsan/__init__.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"0b29bee6_12a95739","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H104: File contains nothing but comments","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"# a copy of the License at"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b80674a9_03a94f98","line":8,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: W391 blank line at end of file","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfca085f_4b26cb9c","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H104: File contains nothing but comments","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":5,"context_line":"# a copy of the License at"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6c4bcadd_5eb24427","line":8,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: W391 blank line at end of file","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/conftest.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"\"\"\"Load this checkout under Cinder\u0027s canonical driver and test packages.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"28087a1b_74e54fe5","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@pytest.fixture(autouse\u003dTrue)"},{"line_number":20,"context_line":"def isolated_configuration():"},{"line_number":21,"context_line":"    \"\"\"Do not leak backup or lock overrides between protocol test cases.\"\"\""},{"line_number":22,"context_line":"    cfg.CONF.set_override(\u0027lock_path\u0027, \u0027/tmp\u0027, group\u003d\u0027oslo_concurrency\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d8d863ab_dac12298","line":19,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (3)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"}],"cinder/tests/unit/volume/drivers/qsan/fakes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"26a52ace_55739017","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"7904dfa1_519a6e63","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_backup.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"1843b20b_9e8c3f41","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_config import cfg"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from cinder import objects"},{"line_number":18,"context_line":"from cinder.volume.drivers.qsan import qsan_backup"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":1,"id":"95186774_9fde0a95","line":17,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F401 \u0027cinder.objects\u0027 imported but unused","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"ORIGINAL_BACKUP_REST_HELPERS \u003d qsan_backup.BackupRestHelpers"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f569696_9978dde5","line":22,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I202 Additional newline in a group of imports. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027from cinder.volume.drivers.qsan import qsan_iscsi\u0027 is identified as Application.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        attach_info \u003d {\u0027device\u0027: {\u0027path\u0027: \u0027/dev/fakebackup\u0027}}"},{"line_number":142,"context_line":"        self.driver._attach_backup_device.return_value \u003d attach_info"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":145,"context_line":"                mock.patch.object("},{"line_number":146,"context_line":"                    qsan_backup.volume_utils,"},{"line_number":147,"context_line":"                    \u0027brick_get_connector_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"33b853fc_f8f8a347","line":144,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":167,"context_line":"        self.driver._backup_create_volume.side_effect \u003d Exception(\u0027boom\u0027)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls:"},{"line_number":170,"context_line":"            volume_cls.get_by_id.return_value \u003d volume"},{"line_number":171,"context_line":"            self.assertRaises(exception.BackupDriverException,"},{"line_number":172,"context_line":"                              self.driver.backup, backup, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":1,"id":"9acdfc01_66712197","line":169,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (89 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    def test_backup_attach_failure_deletes_backend_backup_volume(self):"},{"line_number":178,"context_line":"        backup \u003d FakeBackup(container\u003dNone)"},{"line_number":179,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":180,"context_line":"        self.driver._attach_backup_device.side_effect \u003d Exception(\u0027attach failed\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":183,"context_line":"                mock.patch.object("}],"source_content_type":"text/x-python","patch_set":1,"id":"b28604b0_f87b7a67","line":180,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":180,"context_line":"        self.driver._attach_backup_device.side_effect \u003d Exception(\u0027attach failed\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":183,"context_line":"                mock.patch.object("},{"line_number":184,"context_line":"                    qsan_backup.volume_utils,"},{"line_number":185,"context_line":"                    \u0027brick_get_connector_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"25f7e513_5a9a3087","line":182,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.driver._helpers.set_volume_property.assert_called_once_with("},{"line_number":270,"context_line":"            \u0027cinder-abcdef123456\u0027, {\u0027new_name\u0027: \u0027cinder-123456789abc\u0027})"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def test_update_migrated_volume_same_backend_existing_name_falls_back(self):"},{"line_number":273,"context_line":"        volume \u003d self._make_volume("},{"line_number":274,"context_line":"            \u0027src-vol\u0027, \u0027storage@u710_pool01#Pool_01\u0027,"},{"line_number":275,"context_line":"            name\u003d\u0027volume-123456789abc\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b6f8645_655b2888","line":272,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"39768ad0_9c19ba7a","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_config import cfg"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from cinder import objects"},{"line_number":18,"context_line":"from cinder.volume.drivers.qsan import qsan_backup"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":2,"id":"26ce84f2_06e2a320","line":17,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F401 \u0027cinder.objects\u0027 imported but unused","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"ORIGINAL_BACKUP_REST_HELPERS \u003d qsan_backup.BackupRestHelpers"}],"source_content_type":"text/x-python","patch_set":2,"id":"90cfcdc4_c2df80ea","line":22,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I202 Additional newline in a group of imports. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027from cinder.volume.drivers.qsan import qsan_iscsi\u0027 is identified as Application.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        attach_info \u003d {\u0027device\u0027: {\u0027path\u0027: \u0027/dev/fakebackup\u0027}}"},{"line_number":142,"context_line":"        self.driver._attach_backup_device.return_value \u003d attach_info"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":145,"context_line":"                mock.patch.object("},{"line_number":146,"context_line":"                    qsan_backup.volume_utils,"},{"line_number":147,"context_line":"                    \u0027brick_get_connector_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3ffb455_b92551d8","line":144,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":167,"context_line":"        self.driver._backup_create_volume.side_effect \u003d Exception(\u0027boom\u0027)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls:"},{"line_number":170,"context_line":"            volume_cls.get_by_id.return_value \u003d volume"},{"line_number":171,"context_line":"            self.assertRaises(exception.BackupDriverException,"},{"line_number":172,"context_line":"                              self.driver.backup, backup, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":2,"id":"d102e273_a22f3b39","line":169,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (89 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    def test_backup_attach_failure_deletes_backend_backup_volume(self):"},{"line_number":178,"context_line":"        backup \u003d FakeBackup(container\u003dNone)"},{"line_number":179,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":180,"context_line":"        self.driver._attach_backup_device.side_effect \u003d Exception(\u0027attach failed\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":183,"context_line":"                mock.patch.object("}],"source_content_type":"text/x-python","patch_set":2,"id":"7da1ecb6_cef7b7ef","line":180,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        volume \u003d self._fake_volume(vol_id\u003dbackup.volume_id, size\u003dbackup.size)"},{"line_number":180,"context_line":"        self.driver._attach_backup_device.side_effect \u003d Exception(\u0027attach failed\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with mock.patch.object(qsan_backup.objects, \u0027Volume\u0027, create\u003dTrue) as volume_cls, \\"},{"line_number":183,"context_line":"                mock.patch.object("},{"line_number":184,"context_line":"                    qsan_backup.volume_utils,"},{"line_number":185,"context_line":"                    \u0027brick_get_connector_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"36fe33a6_10b2fcf9","line":182,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.driver._helpers.set_volume_property.assert_called_once_with("},{"line_number":270,"context_line":"            \u0027cinder-abcdef123456\u0027, {\u0027new_name\u0027: \u0027cinder-123456789abc\u0027})"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def test_update_migrated_volume_same_backend_existing_name_falls_back(self):"},{"line_number":273,"context_line":"        volume \u003d self._make_volume("},{"line_number":274,"context_line":"            \u0027src-vol\u0027, \u0027storage@u710_pool01#Pool_01\u0027,"},{"line_number":275,"context_line":"            name\u003d\u0027volume-123456789abc\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aec8d98_64329b8e","line":272,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_common.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1c9f8fd_0c53b09c","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"import json"},{"line_number":10,"context_line":"import math"},{"line_number":11,"context_line":"from unittest import mock"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc1463d0_c99ad5c0","line":10,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F401 \u0027math\u0027 imported but unused","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_utils import units"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":1,"id":"012995b3_7cebfa7d","line":17,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_utils import units"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":1,"id":"a60b7870_0d5d5b01","line":17,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b902f45_e641786d","line":18,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e7aff6d_5006af3e","line":18,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"7bee1f60_13944fa6","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"import json"},{"line_number":10,"context_line":"import math"},{"line_number":11,"context_line":"from unittest import mock"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae30da0f_4ec39654","line":10,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F401 \u0027math\u0027 imported but unused","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_utils import units"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":2,"id":"630faee1_0b45fc62","line":17,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from oslo_utils import units"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":2,"id":"126cad89_7e032283","line":17,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae150526_77362c61","line":18,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"import unittest as test"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":19,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":20,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":21,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ef3a7a5_a7d9bb41","line":18,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_iscsi.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a30a323_5cf1dd1c","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from oslo_config import cfg"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":1,"id":"cceddbba_768ce1c8","line":14,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from oslo_config import cfg"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfc0c675_13f1ada8","line":14,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"99f147a1_6f339057","line":15,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4c6d52b2_7a45229d","line":15,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"b741feff_b9df4d47","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from oslo_config import cfg"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe21612c_b8d9a618","line":14,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from oslo_config import cfg"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"}],"source_content_type":"text/x-python","patch_set":2,"id":"089e6f3d_5cab76dc","line":14,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"2b0e1719_528f38c9","line":15,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"import unittest as test"},{"line_number":15,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":16,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":17,"context_line":"from cinder.volume.drivers.qsan import qsan_iscsi"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"a428c8a5_6a1632b6","line":15,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_nvme.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from unittest import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"e41bb801_7fa5d879","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"@pytest.mark.parametrize(\u0027options\u0027, ["},{"line_number":41,"context_line":"    {\u0027qsan_os\u0027: \u0027XEVO2\u0027}, {\u0027qsan_nvme_host_group\u0027: None},"},{"line_number":42,"context_line":"    {\u0027qsan_multiattach\u0027: True}, {\u0027replication_device\u0027: [{\u0027backend_id\u0027: \u0027slave\u0027}]},"},{"line_number":43,"context_line":"])"},{"line_number":44,"context_line":"def test_nvme_rejects_unsupported_configuration(options):"},{"line_number":45,"context_line":"    config \u003d dict(qsan_nvme_host_group\u003dGROUP)"}],"source_content_type":"text/x-python","patch_set":1,"id":"12304cbe_814b7aa4","line":42,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        qsan_nvme.QsanNVMeDriver(configuration\u003dfakes.make_config(**config))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"@pytest.mark.parametrize(\u0027connector\u0027, [None, {}, {\u0027nqn\u0027: \u0027\u0027}, {\u0027initiator\u0027: \u0027iqn.x\u0027}])"},{"line_number":52,"context_line":"def test_connector_requires_nqn(driver, connector):"},{"line_number":53,"context_line":"    with pytest.raises(exception.InvalidConnectorException):"},{"line_number":54,"context_line":"        driver.initialize_connection(VOLUME, connector)"}],"source_content_type":"text/x-python","patch_set":1,"id":"988513e4_b6ca8dc8","line":51,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    assert stats[\u0027storage_protocol\u0027] \u003d\u003d \u0027NVMe-TCP\u0027"},{"line_number":194,"context_line":"    pool \u003d stats[\u0027pools\u0027][0]"},{"line_number":195,"context_line":"    assert pool[\u0027total_capacity_gb\u0027] \u003d\u003d 10"},{"line_number":196,"context_line":"    for feature in (\u0027multiattach\u0027, \u0027replication_enabled\u0027, \u0027online_extend_support\u0027):"},{"line_number":197,"context_line":"        assert pool[feature] is False"}],"source_content_type":"text/x-python","patch_set":1,"id":"adb1eb3b_9adc6daa","line":196,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        )"},{"line_number":62,"context_line":"        self.assertEqual(\u0027NVMe-TCP\u0027, instance.protocol)"},{"line_number":63,"context_line":"        self.assertEqual(\u0027NVMeTCP\u0027, instance._get_protocol_for_api())"},{"line_number":64,"context_line":"        self.assertTrue("},{"line_number":65,"context_line":"            isinstance(instance._helpers.client, qsan_rest.QsanRest)"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        self.assertIs(instance._slave.is_enable, False)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d1763d64_1b68f14c","line":64,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H211: Use assert{Is,IsNot}instance","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        driver \u003d self.driver"},{"line_number":157,"context_line":"        driver._helpers.create_volume.return_value \u003d {\u0027arr\u0027: {}}"},{"line_number":158,"context_line":"        volume \u003d fakes.fake_volume()"},{"line_number":159,"context_line":"        self.assertIs(driver.create_volume(volume), None)"},{"line_number":160,"context_line":"        driver._helpers.create_volume.assert_called_once_with("},{"line_number":161,"context_line":"            driver._convert_name(volume.name), \u00273\u0027, \u0027GB\u0027, \u0027Pool_01\u0027, \u0027NVMeTCP\u0027"},{"line_number":162,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff2561a3_73d462b6","line":159,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def test_unmanage_preserves_backend_resources(self):"},{"line_number":373,"context_line":"        driver \u003d self.driver"},{"line_number":374,"context_line":"        self.assertIs(driver.unmanage(VOLUME), None)"},{"line_number":375,"context_line":"        self.assertEqual([], driver._helpers.mock_calls)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def test_manage_rename_failure_propagates(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"069c72d6_b8c90a89","line":374,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_nvme_backup.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"import contextlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"c738ce44_df73b731","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"from cinder import exception"},{"line_number":11,"context_line":"from cinder.volume.drivers.qsan import qsan_backup"},{"line_number":12,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"GROUP \u003d \u0027cinder-backup-nvme\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"eba4fd1d_8688fce1","line":13,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.volume.drivers.qsan.qsan_rest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    for name, value in {"},{"line_number":28,"context_line":"        \u0027backup_protocol\u0027: \u0027nvme\u0027, \u0027backup_qsan_os\u0027: \u0027QSM4\u0027,"},{"line_number":29,"context_line":"        \u0027backup_nvme_host_group\u0027: GROUP, \u0027backup_pool\u0027: \u0027Pool_01\u0027,"},{"line_number":30,"context_line":"        \u0027backup_management_ip\u0027: \u0027192.168.1.100\u0027, \u0027backup_login_account\u0027: \u0027admin\u0027,"},{"line_number":31,"context_line":"        \u0027backup_login_password\u0027: \u0027test-password\u0027,"},{"line_number":32,"context_line":"        \u0027backup_import_export_support\u0027: False,"},{"line_number":33,"context_line":"    }.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"f45898c0_4f36ed93","line":30,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def test_backup_attach_always_validates_mapping_not_cached_lun(driver):"},{"line_number":84,"context_line":"    driver._backup_lun_id \u003d \u0027old-iscsi-lun\u0027"},{"line_number":85,"context_line":"    driver._helpers._client.initialize_nvme_connection.return_value \u003d CONNECTION"},{"line_number":86,"context_line":"    assert driver._initialize_connection(BACKUP, CONNECTOR) \u003d\u003d CONNECTION"},{"line_number":87,"context_line":"    driver._helpers._client.initialize_nvme_connection.assert_called_once_with("},{"line_number":88,"context_line":"        \u0027cinder-123456789abc\u0027, CONNECTOR[\u0027nqn\u0027], GROUP)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e06cc06_1869340b","line":85,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"@pytest.mark.parametrize(\u0027operation\u0027, [\u0027backup\u0027, \u0027restore\u0027])"},{"line_number":126,"context_line":"@pytest.mark.parametrize(\u0027transfer_error\u0027, [False, True])"},{"line_number":127,"context_line":"def test_backup_restore_transfer_and_cleanup(driver, operation, transfer_error):"},{"line_number":128,"context_line":"    class Backup(dict):"},{"line_number":129,"context_line":"        __getattr__ \u003d dict.__getitem__"},{"line_number":130,"context_line":"        def save(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f5f7d5e7_44edeb57","line":127,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"def test_backup_restore_transfer_and_cleanup(driver, operation, transfer_error):"},{"line_number":128,"context_line":"    class Backup(dict):"},{"line_number":129,"context_line":"        __getattr__ \u003d dict.__getitem__"},{"line_number":130,"context_line":"        def save(self):"},{"line_number":131,"context_line":"            pass"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    backup \u003d Backup(BACKUP, container\u003d\u0027Pool_01\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"31338451_5232b02f","line":130,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E306 expected 1 blank line before a nested definition, found 0","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                              return_value\u003dcontextlib.nullcontext()), \\"},{"line_number":152,"context_line":"            mock.patch.object(qsan_backup, \u0027open\u0027, mock.mock_open(),"},{"line_number":153,"context_line":"                              create\u003dTrue), \\"},{"line_number":154,"context_line":"            mock.patch.object(qsan_backup.tpool, \u0027Proxy\u0027, side_effect\u003dlambda f: f), \\"},{"line_number":155,"context_line":"            mock.patch.object(driver, \u0027_transfer_block_data\u0027,"},{"line_number":156,"context_line":"                              side_effect\u003dside_effect) as transfer:"},{"line_number":157,"context_line":"        volumes.get_by_id.return_value \u003d source"}],"source_content_type":"text/x-python","patch_set":1,"id":"ec135045_84c9897a","line":154,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            mock.patch.object(driver, \u0027_transfer_block_data\u0027,"},{"line_number":156,"context_line":"                              side_effect\u003dside_effect) as transfer:"},{"line_number":157,"context_line":"        volumes.get_by_id.return_value \u003d source"},{"line_number":158,"context_line":"        def run():"},{"line_number":159,"context_line":"            if operation \u003d\u003d \u0027backup\u0027:"},{"line_number":160,"context_line":"                driver.backup(backup, volume_file)"},{"line_number":161,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5499976d_520b9346","line":158,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E306 expected 1 blank line before a nested definition, found 0","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"def test_failed_brick_connect_cleans_nvme_mapping(driver):"},{"line_number":177,"context_line":"    driver._helpers._client.initialize_nvme_connection.return_value \u003d CONNECTION"},{"line_number":178,"context_line":"    with mock.patch.object(driver, \u0027_connect_device\u0027,"},{"line_number":179,"context_line":"                           side_effect\u003dRuntimeError(\u0027connect failed\u0027)):"},{"line_number":180,"context_line":"        with pytest.raises(RuntimeError, match\u003d\u0027connect failed\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"89e2c577_ac7f7e3b","line":177,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \u0027cinder.backup.driver.BackupDriver.__init__\u0027, return_value\u003dNone"},{"line_number":74,"context_line":"        ):"},{"line_number":75,"context_line":"            driver \u003d qsan_backup.QsanBackupDriver(None)"},{"line_number":76,"context_line":"        self.assertTrue("},{"line_number":77,"context_line":"            isinstance(driver._helpers, qsan_backup.BackupRestHelpers)"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":2,"id":"56ad0d57_aacca777","line":76,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H211: Use assert{Is,IsNot}instance","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.assertTrue("},{"line_number":77,"context_line":"            isinstance(driver._helpers, qsan_backup.BackupRestHelpers)"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.assertTrue("},{"line_number":80,"context_line":"            isinstance(driver._helpers._client, qsan_rest.QsanRest)"},{"line_number":81,"context_line":"        )"},{"line_number":82,"context_line":"        self.assertEqual(\u0027nvme\u0027, driver._protocol)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a199b999_acec909e","line":79,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H211: Use assert{Is,IsNot}instance","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                \u0027cinder-123456789abc\u0027, \u00273\u0027, \u0027GB\u0027, \u0027Pool_01\u0027,"},{"line_number":114,"context_line":"                protocol\u003d\u0027NVMeTCP\u0027"},{"line_number":115,"context_line":"            )"},{"line_number":116,"context_line":"        self.assertIs(driver._backup_lun_id, None)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_backup_attach_always_validates_mapping_not_cached_lun(self):"},{"line_number":119,"context_line":"        driver \u003d self.driver"}],"source_content_type":"text/x-python","patch_set":2,"id":"dcad853d_dc14c5eb","line":116,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_nvme_rest.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from unittest import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6948891_4c23f51b","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def attach(client):"},{"line_number":57,"context_line":"    return client.initialize_nvme_connection(VOLUME[\u0027name\u0027], NQN, GROUP[\u0027name\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def test_attach_actual_http_flow_and_namespace_identity(client, session):"}],"source_content_type":"text/x-python","patch_set":1,"id":"97b7078b_b0064a13","line":57,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \u0027portals\u0027: [(\u002710.0.0.1\u0027, 4420, \u0027tcp\u0027), (\u002710.0.0.2\u0027, 4420, \u0027tcp\u0027)]}}"},{"line_number":66,"context_line":"    calls \u003d session.request.call_args_list"},{"line_number":67,"context_line":"    assert calls[2].args \u003d\u003d (\u0027GET\u0027, fakes.FAKE_API_URL +"},{"line_number":68,"context_line":"                            \u0027/rest/v2/network/ethernet_withoutTxRx\u0027)"},{"line_number":69,"context_line":"    assert calls[3].args \u003d\u003d (\u0027POST\u0027, fakes.FAKE_API_URL +"},{"line_number":70,"context_line":"                            \u0027/inner/cinder/hostgroups/mappingLun\u0027)"},{"line_number":71,"context_line":"    assert calls[3].kwargs[\u0027json\u0027] \u003d\u003d {\u0027id\u0027: 42, \u0027volumeIds\u0027: [789]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd441b89_adc5553d","line":68,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    assert calls[2].args \u003d\u003d (\u0027GET\u0027, fakes.FAKE_API_URL +"},{"line_number":68,"context_line":"                            \u0027/rest/v2/network/ethernet_withoutTxRx\u0027)"},{"line_number":69,"context_line":"    assert calls[3].args \u003d\u003d (\u0027POST\u0027, fakes.FAKE_API_URL +"},{"line_number":70,"context_line":"                            \u0027/inner/cinder/hostgroups/mappingLun\u0027)"},{"line_number":71,"context_line":"    assert calls[3].kwargs[\u0027json\u0027] \u003d\u003d {\u0027id\u0027: 42, \u0027volumeIds\u0027: [789]}"},{"line_number":72,"context_line":"    assert \u0027vol_uuid\u0027 not in info[\u0027data\u0027]"},{"line_number":73,"context_line":"    assert session.headers[\u0027Authorization\u0027] \u003d\u003d \u0027token\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4715117_2ce76e73","line":70,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"def test_attach_already_mapped_does_not_post(client, session):"},{"line_number":77,"context_line":"    responses(session, [VOLUME], [MAPPED], NETWORK)"},{"line_number":78,"context_line":"    assert attach(client)[\u0027data\u0027][\u0027ns_id\u0027] \u003d\u003d \u00273\u0027"},{"line_number":79,"context_line":"    assert all(call.args[0] \u003d\u003d \u0027GET\u0027 for call in session.request.call_args_list)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"@pytest.mark.parametrize(\u0027groups\u0027, [[], [GROUP, GROUP],"}],"source_content_type":"text/x-python","patch_set":1,"id":"20db24c4_6261b807","line":79,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"@pytest.mark.parametrize(\u0027groups\u0027, [[], [GROUP, GROUP],"},{"line_number":83,"context_line":"                                  [dict(GROUP, protocol\u003d\u0027iSCSI\u0027)],"},{"line_number":84,"context_line":"                                  [dict(GROUP, volumeType\u003d\u0027Share\u0027)],"},{"line_number":85,"context_line":"                                  [dict(GROUP, id\u003dNone)],"},{"line_number":86,"context_line":"                                  [dict(GROUP, name\u003d\u0027other-nvme-group\u0027)]])"}],"source_content_type":"text/x-python","patch_set":1,"id":"6bb85db6_caef9fec","line":83,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"@pytest.mark.parametrize(\u0027hosts\u0027, [[], [{\u0027nqn\u0027: \u0027nqn.other\u0027}]])"},{"line_number":95,"context_line":"def test_attach_rejects_unauthorized_host_without_mutation(client, session, hosts):"},{"line_number":96,"context_line":"    responses(session, [VOLUME], [dict(GROUP, nqnHostList\u003dhosts)])"},{"line_number":97,"context_line":"    with pytest.raises(ERROR, match\u003d\u0027not allowed\u0027):"},{"line_number":98,"context_line":"        attach(client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"677cf9ab_340c19fa","line":95,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    group \u003d dict(MAPPED, nqnHostList\u003d[{\u0027nqn\u0027: \u0027*\u0027}])"},{"line_number":104,"context_line":"    responses(session, [VOLUME], [group], NETWORK)"},{"line_number":105,"context_line":"    assert attach(client)[\u0027data\u0027][\u0027host_nqn\u0027] \u003d\u003d NQN"},{"line_number":106,"context_line":"    assert all(call.args[0] \u003d\u003d \u0027GET\u0027 for call in session.request.call_args_list)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"@pytest.mark.parametrize(\u0027volumes\u0027, [[], [dict(VOLUME, state\u003d\u0027Offline\u0027)]])"}],"source_content_type":"text/x-python","patch_set":1,"id":"a715da73_9d0f2a48","line":106,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"@pytest.mark.parametrize(\u0027targets\u0027, [[], [{\u0027nqn\u0027: \u0027-\u0027}],"},{"line_number":118,"context_line":"                                   [{\u0027nqn\u0027: TARGET}, {\u0027nqn\u0027: TARGET + \u0027other\u0027}]])"},{"line_number":119,"context_line":"def test_ambiguous_subsystems_rejected(client, session, targets):"},{"line_number":120,"context_line":"    responses(session, [VOLUME], [dict(GROUP, nvmeTcpTargetList\u003dtargets)])"},{"line_number":121,"context_line":"    with pytest.raises(ERROR, match\u003d\u0027one subsystem\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e4cb33b_112cf2e7","line":118,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"@pytest.mark.parametrize(\u0027targets\u0027, [[], [{\u0027nqn\u0027: \u0027-\u0027}],"},{"line_number":118,"context_line":"                                   [{\u0027nqn\u0027: TARGET}, {\u0027nqn\u0027: TARGET + \u0027other\u0027}]])"},{"line_number":119,"context_line":"def test_ambiguous_subsystems_rejected(client, session, targets):"},{"line_number":120,"context_line":"    responses(session, [VOLUME], [dict(GROUP, nvmeTcpTargetList\u003dtargets)])"},{"line_number":121,"context_line":"    with pytest.raises(ERROR, match\u003d\u0027one subsystem\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"166283f8_5b742dfe","line":118,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def test_duplicate_namespace_mapping_rejected(client):"},{"line_number":138,"context_line":"    group \u003d dict(MAPPED, nvmeTcpNamespaceList\u003dMAPPED[\u0027nvmeTcpNamespaceList\u0027] * 2)"},{"line_number":139,"context_line":"    with pytest.raises(ERROR):"},{"line_number":140,"context_line":"        client._nvme_namespace_id(group, \u0027789\u0027)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ab0669aa_e8c7a281","line":138,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"@pytest.mark.parametrize(\u0027address\u0027, [\u00270.0.0.0\u0027, \u0027169.254.1.1\u0027, \u0027127.0.0.1\u0027,"},{"line_number":151,"context_line":"                                    \u0027224.0.0.1\u0027, \u0027::1\u0027, \u0027invalid\u0027, None])"},{"line_number":152,"context_line":"def test_unusable_portals_rejected(client, session, address):"},{"line_number":153,"context_line":"    network \u003d [dict(NETWORK[0], ipv4\u003d{\u0027ip\u0027: address})]"},{"line_number":154,"context_line":"    responses(session, network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1c8359b0_0db304ce","line":151,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    responses(session, NETWORK, [bond])"},{"line_number":197,"context_line":"    assert client.get_nvme_connection_properties(group)[\u0027portals\u0027] \u003d\u003d ["},{"line_number":198,"context_line":"        (\u002710.20.0.1\u0027, 4420, \u0027tcp\u0027)]"},{"line_number":199,"context_line":"    assert session.request.call_args.args[1].endswith(\u0027/rest/v2/network/linkagg\u0027)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def test_untagged_interface_with_vlans_not_published(client, session):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b8f8925_ba3af016","line":199,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"def test_mapping_timeout_rolls_back_only_new_mapping(client, session):"},{"line_number":229,"context_line":"    client._timeout \u003d 1"},{"line_number":230,"context_line":"    responses(session, [VOLUME], [GROUP], NETWORK, \u0027success\u0027, [GROUP], \u0027success\u0027)"},{"line_number":231,"context_line":"    with mock.patch.object(qsan_rest.time, \u0027monotonic\u0027, side_effect\u003d[0, 2]):"},{"line_number":232,"context_line":"        with pytest.raises(ERROR, match\u003d\u0027Timed out\u0027):"},{"line_number":233,"context_line":"            attach(client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ecead7d8_0006ac45","line":230,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def test_mapping_poll_recovers_eventual_visibility(client, session):"},{"line_number":240,"context_line":"    responses(session, [VOLUME], [GROUP], NETWORK, \u0027success\u0027, [GROUP], [MAPPED])"},{"line_number":241,"context_line":"    with mock.patch.object(qsan_rest.greenthread, \u0027sleep\u0027):"},{"line_number":242,"context_line":"        assert attach(client)[\u0027data\u0027][\u0027ns_id\u0027] \u003d\u003d \u00273\u0027"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"62e8173b_55f3986b","line":240,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            attach(client)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"def test_detach_ignores_iscsi_mapping_flag_and_preserves_group(client, session):"},{"line_number":257,"context_line":"    responses(session, [VOLUME], [MAPPED], \u0027success\u0027)"},{"line_number":258,"context_line":"    client.terminate_nvme_connection(VOLUME[\u0027name\u0027], GROUP[\u0027name\u0027])"},{"line_number":259,"context_line":"    assert session.request.call_args.args[1].endswith(\u0027/hostgroups/unmapLun\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bbacdc27_d4997e1f","line":256,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    assert session.request.call_args.args[1].endswith(\u0027/hostgroups/unmapLun\u0027)"},{"line_number":260,"context_line":"    assert session.request.call_args.kwargs[\u0027json\u0027] \u003d\u003d {"},{"line_number":261,"context_line":"        \u0027id\u0027: 42, \u0027volumeIds\u0027: [789]}"},{"line_number":262,"context_line":"    assert not any(c.args[0] \u003d\u003d \u0027DELETE\u0027 for c in session.request.call_args_list)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"@pytest.mark.parametrize(\u0027missing_volume\u0027, [True, False])"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f2c6fe9_70112b93","line":262,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            VOLUME[\u0027name\u0027], \u00273\u0027, \u0027GB\u0027, fakes.FAKE_POOL_NAME, \u0027NVMeTCP\u0027)"},{"line_number":319,"context_line":"    assert result[\u0027arr\u0027] \u003d\u003d {}"},{"line_number":320,"context_line":"    iscsi_mapping.assert_not_called()"},{"line_number":321,"context_line":"    assert session.request.call_args_list[1].kwargs[\u0027json\u0027][\u0027totalSize\u0027] \u003d\u003d 3072"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def test_mapping_404_uses_existing_fallback(client, session):"}],"source_content_type":"text/x-python","patch_set":1,"id":"90635886_80d4bc47","line":321,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    session.request.side_effect \u003d ["},{"line_number":326,"context_line":"        fakes.mock_response(200, [VOLUME]), fakes.mock_response(200, [GROUP]),"},{"line_number":327,"context_line":"        fakes.mock_response(200, NETWORK), fakes.mock_response(404, {}),"},{"line_number":328,"context_line":"        fakes.mock_response(200, \u0027success\u0027), fakes.mock_response(200, [MAPPED])]"},{"line_number":329,"context_line":"    assert attach(client)[\u0027data\u0027][\u0027ns_id\u0027] \u003d\u003d \u00273\u0027"},{"line_number":330,"context_line":"    assert session.request.call_args_list[4].args[1].endswith("},{"line_number":331,"context_line":"        \u0027/rest/v2/hostgroups/mappingLun\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"89b86304_96d317f7","line":328,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_namespace_id_does_not_use_other_volumes(self):"},{"line_number":232,"context_line":"        client \u003d self.client"},{"line_number":233,"context_line":"        self.assertIs(client._nvme_namespace_id(MAPPED, \u0027999\u0027), None)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def test_duplicate_namespace_mapping_rejected(self):"},{"line_number":236,"context_line":"        client \u003d self.client"}],"source_content_type":"text/x-python","patch_set":2,"id":"f6bca9f3_f84d2beb","line":233,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self.assertEqual(TARGET, properties.targets[0].nqn)"},{"line_number":567,"context_line":"        self.assertEqual(\u00273\u0027, properties.targets[0].ns_id)"},{"line_number":568,"context_line":"        self.assertEqual(NQN, properties.targets[0].host_nqn)"},{"line_number":569,"context_line":"        self.assertIs(properties.targets[0].uuid, None)"},{"line_number":570,"context_line":"        self.assertEqual(2, len(properties.targets[0].portals))"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def test_manage_unmanage_reimport_through_rest(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"22b16760_8c31d705","line":569,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_rest.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"ade0d9b2_2bd9f2e4","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from unittest import mock"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4fc92677_698c1584","line":12,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from unittest import mock"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a27d4ca9_f44d669f","line":12,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fc9ae757_60a26464","line":13,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"28c5c042_2459cfab","line":13,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    @mock.patch(\u0027eventlet.greenthread.sleep\u0027, return_value\u003dNone)"},{"line_number":712,"context_line":"    def test_wait_volume_online_returns_none_when_volume_missing(self,"},{"line_number":713,"context_line":"                                                                  mock_sleep):"},{"line_number":714,"context_line":"        self._setup_request([fakes.mock_response(200, [])])"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        result \u003d self.client._wait_volume_online(\u0027cinder-nonexistent\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"80e3adaf_3d762638","line":713,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def test_ensure_token_refresh_failure_falls_back_to_login(self):"},{"line_number":754,"context_line":"        import time"},{"line_number":755,"context_line":"        import requests as req"},{"line_number":756,"context_line":"        self.client._access_token \u003d fakes.FAKE_TOKEN"},{"line_number":757,"context_line":"        self.client._refresh_token \u003d fakes.FAKE_REFRESH_TOKEN"},{"line_number":758,"context_line":"        self.client._token_expire_time \u003d time.time() + 10"}],"source_content_type":"text/x-python","patch_set":1,"id":"d02834a2_2944a3a6","line":755,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (time, requests)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 QSAN Technology, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"e68dfdcf_a7216e02","line":1,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H103: Header does not match Apache 2.0 License notice","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from unittest import mock"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"718c17f7_75947cd1","line":12,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder import exception\u0027 and in a different group.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from unittest import mock"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b1e74bec_577dd47c","line":12,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder import exception\u0027 is identified as Application.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae2897e_73dbde41","line":13,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.tests.unit.volume.drivers.qsan.fakes)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"import unittest as test"},{"line_number":13,"context_line":"from cinder.tests.unit.volume.drivers.qsan import fakes"},{"line_number":14,"context_line":"from cinder.volume.drivers.qsan import qsan_rest"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"955e9a75_4398d993","line":13,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit.volume.drivers.qsan import fakes\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    @mock.patch(\u0027eventlet.greenthread.sleep\u0027, return_value\u003dNone)"},{"line_number":712,"context_line":"    def test_wait_volume_online_returns_none_when_volume_missing(self,"},{"line_number":713,"context_line":"                                                                  mock_sleep):"},{"line_number":714,"context_line":"        self._setup_request([fakes.mock_response(200, [])])"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        result \u003d self.client._wait_volume_online(\u0027cinder-nonexistent\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fd828d00_972e2439","line":713,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def test_ensure_token_refresh_failure_falls_back_to_login(self):"},{"line_number":754,"context_line":"        import time"},{"line_number":755,"context_line":"        import requests as req"},{"line_number":756,"context_line":"        self.client._access_token \u003d fakes.FAKE_TOKEN"},{"line_number":757,"context_line":"        self.client._refresh_token \u003d fakes.FAKE_REFRESH_TOKEN"},{"line_number":758,"context_line":"        self.client._token_expire_time \u003d time.time() + 10"}],"source_content_type":"text/x-python","patch_set":2,"id":"5d9f122f_79bd4f5e","line":755,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H306: imports not in alphabetical order (time, requests)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"}],"cinder/tests/unit/volume/drivers/qsan/test_qsan_ssh_fc.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import context"},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":22,"context_line":"import unittest as test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":25,"context_line":"from cinder.volume.drivers.qsan import qsan_fc"}],"source_content_type":"text/x-python","patch_set":1,"id":"0ac2fad6_fb419e7a","line":22,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import unittest\u0027 should be before \u0027from cinder.tests.unit import fake_constants\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import context"},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":22,"context_line":"import unittest as test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":25,"context_line":"from cinder.volume.drivers.qsan import qsan_fc"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4e4efa2_5c7d3390","line":22,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import unittest\u0027 is identified as Stdlib and \u0027from cinder.tests.unit import fake_constants\u0027 is identified as Application.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":22,"context_line":"import unittest as test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":25,"context_line":"from cinder.volume.drivers.qsan import qsan_fc"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9022f7ee_eeb7b27d","line":23,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, cinder.volume.configuration)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":22,"context_line":"import unittest as test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.qsan import qsan_common"},{"line_number":25,"context_line":"from cinder.volume.drivers.qsan import qsan_fc"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"60e3ae0b_8e4d44a2","line":23,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.volume import configuration\u0027 is identified as Application and \u0027import unittest\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"}],"cinder/volume/drivers/qsan/qsan_backup.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                  \u0027mp\u0027: self._backup_multipath})\r"},{"line_number":133,"context_line":"\r"},{"line_number":134,"context_line":"        if not self._san_ip or not self._san_login or not self._san_password:\r"},{"line_number":135,"context_line":"            LOG.error(_(\u0027backup_management_ip, backup_login_account, \u0027\r"},{"line_number":136,"context_line":"                        \u0027backup_login_password must be given in \u0027\r"},{"line_number":137,"context_line":"                        \u0027cinder-backup/cinder.conf\u0027))\r"},{"line_number":138,"context_line":"            msg \u003d _(\u0027backup configuration error\u0027)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"a0a3c392_426ce739","line":135,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            raise exception.BackupDriverException(reason\u003dmsg)\r"},{"line_number":140,"context_line":"\r"},{"line_number":141,"context_line":"        if (self._api_protocol \u003d\u003d \u0027rest\u0027 and\r"},{"line_number":142,"context_line":"                self._protocol not in (BackupProtocol.iSCSI, BackupProtocol.NVMe)):\r"},{"line_number":143,"context_line":"            msg \u003d _(\u0027REST backup supports iSCSI and NVMe/TCP protocols.\u0027)\r"},{"line_number":144,"context_line":"            LOG.error(msg)\r"},{"line_number":145,"context_line":"            raise exception.BackupDriverException(reason\u003dmsg)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e114c72_08ced42a","line":142,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"\r"},{"line_number":303,"context_line":"        properties \u003d volume_utils.brick_get_connector_properties(\r"},{"line_number":304,"context_line":"            self._backup_multipath)\r"},{"line_number":305,"context_line":"        ###attach\r"},{"line_number":306,"context_line":"        try:\r"},{"line_number":307,"context_line":"            attach_info \u003d self._attach_backup_device(backup, properties)\r"},{"line_number":308,"context_line":"        except exception.BackupDriverException:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"14c2c4f2_2b477332","line":305,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                      {\u0027block\u0027: block + 1,\r"},{"line_number":416,"context_line":"                       \u0027blocks\u0027: blocks,\r"},{"line_number":417,"context_line":"                       \u0027rate\u0027: rate,\r"},{"line_number":418,"context_line":"                       \u0027unit\u0027:unit})\r"},{"line_number":419,"context_line":"        LOG.debug(\"Transfer data from \u0027%(src)s\u0027 to \u0027%(dest)s\u0027 completed\",\r"},{"line_number":420,"context_line":"                  {\u0027src\u0027: src_name, \u0027dest\u0027: dest_name})\r"},{"line_number":421,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"2a4e2d07_718db231","line":418,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                        \u0027create_volume, falling back to host mapping via %s\u0027,\r"},{"line_number":466,"context_line":"                        self._api_protocol)\r"},{"line_number":467,"context_line":"            lun_id \u003d self._helpers.iscsi_map_vol_to_host(name,\r"},{"line_number":468,"context_line":"                                                   connector[\u0027initiator\u0027],\r"},{"line_number":469,"context_line":"                                                   self._target)\r"},{"line_number":470,"context_line":"\r"},{"line_number":471,"context_line":"        data \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"d719e5cc_29b2d521","line":468,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                        self._api_protocol)\r"},{"line_number":467,"context_line":"            lun_id \u003d self._helpers.iscsi_map_vol_to_host(name,\r"},{"line_number":468,"context_line":"                                                   connector[\u0027initiator\u0027],\r"},{"line_number":469,"context_line":"                                                   self._target)\r"},{"line_number":470,"context_line":"\r"},{"line_number":471,"context_line":"        data \u003d {}\r"},{"line_number":472,"context_line":"        LOG.info(\u0027[_iscsi_initialize_connection] using lun_id\u003d%s\u0027, lun_id)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"d47aa4d3_1c33a809","line":469,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        data \u003d {}\r"},{"line_number":472,"context_line":"        LOG.info(\u0027[_iscsi_initialize_connection] using lun_id\u003d%s\u0027, lun_id)\r"},{"line_number":473,"context_line":"        if lun_id \u003d\u003d \"noOnline\":\r"},{"line_number":474,"context_line":"                LOG.error(_(\u0027[_iscsi_initialize_connection] \u0027\r"},{"line_number":475,"context_line":"                            \u0027Volume %s is not Online\u0027), name)\r"},{"line_number":476,"context_line":"        else:\r"},{"line_number":477,"context_line":"                volume_attributes \u003d self._helpers.get_iscsi_connect(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1564f123_d254bda5","line":474,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        data \u003d {}\r"},{"line_number":472,"context_line":"        LOG.info(\u0027[_iscsi_initialize_connection] using lun_id\u003d%s\u0027, lun_id)\r"},{"line_number":473,"context_line":"        if lun_id \u003d\u003d \"noOnline\":\r"},{"line_number":474,"context_line":"                LOG.error(_(\u0027[_iscsi_initialize_connection] \u0027\r"},{"line_number":475,"context_line":"                            \u0027Volume %s is not Online\u0027), name)\r"},{"line_number":476,"context_line":"        else:\r"},{"line_number":477,"context_line":"                volume_attributes \u003d self._helpers.get_iscsi_connect(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b1710e5_b57095af","line":474,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E117 over-indented","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                LOG.error(_(\u0027[_iscsi_initialize_connection] \u0027\r"},{"line_number":475,"context_line":"                            \u0027Volume %s is not Online\u0027), name)\r"},{"line_number":476,"context_line":"        else:\r"},{"line_number":477,"context_line":"                volume_attributes \u003d self._helpers.get_iscsi_connect(\r"},{"line_number":478,"context_line":"                    self._target)\r"},{"line_number":479,"context_line":"                lun \u003d []\r"},{"line_number":480,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"5cbcd7ba_0da06e82","line":477,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E117 over-indented","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                    self._target)\r"},{"line_number":479,"context_line":"                lun \u003d []\r"},{"line_number":480,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"},{"line_number":481,"context_line":"                       lun.append(lun_id)\r"},{"line_number":482,"context_line":"                data[\u0027target_discovered\u0027] \u003d False\r"},{"line_number":483,"context_line":"                data[\u0027target_iqns\u0027] \u003d volume_attributes[\"iscsi_name\"]\r"},{"line_number":484,"context_line":"                data[\u0027target_portals\u0027] \u003d volume_attributes[\"portal\"]\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"d95a2b39_a2666adb","line":481,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                    self._target)\r"},{"line_number":479,"context_line":"                lun \u003d []\r"},{"line_number":480,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"},{"line_number":481,"context_line":"                       lun.append(lun_id)\r"},{"line_number":482,"context_line":"                data[\u0027target_discovered\u0027] \u003d False\r"},{"line_number":483,"context_line":"                data[\u0027target_iqns\u0027] \u003d volume_attributes[\"iscsi_name\"]\r"},{"line_number":484,"context_line":"                data[\u0027target_portals\u0027] \u003d volume_attributes[\"portal\"]\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b92a3a8_60e5b21b","line":481,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E117 over-indented","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        LOG.debug(\u0027[_fc_initialize_connection] Step 1: FC mapping result\u003d%s\u0027,\r"},{"line_number":513,"context_line":"                  resultInfo)\r"},{"line_number":514,"context_line":"        if resultInfo \u003d\u003d \"noOnline\":\r"},{"line_number":515,"context_line":"            LOG.error(_(\u0027[_fc_initialize_connection] \u0027\r"},{"line_number":516,"context_line":"                        \u0027Backup volume %s is not Online\u0027), name)\r"},{"line_number":517,"context_line":"            data \u003d {}\r"},{"line_number":518,"context_line":"        else:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"60373736_c0243e8e","line":515,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":525,"context_line":"            except Exception:\r"},{"line_number":526,"context_line":"                with excutils.save_and_reraise_exception():\r"},{"line_number":527,"context_line":"                    self._terminate_connection(backup, connector)\r"},{"line_number":528,"context_line":"                    LOG.error(_(\u0027initialize_connection: Failed \u0027\r"},{"line_number":529,"context_line":"                                \u0027to collect return \u0027\r"},{"line_number":530,"context_line":"                                \u0027properties for backup %(vol)s and connector \u0027\r"},{"line_number":531,"context_line":"                                \u0027%(conn)s.\\n\u0027), {\u0027vol\u0027: backup,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"a22989f3_5321143c","line":528,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        if not connector.check_valid_device(device[\u0027path\u0027], True):\r"},{"line_number":605,"context_line":"            if isinstance(device[\u0027path\u0027], str):\r"},{"line_number":606,"context_line":"                raise exception.DeviceUnavailable(\r"},{"line_number":607,"context_line":"                        path\u003ddevice[\u0027path\u0027],\r"},{"line_number":608,"context_line":"                        reason\u003d(_(\"Unable to access the backend \"\r"},{"line_number":609,"context_line":"                                  \"storage via the path %(path)s.\") %\r"},{"line_number":610,"context_line":"                                {\u0027path\u0027: device[\u0027path\u0027]})\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1745b07b_ffff2950","line":607,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                        reason\u003d(_(\"Unable to access the backend \"\r"},{"line_number":609,"context_line":"                                  \"storage via the path %(path)s.\") %\r"},{"line_number":610,"context_line":"                                {\u0027path\u0027: device[\u0027path\u0027]})\r"},{"line_number":611,"context_line":"                      )\r"},{"line_number":612,"context_line":"            else:\r"},{"line_number":613,"context_line":"                raise exception.DeviceUnavailable(\r"},{"line_number":614,"context_line":"                    path\u003dNone,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"76af87ad_392f1edf","line":611,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":647,"context_line":"            raise\r"},{"line_number":648,"context_line":"        return validate\r"},{"line_number":649,"context_line":"\r"},{"line_number":650,"context_line":"class BackupHelpers(object):\r"},{"line_number":651,"context_line":"\r"},{"line_number":652,"context_line":"    def __init__(self, run_ssh):\r"},{"line_number":653,"context_line":"        self._ssh \u003d run_ssh\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f3ff312_c23b17c7","line":650,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        raise exception.BackupDriverException(reason\u003dmsg)\r"},{"line_number":726,"context_line":"\r"},{"line_number":727,"context_line":"\r"},{"line_number":728,"context_line":"    def iscsi_map_vol_to_host(self, volume_name, host_name, target):\r"},{"line_number":729,"context_line":"        \"\"\"Create a mapping between a volume to a host.\"\"\"\r"},{"line_number":730,"context_line":"        LOG.debug(\u0027[iscsi_map_vol_to_host] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,\r"},{"line_number":731,"context_line":"                  volume_name, host_name, target)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f031f9d_646561aa","line":728,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":735,"context_line":"\r"},{"line_number":736,"context_line":"        try:\r"},{"line_number":737,"context_line":"            result_lun \u003d self.run_ssh_list(ssh_cmd)\r"},{"line_number":738,"context_line":"        except Exception as ex:\r"},{"line_number":739,"context_line":"            raise exception.VolumeDriverException(\r"},{"line_number":740,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))\r"},{"line_number":741,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"a8437963_bfe5eb20","line":738,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))\r"},{"line_number":741,"context_line":"\r"},{"line_number":742,"context_line":"        if result_lun is None or result_lun[\u0027info\u0027] is None:\r"},{"line_number":743,"context_line":"            LOG.error(_(\u0027Mapping error, LUN id is empty. \u0027\r"},{"line_number":744,"context_line":"                        \u0027QSAN storage must return a LUN id.\u0027))\r"},{"line_number":745,"context_line":"            raise\r"},{"line_number":746,"context_line":"        else:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"038664f5_1b87782a","line":743,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":756,"context_line":"                   \u0027--protocol\u0027, \u0027WITH_FCP_ACL\u0027, \u0027--host\u0027, host_name]\r"},{"line_number":757,"context_line":"        result_lun \u003d self.run_ssh_list(ssh_cmd)\r"},{"line_number":758,"context_line":"        if result_lun is None or result_lun[\u0027info\u0027] is None:\r"},{"line_number":759,"context_line":"            LOG.error(_(\u0027Mapping error, LUN id is empty. \u0027\r"},{"line_number":760,"context_line":"                        \u0027QSAN storage must return a LUN id.\u0027))\r"},{"line_number":761,"context_line":"            raise\r"},{"line_number":762,"context_line":"        else:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"0a40ea6d_d4ca1e67","line":759,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":899,"context_line":"\r"},{"line_number":900,"context_line":"    def initialize_nvme_connection(self, name, host_nqn, group_name):\r"},{"line_number":901,"context_line":"        return self._client.initialize_nvme_connection(name, host_nqn,\r"},{"line_number":902,"context_line":"                                                      group_name)\r"},{"line_number":903,"context_line":"\r"},{"line_number":904,"context_line":"    def terminate_nvme_connection(self, name, group_name):\r"},{"line_number":905,"context_line":"        return self._client.terminate_nvme_connection(name, group_name)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d7ddb66_1d7f5faa","line":902,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":943,"context_line":"            raise exception.BackupDriverException(reason\u003dmsg)\r"},{"line_number":944,"context_line":"        return lun_id\r"},{"line_number":945,"context_line":"\r"},{"line_number":946,"context_line":"def get_backup_driver(context):\r"},{"line_number":947,"context_line":"    return QsanBackupDriver(context)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0135fbc_e9029aa5","line":946,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":307,"context_line":"\r"},{"line_number":308,"context_line":"        properties \u003d volume_utils.brick_get_connector_properties(\r"},{"line_number":309,"context_line":"            self._backup_multipath)\r"},{"line_number":310,"context_line":"        ###attach\r"},{"line_number":311,"context_line":"        try:\r"},{"line_number":312,"context_line":"            attach_info \u003d self._attach_backup_device(backup, properties)\r"},{"line_number":313,"context_line":"        except exception.BackupDriverException:\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"2d867c24_3aba92ba","line":310,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":420,"context_line":"                      {\u0027block\u0027: block + 1,\r"},{"line_number":421,"context_line":"                       \u0027blocks\u0027: blocks,\r"},{"line_number":422,"context_line":"                       \u0027rate\u0027: rate,\r"},{"line_number":423,"context_line":"                       \u0027unit\u0027:unit})\r"},{"line_number":424,"context_line":"        LOG.debug(\"Transfer data from \u0027%(src)s\u0027 to \u0027%(dest)s\u0027 completed\",\r"},{"line_number":425,"context_line":"                  {\u0027src\u0027: src_name, \u0027dest\u0027: dest_name})\r"},{"line_number":426,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"95a3d1f4_c5eac054","line":423,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                        \u0027create_volume, falling back to host mapping via %s\u0027,\r"},{"line_number":471,"context_line":"                        self._api_protocol)\r"},{"line_number":472,"context_line":"            lun_id \u003d self._helpers.iscsi_map_vol_to_host(name,\r"},{"line_number":473,"context_line":"                                                   connector[\u0027initiator\u0027],\r"},{"line_number":474,"context_line":"                                                   self._target)\r"},{"line_number":475,"context_line":"\r"},{"line_number":476,"context_line":"        data \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"96e93b43_d2914a20","line":473,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                        self._api_protocol)\r"},{"line_number":472,"context_line":"            lun_id \u003d self._helpers.iscsi_map_vol_to_host(name,\r"},{"line_number":473,"context_line":"                                                   connector[\u0027initiator\u0027],\r"},{"line_number":474,"context_line":"                                                   self._target)\r"},{"line_number":475,"context_line":"\r"},{"line_number":476,"context_line":"        data \u003d {}\r"},{"line_number":477,"context_line":"        LOG.info(\u0027[_iscsi_initialize_connection] using lun_id\u003d%s\u0027, lun_id)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"95659440_e41dfdcf","line":474,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        data \u003d {}\r"},{"line_number":477,"context_line":"        LOG.info(\u0027[_iscsi_initialize_connection] using lun_id\u003d%s\u0027, lun_id)\r"},{"line_number":478,"context_line":"        if lun_id \u003d\u003d \"noOnline\":\r"},{"line_number":479,"context_line":"                LOG.error(\u0027[_iscsi_initialize_connection] \u0027\r"},{"line_number":480,"context_line":"                          \u0027Volume %s is not Online\u0027, name)\r"},{"line_number":481,"context_line":"        else:\r"},{"line_number":482,"context_line":"                volume_attributes \u003d self._helpers.get_iscsi_connect(\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"63bc5a6f_6a20397e","line":479,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E117 over-indented","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                LOG.error(\u0027[_iscsi_initialize_connection] \u0027\r"},{"line_number":480,"context_line":"                          \u0027Volume %s is not Online\u0027, name)\r"},{"line_number":481,"context_line":"        else:\r"},{"line_number":482,"context_line":"                volume_attributes \u003d self._helpers.get_iscsi_connect(\r"},{"line_number":483,"context_line":"                    self._target)\r"},{"line_number":484,"context_line":"                lun \u003d []\r"},{"line_number":485,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"77e903bc_486bd107","line":482,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E117 over-indented","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                    self._target)\r"},{"line_number":484,"context_line":"                lun \u003d []\r"},{"line_number":485,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"},{"line_number":486,"context_line":"                       lun.append(lun_id)\r"},{"line_number":487,"context_line":"                data[\u0027target_discovered\u0027] \u003d False\r"},{"line_number":488,"context_line":"                data[\u0027target_iqns\u0027] \u003d volume_attributes[\"iscsi_name\"]\r"},{"line_number":489,"context_line":"                data[\u0027target_portals\u0027] \u003d volume_attributes[\"portal\"]\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"12db56da_facf41f2","line":486,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                    self._target)\r"},{"line_number":484,"context_line":"                lun \u003d []\r"},{"line_number":485,"context_line":"                for i in range(len(volume_attributes[\"portal\"])):\r"},{"line_number":486,"context_line":"                       lun.append(lun_id)\r"},{"line_number":487,"context_line":"                data[\u0027target_discovered\u0027] \u003d False\r"},{"line_number":488,"context_line":"                data[\u0027target_iqns\u0027] \u003d volume_attributes[\"iscsi_name\"]\r"},{"line_number":489,"context_line":"                data[\u0027target_portals\u0027] \u003d volume_attributes[\"portal\"]\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"f8591418_17834f0f","line":486,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E117 over-indented","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                              \u0027to collect return \u0027\r"},{"line_number":535,"context_line":"                              \u0027properties for backup %(vol)s and connector \u0027\r"},{"line_number":536,"context_line":"                              \u0027%(conn)s.\\n\u0027, {\u0027vol\u0027: backup,\r"},{"line_number":537,"context_line":"                                                 \u0027conn\u0027: connector})\r"},{"line_number":538,"context_line":"\r"},{"line_number":539,"context_line":"            LOG.debug(\u0027[_fc_initialize_connection] leave: backup\u003d%s, \u0027\r"},{"line_number":540,"context_line":"                      \u0027properties\u003d%s\u0027, backup[\u0027id\u0027], data)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"9326bae8_4088be10","line":537,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        if not connector.check_valid_device(device[\u0027path\u0027], True):\r"},{"line_number":610,"context_line":"            if isinstance(device[\u0027path\u0027], str):\r"},{"line_number":611,"context_line":"                raise exception.DeviceUnavailable(\r"},{"line_number":612,"context_line":"                        path\u003ddevice[\u0027path\u0027],\r"},{"line_number":613,"context_line":"                        reason\u003d(_(\"Unable to access the backend \"\r"},{"line_number":614,"context_line":"                                  \"storage via the path %(path)s.\") %\r"},{"line_number":615,"context_line":"                                {\u0027path\u0027: device[\u0027path\u0027]})\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"1d43ee14_af4b93d5","line":612,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                        reason\u003d(_(\"Unable to access the backend \"\r"},{"line_number":614,"context_line":"                                  \"storage via the path %(path)s.\") %\r"},{"line_number":615,"context_line":"                                {\u0027path\u0027: device[\u0027path\u0027]})\r"},{"line_number":616,"context_line":"                      )\r"},{"line_number":617,"context_line":"            else:\r"},{"line_number":618,"context_line":"                raise exception.DeviceUnavailable(\r"},{"line_number":619,"context_line":"                    path\u003dNone,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"c696cf88_d4e45bc4","line":616,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":652,"context_line":"            raise\r"},{"line_number":653,"context_line":"        return validate\r"},{"line_number":654,"context_line":"\r"},{"line_number":655,"context_line":"class BackupHelpers(object):\r"},{"line_number":656,"context_line":"\r"},{"line_number":657,"context_line":"    def __init__(self, run_ssh):\r"},{"line_number":658,"context_line":"        self._ssh \u003d run_ssh\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"d61b1afb_86fa9c57","line":655,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        raise exception.BackupDriverException(reason\u003dmsg)\r"},{"line_number":731,"context_line":"\r"},{"line_number":732,"context_line":"\r"},{"line_number":733,"context_line":"    def iscsi_map_vol_to_host(self, volume_name, host_name, target):\r"},{"line_number":734,"context_line":"        \"\"\"Create a mapping between a volume to a host.\"\"\"\r"},{"line_number":735,"context_line":"        LOG.debug(\u0027[iscsi_map_vol_to_host] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,\r"},{"line_number":736,"context_line":"                  volume_name, host_name, target)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"d852eee1_2713675c","line":733,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":740,"context_line":"\r"},{"line_number":741,"context_line":"        try:\r"},{"line_number":742,"context_line":"            result_lun \u003d self.run_ssh_list(ssh_cmd)\r"},{"line_number":743,"context_line":"        except Exception as ex:\r"},{"line_number":744,"context_line":"            raise exception.VolumeDriverException(\r"},{"line_number":745,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))\r"},{"line_number":746,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"328874dd_05904628","line":743,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":904,"context_line":"\r"},{"line_number":905,"context_line":"    def initialize_nvme_connection(self, name, host_nqn, group_name):\r"},{"line_number":906,"context_line":"        return self._client.initialize_nvme_connection(name, host_nqn,\r"},{"line_number":907,"context_line":"                                                      group_name)\r"},{"line_number":908,"context_line":"\r"},{"line_number":909,"context_line":"    def terminate_nvme_connection(self, name, group_name):\r"},{"line_number":910,"context_line":"        return self._client.terminate_nvme_connection(name, group_name)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"f738d8f1_6182a2e8","line":907,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":948,"context_line":"            raise exception.BackupDriverException(reason\u003dmsg)\r"},{"line_number":949,"context_line":"        return lun_id\r"},{"line_number":950,"context_line":"\r"},{"line_number":951,"context_line":"def get_backup_driver(context):\r"},{"line_number":952,"context_line":"    return QsanBackupDriver(context)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d303113_62c6384e","line":951,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"@interface.backupdriver"},{"line_number":105,"context_line":"class QsanBackupDriver(driver.BackupDriver):"},{"line_number":106,"context_line":"    \"\"\"QSAN Storage backup driver."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e18ba1a8_fe1994bf","line":105,"updated":"2026-10-15 14:40:15.000000000","message":"Please move the backup driver to its own change. As it stands: it is a `cinder.backup.driver.BackupDriver` living under `cinder/volume/drivers/`; it registers fourteen global options (`backup_pool`, `backup_protocol`, `backup_target`, `backup_management_ip`, `backup_login_password` ...) in the same namespace as Cinder\u0027s own `backup_*` options; it is not mentioned in the release note; and it needs its own docs review and CI coverage. Backup drivers live in `cinder/backup/drivers/` with vendor-prefixed options (`backup_qsan_*`).","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ce09eca08a5e27d07f5e7842a7e0d2728a5e7252","unresolved":true,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _new_ssh_connection(self):"},{"line_number":202,"context_line":"        \"\"\"Create a new SSH connection to the storage.\"\"\""},{"line_number":203,"context_line":"        import paramiko"},{"line_number":204,"context_line":"        ssh \u003d paramiko.SSHClient()"},{"line_number":205,"context_line":"        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"},{"line_number":206,"context_line":"        ssh.connect(self._san_ip,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ae6aac35_fa0bae5f","line":203,"updated":"2026-10-16 00:16:38.000000000","message":"Generally in OpenStack projects, we expect imports at module load. FWIW, you may want to just include this in common and call common for this.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ce09eca08a5e27d07f5e7842a7e0d2728a5e7252","unresolved":true,"context_lines":[{"line_number":513,"context_line":"            data[\u0027target_portals\u0027] \u003d volume_attributes[\"portal\"]"},{"line_number":514,"context_line":"            data[\u0027target_luns\u0027] \u003d lun"},{"line_number":515,"context_line":"            data[\u0027id\u0027] \u003d backup[\u0027id\u0027]"},{"line_number":516,"context_line":"            data[\u0027auth_method\u0027] \u003d \u0027\u0027"},{"line_number":517,"context_line":"            data[\u0027auth_username\u0027] \u003d \u0027\u0027"},{"line_number":518,"context_line":"            data[\u0027auth_password\u0027] \u003d \u0027\u0027"},{"line_number":519,"context_line":"            data[\u0027discovery_auth_method\u0027] \u003d \u0027\u0027"},{"line_number":520,"context_line":"            data[\u0027discovery_auth_username\u0027] \u003d \u0027\u0027"},{"line_number":521,"context_line":"            data[\u0027discovery_auth_password\u0027] \u003d \u0027\u0027"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: data, }"},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"aeba21b0_d54db5a5","line":521,"range":{"start_line":516,"start_character":11,"end_line":521,"end_character":48},"updated":"2026-10-16 00:16:38.000000000","message":"I\u0027m just going to highlight that this is potentially a vulnerability in the making. I get the trust boundary Cinder likes to think as \"its a trusted network, only hypervisors\", but I\u0027ve got baremetal host users screaming for direct access to cinder volumes for data storage. Meaning, that trust boundary gets extended to the tenant machines where tenants have full control.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_clone.py":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _page(self, page):"},{"line_number":59,"context_line":"        result \u003d self.client._get("},{"line_number":60,"context_line":"            \u0027/rest/v2/events/system/subtype\u0027,"},{"line_number":61,"context_line":"            params\u003d{\u0027page\u0027: page, \u0027pageSize\u0027: self.PAGE_SIZE},"},{"line_number":62,"context_line":"            strict_json\u003dTrue)"},{"line_number":63,"context_line":"        if not isinstance(result, dict):"}],"source_content_type":"text/x-python","patch_set":4,"id":"17fffe69_f819090e","line":60,"updated":"2026-10-15 14:40:15.000000000","message":"Clone completion is inferred by paging the system event log and matching \u0027\u003cvolume name\u003e\u0027 inside event message text (97). That will break on any firmware wording or localisation change, and the module\u0027s own docstring admits \"events are not job IDs\". Does the REST API expose a task or job status endpoint? If not, this needs to be called out in the docs and pinned to a firmware version.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_common.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"952e811b_ac415973","line":18,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import paramiko\u0027 is identified as Third Party and \u0027import os\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":1,"id":"a81a8280_22485390","line":19,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import random\u0027 should be before \u0027import paramiko\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":1,"id":"4f856990_215c0afa","line":19,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import random\u0027 is identified as Stdlib and \u0027import paramiko\u0027 is identified as Third Party.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import excutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"from cinder.compute import nova"},{"line_number":29,"context_line":"from cinder import context"},{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"4175c34a_ca8f1563","line":28,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H306: imports not in alphabetical order (oslo_utils.units, cinder.compute.nova)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import excutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"from cinder.compute import nova"},{"line_number":29,"context_line":"from cinder import context"},{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"c514ab4a_c6c87bd1","line":28,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.compute import nova\u0027 is identified as Application and \u0027from oslo_utils import units\u0027 is identified as Third Party.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":"from cinder import interface"},{"line_number":34,"context_line":"from cinder import objects"},{"line_number":35,"context_line":"from cinder.objects import fields"},{"line_number":36,"context_line":"from cinder import utils as cinder_utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"de46bf92_6d95ef05","line":33,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F401 \u0027cinder.interface\u0027 imported but unused","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"d1c6f0dc_db883d1f","line":256,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"725ceaa3_e5080116","line":256,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"48ab745f_1c95d96f","line":257,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"22b4e111_10b3b496","line":257,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":261,"context_line":"                  volume_name, hostname, target)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6080885_67831edf","line":258,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":261,"context_line":"                  volume_name, hostname, target)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cfd67705_0e4a6d7f","line":258,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":261,"context_line":"                  volume_name, hostname, target)"},{"line_number":262,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshMapVoltoHost\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"409a55f0_73c5bfc1","line":259,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        Map volume to host."},{"line_number":258,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":261,"context_line":"                  volume_name, hostname, target)"},{"line_number":262,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshMapVoltoHost\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"f7f88d43_c583fe8e","line":259,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        try:"},{"line_number":268,"context_line":"            return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":269,"context_line":"        except Exception as ex:"},{"line_number":270,"context_line":"            raise exception.VolumeDriverException("},{"line_number":271,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afdda5e_3651c12d","line":269,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def mkvolume_with_host_group(self, name, size, units, poolName,"},{"line_number":274,"context_line":"                                protocol\u003d\u0027WITH_ISCSI\u0027, allow_hosts\u003d\u0027*\u0027):"},{"line_number":275,"context_line":"        \"\"\"Create volume with host group."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        Uses the create_volume API which automatically adds RAID volumes"}],"source_content_type":"text/x-python","patch_set":1,"id":"264773dd_ed1f51f0","line":274,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        LOG.debug(\u0027[ssh_start_replication] volume\u003d%s\u0027, volume)"},{"line_number":470,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshStartReplication\u0027]"},{"line_number":471,"context_line":"        if volume:"},{"line_number":472,"context_line":"            ssh_cmd.extend([\u0027--volume\u0027,volume])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        self.run_ssh_no_output(ssh_cmd)"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f495458d_031ad51e","line":472,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        LOG.debug(\u0027[ssh_get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":478,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshGetReplicationSync\u0027]"},{"line_number":479,"context_line":"        if volume:"},{"line_number":480,"context_line":"            ssh_cmd.extend([\u0027--volume\u0027,volume])"},{"line_number":481,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def ssh_terminate_replication(self, volume):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b3b3a1e4_9045ec1e","line":480,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                  name, setting)"},{"line_number":492,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":493,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":494,"context_line":"        for key , value in setting.items():"},{"line_number":495,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":496,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7cc3c3bc_ceb445db","line":494,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E203 whitespace before \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":493,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":494,"context_line":"        for key , value in setting.items():"},{"line_number":495,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":496,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def ssh_schedule_replication(self, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c6cf5e8_9f95d13f","line":495,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":493,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":494,"context_line":"        for key , value in setting.items():"},{"line_number":495,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":496,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def ssh_schedule_replication(self, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bde6cb30_e8ec1ace","line":495,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":585,"context_line":"            node \u003d storage_nodes[key]"},{"line_number":586,"context_line":"            wwpns \u003d set(node[\u0027WWPN\u0027])"},{"line_number":587,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":588,"context_line":"            if resp !\u003d None:"},{"line_number":589,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":590,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":591,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"48bf7708_b099a3a2","line":588,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E711 comparison to None should be \u0027if cond is not None:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            wwpns \u003d set(node[\u0027WWPN\u0027])"},{"line_number":587,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":588,"context_line":"            if resp !\u003d None:"},{"line_number":589,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":590,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":591,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"26d80335_a73103bd","line":589,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":588,"context_line":"            if resp !\u003d None:"},{"line_number":589,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":590,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":591,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            node[\u0027WWPN\u0027] \u003d list(wwpns)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f94e02a7_fbb4be92","line":590,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            if resp !\u003d None:"},{"line_number":589,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":590,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":591,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            node[\u0027WWPN\u0027] \u003d list(wwpns)"},{"line_number":594,"context_line":"            LOG.debug(\u0027[add_fc_wwpns] WWPN on node %(node)s: %(wwpn)s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4051782b_1d7774db","line":591,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":597,"context_line":"    def get_conn_fc_wwpns(self, host):"},{"line_number":598,"context_line":"        LOG.debug(\u0027[get_conn_fc_wwpns] host\u003d%s\u0027, host)"},{"line_number":599,"context_line":"        wwpns \u003d set()"},{"line_number":600,"context_line":"        resp \u003d self.client.getFcWwpns(\u0027\u0027,host\u003dhost)"},{"line_number":601,"context_line":"        for wwpn in resp.select(\u0027local_wwpn\u0027):"},{"line_number":602,"context_line":"            if wwpn is not None:"},{"line_number":603,"context_line":"                wwpns.add(wwpn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7380fedb_356aceaa","line":600,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        LOG.debug(\u0027[delete_lun_map] volume\u003d%s, target\u003d%s, \u0027"},{"line_number":610,"context_line":"                  \u0027host\u003d%s, protocol\u003d%s\u0027,"},{"line_number":611,"context_line":"                  volumeName, target, host, protocol)"},{"line_number":612,"context_line":"        lun \u003d self.client.deleteLunMap(target, volumeName, host, protocol)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def get_fc_info(self):"},{"line_number":615,"context_line":"        LOG.debug(\u0027[get_fc_info] Retrieving FC wwnn/wwpn info\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f5699a6_d24177c5","line":612,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F841 local variable \u0027lun\u0027 is assigned to but never used","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self.client.ssh_start_replication(volume)"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"}],"source_content_type":"text/x-python","patch_set":1,"id":"5506fa41_c975e275","line":778,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self.client.ssh_start_replication(volume)"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"}],"source_content_type":"text/x-python","patch_set":1,"id":"862fa715_59b21cba","line":778,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"}],"source_content_type":"text/x-python","patch_set":1,"id":"476a248b_a5d6ff3d","line":779,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe33feaf_a134e0d2","line":779,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd5bfc0f_56011721","line":780,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":777,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"}],"source_content_type":"text/x-python","patch_set":1,"id":"e8b2931d_83427491","line":780,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"}],"source_content_type":"text/x-python","patch_set":1,"id":"c54b3a46_4edb6212","line":781,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"}],"source_content_type":"text/x-python","patch_set":1,"id":"d088e325_fa97a1bf","line":781,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"}],"source_content_type":"text/x-python","patch_set":1,"id":"634bb81c_182999f5","line":782,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        get replication sync status"},{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"}],"source_content_type":"text/x-python","patch_set":1,"id":"553945f6_dedb6afe","line":782,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"}],"source_content_type":"text/x-python","patch_set":1,"id":"40af6134_c90c3ada","line":783,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        :return:"},{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"}],"source_content_type":"text/x-python","patch_set":1,"id":"e73df705_f45a775b","line":783,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":1,"id":"466d1820_1c79d2be","line":784,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        [{"},{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3d87ad65_3c95103c","line":784,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f06a4021_23e8478c","line":785,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":782,"context_line":"            name :"},{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8deae9_ed0ed604","line":785,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff21733d_15343762","line":786,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d9f03f5_b07e7e1d","line":786,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":790,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"34c6f29d_22c44a77","line":787,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            speed : Mb/s"},{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":790,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"47130c50_7410390e","line":787,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":790,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"},{"line_number":791,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"dbd3cbe3_c5a01f6e","line":788,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            progress:"},{"line_number":786,"context_line":"            lasttime :"},{"line_number":787,"context_line":"        }]"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":790,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"},{"line_number":791,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"67695dce_c97f0a6e","line":788,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        return result"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ea9c9ac_1ac2a847","line":806,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        return result"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c00cd0a_5f4e19bb","line":806,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"89dc9aaa_fe2d00f3","line":807,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"6840977f_8de18504","line":807,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"}],"source_content_type":"text/x-python","patch_set":1,"id":"779b4be8_6766ecda","line":808,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":805,"context_line":"    def check_connected(self, pool):"},{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4945125a_2fc2d0d3","line":808,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":812,"context_line":"        ret \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4ecfc67_89eb1b4b","line":809,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":812,"context_line":"        ret \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"c0c9962e_3a7b5c11","line":809,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":812,"context_line":"        ret \u003d False"},{"line_number":813,"context_line":"        if not pool:"}],"source_content_type":"text/x-python","patch_set":1,"id":"90ba6741_f4e037b8","line":810,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        request storage pool info"},{"line_number":808,"context_line":"        if pool is not or exception occurr return false"},{"line_number":809,"context_line":"        :return:"},{"line_number":810,"context_line":"        \"\"\""},{"line_number":811,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":812,"context_line":"        ret \u003d False"},{"line_number":813,"context_line":"        if not pool:"}],"source_content_type":"text/x-python","patch_set":1,"id":"de2bb747_a15617d2","line":810,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":875,"context_line":"            return self.result[key]"},{"line_number":876,"context_line":"        except KeyError:"},{"line_number":877,"context_line":"            msg \u003d (_(\u0027Did not find the expected key %(key)s in %(fun)s: \u0027"},{"line_number":878,"context_line":"                 \u0027%(raw)s.\u0027)"},{"line_number":879,"context_line":"               % {\u0027key\u0027: key, \u0027fun\u0027: self.ssh_cmd, \u0027raw\u0027: self.raw})"},{"line_number":880,"context_line":"            LOG.error(msg)"},{"line_number":881,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bc2765ad_27207c33","line":878,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":876,"context_line":"        except KeyError:"},{"line_number":877,"context_line":"            msg \u003d (_(\u0027Did not find the expected key %(key)s in %(fun)s: \u0027"},{"line_number":878,"context_line":"                 \u0027%(raw)s.\u0027)"},{"line_number":879,"context_line":"               % {\u0027key\u0027: key, \u0027fun\u0027: self.ssh_cmd, \u0027raw\u0027: self.raw})"},{"line_number":880,"context_line":"            LOG.error(msg)"},{"line_number":881,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":882,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5d5b9d28_7fc43181","line":879,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":920,"context_line":"    san.SanDriver,"},{"line_number":921,"context_line":"    driver.ManageableVD,"},{"line_number":922,"context_line":"    driver.MigrateVD,"},{"line_number":923,"context_line":"    driver.CloneableImageVD):"},{"line_number":924,"context_line":"    \"\"\"QSAN Storage volume driver."},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7514a8dc_6846140a","line":923,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E125 continuation line with same indent as next logical line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":959,"context_line":"            \u0027system_name\u0027: None,"},{"line_number":960,"context_line":"            \u0027system_id\u0027: None,"},{"line_number":961,"context_line":"            \u0027code_level\u0027: None,"},{"line_number":962,"context_line":"            \u0027version\u0027 : None"},{"line_number":963,"context_line":"        }"},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        self._slave._active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ab2825a_995bf187","line":962,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E203 whitespace before \u0027:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"                    ssh, command, check_exit_code\u003dcheck_exit_code)"},{"line_number":1149,"context_line":"                return result"},{"line_number":1150,"context_line":"            except Exception as e:"},{"line_number":1151,"context_line":"                LOG.error(_(\u0027Error has occurred: %s\u0027), e)"},{"line_number":1152,"context_line":"                last_exception \u003d e"},{"line_number":1153,"context_line":"                if attempts \u003e 0:"},{"line_number":1154,"context_line":"                    greenthread.sleep(random.randint(20, 500) / 100.0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b6e20de_af48d137","line":1151,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                    source_volume_name, snapshot_name)):"},{"line_number":1315,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1316,"context_line":"                data\u003d_(\u0027Snapshot %(snap)s no longer exists on storage \u0027"},{"line_number":1317,"context_line":"                        \u0027backend, possibly removed due to COW space \u0027"},{"line_number":1318,"context_line":"                        \u0027exhaustion. Delete this snapshot from Cinder \u0027"},{"line_number":1319,"context_line":"                        \u0027to restore consistency.\u0027) % {"},{"line_number":1320,"context_line":"                            \u0027snap\u0027: snapshot_name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c6d6adc_2ef25e1e","line":1317,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"        if self._slave.check_replicated_enable("},{"line_number":1352,"context_line":"                context.get_admin_context(),"},{"line_number":1353,"context_line":"                src_volume[\u0027volume_type_id\u0027]):"},{"line_number":1354,"context_line":"            #not support"},{"line_number":1355,"context_line":"            msg \u003d (_(\u0027Replication volume not support create clone volume.\u0027))"},{"line_number":1356,"context_line":"            LOG.error(msg)"},{"line_number":1357,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c18bf020_8d4abe18","line":1354,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                        volumeName, cloneName, pool_name,"},{"line_number":1368,"context_line":"                        target_size\u003dint(tgt_volume[\u0027size\u0027]))"},{"line_number":1369,"context_line":"                else:"},{"line_number":1370,"context_line":"                    self._helpers.clone_volume(volumeName, cloneName, pool_name)"},{"line_number":1371,"context_line":"            else:"},{"line_number":1372,"context_line":"                # Remove any existing local clone relationship before"},{"line_number":1373,"context_line":"                # creating new one"}],"source_content_type":"text/x-python","patch_set":1,"id":"4c11ebff_efbe2181","line":1370,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        return pool_stats"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    def local_clone_copy(self, volume, clone, action\u003dNone, snapshot\u003dNone):"},{"line_number":1483,"context_line":"        \"\"\"Perform a local clone copy from volume to clone target.\"\"\""},{"line_number":1484,"context_line":"        LOG.debug(\u0027[local_clone_copy] enter: volume\u003d%s, clone\u003d%s, \u0027"},{"line_number":1485,"context_line":"                  \u0027action\u003d%s, snapshot\u003d%s\u0027, volume, clone, action, snapshot)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a22e0cce_7c7c410d","line":1482,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"            else:"},{"line_number":1493,"context_line":"                self._helpers.start_local_clone(volume, snapshot)"},{"line_number":1494,"context_line":"        else:"},{"line_number":1495,"context_line":"            LOG.error(_(\u0027%(action)s failed.\u0027), {\u0027action\u0027: action})"},{"line_number":1496,"context_line":"            raise exception.VolumeBackendAPIException(data\u003d_(\u0027clone failed!\u0027))"},{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        LOG.debug(\u0027[local_clone_copy] Step 2: Waiting for copy to complete\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"70aff349_d51b1c6f","line":1495,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1501,"context_line":"            LOG.debug(\u0027[local_clone_copy] leave: %s completed successfully\u0027,"},{"line_number":1502,"context_line":"                      action)"},{"line_number":1503,"context_line":"        else:"},{"line_number":1504,"context_line":"            LOG.error(_(\u0027%(action)s failed.\u0027), {\u0027action\u0027: action})"},{"line_number":1505,"context_line":"            raise exception.VolumeBackendAPIException(data\u003d_(\u0027clone failed!\u0027))"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"    @coordination.synchronized(\u0027qsan-copy-{volume}-task\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d1ebcf4_f239e09a","line":1504,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1519,"context_line":"        interval \u003d self.configuration.qsan_copy_interval"},{"line_number":1520,"context_line":"        wait_status \u003d [\u0027Initiating\u0027, \u0027Rebuilding\u0027, \u0027Erasing\u0027,"},{"line_number":1521,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1522,"context_line":"        ###All status"},{"line_number":1523,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","}],"source_content_type":"text/x-python","patch_set":1,"id":"8a22cf63_a57ee1bc","line":1522,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1520,"context_line":"        wait_status \u003d [\u0027Initiating\u0027, \u0027Rebuilding\u0027, \u0027Erasing\u0027,"},{"line_number":1521,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1522,"context_line":"        ###All status"},{"line_number":1523,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","}],"source_content_type":"text/x-python","patch_set":1,"id":"2d1cc86b_5d5344cc","line":1523,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1522,"context_line":"        ###All status"},{"line_number":1523,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"}],"source_content_type":"text/x-python","patch_set":1,"id":"e0909ea6_a9b3d2e8","line":1524,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1522,"context_line":"        ###All status"},{"line_number":1523,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"}],"source_content_type":"text/x-python","patch_set":1,"id":"fba55833_9f9bbab5","line":1525,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1523,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"},{"line_number":1529,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","}],"source_content_type":"text/x-python","patch_set":1,"id":"79c19a9e_be6b02db","line":1526,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1524,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"},{"line_number":1529,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1530,"context_line":"        ####\"Partially optimal\", \"N/A\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"4222a0d6_ca0ad5ed","line":1527,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"},{"line_number":1529,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1530,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1531,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":1,"id":"29c9c071_281168ec","line":1528,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"},{"line_number":1529,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1530,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1531,"context_line":"        while True:"},{"line_number":1532,"context_line":"            rescan +\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"c5668952_fba16146","line":1529,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1527,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1528,"context_line":"        ###All health"},{"line_number":1529,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1530,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1531,"context_line":"        while True:"},{"line_number":1532,"context_line":"            rescan +\u003d 1"},{"line_number":1533,"context_line":"            volumeinfo \u003d self._helpers.get_volume([volume,clone])"}],"source_content_type":"text/x-python","patch_set":1,"id":"bbbe240d_a9ee3796","line":1530,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1531,"context_line":"        while True:"},{"line_number":1532,"context_line":"            rescan +\u003d 1"},{"line_number":1533,"context_line":"            volumeinfo \u003d self._helpers.get_volume([volume,clone])"},{"line_number":1534,"context_line":"            if len(volumeinfo) \u003d\u003d 2:"},{"line_number":1535,"context_line":"                for vol in volumeinfo:"},{"line_number":1536,"context_line":"                    if vol.get(\u0027type\u0027, \u0027\u0027) \u003d\u003d \u0027BACKUP\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6efd58f_8255977b","line":1533,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"                    if vol.get(\u0027type\u0027, \u0027\u0027) \u003d\u003d \u0027BACKUP\u0027:"},{"line_number":1537,"context_line":"                        if (vol[\u0027health\u0027] \u003d\u003d \u0027Optimal\u0027"},{"line_number":1538,"context_line":"                                and (vol[\u0027status\u0027] in wait_status)):"},{"line_number":1539,"context_line":"                            LOG.info("},{"line_number":1540,"context_line":"                                _(\u0027%(function)s %(action)s task,rescan \u0027"},{"line_number":1541,"context_line":"                                  \u0027%(scan)s times,clone %(clone)s  need \u0027"},{"line_number":1542,"context_line":"                                  \u0027wait,status is %(status)s,health is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"b21dbee4_8a01946e","line":1539,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"                                 \u0027health\u0027: vol[\u0027health\u0027],"},{"line_number":1550,"context_line":"                                 \u0027process\u0027: vol[\u0027r\u0027]})"},{"line_number":1551,"context_line":"                    elif vol[\u0027status\u0027] \u003d\u003d \u0027Cloning\u0027:"},{"line_number":1552,"context_line":"                        LOG.info("},{"line_number":1553,"context_line":"                            _(\u0027%(function)s %(action)s task:rescan \u0027"},{"line_number":1554,"context_line":"                              \u0027%(scan)s times,volume %(volume)s copy \u0027"},{"line_number":1555,"context_line":"                              \u0027process %(process)s%%.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6524466_9c9685d4","line":1552,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1641,"context_line":"        LOG.debug(\u0027[wait_volume_copy] leave: result\u003d%s\u0027, ret)"},{"line_number":1642,"context_line":"        return ret"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    ###  replication interface"},{"line_number":1645,"context_line":"    @cinder_utils.synchronized(\u0027qsan-failover_host\u0027, external\u003dTrue)"},{"line_number":1646,"context_line":"    def failover_host(self, context, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":1647,"context_line":"        LOG.info(\u0027[failover_host] enter: secondary_id\u003d%s\u0027, secondary_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e110c21_b260fc11","line":1644,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        if secondary_id \u003d\u003d self._slave.default_backend:"},{"line_number":1654,"context_line":"        ### fail back to default"},{"line_number":1655,"context_line":"            LOG.info(\u0027[failover_host] Replication will failback to default\u0027)"},{"line_number":1656,"context_line":"            (secondary_id,"},{"line_number":1657,"context_line":"             volumes_update,"}],"source_content_type":"text/x-python","patch_set":1,"id":"20b8ed9b_226e1449","line":1654,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E115 expected an indented block (comment)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        if secondary_id \u003d\u003d self._slave.default_backend:"},{"line_number":1654,"context_line":"        ### fail back to default"},{"line_number":1655,"context_line":"            LOG.info(\u0027[failover_host] Replication will failback to default\u0027)"},{"line_number":1656,"context_line":"            (secondary_id,"},{"line_number":1657,"context_line":"             volumes_update,"}],"source_content_type":"text/x-python","patch_set":1,"id":"687e8c68_63294be4","line":1654,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"                context, volumes, groups)"},{"line_number":1660,"context_line":"        elif (secondary_id is None"},{"line_number":1661,"context_line":"              or secondary_id \u003d\u003d self._slave.target[\u0027backend_id\u0027]):"},{"line_number":1662,"context_line":"        ### fail over"},{"line_number":1663,"context_line":"            LOG.info(\u0027[failover_host] Replication will failover to \u0027"},{"line_number":1664,"context_line":"                     \u0027secondary\u003d%s\u0027, self._slave.target[\u0027backend_id\u0027])"},{"line_number":1665,"context_line":"            (secondary_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7255bfaa_4cfe91e4","line":1662,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E115 expected an indented block (comment)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"                context, volumes, groups)"},{"line_number":1660,"context_line":"        elif (secondary_id is None"},{"line_number":1661,"context_line":"              or secondary_id \u003d\u003d self._slave.target[\u0027backend_id\u0027]):"},{"line_number":1662,"context_line":"        ### fail over"},{"line_number":1663,"context_line":"            LOG.info(\u0027[failover_host] Replication will failover to \u0027"},{"line_number":1664,"context_line":"                     \u0027secondary\u003d%s\u0027, self._slave.target[\u0027backend_id\u0027])"},{"line_number":1665,"context_line":"            (secondary_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1e583a1_fe2d6775","line":1662,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1747,"context_line":"        \"\"\""},{"line_number":1748,"context_line":"        capabilities \u003d host.get(\u0027capabilities\u0027) or {}"},{"line_number":1749,"context_line":"        source_backend \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1750,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1751,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1752,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1753,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"64222bdf_b354a8a3","line":1750,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"        source_backend \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1750,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1751,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1752,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1753,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1754,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1755,"context_line":"        target_pool \u003d capabilities.get(\u0027pool_name\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"58f01dee_5f4a98f2","line":1752,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1751,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1752,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1753,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1754,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1755,"context_line":"        target_pool \u003d capabilities.get(\u0027pool_name\u0027)"},{"line_number":1756,"context_line":"        target_system_id \u003d capabilities.get(\u0027system_id\u0027)"},{"line_number":1757,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df09a8c7_dd8eece6","line":1754,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1906,"context_line":"        self.is_enable \u003d False"},{"line_number":1907,"context_line":"        self._master_iqn \u003d None"},{"line_number":1908,"context_line":"        self._active_backend_id \u003d None"},{"line_number":1909,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1910,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1911,"context_line":"        if device and device[0]:"},{"line_number":1912,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e18c1fcb_6e2b46ab","line":1909,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E203 whitespace before \u0027:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"        self._master_iqn \u003d None"},{"line_number":1908,"context_line":"        self._active_backend_id \u003d None"},{"line_number":1909,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1910,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1911,"context_line":"        if device and device[0]:"},{"line_number":1912,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1913,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"98209f1c_7e6dd1f6","line":1910,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1909,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1910,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1911,"context_line":"        if device and device[0]:"},{"line_number":1912,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1913,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"},{"line_number":1914,"context_line":"                is_enable_key  \u003d True"},{"line_number":1915,"context_line":"                for key in required_key:"}],"source_content_type":"text/x-python","patch_set":1,"id":"518ba6ce_327d6e03","line":1912,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E117 over-indented","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1911,"context_line":"        if device and device[0]:"},{"line_number":1912,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1913,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"},{"line_number":1914,"context_line":"                is_enable_key  \u003d True"},{"line_number":1915,"context_line":"                for key in required_key:"},{"line_number":1916,"context_line":"                    if key not in device[0]:"},{"line_number":1917,"context_line":"                        is_enable_key \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"858f10c8_beba2c54","line":1914,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2026,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2027,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2028,"context_line":"        if iqn_name.strip():"},{"line_number":2029,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2030,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fd26e0a_3b5815ed","line":2027,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2026,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2027,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2028,"context_line":"        if iqn_name.strip():"},{"line_number":2029,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2030,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0d15a01c_59448940","line":2027,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2026,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2027,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2028,"context_line":"        if iqn_name.strip():"},{"line_number":2029,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2030,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a53737ee_ea7ae85a","line":2027,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2031,"context_line":"            self.is_enable \u003d False"},{"line_number":2032,"context_line":""},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":"    def check_replicated_enable(self, ctxt, volume_type_id):"},{"line_number":2035,"context_line":"        LOG.debug(\u0027[check_replicated_enable] volume_type_id\u003d%s\u0027,"},{"line_number":2036,"context_line":"                  volume_type_id)"},{"line_number":2037,"context_line":"        volume_type \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4e74d02_00d87b91","line":2034,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2049,"context_line":"        return is_replicated"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"    def create_volume_replication(self, volume):"},{"line_number":2052,"context_line":"        ### create backup volume"},{"line_number":2053,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2054,"context_line":"        LOG.debug(\u0027[create_volume_replication] enter: volume\u003d%s\u0027, name)"},{"line_number":2055,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"25441f6b_f8d0acac","line":2052,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2058,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":2059,"context_line":"            self._helpers.delete_volume(name, False)"},{"line_number":2060,"context_line":"            msg \u003d (_(\u0027Creating replication \\\u0027%s\\\u0027, create backup \u0027"},{"line_number":2061,"context_line":"                     \u0027volume failed.\u0027) % vol[\u0027name\u0027])"},{"line_number":2062,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2063,"context_line":""},{"line_number":2064,"context_line":"        ret \u003d self._initialize_relation(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ed2df7e_d02d5802","line":2061,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F821 undefined name \u0027vol\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"        else:"},{"line_number":2068,"context_line":"            self._helpers.delete_volume(name, False)"},{"line_number":2069,"context_line":"            msg \u003d (_(\u0027Creating replication \\\u0027%s\\\u0027, initialize relation \u0027"},{"line_number":2070,"context_line":"                     \u0027failed.\u0027) % vol[\u0027name\u0027])"},{"line_number":2071,"context_line":"            LOG.error(msg)"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":1,"id":"88036de1_253981ec","line":2070,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F821 undefined name \u0027vol\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2073,"context_line":"        return ret"},{"line_number":2074,"context_line":""},{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f528485_3ba0d3dc","line":2076,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2074,"context_line":""},{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d1d63164_425becbe","line":2077,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccb799b5_908af51d","line":2078,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e5de396_d228da77","line":2078,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fd56741c_094af7a8","line":2079,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2076,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e01e7d0_aca136bc","line":2079,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9efdbee5_17cb2bfd","line":2080,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2077,"context_line":"        ### failback all volume"},{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"564b6af1_5118920e","line":2080,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"c6760133_827618b3","line":2081,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2078,"context_line":"        \"\"\""},{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"27bc187a_d06aa396","line":2081,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd9df850_c9f75ac8","line":2082,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2079,"context_line":"        slave to master"},{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"23d529b4_7217cdfe","line":2082,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"},{"line_number":2086,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"4585b582_19bfa293","line":2083,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"        :param ctx:"},{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"},{"line_number":2086,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"9e81249a_29c33ef6","line":2083,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"},{"line_number":2086,"context_line":"        groups_update \u003d []"},{"line_number":2087,"context_line":"        if not self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"927d0abc_2c9eb51a","line":2084,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        :param volumes:"},{"line_number":2082,"context_line":"        :param groups:"},{"line_number":2083,"context_line":"        :return:"},{"line_number":2084,"context_line":"        \"\"\""},{"line_number":2085,"context_line":"        volumes_update \u003d []"},{"line_number":2086,"context_line":"        groups_update \u003d []"},{"line_number":2087,"context_line":"        if not self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8efdc40b_a22ce624","line":2084,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2098,"context_line":"        slave_connected \u003d self.slave_helpers.check_connected("},{"line_number":2099,"context_line":"            self.slave_pools[0])"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"        ###in use volume re attach.It will detach and attach again"},{"line_number":2102,"context_line":"        reattach_volumes \u003d []"},{"line_number":2103,"context_line":"        for vol in volumes:"},{"line_number":2104,"context_line":"            if vol.status \u003d\u003d \u0027in-use\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e622b0c7_3a201f98","line":2101,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2167,"context_line":"        return self.default_backend, volumes_update, groups_update"},{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2170,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2171,"context_line":"        :param ctx:"},{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d5ef20ee_69c789c7","line":2170,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2170,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2171,"context_line":"        :param ctx:"},{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"},{"line_number":2174,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3420bf7b_eeac6472","line":2171,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2169,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2170,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2171,"context_line":"        :param ctx:"},{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"},{"line_number":2174,"context_line":"        :return:"},{"line_number":2175,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"aace33fb_84988ab4","line":2172,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2170,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2171,"context_line":"        :param ctx:"},{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"},{"line_number":2174,"context_line":"        :return:"},{"line_number":2175,"context_line":"        \"\"\""},{"line_number":2176,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"06170b33_4e784606","line":2173,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2171,"context_line":"        :param ctx:"},{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"},{"line_number":2174,"context_line":"        :return:"},{"line_number":2175,"context_line":"        \"\"\""},{"line_number":2176,"context_line":"        volumes_update \u003d []"},{"line_number":2177,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"899cf991_409e7f3f","line":2174,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2172,"context_line":"        :param volumes:"},{"line_number":2173,"context_line":"        :param groups:"},{"line_number":2174,"context_line":"        :return:"},{"line_number":2175,"context_line":"        \"\"\""},{"line_number":2176,"context_line":"        volumes_update \u003d []"},{"line_number":2177,"context_line":"        groups_update \u003d []"},{"line_number":2178,"context_line":"        if self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8abf86d9_dddfff13","line":2175,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2190,"context_line":"        master_connected \u003d self.master_helpers.check_connected("},{"line_number":2191,"context_line":"            self.master_pools[0])"},{"line_number":2192,"context_line":""},{"line_number":2193,"context_line":"        ###in use volume re attach.It will detach and attach again"},{"line_number":2194,"context_line":"        reattach_volumes \u003d []"},{"line_number":2195,"context_line":"        for vol in volumes:"},{"line_number":2196,"context_line":"            if vol.status \u003d\u003d \u0027in-use\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e9e1a64_f3c7e757","line":2193,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2261,"context_line":"        return self._active_backend_id, volumes_update, groups_update"},{"line_number":2262,"context_line":""},{"line_number":2263,"context_line":"    def _initialize_relation(self, volume):"},{"line_number":2264,"context_line":"        ### backup volume mapping,only iscsi"},{"line_number":2265,"context_line":"        volumeName \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2266,"context_line":"        LOG.debug(\u0027[_initialize_relation] enter: volume\u003d%s\u0027, volumeName)"},{"line_number":2267,"context_line":"        lun \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce126b1f_b40c7b59","line":2264,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2277,"context_line":"                data\u003d_(\u0027Creating replication, \u0027"},{"line_number":2278,"context_line":"                       \u0027mapping backup volume failed.\u0027))"},{"line_number":2279,"context_line":""},{"line_number":2280,"context_line":"        ### get target portal to create relation"},{"line_number":2281,"context_line":"        iscsi_port \u003d self._helpers.get_iscsi_connect(self.target[\u0027target_id\u0027])"},{"line_number":2282,"context_line":"        ret \u003d False"},{"line_number":2283,"context_line":"        if (iscsi_port and iscsi_port[\u0027portal\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"62df0a21_8b49f2ee","line":2280,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2324,"context_line":"        return ret"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"}],"source_content_type":"text/x-python","patch_set":1,"id":"f23b474a_7fdf275b","line":2327,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2324,"context_line":"        return ret"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"}],"source_content_type":"text/x-python","patch_set":1,"id":"e87e1041_36a7e59a","line":2327,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"}],"source_content_type":"text/x-python","patch_set":1,"id":"cd4fb20f_4fdebf2f","line":2328,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"}],"source_content_type":"text/x-python","patch_set":1,"id":"1e763987_b42e7939","line":2328,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ef4edcf_3b32d6d8","line":2329,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2326,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"}],"source_content_type":"text/x-python","patch_set":1,"id":"cbdbd689_73492ce3","line":2329,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"}],"source_content_type":"text/x-python","patch_set":1,"id":"6284f597_4caa8e93","line":2330,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"        \"\"\""},{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"}],"source_content_type":"text/x-python","patch_set":1,"id":"618bfc39_62724c6f","line":2330,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6958e634_142a60d4","line":2331,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fcb4af07_376d93f2","line":2331,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6891e11f_cdab7142","line":2332,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        check replication sync status."},{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1679b12_aff026f8","line":2332,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"35f09c4f_732dcc15","line":2333,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2330,"context_line":"        syncing queuing,it will wait"},{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"02cb9d7c_501105d9","line":2333,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a796bbf_8b8c4cfc","line":2334,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"        unsync,it will start replication"},{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"38a153e2_263e1a82","line":2334,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2338,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c5638003_fdd2e583","line":2335,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2332,"context_line":"        noreplication,create lation and start replication"},{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2338,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f39cdb24_8920f1eb","line":2335,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2338,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"},{"line_number":2339,"context_line":"        interval \u003d 2"}],"source_content_type":"text/x-python","patch_set":1,"id":"af3793e9_ccf7fe23","line":2336,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"        synced,it will terminate"},{"line_number":2334,"context_line":"        :param volumename:"},{"line_number":2335,"context_line":"        :return:"},{"line_number":2336,"context_line":"        \"\"\""},{"line_number":2337,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2338,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"},{"line_number":2339,"context_line":"        interval \u003d 2"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1b008d4_1a996ee8","line":2336,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                     \u0027name\u0027: volume.display_name,"},{"line_number":2402,"context_line":"                     \u0027at\u0027: attachment_ref.connection_info["},{"line_number":2403,"context_line":"                         \u0027attachment_id\u0027]})"},{"line_number":2404,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2405,"context_line":"                ##    attachment_ref)"},{"line_number":2406,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2407,"context_line":"                                             volume.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"be868e73_60ccda70","line":2404,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2402,"context_line":"                     \u0027at\u0027: attachment_ref.connection_info["},{"line_number":2403,"context_line":"                         \u0027attachment_id\u0027]})"},{"line_number":2404,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2405,"context_line":"                ##    attachment_ref)"},{"line_number":2406,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2407,"context_line":"                                             volume.id)"},{"line_number":2408,"context_line":"                rescan \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"9716be07_583c4261","line":2405,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2404,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2405,"context_line":"                ##    attachment_ref)"},{"line_number":2406,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2407,"context_line":"                                             volume.id)"},{"line_number":2408,"context_line":"                rescan \u003d 0"},{"line_number":2409,"context_line":"                interval \u003d 1"},{"line_number":2410,"context_line":"                is_detaching \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"88055beb_5b37bad0","line":2407,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2443,"context_line":""},{"line_number":2444,"context_line":""},{"line_number":2445,"context_line":""},{"line_number":2446,"context_line":"        LOG.debug(\u0027[_replication_detach] leave\u0027)"},{"line_number":2447,"context_line":"        return True"},{"line_number":2448,"context_line":""},{"line_number":2449,"context_line":"    def _replication_attach(self, ctx, volumes):"}],"source_content_type":"text/x-python","patch_set":1,"id":"941b2497_2518a75f","line":2446,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E303 too many blank lines (3)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":2458,"context_line":"                     \u0027volume\u0027: volume.id,"},{"line_number":2459,"context_line":"                     \u0027name\u0027: volume.display_name,"},{"line_number":2460,"context_line":"                     \u0027device\u0027: attachment_ref.mountpoint})"},{"line_number":2461,"context_line":"                #attach \u003d self.volume_api.attachment_update(ctx,"},{"line_number":2462,"context_line":"                #    attachment_ref, connector)"},{"line_number":2463,"context_line":"                client.create_server_volume("},{"line_number":2464,"context_line":"                    ctx, attachment_ref.instance_uuid, volume.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"af02843f_1807c4dd","line":2461,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"78e5e9a7_a39d5d8f","line":18,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import paramiko\u0027 is identified as Third Party and \u0027import os\u0027 is identified as Stdlib.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":2,"id":"a1edfbf3_cb6f89aa","line":19,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import random\u0027 should be before \u0027import paramiko\u0027 and in a different group.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fea78c5_2f53da51","line":19,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import random\u0027 is identified as Stdlib and \u0027import paramiko\u0027 is identified as Third Party.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import excutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"from cinder.compute import nova"},{"line_number":29,"context_line":"from cinder import context"},{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"60b212b3_739c24ea","line":28,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H306: imports not in alphabetical order (oslo_utils.units, cinder.compute.nova)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import excutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"from cinder.compute import nova"},{"line_number":29,"context_line":"from cinder import context"},{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"045d20b3_bdf90d36","line":28,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.compute import nova\u0027 is identified as Application and \u0027from oslo_utils import units\u0027 is identified as Third Party.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder import coordination"},{"line_number":31,"context_line":"from cinder import exception"},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":"from cinder import interface"},{"line_number":34,"context_line":"from cinder import objects"},{"line_number":35,"context_line":"from cinder.objects import fields"},{"line_number":36,"context_line":"from cinder import utils as cinder_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"7e3a454c_3a90511f","line":33,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F401 \u0027cinder.interface\u0027 imported but unused","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9b8c2451_8bbc9b16","line":257,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"01eac7b8_d702c7f3","line":257,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"608bf0a6_a6a48dd6","line":258,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"91fbdf5c_fb9a0b51","line":258,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":262,"context_line":"                  volume_name, hostname, target)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1e48ed45_e2daace6","line":259,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def mkvolumehostmap(self, volume_name, hostname, target):"},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":262,"context_line":"                  volume_name, hostname, target)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b8a542b_6a521576","line":259,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":262,"context_line":"                  volume_name, hostname, target)"},{"line_number":263,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshMapVoltoHost\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"b5ea8406_e7ee6998","line":260,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        Map volume to host."},{"line_number":259,"context_line":"        If volume already mapped and multihostmap is True, use the force param."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug(\u0027[mkvolumehostmap] volume\u003d%s, host\u003d%s, target\u003d%s\u0027,"},{"line_number":262,"context_line":"                  volume_name, hostname, target)"},{"line_number":263,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshMapVoltoHost\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"4bd5cd1b_4c06c1e8","line":260,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":270,"context_line":"        except Exception as ex:"},{"line_number":271,"context_line":"            raise exception.VolumeDriverException("},{"line_number":272,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8226e045_fa833b85","line":270,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                message\u003d_(\u0027volume-to-host mapping error.\u0027))"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def mkvolume_with_host_group(self, name, size, units, poolName,"},{"line_number":275,"context_line":"                                protocol\u003d\u0027WITH_ISCSI\u0027, allow_hosts\u003d\u0027*\u0027):"},{"line_number":276,"context_line":"        \"\"\"Create volume with host group."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        Uses the create_volume API which automatically adds RAID volumes"}],"source_content_type":"text/x-python","patch_set":2,"id":"b69b631e_b016afe8","line":275,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        LOG.debug(\u0027[ssh_start_replication] volume\u003d%s\u0027, volume)"},{"line_number":471,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshStartReplication\u0027]"},{"line_number":472,"context_line":"        if volume:"},{"line_number":473,"context_line":"            ssh_cmd.extend([\u0027--volume\u0027,volume])"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        self.run_ssh_no_output(ssh_cmd)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8f53150b_2f0ad6e9","line":473,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        LOG.debug(\u0027[ssh_get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":479,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshGetReplicationSync\u0027]"},{"line_number":480,"context_line":"        if volume:"},{"line_number":481,"context_line":"            ssh_cmd.extend([\u0027--volume\u0027,volume])"},{"line_number":482,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def ssh_terminate_replication(self, volume):"}],"source_content_type":"text/x-python","patch_set":2,"id":"10d371b7_4ff2e07b","line":481,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                  name, setting)"},{"line_number":493,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":494,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":495,"context_line":"        for key , value in setting.items():"},{"line_number":496,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":497,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6a1258a2_8cdfb98b","line":495,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E203 whitespace before \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":494,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":495,"context_line":"        for key , value in setting.items():"},{"line_number":496,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":497,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def ssh_schedule_replication(self, name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1dd648_45fa37b5","line":496,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        ssh_cmd \u003d [\u0027cinder.php\u0027, \u0027Storage\u0027, \u0027sshSetVolumeProperty\u0027,"},{"line_number":494,"context_line":"                   \u0027--volume\u0027, name]"},{"line_number":495,"context_line":"        for key , value in setting.items():"},{"line_number":496,"context_line":"            ssh_cmd.extend([\u0027--\u0027+key,value])"},{"line_number":497,"context_line":"        return self.run_ssh_info(ssh_cmd)[\u0027arr\u0027]"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def ssh_schedule_replication(self, name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"72202080_7a55d3be","line":496,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            node \u003d storage_nodes[key]"},{"line_number":587,"context_line":"            wwpns \u003d set(node[\u0027WWPN\u0027])"},{"line_number":588,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":589,"context_line":"            if resp !\u003d None:"},{"line_number":590,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":591,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":592,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3361574c_8295b043","line":589,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E711 comparison to None should be \u0027if cond is not None:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            wwpns \u003d set(node[\u0027WWPN\u0027])"},{"line_number":588,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":589,"context_line":"            if resp !\u003d None:"},{"line_number":590,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":591,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":592,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"37bc452a_d9ece1e3","line":590,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            resp \u003d self.client.lsportfc(node[\u0027id\u0027])"},{"line_number":589,"context_line":"            if resp !\u003d None:"},{"line_number":590,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":591,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":592,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"            node[\u0027WWPN\u0027] \u003d list(wwpns)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a59769a4_8da57d1c","line":591,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            if resp !\u003d None:"},{"line_number":590,"context_line":"               for port_info in resp[\"FC\"]:"},{"line_number":591,"context_line":"                  if port_info[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":592,"context_line":"                      wwpns.add(port_info[\u0027WWPN\u0027])"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"            node[\u0027WWPN\u0027] \u003d list(wwpns)"},{"line_number":595,"context_line":"            LOG.debug(\u0027[add_fc_wwpns] WWPN on node %(node)s: %(wwpn)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a40d7fc4_0f007dad","line":592,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E111 indentation is not a multiple of 4","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":598,"context_line":"    def get_conn_fc_wwpns(self, host):"},{"line_number":599,"context_line":"        LOG.debug(\u0027[get_conn_fc_wwpns] host\u003d%s\u0027, host)"},{"line_number":600,"context_line":"        wwpns \u003d set()"},{"line_number":601,"context_line":"        resp \u003d self.client.getFcWwpns(\u0027\u0027,host\u003dhost)"},{"line_number":602,"context_line":"        for wwpn in resp.select(\u0027local_wwpn\u0027):"},{"line_number":603,"context_line":"            if wwpn is not None:"},{"line_number":604,"context_line":"                wwpns.add(wwpn)"}],"source_content_type":"text/x-python","patch_set":2,"id":"00ae49e3_ffa7ea67","line":601,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        LOG.debug(\u0027[delete_lun_map] volume\u003d%s, target\u003d%s, \u0027"},{"line_number":611,"context_line":"                  \u0027host\u003d%s, protocol\u003d%s\u0027,"},{"line_number":612,"context_line":"                  volumeName, target, host, protocol)"},{"line_number":613,"context_line":"        lun \u003d self.client.deleteLunMap(target, volumeName, host, protocol)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def get_fc_info(self):"},{"line_number":616,"context_line":"        LOG.debug(\u0027[get_fc_info] Retrieving FC wwnn/wwpn info\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3137c4c0_425f806b","line":613,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F841 local variable \u0027lun\u0027 is assigned to but never used","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        self.client.ssh_start_replication(volume)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"}],"source_content_type":"text/x-python","patch_set":2,"id":"67c8d3a0_d47a0dd2","line":779,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        self.client.ssh_start_replication(volume)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"}],"source_content_type":"text/x-python","patch_set":2,"id":"9392013f_6247be7c","line":779,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae6511c8_8b9fd413","line":780,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"}],"source_content_type":"text/x-python","patch_set":2,"id":"90b7ea23_040a9295","line":780,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"}],"source_content_type":"text/x-python","patch_set":2,"id":"05895988_de685161","line":781,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":778,"context_line":"    def get_replication_sync(self, volume\u003dNone):"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d71b80d_2392e4d1","line":781,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"}],"source_content_type":"text/x-python","patch_set":2,"id":"8813843c_a1007da1","line":782,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"}],"source_content_type":"text/x-python","patch_set":2,"id":"95862685_fba582f9","line":782,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d8a5f643_846f3716","line":783,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        get replication sync status"},{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"}],"source_content_type":"text/x-python","patch_set":2,"id":"2e2b649f_a8eb1b4d","line":783,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"}],"source_content_type":"text/x-python","patch_set":2,"id":"2de793af_105f914f","line":784,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        :return:"},{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"}],"source_content_type":"text/x-python","patch_set":2,"id":"df48b94d_569538be","line":784,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":2,"id":"73074e7e_b94098cd","line":785,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        [{"},{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":2,"id":"716b8030_80cfa281","line":785,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5b8b9e03_3bf8b07b","line":786,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            name :"},{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"aac7bca6_bd442f09","line":786,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"eee936cc_1339da3a","line":787,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            status : unsync synced syncing noreplication queuing"},{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a9d06fdd_4dd81081","line":787,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":791,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"240eb4d5_d4030931","line":788,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            speed : Mb/s"},{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":791,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"141ee899_cc17fe05","line":788,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":791,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"},{"line_number":792,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8d8da92_7d4b48d0","line":789,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":786,"context_line":"            progress:"},{"line_number":787,"context_line":"            lasttime :"},{"line_number":788,"context_line":"        }]"},{"line_number":789,"context_line":"        \"\"\""},{"line_number":790,"context_line":"        LOG.debug(\u0027[get_replication_sync] volume\u003d%s\u0027, volume)"},{"line_number":791,"context_line":"        result \u003d self.client.ssh_get_replication_sync(volume)"},{"line_number":792,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"432a955a_346f1e19","line":789,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":804,"context_line":"        return result"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"95ba2000_918fa990","line":807,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":804,"context_line":"        return result"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d61f3203_695facc4","line":807,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"796d9599_c1f66fd0","line":808,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"b66d26b2_f3da30a0","line":808,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9b889ace_f6abf980","line":809,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":806,"context_line":"    def check_connected(self, pool):"},{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"}],"source_content_type":"text/x-python","patch_set":2,"id":"998a0199_004cdde4","line":809,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":813,"context_line":"        ret \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"606cb5b4_b70b4e73","line":810,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        \"\"\""},{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":813,"context_line":"        ret \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"10a26377_f0a0ee4c","line":810,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":813,"context_line":"        ret \u003d False"},{"line_number":814,"context_line":"        if not pool:"}],"source_content_type":"text/x-python","patch_set":2,"id":"146e9ed3_0c7f9e37","line":811,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        request storage pool info"},{"line_number":809,"context_line":"        if pool is not or exception occurr return false"},{"line_number":810,"context_line":"        :return:"},{"line_number":811,"context_line":"        \"\"\""},{"line_number":812,"context_line":"        LOG.debug(\u0027[check_connected] pool\u003d%s\u0027, pool)"},{"line_number":813,"context_line":"        ret \u003d False"},{"line_number":814,"context_line":"        if not pool:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9c912476_faa37db5","line":811,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":876,"context_line":"            return self.result[key]"},{"line_number":877,"context_line":"        except KeyError:"},{"line_number":878,"context_line":"            msg \u003d (_(\u0027Did not find the expected key %(key)s in %(fun)s: \u0027"},{"line_number":879,"context_line":"                 \u0027%(raw)s.\u0027)"},{"line_number":880,"context_line":"               % {\u0027key\u0027: key, \u0027fun\u0027: self.ssh_cmd, \u0027raw\u0027: self.raw})"},{"line_number":881,"context_line":"            LOG.error(msg)"},{"line_number":882,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"94aff6bb_a8f45b5a","line":879,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":877,"context_line":"        except KeyError:"},{"line_number":878,"context_line":"            msg \u003d (_(\u0027Did not find the expected key %(key)s in %(fun)s: \u0027"},{"line_number":879,"context_line":"                 \u0027%(raw)s.\u0027)"},{"line_number":880,"context_line":"               % {\u0027key\u0027: key, \u0027fun\u0027: self.ssh_cmd, \u0027raw\u0027: self.raw})"},{"line_number":881,"context_line":"            LOG.error(msg)"},{"line_number":882,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d1dca03f_8a769207","line":880,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":921,"context_line":"    san.SanDriver,"},{"line_number":922,"context_line":"    driver.ManageableVD,"},{"line_number":923,"context_line":"    driver.MigrateVD,"},{"line_number":924,"context_line":"    driver.CloneableImageVD):"},{"line_number":925,"context_line":"    \"\"\"QSAN Storage volume driver."},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a87d4de_42be4c57","line":924,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E125 continuation line with same indent as next logical line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":960,"context_line":"            \u0027system_name\u0027: None,"},{"line_number":961,"context_line":"            \u0027system_id\u0027: None,"},{"line_number":962,"context_line":"            \u0027code_level\u0027: None,"},{"line_number":963,"context_line":"            \u0027version\u0027 : None"},{"line_number":964,"context_line":"        }"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        self._slave._active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4e25a495_5a925112","line":963,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E203 whitespace before \u0027:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"                    source_volume_name, snapshot_name)):"},{"line_number":1316,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1317,"context_line":"                data\u003d_(\u0027Snapshot %(snap)s no longer exists on storage \u0027"},{"line_number":1318,"context_line":"                        \u0027backend, possibly removed due to COW space \u0027"},{"line_number":1319,"context_line":"                        \u0027exhaustion. Delete this snapshot from Cinder \u0027"},{"line_number":1320,"context_line":"                        \u0027to restore consistency.\u0027) % {"},{"line_number":1321,"context_line":"                            \u0027snap\u0027: snapshot_name})"}],"source_content_type":"text/x-python","patch_set":2,"id":"8444bdca_aa1c006e","line":1318,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"        if self._slave.check_replicated_enable("},{"line_number":1353,"context_line":"                context.get_admin_context(),"},{"line_number":1354,"context_line":"                src_volume[\u0027volume_type_id\u0027]):"},{"line_number":1355,"context_line":"            #not support"},{"line_number":1356,"context_line":"            msg \u003d (_(\u0027Replication volume not support create clone volume.\u0027))"},{"line_number":1357,"context_line":"            LOG.error(msg)"},{"line_number":1358,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"36827afe_8efb309f","line":1355,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1481,"context_line":"        return pool_stats"},{"line_number":1482,"context_line":""},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"    def local_clone_copy(self, volume, clone, action\u003dNone, snapshot\u003dNone):"},{"line_number":1485,"context_line":"        \"\"\"Perform a local clone copy from volume to clone target.\"\"\""},{"line_number":1486,"context_line":"        LOG.debug(\u0027[local_clone_copy] enter: volume\u003d%s, clone\u003d%s, \u0027"},{"line_number":1487,"context_line":"                  \u0027action\u003d%s, snapshot\u003d%s\u0027, volume, clone, action, snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b5a4cf6_1f8388c4","line":1484,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"        interval \u003d self.configuration.qsan_copy_interval"},{"line_number":1522,"context_line":"        wait_status \u003d [\u0027Initiating\u0027, \u0027Rebuilding\u0027, \u0027Erasing\u0027,"},{"line_number":1523,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1524,"context_line":"        ###All status"},{"line_number":1525,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","}],"source_content_type":"text/x-python","patch_set":2,"id":"c6230366_632034b4","line":1524,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1522,"context_line":"        wait_status \u003d [\u0027Initiating\u0027, \u0027Rebuilding\u0027, \u0027Erasing\u0027,"},{"line_number":1523,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1524,"context_line":"        ###All status"},{"line_number":1525,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","}],"source_content_type":"text/x-python","patch_set":2,"id":"b6d92ebc_d995f911","line":1525,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1523,"context_line":"                       \u0027Delayed rebuilding\u0027]"},{"line_number":1524,"context_line":"        ###All status"},{"line_number":1525,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7184a22_20e8d1ea","line":1526,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1524,"context_line":"        ###All status"},{"line_number":1525,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d71e71d_16beb4b1","line":1527,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"        ###{\"Offline\", \"Online\", \"Initiating\","},{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"},{"line_number":1531,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","}],"source_content_type":"text/x-python","patch_set":2,"id":"32b8863d_babe88d0","line":1528,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"        ####\"Rebuilding\", \"Migrating\", \"Parity chking\","},{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"},{"line_number":1531,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1532,"context_line":"        ####\"Partially optimal\", \"N/A\"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"715dfc12_7ea8b17b","line":1529,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1527,"context_line":"        ####\"Cloning\", \"Rolling back\", \"Parity chking\","},{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"},{"line_number":1531,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1532,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1533,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b50e24d_8982fcbd","line":1530,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1528,"context_line":"        ####\"Replicating\", \"Erasing\", \"Moving\", \"Replacing\","},{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"},{"line_number":1531,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1532,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1533,"context_line":"        while True:"},{"line_number":1534,"context_line":"            rescan +\u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"f071d746_5006e801","line":1531,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"        ####\"Reclaiming\", \"Delayed rebuilding\", \"Relocation\", \"N/A\"};"},{"line_number":1530,"context_line":"        ###All health"},{"line_number":1531,"context_line":"        ###{\"Optimal\", \"Degraded\", \"Deleted\", \"Missing\", \"Failed\","},{"line_number":1532,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1533,"context_line":"        while True:"},{"line_number":1534,"context_line":"            rescan +\u003d 1"},{"line_number":1535,"context_line":"            volumeinfo \u003d self._helpers.get_volume([volume,clone])"}],"source_content_type":"text/x-python","patch_set":2,"id":"a8cdc404_d0aea3e5","line":1532,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1532,"context_line":"        ####\"Partially optimal\", \"N/A\"}"},{"line_number":1533,"context_line":"        while True:"},{"line_number":1534,"context_line":"            rescan +\u003d 1"},{"line_number":1535,"context_line":"            volumeinfo \u003d self._helpers.get_volume([volume,clone])"},{"line_number":1536,"context_line":"            if len(volumeinfo) \u003d\u003d 2:"},{"line_number":1537,"context_line":"                for vol in volumeinfo:"},{"line_number":1538,"context_line":"                    if vol.get(\u0027type\u0027, \u0027\u0027) \u003d\u003d \u0027BACKUP\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"93a0944b_98264371","line":1535,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"                    if vol.get(\u0027type\u0027, \u0027\u0027) \u003d\u003d \u0027BACKUP\u0027:"},{"line_number":1539,"context_line":"                        if (vol[\u0027health\u0027] \u003d\u003d \u0027Optimal\u0027"},{"line_number":1540,"context_line":"                                and (vol[\u0027status\u0027] in wait_status)):"},{"line_number":1541,"context_line":"                            LOG.info("},{"line_number":1542,"context_line":"                                _(\u0027%(function)s %(action)s task,rescan \u0027"},{"line_number":1543,"context_line":"                                  \u0027%(scan)s times,clone %(clone)s  need \u0027"},{"line_number":1544,"context_line":"                                  \u0027wait,status is %(status)s,health is \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"87581e7f_a943509b","line":1541,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1551,"context_line":"                                 \u0027health\u0027: vol[\u0027health\u0027],"},{"line_number":1552,"context_line":"                                 \u0027process\u0027: vol[\u0027r\u0027]})"},{"line_number":1553,"context_line":"                    elif vol[\u0027status\u0027] \u003d\u003d \u0027Cloning\u0027:"},{"line_number":1554,"context_line":"                        LOG.info("},{"line_number":1555,"context_line":"                            _(\u0027%(function)s %(action)s task:rescan \u0027"},{"line_number":1556,"context_line":"                              \u0027%(scan)s times,volume %(volume)s copy \u0027"},{"line_number":1557,"context_line":"                              \u0027process %(process)s%%.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"b91c663c_3c34ae32","line":1554,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1643,"context_line":"        LOG.debug(\u0027[wait_volume_copy] leave: result\u003d%s\u0027, ret)"},{"line_number":1644,"context_line":"        return ret"},{"line_number":1645,"context_line":""},{"line_number":1646,"context_line":"    ###  replication interface"},{"line_number":1647,"context_line":"    @cinder_utils.synchronized(\u0027qsan-failover_host\u0027, external\u003dTrue)"},{"line_number":1648,"context_line":"    def failover_host(self, context, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":1649,"context_line":"        LOG.info(\u0027[failover_host] enter: secondary_id\u003d%s\u0027, secondary_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"296eadbd_1465d1f3","line":1646,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        if secondary_id \u003d\u003d self._slave.default_backend:"},{"line_number":1656,"context_line":"        ### fail back to default"},{"line_number":1657,"context_line":"            LOG.info(\u0027[failover_host] Replication will failback to default\u0027)"},{"line_number":1658,"context_line":"            (secondary_id,"},{"line_number":1659,"context_line":"             volumes_update,"}],"source_content_type":"text/x-python","patch_set":2,"id":"87e94e48_37d5da10","line":1656,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E115 expected an indented block (comment)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        if secondary_id \u003d\u003d self._slave.default_backend:"},{"line_number":1656,"context_line":"        ### fail back to default"},{"line_number":1657,"context_line":"            LOG.info(\u0027[failover_host] Replication will failback to default\u0027)"},{"line_number":1658,"context_line":"            (secondary_id,"},{"line_number":1659,"context_line":"             volumes_update,"}],"source_content_type":"text/x-python","patch_set":2,"id":"361409f6_444143ad","line":1656,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                context, volumes, groups)"},{"line_number":1662,"context_line":"        elif (secondary_id is None"},{"line_number":1663,"context_line":"              or secondary_id \u003d\u003d self._slave.target[\u0027backend_id\u0027]):"},{"line_number":1664,"context_line":"        ### fail over"},{"line_number":1665,"context_line":"            LOG.info(\u0027[failover_host] Replication will failover to \u0027"},{"line_number":1666,"context_line":"                     \u0027secondary\u003d%s\u0027, self._slave.target[\u0027backend_id\u0027])"},{"line_number":1667,"context_line":"            (secondary_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"584cae37_09a3edae","line":1664,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E115 expected an indented block (comment)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                context, volumes, groups)"},{"line_number":1662,"context_line":"        elif (secondary_id is None"},{"line_number":1663,"context_line":"              or secondary_id \u003d\u003d self._slave.target[\u0027backend_id\u0027]):"},{"line_number":1664,"context_line":"        ### fail over"},{"line_number":1665,"context_line":"            LOG.info(\u0027[failover_host] Replication will failover to \u0027"},{"line_number":1666,"context_line":"                     \u0027secondary\u003d%s\u0027, self._slave.target[\u0027backend_id\u0027])"},{"line_number":1667,"context_line":"            (secondary_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"41c99e5d_9c994a13","line":1664,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"        \"\"\""},{"line_number":1750,"context_line":"        capabilities \u003d host.get(\u0027capabilities\u0027) or {}"},{"line_number":1751,"context_line":"        source_backend \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1752,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1753,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1754,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1755,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"a969315c_94fa9568","line":1752,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1751,"context_line":"        source_backend \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1752,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1753,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1754,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1755,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1756,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1757,"context_line":"        target_pool \u003d capabilities.get(\u0027pool_name\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"19c1705b_e6b087ac","line":1754,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1753,"context_line":"        source_pool \u003d volume_utils.extract_host(volume.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1754,"context_line":"                                               \u0027pool\u0027)"},{"line_number":1755,"context_line":"        target_backend \u003d volume_utils.extract_host(host.get(\u0027host\u0027, \u0027\u0027),"},{"line_number":1756,"context_line":"                                                  \u0027backend\u0027)"},{"line_number":1757,"context_line":"        target_pool \u003d capabilities.get(\u0027pool_name\u0027)"},{"line_number":1758,"context_line":"        target_system_id \u003d capabilities.get(\u0027system_id\u0027)"},{"line_number":1759,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"76457495_bee4335d","line":1756,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1908,"context_line":"        self.is_enable \u003d False"},{"line_number":1909,"context_line":"        self._master_iqn \u003d None"},{"line_number":1910,"context_line":"        self._active_backend_id \u003d None"},{"line_number":1911,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1912,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1913,"context_line":"        if device and device[0]:"},{"line_number":1914,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5b340b91_904296e1","line":1911,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E203 whitespace before \u0027:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1909,"context_line":"        self._master_iqn \u003d None"},{"line_number":1910,"context_line":"        self._active_backend_id \u003d None"},{"line_number":1911,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1912,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1913,"context_line":"        if device and device[0]:"},{"line_number":1914,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1915,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"70ac777f_396b8d2e","line":1912,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1911,"context_line":"        self.target \u003d {\u0027target_id\u0027 : \u00270\u0027}"},{"line_number":1912,"context_line":"        #self.volume_api \u003d volume_api.API()"},{"line_number":1913,"context_line":"        if device and device[0]:"},{"line_number":1914,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1915,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"},{"line_number":1916,"context_line":"                is_enable_key  \u003d True"},{"line_number":1917,"context_line":"                for key in required_key:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d593cd7e_929fd5fe","line":1914,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E117 over-indented","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1913,"context_line":"        if device and device[0]:"},{"line_number":1914,"context_line":"                required_key \u003d [\u0027san_ip\u0027, \u0027backend_id\u0027,"},{"line_number":1915,"context_line":"                                \u0027san_login\u0027, \u0027san_password\u0027, \u0027pool\u0027]"},{"line_number":1916,"context_line":"                is_enable_key  \u003d True"},{"line_number":1917,"context_line":"                for key in required_key:"},{"line_number":1918,"context_line":"                    if key not in device[0]:"},{"line_number":1919,"context_line":"                        is_enable_key \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"27fe3349_bb324d82","line":1916,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2026,"context_line":""},{"line_number":2027,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2028,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2029,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2030,"context_line":"        if iqn_name.strip():"},{"line_number":2031,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2032,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f205768b_57f15e60","line":2029,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2026,"context_line":""},{"line_number":2027,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2028,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2029,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2030,"context_line":"        if iqn_name.strip():"},{"line_number":2031,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2032,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d96df68_03fd9ace","line":2029,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2026,"context_line":""},{"line_number":2027,"context_line":"        iqn_name \u003d self._master._helpers.get_iqn_name()"},{"line_number":2028,"context_line":"        LOG.debug(\"backend \u0027%(backend)s\u0027 iqn name is \u0027%(iqn)s\u0027.\","},{"line_number":2029,"context_line":"                  {\u0027backend\u0027:self._master._backend_name,\u0027iqn\u0027:iqn_name})"},{"line_number":2030,"context_line":"        if iqn_name.strip():"},{"line_number":2031,"context_line":"            self._master_iqn \u003d iqn_name"},{"line_number":2032,"context_line":"        if not self._helpers.get_pool_attrs(self.pools[0]):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fed16da7_40d323fc","line":2029,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"            self.is_enable \u003d False"},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def check_replicated_enable(self, ctxt, volume_type_id):"},{"line_number":2037,"context_line":"        LOG.debug(\u0027[check_replicated_enable] volume_type_id\u003d%s\u0027,"},{"line_number":2038,"context_line":"                  volume_type_id)"},{"line_number":2039,"context_line":"        volume_type \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"199fedb1_66f6b0c4","line":2036,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2051,"context_line":"        return is_replicated"},{"line_number":2052,"context_line":""},{"line_number":2053,"context_line":"    def create_volume_replication(self, volume):"},{"line_number":2054,"context_line":"        ### create backup volume"},{"line_number":2055,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2056,"context_line":"        LOG.debug(\u0027[create_volume_replication] enter: volume\u003d%s\u0027, name)"},{"line_number":2057,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"90b0a001_0afec910","line":2054,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2075,"context_line":"        return ret"},{"line_number":2076,"context_line":""},{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"}],"source_content_type":"text/x-python","patch_set":2,"id":"59e4bf55_5e8bc614","line":2078,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2076,"context_line":""},{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d2aab131_15187f58","line":2079,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e631e6d6_8ea167b1","line":2080,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dd93d64a_b0d22cd6","line":2080,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"41f5582d_edbb9f52","line":2081,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2078,"context_line":"    def replication_failback(self, ctx, volumes, groups):"},{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"b0d19ae5_08105070","line":2081,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e0812baa_12aecbcd","line":2082,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2079,"context_line":"        ### failback all volume"},{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"09327c6c_07c12481","line":2082,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"e5bf673b_2b56ff1c","line":2083,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"        \"\"\""},{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4806e4_905f6862","line":2083,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"156388a9_afe20350","line":2084,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        slave to master"},{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"78e91a0a_33db9fbf","line":2084,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"},{"line_number":2088,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9913d7b9_6f85a4a6","line":2085,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2082,"context_line":"        :param ctx:"},{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"},{"line_number":2088,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd2c2548_1704e32d","line":2085,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"},{"line_number":2088,"context_line":"        groups_update \u003d []"},{"line_number":2089,"context_line":"        if not self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c8d7d20_ae99ab41","line":2086,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2083,"context_line":"        :param volumes:"},{"line_number":2084,"context_line":"        :param groups:"},{"line_number":2085,"context_line":"        :return:"},{"line_number":2086,"context_line":"        \"\"\""},{"line_number":2087,"context_line":"        volumes_update \u003d []"},{"line_number":2088,"context_line":"        groups_update \u003d []"},{"line_number":2089,"context_line":"        if not self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c023c0ef_6b64ca3e","line":2086,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2100,"context_line":"        slave_connected \u003d self.slave_helpers.check_connected("},{"line_number":2101,"context_line":"            self.slave_pools[0])"},{"line_number":2102,"context_line":""},{"line_number":2103,"context_line":"        ###in use volume re attach.It will detach and attach again"},{"line_number":2104,"context_line":"        reattach_volumes \u003d []"},{"line_number":2105,"context_line":"        for vol in volumes:"},{"line_number":2106,"context_line":"            if vol.status \u003d\u003d \u0027in-use\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"211e4027_300ee0f9","line":2103,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2169,"context_line":"        return self.default_backend, volumes_update, groups_update"},{"line_number":2170,"context_line":""},{"line_number":2171,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2172,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2173,"context_line":"        :param ctx:"},{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ce3a408_a26d3928","line":2172,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2170,"context_line":""},{"line_number":2171,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2172,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2173,"context_line":"        :param ctx:"},{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"},{"line_number":2176,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"f9961819_f383e016","line":2173,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2171,"context_line":"    def replication_failover(self, ctx, volumes, groups):"},{"line_number":2172,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2173,"context_line":"        :param ctx:"},{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"},{"line_number":2176,"context_line":"        :return:"},{"line_number":2177,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"2c06e92b_ce2bf439","line":2174,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2172,"context_line":"        \"\"\"Failover replication from master to slave."},{"line_number":2173,"context_line":"        :param ctx:"},{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"},{"line_number":2176,"context_line":"        :return:"},{"line_number":2177,"context_line":"        \"\"\""},{"line_number":2178,"context_line":"        volumes_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"0873de51_4c5cd751","line":2175,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2173,"context_line":"        :param ctx:"},{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"},{"line_number":2176,"context_line":"        :return:"},{"line_number":2177,"context_line":"        \"\"\""},{"line_number":2178,"context_line":"        volumes_update \u003d []"},{"line_number":2179,"context_line":"        groups_update \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"488b55d1_c6094db5","line":2176,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2174,"context_line":"        :param volumes:"},{"line_number":2175,"context_line":"        :param groups:"},{"line_number":2176,"context_line":"        :return:"},{"line_number":2177,"context_line":"        \"\"\""},{"line_number":2178,"context_line":"        volumes_update \u003d []"},{"line_number":2179,"context_line":"        groups_update \u003d []"},{"line_number":2180,"context_line":"        if self._active_backend_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"f4e33a83_809973fa","line":2177,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"        master_connected \u003d self.master_helpers.check_connected("},{"line_number":2193,"context_line":"            self.master_pools[0])"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        ###in use volume re attach.It will detach and attach again"},{"line_number":2196,"context_line":"        reattach_volumes \u003d []"},{"line_number":2197,"context_line":"        for vol in volumes:"},{"line_number":2198,"context_line":"            if vol.status \u003d\u003d \u0027in-use\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"08c25a38_49ae6d02","line":2195,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2263,"context_line":"        return self._active_backend_id, volumes_update, groups_update"},{"line_number":2264,"context_line":""},{"line_number":2265,"context_line":"    def _initialize_relation(self, volume):"},{"line_number":2266,"context_line":"        ### backup volume mapping,only iscsi"},{"line_number":2267,"context_line":"        volumeName \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2268,"context_line":"        LOG.debug(\u0027[_initialize_relation] enter: volume\u003d%s\u0027, volumeName)"},{"line_number":2269,"context_line":"        lun \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5740c86_77ffaee4","line":2266,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2279,"context_line":"                data\u003d_(\u0027Creating replication, \u0027"},{"line_number":2280,"context_line":"                       \u0027mapping backup volume failed.\u0027))"},{"line_number":2281,"context_line":""},{"line_number":2282,"context_line":"        ### get target portal to create relation"},{"line_number":2283,"context_line":"        iscsi_port \u003d self._helpers.get_iscsi_connect(self.target[\u0027target_id\u0027])"},{"line_number":2284,"context_line":"        ret \u003d False"},{"line_number":2285,"context_line":"        if (iscsi_port and iscsi_port[\u0027portal\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"b3484596_8535875e","line":2282,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2326,"context_line":"        return ret"},{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"}],"source_content_type":"text/x-python","patch_set":2,"id":"51912252_ec17310c","line":2329,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2326,"context_line":"        return ret"},{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"}],"source_content_type":"text/x-python","patch_set":2,"id":"b51774a2_763626ff","line":2329,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"}],"source_content_type":"text/x-python","patch_set":2,"id":"3d1d3c8b_269bb6bc","line":2330,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"}],"source_content_type":"text/x-python","patch_set":2,"id":"1756c3cd_2ba95182","line":2330,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"}],"source_content_type":"text/x-python","patch_set":2,"id":"db8dd2a3_f5bf275e","line":2331,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"    def _terminate_relation(self, volume):"},{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"}],"source_content_type":"text/x-python","patch_set":2,"id":"37b7f367_9721ecc3","line":2331,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"}],"source_content_type":"text/x-python","patch_set":2,"id":"6ea907a9_797594f3","line":2332,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        \"\"\""},{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"}],"source_content_type":"text/x-python","patch_set":2,"id":"efb239c1_70d0fe3d","line":2332,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"}],"source_content_type":"text/x-python","patch_set":2,"id":"50ab649b_f7d5e589","line":2333,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2330,"context_line":"        Replication master lunmap must be cancelled"},{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"}],"source_content_type":"text/x-python","patch_set":2,"id":"6c226e72_88357987","line":2333,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5c6aa2e_a8a37f88","line":2334,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"        check replication sync status."},{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fb36ae9_d0946752","line":2334,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ea734f9c_163e8fc9","line":2335,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2332,"context_line":"        syncing queuing,it will wait"},{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"239fb2d5_ea9206bc","line":2335,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"}],"source_content_type":"text/x-python","patch_set":2,"id":"70df6f46_49cdaf3e","line":2336,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"        unsync,it will start replication"},{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bde1e6ea_d0f05f7f","line":2336,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2340,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"87c1d9bc_ea08f06d","line":2337,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        noreplication,create lation and start replication"},{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2340,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"71c80540_e0daa248","line":2337,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2340,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"},{"line_number":2341,"context_line":"        interval \u003d 2"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b67ec64_d49a362f","line":2338,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        synced,it will terminate"},{"line_number":2336,"context_line":"        :param volumename:"},{"line_number":2337,"context_line":"        :return:"},{"line_number":2338,"context_line":"        \"\"\""},{"line_number":2339,"context_line":"        name \u003d VOLUME_PREFIX + volume[\u0027name\u0027][-12:]"},{"line_number":2340,"context_line":"        LOG.debug(\u0027[_terminate_relation] enter: volume\u003d%s\u0027, name)"},{"line_number":2341,"context_line":"        interval \u003d 2"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a51aa77_5ad49bf1","line":2338,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2403,"context_line":"                     \u0027name\u0027: volume.display_name,"},{"line_number":2404,"context_line":"                     \u0027at\u0027: attachment_ref.connection_info["},{"line_number":2405,"context_line":"                         \u0027attachment_id\u0027]})"},{"line_number":2406,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2407,"context_line":"                ##    attachment_ref)"},{"line_number":2408,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2409,"context_line":"                                             volume.id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"520a377c_4aca4f10","line":2406,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2404,"context_line":"                     \u0027at\u0027: attachment_ref.connection_info["},{"line_number":2405,"context_line":"                         \u0027attachment_id\u0027]})"},{"line_number":2406,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2407,"context_line":"                ##    attachment_ref)"},{"line_number":2408,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2409,"context_line":"                                             volume.id)"},{"line_number":2410,"context_line":"                rescan \u003d 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"da11c42e_b72e1dd9","line":2407,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E266 too many leading \u0027#\u0027 for block comment","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"                ##detach \u003d self.volume_api.attachment_delete(ctx,"},{"line_number":2407,"context_line":"                ##    attachment_ref)"},{"line_number":2408,"context_line":"                client.delete_server_volume(ctx, attachment_ref.instance_uuid,"},{"line_number":2409,"context_line":"                                             volume.id)"},{"line_number":2410,"context_line":"                rescan \u003d 0"},{"line_number":2411,"context_line":"                interval \u003d 1"},{"line_number":2412,"context_line":"                is_detaching \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"69ab4c80_5b343579","line":2409,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2445,"context_line":""},{"line_number":2446,"context_line":""},{"line_number":2447,"context_line":""},{"line_number":2448,"context_line":"        LOG.debug(\u0027[_replication_detach] leave\u0027)"},{"line_number":2449,"context_line":"        return True"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"    def _replication_attach(self, ctx, volumes):"}],"source_content_type":"text/x-python","patch_set":2,"id":"255aafb5_ed426fba","line":2448,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E303 too many blank lines (3)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":2460,"context_line":"                     \u0027volume\u0027: volume.id,"},{"line_number":2461,"context_line":"                     \u0027name\u0027: volume.display_name,"},{"line_number":2462,"context_line":"                     \u0027device\u0027: attachment_ref.mountpoint})"},{"line_number":2463,"context_line":"                #attach \u003d self.volume_api.attachment_update(ctx,"},{"line_number":2464,"context_line":"                #    attachment_ref, connector)"},{"line_number":2465,"context_line":"                client.create_server_volume("},{"line_number":2466,"context_line":"                    ctx, attachment_ref.instance_uuid, volume.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d5052e62_cc8071ed","line":2463,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import threading"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from eventlet import greenthread"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"b230e910_343aaa13","line":21,"updated":"2026-10-15 14:40:15.000000000","message":"`from eventlet import greenthread` (also qsan_rest.py:30, qsan_clone.py:19, qsan_backup.py:19-20). Cinder is removing eventlet; see `doc/source/contributor/threading.rst` and the `cinder-without-eventlet` job. New drivers must not depend on it. `greenthread.sleep` becomes `time.sleep`; `tpool.Proxy` in the backup driver is unnecessary without eventlet.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ce09eca08a5e27d07f5e7842a7e0d2728a5e7252","unresolved":true,"context_lines":[{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import threading"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from eventlet import greenthread"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"a64d0d95_a07465f1","line":21,"in_reply_to":"b230e910_343aaa13","updated":"2026-10-16 00:16:38.000000000","message":"As context, the community is trying to weed out eventlet as a dependency.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    cfg.ListOpt(\u0027qsan_pool_name\u0027, default\u003d[\u0027\u0027],"},{"line_number":60,"context_line":"                help\u003d\u0027Comma separated list of storage system storage \u0027"},{"line_number":61,"context_line":"                     \u0027pools for volumes.\u0027),"},{"line_number":62,"context_line":"    cfg.IntOpt(\u0027qsan_target\u0027, default\u003d0, min\u003d-1, max\u003d100,"},{"line_number":63,"context_line":"               help\u003d\u0027Storage system space-efficiency parameter for \u0027"},{"line_number":64,"context_line":"                    \u0027volumes (percentage)\u0027),"},{"line_number":65,"context_line":"    cfg.BoolOpt(\u0027qsan_multiattach\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7e204e08_db3dc88a","line":62,"updated":"2026-10-15 14:40:15.000000000","message":"`qsan_target` is described as a \"space-efficiency parameter (percentage)\" with `min\u003d-1, max\u003d100`, but it is used as the iSCSI target id (`str(self.configuration.qsan_target`) in qsan_iscsi.py:83, 98) and the backup copy says 0-127. Please fix the help text and bounds.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    cfg.IntOpt(\u0027qsan_target\u0027, default\u003d0, min\u003d-1, max\u003d100,"},{"line_number":63,"context_line":"               help\u003d\u0027Storage system space-efficiency parameter for \u0027"},{"line_number":64,"context_line":"                    \u0027volumes (percentage)\u0027),"},{"line_number":65,"context_line":"    cfg.BoolOpt(\u0027qsan_multiattach\u0027, default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027A volume support attach to multi host,need host \u0027"},{"line_number":67,"context_line":"                     \u0027install cluster.\u0027,"},{"line_number":68,"context_line":"                deprecated_for_removal\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"6597c938_21538e94","line":65,"updated":"2026-10-15 14:40:15.000000000","message":"`deprecated_for_removal\u003dTrue` on an option in its first release is odd; either support it or do not add it. Likewise `qsan_functions` (72, \"reserved for future use\") and `qsan_api_protocol` (90, a \"legacy override\" for a driver with no legacy) should be dropped until there is something for them to do.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":74,"context_line":"                     \u0027Reserved for future use.\u0027),"},{"line_number":75,"context_line":"    cfg.BoolOpt(\u0027replication_reattach\u0027, default\u003dFalse,"},{"line_number":76,"context_line":"                help\u003d\u0027Failover reattach.It will detach and attach\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027management_ip\u0027, default\u003dNone,"},{"line_number":78,"context_line":"               help\u003d\u0027QSAN management IP or hostname. Used by both \u0027"},{"line_number":79,"context_line":"                    \u0027REST and SSH modes.\u0027),"},{"line_number":80,"context_line":"    cfg.StrOpt(\u0027login_account\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"28869f0e_a6eb5c9e","line":77,"updated":"2026-10-15 14:40:15.000000000","message":"`management_ip`, `login_account`, `login_password` (and `replication_reattach` at 75) are unprefixed names in the per-backend namespace. The first three duplicate `san_ip`, `san_login`, `san_password`, which the driver already partly relies on (it reads `san_ssh_port` and `ssh_conn_timeout` at 1139-1142). Please use the SAN options and prefix anything vendor-specific with `qsan_`.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"dd26c990b2faebfa0fd7a90dbb315d2f639d26e6","unresolved":true,"context_lines":[{"line_number":327,"context_line":"                    LOG.debug("},{"line_number":328,"context_line":"                        \u0027[mkvolume_with_host_group] volume\u003d%s \u0027"},{"line_number":329,"context_line":"                        \u0027status\u003d%s, waiting...\u0027, name, volume_status)"},{"line_number":330,"context_line":"                greenthread.sleep(1)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        return result"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a95abd6_d259d7bc","line":330,"range":{"start_line":330,"start_character":16,"end_line":330,"end_character":36},"updated":"2026-10-16 15:29:11.000000000","message":"```suggestion\n                time.sleep(1)\n```","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"        try:"},{"line_number":1145,"context_line":"            ssh \u003d paramiko.SSHClient()"},{"line_number":1146,"context_line":"            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"},{"line_number":1147,"context_line":"            ssh.connect(ip, port\u003dport, username\u003dlogin, password\u003dpassword,"},{"line_number":1148,"context_line":"                        timeout\u003dtimeout)"},{"line_number":1149,"context_line":"            return ssh"}],"source_content_type":"text/x-python","patch_set":4,"id":"b355d288_8ec62d6e","line":1146,"updated":"2026-10-15 14:40:15.000000000","message":"`paramiko.AutoAddPolicy` accepts any host key, and `_delete_ssh_known_hosts_key` (1120-1134) rewrites `CONF.ssh_hosts_key_file` to drop the array\u0027s entry on a mismatch and reconnect. That silently accepts a changed host key, which is exactly what `strict_ssh_host_key_policy` exists to prevent, and it edits a file the operator owns. The same pattern is at 2025 and in qsan_backup.py:203-205. Please use `cinder.ssh_utils.SSHPool`, which honours the operator\u0027s policy and key file and pools connections instead of opening one per command.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1472,"context_line":"        if self._slave.is_enable:"},{"line_number":1473,"context_line":"            data[\u0027replication_enabled\u0027] \u003d self._slave.is_enable"},{"line_number":1474,"context_line":"            data[\u0027replication_targets\u0027] \u003d [self._slave.target[\u0027backend_id\u0027]]"},{"line_number":1475,"context_line":"            greenthread.spawn_n(self._slave.sync_all_replication)"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        self._stats \u003d data"},{"line_number":1478,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"64a10260_939a4c4d","line":1475,"updated":"2026-10-15 14:40:15.000000000","message":"`greenthread.spawn_n(self._slave.sync_all_replication)` fires a full SSH replication sync, unbounded, on every stats poll. Besides the eventlet dependency, this is the wrong trigger: stats collection should be read-only and cheap. If periodic sync is needed, make it a bounded scheduled task with its own interval, or drop it.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1533,"context_line":"                        pool_stats[\u0027provisioned_capacity_gb\u0027])"},{"line_number":1534,"context_line":"                    # Do not silently enable oversubscription when advertising"},{"line_number":1535,"context_line":"                    # Thin support. Validate exhaustion policy separately."},{"line_number":1536,"context_line":"                    pool_stats[\u0027max_over_subscription_ratio\u0027] \u003d 1.0"},{"line_number":1537,"context_line":"            else:"},{"line_number":1538,"context_line":"                msg \u003d _(\u0027Backend storage pool \"%s\" not found.\u0027) % pool"},{"line_number":1539,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"d215af04_8f13c601","line":1536,"updated":"2026-10-15 14:40:15.000000000","message":"Forcing `max_over_subscription_ratio` to 1.0 for thin pools overrides the operator\u0027s `max_over_subscription_ratio` setting, and replacing `allocated_capacity_gb` with provisioned capacity double-counts against the scheduler. Report provisioned capacity in `provisioned_capacity_gb` and let the configured ratio apply.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1742,"context_line":"        LOG.info(\u0027[freeze_backend] enter\u0027)"},{"line_number":1743,"context_line":"        return True"},{"line_number":1744,"context_line":""},{"line_number":1745,"context_line":"    def thaw_backend(self, context):"},{"line_number":1746,"context_line":"        LOG.info(\u0027[thaw_backend] enter\u0027)"},{"line_number":1747,"context_line":"        return self._slave.freeze_replication(context)"},{"line_number":1748,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1fbf162d_b429ecec","line":1745,"updated":"2026-10-15 14:40:15.000000000","message":"`thaw_backend` calls `self._slave.freeze_replication`, while `freeze_backend` (1741) returns True and does nothing. One of these names is wrong.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":2455,"context_line":""},{"line_number":2456,"context_line":"        LOG.debug(\u0027[_terminate_relation] leave: volume\u003d%s\u0027, name)"},{"line_number":2457,"context_line":""},{"line_number":2458,"context_line":"    def _replication_detach(self, ctx, volumes):"},{"line_number":2459,"context_line":"        LOG.debug(\u0027[_replication_detach] enter: %d volumes\u0027, len(volumes))"},{"line_number":2460,"context_line":"        client \u003d NovaClient()"},{"line_number":2461,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":4,"id":"081f8cfc_a51f15c5","line":2458,"updated":"2026-10-15 14:40:15.000000000","message":"`_replication_detach` and `_replication_attach` (2514) call Nova to detach and reattach guest volumes during `failover_host`, using a privileged Nova client (`NovaClient` at 2719) and polling `objects.Volume.get_by_id` for status. **A volume driver must not do this.** `failover_host` is defined to switch the backend and return model updates; moving attachments is the operator\u0027s and Nova\u0027s responsibility, and driving it from here races with the volume manager\u0027s own state handling. Please remove this path and the `replication_reattach` option.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":2572,"context_line":"        backend_name \u003d self._master._backend_name"},{"line_number":2573,"context_line":"        LOG.info(\u0027[sync_all_replication] enter: checking and syncing all \u0027"},{"line_number":2574,"context_line":"                 \u0027replication\u0027)"},{"line_number":2575,"context_line":"        volumelist \u003d objects.VolumeList.get_all(context.get_admin_context())"},{"line_number":2576,"context_line":"        for vol in volumelist:"},{"line_number":2577,"context_line":"            bkd_name \u003d vol[\u0027host\u0027].split(\u0027@\u0027)[1].split(\u0027#\u0027)[0]"},{"line_number":2578,"context_line":"            if bkd_name !\u003d backend_name:"}],"source_content_type":"text/x-python","patch_set":4,"id":"a6954cbc_1e81cab1","line":2575,"updated":"2026-10-15 14:40:15.000000000","message":"`objects.VolumeList.get_all(admin_context)` here, at 2611 and 2675, and `objects.Volume.get_by_id` in the replication paths: **drivers do not read the Cinder database.** The manager passes the driver every volume it needs to act on. If replication sync needs an inventory, derive it from the array, not from Cinder\u0027s tables.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":2716,"context_line":"        return ret"},{"line_number":2717,"context_line":""},{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"class NovaClient(nova.API):"},{"line_number":2720,"context_line":"    def create_server_volume(self, context, server_id, volume_id, device\u003dNone):"},{"line_number":2721,"context_line":"        \"\"\"Attach a volume to a server (used by replication failover).\"\"\""},{"line_number":2722,"context_line":"        nc \u003d nova.novaclient(context, privileged_user\u003dTrue, api_version\u003d\u00272.60\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"05441750_6a53ee11","line":2719,"updated":"2026-10-15 14:40:15.000000000","message":"`nova.API` is not part of the driver interface. No in-tree driver instantiates a Nova client, and `privileged_user\u003dTrue` with microversion 2.60 means the driver acts as the service user against every tenant\u0027s instances. **This class should not exist in a volume driver.**","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_fc.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from oslo_config import cfg"},{"line_number":2,"context_line":"from oslo_log import log as logging"},{"line_number":3,"context_line":"from oslo_utils import excutils"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4ebe0779_82b6ae81","line":1,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    from cinder.volume.drivers.qsan import qsan_common"},{"line_number":11,"context_line":"except ImportError:"},{"line_number":12,"context_line":"    from qsan import qsan_common"},{"line_number":13,"context_line":"from cinder.zonemanager import utils as fczm_utils"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e0a74bed_952002b5","line":13,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F401 \u0027cinder.zonemanager.utils as fczm_utils\u0027 imported but unused","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\"Check connector for at least one enabled FC protocol.\"\"\""},{"line_number":49,"context_line":"        LOG.debug(\u0027[validate_connector] Checking FC connector\u0027)"},{"line_number":50,"context_line":"        if \u0027wwpns\u0027 not in connector:"},{"line_number":51,"context_line":"            LOG.error(_(\u0027The connector does not contain the required information.\u0027))"},{"line_number":52,"context_line":"            raise exception.InvalidConnectorException(missing \u003d \u0027wwpns\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @utils.synchronized(\u0027qsan-host\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"927fcb29_b4c129bc","line":51,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\"Check connector for at least one enabled FC protocol.\"\"\""},{"line_number":49,"context_line":"        LOG.debug(\u0027[validate_connector] Checking FC connector\u0027)"},{"line_number":50,"context_line":"        if \u0027wwpns\u0027 not in connector:"},{"line_number":51,"context_line":"            LOG.error(_(\u0027The connector does not contain the required information.\u0027))"},{"line_number":52,"context_line":"            raise exception.InvalidConnectorException(missing \u003d \u0027wwpns\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @utils.synchronized(\u0027qsan-host\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ebfb544b_f7ea9da6","line":51,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @utils.synchronized(\u0027qsan-host\u0027, external\u003dTrue)"},{"line_number":55,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        LOG.debug(\u0027[initialize_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":58,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":59,"context_line":"        volume_name \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":60,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"}],"source_content_type":"text/x-python","patch_set":1,"id":"7cfeb7ac_4946f67a","line":57,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        LOG.debug(\u0027[initialize_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":58,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":59,"context_line":"        volume_name \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":60,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5672d294_a7a5fae9","line":59,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        LOG.debug(\u0027[initialize_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":58,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":59,"context_line":"        volume_name \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":60,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"796de6dd_79012a71","line":59,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        LOG.debug(\u0027[initialize_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":58,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":59,"context_line":"        volume_name \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":60,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        properties \u003d {}"},{"line_number":63,"context_line":"        properties[\u0027target_wwn\u0027] \u003d conn_wwpns"}],"source_content_type":"text/x-python","patch_set":1,"id":"edf56669_d84a50be","line":60,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E703 statement ends with a semicolon","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        properties[\u0027target_wwn\u0027] \u003d conn_wwpns"},{"line_number":64,"context_line":"        i_t_map \u003d {}"},{"line_number":65,"context_line":"        for i_wwpn in connector[\u0027wwpns\u0027]:"},{"line_number":66,"context_line":"            resultInfo \u003d self._helpers.fc_map_vol_to_host(volume_name, str(i_wwpn))"},{"line_number":67,"context_line":"            i_t_map[str(i_wwpn)] \u003d []"},{"line_number":68,"context_line":"            for t_wwpn in conn_wwpns:"},{"line_number":69,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f30cc54a_a754dceb","line":66,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        properties[\u0027initiator_target_map\u0027] \u003d i_t_map"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\u0027[initialize_connection] Step 1: FC mapping result\u003d%s\u0027, resultInfo)"},{"line_number":74,"context_line":"        if resultInfo \u003d\u003d \"noOnline\":"},{"line_number":75,"context_line":"            LOG.error(\u0027[initialize_connection] Volume %s is not Online, mount failed\u0027, volume_name)"},{"line_number":76,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb269136_5e8d03e7","line":73,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\u0027[initialize_connection] Step 1: FC mapping result\u003d%s\u0027, resultInfo)"},{"line_number":74,"context_line":"        if resultInfo \u003d\u003d \"noOnline\":"},{"line_number":75,"context_line":"            LOG.error(\u0027[initialize_connection] Volume %s is not Online, mount failed\u0027, volume_name)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                properties[\u0027target_discovered\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"791bb8af_828dcfb5","line":75,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (99 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            except Exception:"},{"line_number":84,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":85,"context_line":"                    self.terminate_connection(volume, connector)"},{"line_number":86,"context_line":"                    LOG.error(_(\u0027initialize_connection: Failed to collect return properties for volume %(vol)s and connector %(conn)s.\\n\u0027), {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            LOG.debug(\u0027[initialize_connection] leave: volume\u003d%(vol)s, properties\u003d%(prop)s\u0027,"},{"line_number":89,"context_line":"                      {\u0027vol\u0027: volume[\u0027id\u0027], \u0027prop\u0027: properties})"}],"source_content_type":"text/x-python","patch_set":1,"id":"76096b33_993436de","line":86,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            except Exception:"},{"line_number":84,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":85,"context_line":"                    self.terminate_connection(volume, connector)"},{"line_number":86,"context_line":"                    LOG.error(_(\u0027initialize_connection: Failed to collect return properties for volume %(vol)s and connector %(conn)s.\\n\u0027), {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            LOG.debug(\u0027[initialize_connection] leave: volume\u003d%(vol)s, properties\u003d%(prop)s\u0027,"},{"line_number":89,"context_line":"                      {\u0027vol\u0027: volume[\u0027id\u0027], \u0027prop\u0027: properties})"}],"source_content_type":"text/x-python","patch_set":1,"id":"007b35a7_dd0e6213","line":86,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (175 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                    self.terminate_connection(volume, connector)"},{"line_number":86,"context_line":"                    LOG.error(_(\u0027initialize_connection: Failed to collect return properties for volume %(vol)s and connector %(conn)s.\\n\u0027), {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            LOG.debug(\u0027[initialize_connection] leave: volume\u003d%(vol)s, properties\u003d%(prop)s\u0027,"},{"line_number":89,"context_line":"                      {\u0027vol\u0027: volume[\u0027id\u0027], \u0027prop\u0027: properties})"},{"line_number":90,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: properties, }"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ebb847b5_368117ea","line":88,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            LOG.debug(\u0027[initialize_connection] leave: volume\u003d%(vol)s, properties\u003d%(prop)s\u0027,"},{"line_number":89,"context_line":"                      {\u0027vol\u0027: volume[\u0027id\u0027], \u0027prop\u0027: properties})"},{"line_number":90,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: properties, }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @utils.synchronized(\u0027qsan-host\u0027, external \u003d True)"},{"line_number":93,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4ab97134_0526d364","line":90,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @utils.synchronized(\u0027qsan-host\u0027, external \u003d True)"},{"line_number":93,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":94,"context_line":"        LOG.debug(\u0027[terminate_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":95,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":96,"context_line":"        volumeName \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":97,"context_line":"        info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"ac491943_33bc9718","line":94,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":94,"context_line":"        LOG.debug(\u0027[terminate_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":95,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":96,"context_line":"        volumeName \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":97,"context_line":"        info \u003d {}"},{"line_number":98,"context_line":"        info \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: {}}"},{"line_number":99,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"}],"source_content_type":"text/x-python","patch_set":1,"id":"b5c500f0_409d61b9","line":96,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":94,"context_line":"        LOG.debug(\u0027[terminate_connection] enter: volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":95,"context_line":"                  {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":96,"context_line":"        volumeName \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":97,"context_line":"        info \u003d {}"},{"line_number":98,"context_line":"        info \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: {}}"},{"line_number":99,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"}],"source_content_type":"text/x-python","patch_set":1,"id":"2486bf7b_a2851208","line":96,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        volumeName \u003d\"cinder-\"+volume[\u0027name\u0027][-12:]"},{"line_number":97,"context_line":"        info \u003d {}"},{"line_number":98,"context_line":"        info \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: {}}"},{"line_number":99,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"},{"line_number":100,"context_line":"        properties \u003d {}"},{"line_number":101,"context_line":"        i_t_map \u003d {}"},{"line_number":102,"context_line":"        for i_wwpn in connector[\u0027wwpns\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"48d9a752_f0f911ed","line":99,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E703 statement ends with a semicolon","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        info \u003d {}"},{"line_number":98,"context_line":"        info \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: {}}"},{"line_number":99,"context_line":"        conn_wwpns \u003d self._helpers.get_fc_info();"},{"line_number":100,"context_line":"        properties \u003d {}"},{"line_number":101,"context_line":"        i_t_map \u003d {}"},{"line_number":102,"context_line":"        for i_wwpn in connector[\u0027wwpns\u0027]:"},{"line_number":103,"context_line":"            i_t_map[str(i_wwpn)] \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ced6b81_96cef16e","line":100,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F841 local variable \u0027properties\u0027 is assigned to but never used","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"},{"line_number":106,"context_line":"        info[\u0027data\u0027] \u003d {\u0027initiator_target_map\u0027: i_t_map}"},{"line_number":107,"context_line":"        target \u003d 0"},{"line_number":108,"context_line":"        result \u003d self._helpers.delete_lun_map(str(target),volumeName,connector[\u0027wwpns\u0027],\"WITH_FCP_ACL\")"},{"line_number":109,"context_line":"        LOG.debug(\u0027[terminate_connection] leave: volume\u003d%s\u0027, volume[\u0027id\u0027])"},{"line_number":110,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":1,"id":"58a40a43_73ca8b05","line":108,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"},{"line_number":106,"context_line":"        info[\u0027data\u0027] \u003d {\u0027initiator_target_map\u0027: i_t_map}"},{"line_number":107,"context_line":"        target \u003d 0"},{"line_number":108,"context_line":"        result \u003d self._helpers.delete_lun_map(str(target),volumeName,connector[\u0027wwpns\u0027],\"WITH_FCP_ACL\")"},{"line_number":109,"context_line":"        LOG.debug(\u0027[terminate_connection] leave: volume\u003d%s\u0027, volume[\u0027id\u0027])"},{"line_number":110,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":1,"id":"99068870_ed60ab34","line":108,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"},{"line_number":106,"context_line":"        info[\u0027data\u0027] \u003d {\u0027initiator_target_map\u0027: i_t_map}"},{"line_number":107,"context_line":"        target \u003d 0"},{"line_number":108,"context_line":"        result \u003d self._helpers.delete_lun_map(str(target),volumeName,connector[\u0027wwpns\u0027],\"WITH_FCP_ACL\")"},{"line_number":109,"context_line":"        LOG.debug(\u0027[terminate_connection] leave: volume\u003d%s\u0027, volume[\u0027id\u0027])"},{"line_number":110,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":1,"id":"df4bd40e_66017cc5","line":108,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"},{"line_number":106,"context_line":"        info[\u0027data\u0027] \u003d {\u0027initiator_target_map\u0027: i_t_map}"},{"line_number":107,"context_line":"        target \u003d 0"},{"line_number":108,"context_line":"        result \u003d self._helpers.delete_lun_map(str(target),volumeName,connector[\u0027wwpns\u0027],\"WITH_FCP_ACL\")"},{"line_number":109,"context_line":"        LOG.debug(\u0027[terminate_connection] leave: volume\u003d%s\u0027, volume[\u0027id\u0027])"},{"line_number":110,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":1,"id":"16d06b72_ec5ed9a2","line":108,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (103 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                i_t_map[i_wwpn].append(t_wwpn)"},{"line_number":106,"context_line":"        info[\u0027data\u0027] \u003d {\u0027initiator_target_map\u0027: i_t_map}"},{"line_number":107,"context_line":"        target \u003d 0"},{"line_number":108,"context_line":"        result \u003d self._helpers.delete_lun_map(str(target),volumeName,connector[\u0027wwpns\u0027],\"WITH_FCP_ACL\")"},{"line_number":109,"context_line":"        LOG.debug(\u0027[terminate_connection] leave: volume\u003d%s\u0027, volume[\u0027id\u0027])"},{"line_number":110,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b86292f_ddf3db60","line":108,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F841 local variable \u0027result\u0027 is assigned to but never used","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"}],"cinder/volume/drivers/qsan/qsan_iscsi.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\"Check connector for at least one enabled iSCSI protocol.\"\"\""},{"line_number":57,"context_line":"        LOG.debug(\u0027[validate_connector] Checking iSCSI connector\u0027)"},{"line_number":58,"context_line":"        if not connector.get(\u0027initiator\u0027):"},{"line_number":59,"context_line":"            LOG.error(_(\u0027The connector does not contain the required \u0027"},{"line_number":60,"context_line":"                          \u0027information.\u0027))"},{"line_number":61,"context_line":"            raise exception.InvalidConnectorException("},{"line_number":62,"context_line":"                missing\u003d\u0027initiator\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4272e3c_5db89286","line":59,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        LOG.debug(\u0027[validate_connector] Checking iSCSI connector\u0027)"},{"line_number":58,"context_line":"        if not connector.get(\u0027initiator\u0027):"},{"line_number":59,"context_line":"            LOG.error(_(\u0027The connector does not contain the required \u0027"},{"line_number":60,"context_line":"                          \u0027information.\u0027))"},{"line_number":61,"context_line":"            raise exception.InvalidConnectorException("},{"line_number":62,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"939d2bc0_137680bb","line":60,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@interface.volumedriver"},{"line_number":36,"context_line":"class QsanISCSIDriver(qsan_common.QsanCommonDriver):"},{"line_number":37,"context_line":"    \"\"\"QSAN Storage iSCSI volume driver."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6bfa2896_52c222f9","line":36,"updated":"2026-10-15 14:40:15.000000000","message":"Neither volume driver implements `get_driver_options` (required by `doc/source/contributor/drivers.rst`), and `cinder/opts.py` only gained the backup options: `qsan_opts` and `qsan_iscsi_opts` are not listed, so the sample config and the option reference will not show them. Please add the classmethod and run `tox -e genopts`.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":50,"context_line":"        LOG.info(\u0027[__init__] QsanISCSIDriver initializing\u0027)"},{"line_number":51,"context_line":"        super(QsanISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":52,"context_line":"        self.protocol \u003d \u0027iSCSI\u0027"},{"line_number":53,"context_line":"        self.configuration.append_config_values(qsan_iscsi_opts)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def validate_connector(self, connector):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5e37cb4c_31285509","line":52,"updated":"2026-10-15 14:40:15.000000000","message":"\u0027iSCSI\u0027 here, \u0027NVMe-TCP\u0027 in qsan_nvme.py:40, and the comparisons at qsan_common.py:1012, 1049, 1210, 1399 should use `cinder.common.constants.ISCSI` and `constants.NVMEOF_TCP`. The scheduler and os-brick match on those exact strings; literals that drift break protocol matching silently.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            raise exception.InvalidConnectorException("},{"line_number":62,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @utils.synchronized(\u0027qsan-iscsi-host\u0027, external\u003dTrue)"},{"line_number":65,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":66,"context_line":"        \"\"\"Map a volume to a host and return iSCSI connection properties.\"\"\""},{"line_number":67,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":4,"id":"fbad7b27_f846c259","line":64,"updated":"2026-10-15 14:40:15.000000000","message":"`utils.synchronized(\u0027qsan-iscsi-host\u0027, external\u003dTrue)` is one global file lock shared by every QSAN backend on the node; the NVMe twin (`qsan-nvme-host`) also wraps `delete_volume` and `manage_existing` and is shared with the backup driver. Please use `coordination.synchronized` with a backend-scoped name (and volume-scoped where the operation allows).","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":68,"context_line":"            \u0027[initialize_connection] enter: \u0027"},{"line_number":69,"context_line":"            \u0027volume\u003d%(vol)s, connector\u003d%(conn)s\u0027,"},{"line_number":70,"context_line":"            {\u0027vol\u0027: volume[\u0027id\u0027], \u0027conn\u0027: connector})"},{"line_number":71,"context_line":"        volume_name \u003d \"cinder-\" + volume[\u0027name\u0027][-12:]"},{"line_number":72,"context_line":"        api_protocol \u003d getattr("},{"line_number":73,"context_line":"            self, \u0027_api_protocol\u0027, self._resolve_api_protocol())"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"6581978d_bdb96d13","line":71,"updated":"2026-10-15 14:40:15.000000000","message":"Please do not invent a backend naming scheme. `volume[\u0027name\u0027]` is already `CONF.volume_name_template % name_id` (default `volume-\u003cuuid\u003e`), and the same holds for `snapshot.name` (`snapshot_name_template`) and `backup.name` (`backup_name_template`). Operators set those templates deliberately so that objects on the array are recognisable and consistent across backends; `\"cinder-\" + volume[\u0027name\u0027][-12:]` (and `_convert_name` at qsan_common.py:1199, used in 31 places, plus the inline copies at 1262, 1393, 1394, 2138 and 2225) silently discards the operator\u0027s choice.\n\nIt also keeps only 48 bits of the UUID, which is a real collision risk across a fleet and makes manage/unmanage round trips ambiguous, and the backup copy at qsan_backup.py:51 falls back to a random number when the name is empty.\n\nUse `volume.name`, `snapshot.name` and `backup.name` directly. If the array has a name-length limit that `volume-\u003c36-char-uuid\u003e` exceeds, state the limit in a comment and apply a single, documented, deterministic truncation in one helper, rather than a new prefix. Note that `volume.name` already honours `_name_id` after a migration, so you do not need to handle that yourself.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ce09eca08a5e27d07f5e7842a7e0d2728a5e7252","unresolved":true,"context_lines":[{"line_number":115,"context_line":"            \u0027target_portals\u0027: volume_attributes[\"portal\"],"},{"line_number":116,"context_line":"            \u0027target_luns\u0027: lun,"},{"line_number":117,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":118,"context_line":"            \u0027auth_method\u0027: \u0027\u0027,"},{"line_number":119,"context_line":"            \u0027auth_username\u0027: \u0027\u0027,"},{"line_number":120,"context_line":"            \u0027auth_password\u0027: \u0027\u0027,"},{"line_number":121,"context_line":"            \u0027discovery_auth_method\u0027: \u0027\u0027,"},{"line_number":122,"context_line":"            \u0027discovery_auth_username\u0027: \u0027\u0027,"},{"line_number":123,"context_line":"            \u0027discovery_auth_password\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c408e6dd_1f4d0512","line":120,"range":{"start_line":118,"start_character":20,"end_line":120,"end_character":29},"updated":"2026-10-16 00:16:38.000000000","message":"Broadly speaking: From the person who filed several security issues against cinder recently, these ought to be things and be minimally configurable. We don\u0027t know the SAN\u0027s behavior itself if it supports identifying other volumes and then attaching to them if somehow the initiator can be guessed or discovered at some point. So, ideally, more security is better here instead of the classical \"oh, they are attached to the storage network and know some details model.\" Furthermore, might be good to document as much as possible in driver docs in terms of security behavior of the device in that operators need to be able to make informed decisions.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_nvme.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # With a shared group there is no per-host namespace mapping. A force"},{"line_number":72,"context_line":"        # detach without a connector must not revoke other hosts\u0027 access."},{"line_number":73,"context_line":"        if connector is None:"},{"line_number":74,"context_line":"            LOG.warning(\u0027NVMe force detach without connector: retaining mapping \u0027"},{"line_number":75,"context_line":"                        \u0027for volume %s\u0027, volume[\u0027id\u0027])"},{"line_number":76,"context_line":"            return result"},{"line_number":77,"context_line":"        attachments \u003d volume.get(\u0027volume_attachment\u0027) or []"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8a32853_8ab85c68","line":74,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def migrate_volume(self, ctxt, volume, host):"},{"line_number":171,"context_line":"        # Use Cinder\u0027s host copy flow. The legacy backend-assisted migration"},{"line_number":172,"context_line":"        # deletes and replaces its target and carries iSCSI mapping assumptions."},{"line_number":173,"context_line":"        if volume.get(\u0027status\u0027) \u003d\u003d \u0027in-use\u0027:"},{"line_number":174,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":175,"context_line":"                data\u003d_(\u0027NVMe/TCP migration requires an available volume.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"15036873_61b2e976","line":172,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":39,"context_line":"        super(QsanNVMeDriver, self).__init__(*args, **kwargs)"},{"line_number":40,"context_line":"        self.protocol \u003d \u0027NVMe-TCP\u0027"},{"line_number":41,"context_line":"        if self._api_protocol !\u003d \u0027rest\u0027:"},{"line_number":42,"context_line":"            raise exception.InvalidInput("},{"line_number":43,"context_line":"                reason\u003d_(\u0027NVMe/TCP requires REST (QSM4 or XEVO3).\u0027))"},{"line_number":44,"context_line":"        if self.configuration.safe_get(\u0027replication_device\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"50adb273_0c1b863b","line":41,"updated":"2026-10-15 14:40:15.000000000","message":"Raising `InvalidInput` from `__init__` prevents the service from reporting the misconfiguration cleanly. These checks belong in `check_for_setup_error`.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_rest.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import ipaddress"},{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":1,"id":"a014a9ec_8a4c5983","line":27,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: F401 \u0027json\u0027 imported but unused","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import ipaddress"},{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":1,"id":"74396cbf_1f97f332","line":29,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import requests\u0027 is identified as Third Party and \u0027import re\u0027 is identified as Stdlib.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"},{"line_number":33,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"b2ce6bea_9533cd37","line":30,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import time\u0027 should be before \u0027import requests\u0027 and in a different group.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"},{"line_number":33,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2f48246_73845705","line":30,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import time\u0027 is identified as Stdlib and \u0027import requests\u0027 is identified as Third Party.","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        LOG.debug(\u0027[QsanRest._login] Login successful\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _ensure_token(self):"},{"line_number":113,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":114,"context_line":"        needed.\"\"\""},{"line_number":115,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":116,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"1e998d42_b3a5b556","line":113,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        LOG.debug(\u0027[QsanRest._login] Login successful\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _ensure_token(self):"},{"line_number":113,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":114,"context_line":"        needed.\"\"\""},{"line_number":115,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":116,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc402a49_6f6439cf","line":113,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _ensure_token(self):"},{"line_number":113,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":114,"context_line":"        needed.\"\"\""},{"line_number":115,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8efd7913_2ad5f92e","line":114,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _ensure_token(self):"},{"line_number":113,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":114,"context_line":"        needed.\"\"\""},{"line_number":115,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"64b770f5_e8bbb626","line":114,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            \u0027pool_id\u0027: vol.get(\u0027poolId\u0027, \u0027\u0027),"},{"line_number":640,"context_line":"            \u0027capacity\u0027: str(vol.get(\u0027totalSize\u0027, 0)),"},{"line_number":641,"context_line":"            \u0027size_mb\u0027: vol.get(\u0027totalSize\u0027, 0),"},{"line_number":642,"context_line":"            \u0027type\u0027: \u0027RAID Volume\u0027 if vol.get(\u0027type\u0027) \u003d\u003d \u0027RAID\u0027 else vol.get(\u0027type\u0027, \u0027\u0027),"},{"line_number":643,"context_line":"            \u0027used_capacity\u0027: str(vol.get(\u0027usedSize\u0027, 0)),"},{"line_number":644,"context_line":"            \u0027lun_id\u0027: vol.get(\u0027lunId\u0027, \u0027\u0027),"},{"line_number":645,"context_line":"            \u0027target_id\u0027: vol.get(\u0027targetId\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"a47adbd5_3c506213","line":642,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (88 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":647,"context_line":"        }"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"    def mkvolume_with_host_group(self, name, size, units, poolName,"},{"line_number":650,"context_line":"                                  protocol\u003d\u0027WITH_ISCSI\u0027, allow_hosts\u003d\u0027*\u0027):"},{"line_number":651,"context_line":"        \"\"\"Create volume via REST API."},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        Mirrors QsanSSH.mkvolume_with_host_group()."}],"source_content_type":"text/x-python","patch_set":1,"id":"5e21e39f_347741ad","line":650,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":751,"context_line":"        return {\u0027info\u0027: lun_id}"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":754,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":755,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."}],"source_content_type":"text/x-python","patch_set":1,"id":"b9914154_68eb5cb7","line":754,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":754,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":755,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":758,"context_line":"        We look up the volume ID by name first."}],"source_content_type":"text/x-python","patch_set":1,"id":"9cadb48d_003e5965","line":755,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":754,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":755,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":758,"context_line":"        We look up the volume ID by name first."},{"line_number":759,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"aaab8935_6529961e","line":756,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":755,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":758,"context_line":"        We look up the volume ID by name first."},{"line_number":759,"context_line":"        \"\"\""},{"line_number":760,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"abb4acf8_ebdf703c","line":757,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":758,"context_line":"        We look up the volume ID by name first."},{"line_number":759,"context_line":"        \"\"\""},{"line_number":760,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"},{"line_number":761,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"73f22cce_a81ac3b2","line":758,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":758,"context_line":"        We look up the volume ID by name first."},{"line_number":759,"context_line":"        \"\"\""},{"line_number":760,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        vol \u003d self._find_volume_by_name(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"98d70275_ad4b5981","line":759,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            volume, volume_id)"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":775,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":776,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":777,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":778,"context_line":"        self.rmvolume_with_host_group(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"34b300c6_405c4610","line":775,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            volume, volume_id)"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":775,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":776,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":777,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":778,"context_line":"        self.rmvolume_with_host_group(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a3d84525_e8730b33","line":775,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":775,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":776,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":777,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":778,"context_line":"        self.rmvolume_with_host_group(volume)"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b3b6ee77_40e4c2c1","line":776,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":775,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":776,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":777,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":778,"context_line":"        self.rmvolume_with_host_group(volume)"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a641ea67_c346a2d5","line":776,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        return {\u0027info\u0027: \u0027ok\u0027}"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def mkstartlocalclone(self, volumeName, snapshot\u003dNone):"},{"line_number":819,"context_line":"        \"\"\"No-op in REST mode: clone completes synchronously in mklocalclone.\"\"\""},{"line_number":820,"context_line":"        LOG.debug(\u0027[QsanRest.mkstartlocalclone] volume\u003d%s (no-op)\u0027, volumeName)"},{"line_number":821,"context_line":"        return {}"},{"line_number":822,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"59fe2d1c_832877b0","line":819,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        if not vol:"},{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":"        snapshots \u003d self._list_volume_snapshots(vol.get(\u0027id\u0027))"},{"line_number":857,"context_line":"        return self._find_snapshot_by_name(snapshots, snapshot_name) is not None"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def delete_snap(self, volume_name, snapshot_name):"},{"line_number":860,"context_line":"        LOG.debug(\u0027[QsanRest.delete_snap] volume\u003d%s snapshot\u003d%s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d212a3e4_d168a620","line":857,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":960,"context_line":"            return self._patch(path, json\u003dpayload)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    def ssh_set_volume_property(self, volume, setting):"},{"line_number":963,"context_line":"        \"\"\"Rename volume via REST API (mirrors QsanSSH.ssh_set_volume_property)."},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        setting dict must contain \u0027new_name\u0027."},{"line_number":966,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"920ff8a3_06eb10f1","line":963,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"        # If the operator specified a specific iSCSI IP, honour it."},{"line_number":1223,"context_line":"        if self._iscsi_ip:"},{"line_number":1224,"context_line":"            filtered \u003d [r for r in result if str(r[\u0027ip\u0027]) \u003d\u003d str(self._iscsi_ip)]"},{"line_number":1225,"context_line":"            if filtered:"},{"line_number":1226,"context_line":"                result \u003d filtered"},{"line_number":1227,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e4bb7be3_87b3fb91","line":1224,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1235,"context_line":"                   if group.get(\u0027name\u0027) \u003d\u003d name]"},{"line_number":1236,"context_line":"        if len(matches) !\u003d 1:"},{"line_number":1237,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1238,"context_line":"                data\u003d_(\u0027Expected exactly one NVMe host group named %s.\u0027) % name)"},{"line_number":1239,"context_line":"        group \u003d matches[0]"},{"line_number":1240,"context_line":"        if (group.get(\u0027protocol\u0027) !\u003d \u0027NVMeTCP\u0027 or"},{"line_number":1241,"context_line":"                str(group.get(\u0027volumeType\u0027, \u0027\u0027)).lower() !\u003d \u0027block\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0d17f461_0357e299","line":1238,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"                portals.append(portal)"},{"line_number":1336,"context_line":"        if not portals:"},{"line_number":1337,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1338,"context_line":"                data\u003d_(\u0027No online IPv4 portal on the NVMe host group interfaces.\u0027))"},{"line_number":1339,"context_line":"        return {\u0027target_nqn\u0027: next(iter(nqns)), \u0027portals\u0027: portals}"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"    def initialize_nvme_connection(self, volume_name, host_nqn, group_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"995e9f0f_7dbf0093","line":1338,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"        vol \u003d self._find_volume_by_name(volume_name)"},{"line_number":1343,"context_line":"        if not vol or vol.get(\u0027state\u0027, vol.get(\u0027status\u0027)) !\u003d \u0027Online\u0027:"},{"line_number":1344,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1345,"context_line":"                data\u003d_(\u0027NVMe volume %s is missing or not Online.\u0027) % volume_name)"},{"line_number":1346,"context_line":"        group \u003d self.get_nvme_host_group(group_name)"},{"line_number":1347,"context_line":"        self._check_nvme_host(group, host_nqn)"},{"line_number":1348,"context_line":"        properties \u003d self.get_nvme_connection_properties(group)"}],"source_content_type":"text/x-python","patch_set":1,"id":"db23b434_5dcfcad7","line":1345,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8acb8b1c3de85e0e4b725f90d1119e5fcccbdc2c","unresolved":false,"context_lines":[{"line_number":1365,"context_line":"                        break"},{"line_number":1366,"context_line":"                    if time.monotonic() \u003e\u003d deadline:"},{"line_number":1367,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":1368,"context_line":"                            data\u003d_(\u0027Timed out waiting for NVMe namespace mapping.\u0027))"},{"line_number":1369,"context_line":"                    greenthread.sleep(1)"},{"line_number":1370,"context_line":"            except Exception:"},{"line_number":1371,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0d47fd8c_7e8775f3","line":1368,"updated":"2026-09-18 13:22:32.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"84d932adb6e5b22f51f6a62c346cfe9ecb9128e0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import ipaddress"},{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":2,"id":"96b66140_629f53bd","line":27,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: F401 \u0027json\u0027 imported but unused","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import ipaddress"},{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"}],"source_content_type":"text/x-python","patch_set":2,"id":"77f41c43_d993e86e","line":29,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import requests\u0027 is identified as Third Party and \u0027import re\u0027 is identified as Stdlib.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"},{"line_number":33,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"c169ee46_d1f4515f","line":30,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import time\u0027 should be before \u0027import requests\u0027 and in a different group.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":"import re"},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"import time"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from eventlet import greenthread"},{"line_number":33,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"823907ec_95870cf2","line":30,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import time\u0027 is identified as Stdlib and \u0027import requests\u0027 is identified as Third Party.","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        LOG.debug(\u0027[QsanRest._login] Login successful\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _ensure_token(self):"},{"line_number":114,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":115,"context_line":"        needed.\"\"\""},{"line_number":116,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":117,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"242f1cd0_4a8be673","line":114,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        LOG.debug(\u0027[QsanRest._login] Login successful\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _ensure_token(self):"},{"line_number":114,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":115,"context_line":"        needed.\"\"\""},{"line_number":116,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":117,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"b2e82e72_918d7a04","line":114,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _ensure_token(self):"},{"line_number":114,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":115,"context_line":"        needed.\"\"\""},{"line_number":116,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":117,"context_line":"            return"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"99d6d436_d1a21c58","line":115,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _ensure_token(self):"},{"line_number":114,"context_line":"        \"\"\"Ensure we have a valid access token, refresh or re-login if"},{"line_number":115,"context_line":"        needed.\"\"\""},{"line_number":116,"context_line":"        if self._access_token and time.time() \u003c self._token_expire_time - 30:"},{"line_number":117,"context_line":"            return"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f1794359_2c0aa580","line":115,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        }"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def mkvolume_with_host_group(self, name, size, units, poolName,"},{"line_number":652,"context_line":"                                  protocol\u003d\u0027WITH_ISCSI\u0027, allow_hosts\u003d\u0027*\u0027):"},{"line_number":653,"context_line":"        \"\"\"Create volume via REST API."},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        Mirrors QsanSSH.mkvolume_with_host_group()."}],"source_content_type":"text/x-python","patch_set":2,"id":"f4aef8b7_9a580d8a","line":652,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":753,"context_line":"        return {\u0027info\u0027: lun_id}"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":756,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":757,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."}],"source_content_type":"text/x-python","patch_set":2,"id":"7e6e6eed_c96b02a3","line":756,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":756,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":757,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":760,"context_line":"        We look up the volume ID by name first."}],"source_content_type":"text/x-python","patch_set":2,"id":"946b5055_a26c4119","line":757,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":755,"context_line":"    def rmvolume_with_host_group(self, volume):"},{"line_number":756,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":757,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":760,"context_line":"        We look up the volume ID by name first."},{"line_number":761,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"70b43c34_76d9620c","line":758,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        \"\"\"Delete volume via REST API. Mirrors"},{"line_number":757,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":760,"context_line":"        We look up the volume ID by name first."},{"line_number":761,"context_line":"        \"\"\""},{"line_number":762,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1f29ae4_c239dda0","line":759,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        QsanSSH.rmvolume_with_host_group()."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":760,"context_line":"        We look up the volume ID by name first."},{"line_number":761,"context_line":"        \"\"\""},{"line_number":762,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4b543a7f_89f1171f","line":760,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        REST API needs volume ID (numeric), but SSH uses volume name."},{"line_number":760,"context_line":"        We look up the volume ID by name first."},{"line_number":761,"context_line":"        \"\"\""},{"line_number":762,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume_with_host_group] volume\u003d%s\u0027, volume)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"        vol \u003d self._find_volume_by_name(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"17111b20_1d466944","line":761,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":774,"context_line":"            volume, volume_id)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":778,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":779,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":780,"context_line":"        self.rmvolume_with_host_group(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"21239dae_99cbf85d","line":777,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":774,"context_line":"            volume, volume_id)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":778,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":779,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":780,"context_line":"        self.rmvolume_with_host_group(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"616fe42e_98554d16","line":777,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":778,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":779,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":780,"context_line":"        self.rmvolume_with_host_group(volume)"},{"line_number":781,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"a9855b87_5b1c7003","line":778,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def rmvolume(self, volume, force\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Delete volume (without host group cleanup)."},{"line_number":778,"context_line":"        Mirrors QsanSSH.rmvolume().\"\"\""},{"line_number":779,"context_line":"        LOG.debug(\u0027[QsanRest.rmvolume] volume\u003d%s\u0027, volume)"},{"line_number":780,"context_line":"        self.rmvolume_with_host_group(volume)"},{"line_number":781,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8eea7f0e_ccdbc0fe","line":778,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1267,"context_line":"        if len(matches) !\u003d 1:"},{"line_number":1268,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1269,"context_line":"                data\u003d_(\u0027Expected exactly one NVMe host group named \u0027"},{"line_number":1270,"context_line":"                        \u0027%s.\u0027) % name)"},{"line_number":1271,"context_line":"        group \u003d matches[0]"},{"line_number":1272,"context_line":"        if (group.get(\u0027protocol\u0027) !\u003d \u0027NVMeTCP\u0027 or"},{"line_number":1273,"context_line":"                str(group.get(\u0027volumeType\u0027, \u0027\u0027)).lower() !\u003d \u0027block\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"08880159_e5b4b5d0","line":1270,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"56369e8e3d3dcd33782dd1d4e9ded9e86d8a9d95","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1278,"context_line":"                data\u003d_(\u0027NVMe host group has no backend id.\u0027))"},{"line_number":1279,"context_line":"        if not selected:"},{"line_number":1280,"context_line":"            self._nvme_host_groups[name] \u003d (str(group[\u0027id\u0027]), group.get(\u0027name\u0027))"},{"line_number":1281,"context_line":"            LOG.info(\u0027Selected NVMe host group %(name)s (id\u003d%(id)s)\u0027,"},{"line_number":1282,"context_line":"                     {\u0027name\u0027: group.get(\u0027name\u0027), \u0027id\u0027: group[\u0027id\u0027]})"},{"line_number":1283,"context_line":"        return group"}],"source_content_type":"text/x-python","patch_set":2,"id":"98bfc154_ac2fe20f","line":1280,"updated":"2026-09-21 12:35:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"14d861ace868b9cb2a556dff00861e080715ef34"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":164,"context_line":"        url \u003d \u0027%s%s\u0027 % (self._base_url, path)"},{"line_number":165,"context_line":"        kwargs.setdefault(\u0027timeout\u0027, self._timeout)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        session \u003d requests.Session()"},{"line_number":168,"context_line":"        session.verify \u003d self._ssl_verify"},{"line_number":169,"context_line":"        if self._access_token:"},{"line_number":170,"context_line":"            session.headers[\u0027Authorization\u0027] \u003d self._access_token"}],"source_content_type":"text/x-python","patch_set":4,"id":"d197912b_b2874ba9","line":167,"updated":"2026-10-15 14:40:15.000000000","message":"A new `requests.Session()` per request means no connection reuse and a TLS handshake per call. Keep one session per client (the login path at 93 can share it).","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1533,"context_line":"        return str(nsid)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    @staticmethod"},{"line_number":1536,"context_line":"    def _check_nvme_host(group, host_nqn):"},{"line_number":1537,"context_line":"        allowed \u003d [host.get(\u0027nqn\u0027)"},{"line_number":1538,"context_line":"                   for host in group.get(\u0027nqnHostList\u0027) or []]"},{"line_number":1539,"context_line":"        if not host_nqn or (host_nqn not in allowed and \u0027*\u0027 not in allowed):"}],"source_content_type":"text/x-python","patch_set":4,"id":"33d01280_6fbc6885","line":1536,"updated":"2026-10-15 14:40:15.000000000","message":"This is the only access check on the NVMe path: the connector\u0027s NQN must be in the shared group\u0027s allow-list. Namespaces are then mapped to the whole group (1673), so every compute node in that group can reach every Cinder NVMe volume as soon as it is mapped, whichever tenant owns it. That is why `terminate_connection` has to guess from `volume_attachment` whether another host still needs the mapping and why force-detach leaves it in place.\n\nDoes the array support per-host (or per-host-group-per-connector) namespace ACLs? If yes, the driver should create or select a group per connector NQN the way the iSCSI path maps per initiator. If no, the documentation has to state plainly that all hosts in the group share access to all volumes, and the driver should refuse to start unless the operator opts into that, because it is not acceptable for a multi-tenant deployment.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"cinder/volume/drivers/qsan/qsan_snapshot.py":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":157,"context_line":"                    expected \u003d {\u0027status\u0027: \u0027available\u0027, \u0027deleted\u0027: False,"},{"line_number":158,"context_line":"                                \u0027volume_id\u0027: volume_id,"},{"line_number":159,"context_line":"                                \u0027updated_at\u0027: snapshot.updated_at}"},{"line_number":160,"context_line":"                    if snapshot.conditional_update("},{"line_number":161,"context_line":"                            {\u0027status\u0027: \u0027error\u0027}, expected):"},{"line_number":162,"context_line":"                        LOG.error(\u0027Snapshot %(snapshot)s of volume %(volume)s \u0027"},{"line_number":163,"context_line":"                                  \u0027is absent from storage on %(backend)s in \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"0f482ec7_ce9d578a","line":160,"updated":"2026-10-15 14:40:15.000000000","message":"This background loop lists Cinder snapshots by host (109) and flips them to `error` with `conditional_update`. **Writing Cinder object state from a driver is out of bounds;** status reconciliation belongs to the manager and to operators, and a driver-owned `FixedIntervalLoopingCall` (44) with its own REST session is invisible to the service\u0027s lifecycle. Please drop the monitor and `qsan_snapshot_poll_interval`. If the array can lose snapshots silently, that is worth documenting; it is not something the driver should paper over by editing the database.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"doc/source/reference/support-matrix.rst":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":".. support_matrix:: support-matrix.ini"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"QSAN driver notes"},{"line_number":70,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"See :doc:`../configuration/block-storage/drivers/qsan-driver` for setup."}],"source_content_type":"text/x-rst","patch_set":4,"id":"83de2e0e_4def1b1a","line":69,"updated":"2026-10-15 14:40:15.000000000","message":"A per-driver notes block here is unusual; the other drivers keep this material in their own configuration page. Please move it to `qsan-driver.rst`, and merge the five-line `qsan-volume-driver.rst` stub into that page as well.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}],"releasenotes/notes/add-qsan-iscsi-driver-a1b2c3d4e5f6a7b8.yaml":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"5876835355856247a1e05e69024b73f988c51062","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added iSCSI and NVMe-TCP volume drivers for QSAN XCubeNXT and XCubeFIT"},{"line_number":5,"context_line":"    series storage arrays. The drivers support REST API communication (QSM4,"},{"line_number":6,"context_line":"    XEVO3 firmware) and SSH/CLI communication (XEVO2 firmware, iSCSI only),"},{"line_number":7,"context_line":"    selected automatically via the ``qsan_os`` configuration option."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9c33aae0_26bf0d2a","line":4,"updated":"2026-10-15 14:40:15.000000000","message":"Please name both driver classes, list the required options, and mention the backup driver (or drop it from this change). The file name says iSCSI only.","commit_id":"5d20476f0c083b6a0bca88f76c3f520eadbc2a1f"}]}
