)]}'
{"cinder/tests/unit/volume/drivers/test_nimble.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"dffda4b46d637dcc06c6ee294b25cca90db2dd8e","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"            id\u003d12, multiattach\u003dFalse)"},{"line_number":1373,"context_line":""},{"line_number":1374,"context_line":"        self.driver.terminate_connection("},{"line_number":1375,"context_line":"            volume, "},{"line_number":1376,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator1\u0027})"},{"line_number":1377,"context_line":"        expected_calls \u003d [mock.call._get_igroupname_for_initiator("},{"line_number":1378,"context_line":"            \u0027test-initiator1\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_e96417e8","line":1375,"updated":"2020-08-12 11:18:56.000000000","message":"pep8: W291 trailing whitespace","commit_id":"6cd16267a792fd9535fa4db2cfd9a93c3be3bf2e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"dffda4b46d637dcc06c6ee294b25cca90db2dd8e","unresolved":false,"context_lines":[{"line_number":1422,"context_line":"            id\u003d14, multiattach\u003dFalse)"},{"line_number":1423,"context_line":""},{"line_number":1424,"context_line":"        self.driver.terminate_connection("},{"line_number":1425,"context_line":"            volume, "},{"line_number":1426,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator1\u0027,"},{"line_number":1427,"context_line":"             \u0027wwpns\u0027: [\u00271000000000000000\u0027]})"},{"line_number":1428,"context_line":"        expected_calls \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_496263da","line":1425,"updated":"2020-08-12 11:18:56.000000000","message":"pep8: W291 trailing whitespace","commit_id":"6cd16267a792fd9535fa4db2cfd9a93c3be3bf2e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"dffda4b46d637dcc06c6ee294b25cca90db2dd8e","unresolved":false,"context_lines":[{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"        self.assertRaises("},{"line_number":1455,"context_line":"            exception.VolumeDriverException,"},{"line_number":1456,"context_line":"            self.driver.terminate_connection, "},{"line_number":1457,"context_line":"            volume, "},{"line_number":1458,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator3\u0027})"},{"line_number":1459,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_295f2f0f","line":1456,"updated":"2020-08-12 11:18:56.000000000","message":"pep8: W291 trailing whitespace","commit_id":"6cd16267a792fd9535fa4db2cfd9a93c3be3bf2e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"dffda4b46d637dcc06c6ee294b25cca90db2dd8e","unresolved":false,"context_lines":[{"line_number":1454,"context_line":"        self.assertRaises("},{"line_number":1455,"context_line":"            exception.VolumeDriverException,"},{"line_number":1456,"context_line":"            self.driver.terminate_connection, "},{"line_number":1457,"context_line":"            volume, "},{"line_number":1458,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator3\u0027})"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_89991bd2","line":1457,"updated":"2020-08-12 11:18:56.000000000","message":"pep8: W291 trailing whitespace","commit_id":"6cd16267a792fd9535fa4db2cfd9a93c3be3bf2e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"dffda4b46d637dcc06c6ee294b25cca90db2dd8e","unresolved":false,"context_lines":[{"line_number":1482,"context_line":"            volume,"},{"line_number":1483,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator1\u0027})"},{"line_number":1484,"context_line":"        self.mock_client_service.remove_acl.assert_not_called()"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_699e47b9","line":1485,"updated":"2020-08-12 11:18:56.000000000","message":"pep8: W391 blank line at end of file","commit_id":"6cd16267a792fd9535fa4db2cfd9a93c3be3bf2e"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"64f09b2bfd73e5c8502e76c6179c817bfc053a88","unresolved":false,"context_lines":[{"line_number":1461,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":1462,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":1463,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":1464,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":1465,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":1466,"context_line":"    def test_terminate_connection_multiattach(self):"},{"line_number":1467,"context_line":"        self.mock_client_service.get_initiator_grp_list.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_30465523","line":1464,"updated":"2020-08-13 22:08:42.000000000","message":"You are testing for iSCSI only.\n\nYou can see in the coverage report [0] that FC code is not being tested. Please add a test case for FC as well.\n\n[0] https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_651/740125/4/check/cinder-code-coverage/65166b5/cover/cinder_volume_drivers_nimble_py.html#t1014","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":16186,"name":"Ajitha Robert","email":"ajitharobert01@gmail.com","username":"ajitharobert"},"change_message_id":"db22c02c0cc30a08bb2c7e4357a9c1d408ea8a08","unresolved":false,"context_lines":[{"line_number":1461,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":1462,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":1463,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":1464,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":1465,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":1466,"context_line":"    def test_terminate_connection_multiattach(self):"},{"line_number":1467,"context_line":"        self.mock_client_service.get_initiator_grp_list.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_daa1cf97","line":1464,"in_reply_to":"9f560f44_30465523","updated":"2020-08-18 05:01:24.000000000","message":"Done","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"64f09b2bfd73e5c8502e76c6179c817bfc053a88","unresolved":false,"context_lines":[{"line_number":1481,"context_line":"        self.driver.terminate_connection("},{"line_number":1482,"context_line":"            volume,"},{"line_number":1483,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator1\u0027})"},{"line_number":1484,"context_line":"        self.mock_client_service.remove_acl.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_3079352f","line":1484,"updated":"2020-08-13 22:08:42.000000000","message":"You are testing only the code path that doesn\u0027t terminate the connection [0].\nYou may also cover the path when the last attachment is removed.\n\n[0] https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_651/740125/4/check/cinder-code-coverage/65166b5/cover/cinder_volume_drivers_nimble_py.html#t810","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":16186,"name":"Ajitha Robert","email":"ajitharobert01@gmail.com","username":"ajitharobert"},"change_message_id":"db22c02c0cc30a08bb2c7e4357a9c1d408ea8a08","unresolved":false,"context_lines":[{"line_number":1481,"context_line":"        self.driver.terminate_connection("},{"line_number":1482,"context_line":"            volume,"},{"line_number":1483,"context_line":"            {\u0027initiator\u0027: \u0027test-initiator1\u0027})"},{"line_number":1484,"context_line":"        self.mock_client_service.remove_acl.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_1aace78a","line":1484,"in_reply_to":"9f560f44_3079352f","updated":"2020-08-18 05:01:24.000000000","message":"Done","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"1b5328230d7401d056cc886062cc4ccaedac9d13","unresolved":false,"context_lines":[{"line_number":1487,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":1488,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":1489,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":1490,"context_line":"    def test_terminate_connection_multiattach(self):"},{"line_number":1491,"context_line":"        self.mock_client_service.get_initiator_grp_list.return_value \u003d ("},{"line_number":1492,"context_line":"            FAKE_IGROUP_LIST_RESPONSE)"},{"line_number":1493,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_0e9bf2c8","line":1490,"updated":"2020-08-19 12:49:20.000000000","message":"It\u0027s still missing test for NimbleFCDriver when there\u0027re remaining attachments. Please see the coverage log [0].\nAlthough it might seem unnecessary for now (as it\u0027s identical to iSCSI method), you may face unexpected issues if the code gets more complex in the future.\n\n[0] https://6035eb51a59ad25153f9-8178b0cd40c1a7a00b8d9de8255e73af.ssl.cf2.rackcdn.com/740125/6/check/cinder-code-coverage/70e229e/cover/cinder_volume_drivers_nimble_py.html#t1018","commit_id":"1e0dd0e94009ec00852937d5bbdf00889779b417"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"632f86aca8c532254f7bcf85bc3e187ae034fa07","unresolved":false,"context_lines":[{"line_number":970,"context_line":"            {\u0027name\u0027: \u0027volume-abcdef\u0027}"},{"line_number":971,"context_line":"        )"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":974,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":975,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":976,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":977,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027,"},{"line_number":978,"context_line":"                       mock.Mock(type_id\u003dFAKE_TYPE_ID_NEW,"},{"line_number":979,"context_line":"                                 return_value\u003d{"},{"line_number":980,"context_line":"                                     \u0027id\u0027: FAKE_TYPE_ID_NEW,"},{"line_number":981,"context_line":"                                     \u0027extra_specs\u0027:"},{"line_number":982,"context_line":"                                     {\u0027nimble:perfpol-name\u0027: \u0027default\u0027,"},{"line_number":983,"context_line":"                                      \u0027nimble:encryption\u0027: \u0027yes\u0027,"},{"line_number":984,"context_line":"                                      \u0027multiattach\u0027: False,"},{"line_number":985,"context_line":"                                      \u0027nimble:iops-limit\u0027: \u00271024\u0027}}))"},{"line_number":986,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":987,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":988,"context_line":"    def test_retype(self):"},{"line_number":989,"context_line":"        self.mock_client_service.get_vol_info.return_value \u003d ("},{"line_number":990,"context_line":"            FAKE_GET_VOL_INFO_ONLINE)"},{"line_number":991,"context_line":"        retype, update \u003d self.driver.retype(None, FAKE_GET_VOL_INFO_ONLINE,"},{"line_number":992,"context_line":"                                            volume_types.get_volume_type("},{"line_number":993,"context_line":"                                                None,"},{"line_number":994,"context_line":"                                                FAKE_TYPE_ID_NEW),"},{"line_number":995,"context_line":"                                            None, None)"},{"line_number":996,"context_line":"        self.assertTrue(retype)"},{"line_number":997,"context_line":"        self.assertIsNone(update)"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":1000,"context_line":"    @mock.patch(NIMBLE_CLIENT)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_b5d2d2cf","line":997,"range":{"start_line":973,"start_character":0,"end_line":997,"end_character":33},"updated":"2020-08-24 01:21:41.000000000","message":"can we have a retype test which has \u0027multiattach\u0027: \u0027\u003cis\u003e True\u0027 in the extra specs and assert value of data[\u0027multi_initiator\u0027] has a true value","commit_id":"4f626c00e9b572e9e48f0784bdbdfe542432fb7e"},{"author":{"_account_id":16186,"name":"Ajitha Robert","email":"ajitharobert01@gmail.com","username":"ajitharobert"},"change_message_id":"aa1f642defbddd6c3102ca2f9f7dd6ebc829fe0c","unresolved":false,"context_lines":[{"line_number":970,"context_line":"            {\u0027name\u0027: \u0027volume-abcdef\u0027}"},{"line_number":971,"context_line":"        )"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":974,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":975,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":976,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":977,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027,"},{"line_number":978,"context_line":"                       mock.Mock(type_id\u003dFAKE_TYPE_ID_NEW,"},{"line_number":979,"context_line":"                                 return_value\u003d{"},{"line_number":980,"context_line":"                                     \u0027id\u0027: FAKE_TYPE_ID_NEW,"},{"line_number":981,"context_line":"                                     \u0027extra_specs\u0027:"},{"line_number":982,"context_line":"                                     {\u0027nimble:perfpol-name\u0027: \u0027default\u0027,"},{"line_number":983,"context_line":"                                      \u0027nimble:encryption\u0027: \u0027yes\u0027,"},{"line_number":984,"context_line":"                                      \u0027multiattach\u0027: False,"},{"line_number":985,"context_line":"                                      \u0027nimble:iops-limit\u0027: \u00271024\u0027}}))"},{"line_number":986,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":987,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":988,"context_line":"    def test_retype(self):"},{"line_number":989,"context_line":"        self.mock_client_service.get_vol_info.return_value \u003d ("},{"line_number":990,"context_line":"            FAKE_GET_VOL_INFO_ONLINE)"},{"line_number":991,"context_line":"        retype, update \u003d self.driver.retype(None, FAKE_GET_VOL_INFO_ONLINE,"},{"line_number":992,"context_line":"                                            volume_types.get_volume_type("},{"line_number":993,"context_line":"                                                None,"},{"line_number":994,"context_line":"                                                FAKE_TYPE_ID_NEW),"},{"line_number":995,"context_line":"                                            None, None)"},{"line_number":996,"context_line":"        self.assertTrue(retype)"},{"line_number":997,"context_line":"        self.assertIsNone(update)"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":1000,"context_line":"    @mock.patch(NIMBLE_CLIENT)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_73f8e448","line":997,"range":{"start_line":973,"start_character":0,"end_line":997,"end_character":33},"in_reply_to":"9f560f44_b5d2d2cf","updated":"2020-08-31 06:01:41.000000000","message":"Done","commit_id":"4f626c00e9b572e9e48f0784bdbdfe542432fb7e"}],"cinder/volume/drivers/nimble.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"81a7791222eae5ba8ecfd63317f386f07f4af058","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"        LOG.info(\"ACL record is %result\", {\u0027result\u0027: r.json()})"},{"line_number":1526,"context_line":"        if not r.json()[\u0027data\u0027]:"},{"line_number":1527,"context_line":"            LOG.warning(\u0027ACL is not available for this volume %vol_id\u0027,"},{"line_number":1528,"context_line":"                       {\u0027vol_id\u0027: volume_id})"},{"line_number":1529,"context_line":"            return"},{"line_number":1530,"context_line":"        return r.json()[\u0027data\u0027][0]"},{"line_number":1531,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_ef3ca2e2","line":1528,"updated":"2020-07-09 02:45:09.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"0cdc39b664c1b0d88b4a201c43e4d8d8ccc600e4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"81a7791222eae5ba8ecfd63317f386f07f4af058","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"            acl_record \u003d self.get_acl_record(volume_id, initiator_group_id)"},{"line_number":1563,"context_line":"            LOG.debug(\"ACL Record %(acl)s\", {\"acl\": acl_record})"},{"line_number":1564,"context_line":"            if acl_record is not None:"},{"line_number":1565,"context_line":"            acl_id \u003d acl_record[\u0027id\u0027]"},{"line_number":1566,"context_line":"            api \u003d \u0027access_control_records/\u0027 + six.text_type(acl_id)"},{"line_number":1567,"context_line":"            self.delete(api)"},{"line_number":1568,"context_line":"        except NimbleAPIException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_4f25cec1","line":1565,"updated":"2020-07-09 02:45:09.000000000","message":"pep8: E112 expected an indented block","commit_id":"0cdc39b664c1b0d88b4a201c43e4d8d8ccc600e4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"81a7791222eae5ba8ecfd63317f386f07f4af058","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"            acl_record \u003d self.get_acl_record(volume_id, initiator_group_id)"},{"line_number":1563,"context_line":"            LOG.debug(\"ACL Record %(acl)s\", {\"acl\": acl_record})"},{"line_number":1564,"context_line":"            if acl_record is not None:"},{"line_number":1565,"context_line":"            acl_id \u003d acl_record[\u0027id\u0027]"},{"line_number":1566,"context_line":"            api \u003d \u0027access_control_records/\u0027 + six.text_type(acl_id)"},{"line_number":1567,"context_line":"            self.delete(api)"},{"line_number":1568,"context_line":"        except NimbleAPIException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_2f221aba","line":1565,"updated":"2020-07-09 02:45:09.000000000","message":"pep8: E999 IndentationError: expected an indented block","commit_id":"0cdc39b664c1b0d88b4a201c43e4d8d8ccc600e4"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"64f09b2bfd73e5c8502e76c6179c817bfc053a88","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        volume)"},{"line_number":1012,"context_line":"            self.APIExecutor.remove_all_acls(volume)"},{"line_number":1013,"context_line":"            return"},{"line_number":1014,"context_line":"        if volume.multiattach:"},{"line_number":1015,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":1016,"context_line":"            LOG.debug(\"Volume attachment list: %(attach_list)s\","},{"line_number":1017,"context_line":"                      {\u0027attach_list\u0027: attachment_list})"},{"line_number":1018,"context_line":"            try:"},{"line_number":1019,"context_line":"                attachment_list \u003d attachment_list.objects"},{"line_number":1020,"context_line":"            except AttributeError:"},{"line_number":1021,"context_line":"                pass"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"            if attachment_list is not None and len(attachment_list) \u003e 1:"},{"line_number":1024,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":1025,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":1026,"context_line":"                         \"skip terminate volume connection\","},{"line_number":1027,"context_line":"                         {\u0027volume\u0027: volume.name,"},{"line_number":1028,"context_line":"                          \u0027host_name\u0027: volume.host.split(\u0027@\u0027)[0]})"},{"line_number":1029,"context_line":"                return"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":1032,"context_line":"        for wwpn in connector[\u0027wwpns\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_30c13582","line":1029,"range":{"start_line":1014,"start_character":0,"end_line":1029,"end_character":22},"updated":"2020-08-13 22:08:42.000000000","message":"nit: This code is duplicated. You may extract it as a common method in NimbleBaseVolumeDriver.","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":16186,"name":"Ajitha Robert","email":"ajitharobert01@gmail.com","username":"ajitharobert"},"change_message_id":"db22c02c0cc30a08bb2c7e4357a9c1d408ea8a08","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        volume)"},{"line_number":1012,"context_line":"            self.APIExecutor.remove_all_acls(volume)"},{"line_number":1013,"context_line":"            return"},{"line_number":1014,"context_line":"        if volume.multiattach:"},{"line_number":1015,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":1016,"context_line":"            LOG.debug(\"Volume attachment list: %(attach_list)s\","},{"line_number":1017,"context_line":"                      {\u0027attach_list\u0027: attachment_list})"},{"line_number":1018,"context_line":"            try:"},{"line_number":1019,"context_line":"                attachment_list \u003d attachment_list.objects"},{"line_number":1020,"context_line":"            except AttributeError:"},{"line_number":1021,"context_line":"                pass"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"            if attachment_list is not None and len(attachment_list) \u003e 1:"},{"line_number":1024,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":1025,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":1026,"context_line":"                         \"skip terminate volume connection\","},{"line_number":1027,"context_line":"                         {\u0027volume\u0027: volume.name,"},{"line_number":1028,"context_line":"                          \u0027host_name\u0027: volume.host.split(\u0027@\u0027)[0]})"},{"line_number":1029,"context_line":"                return"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":1032,"context_line":"        for wwpn in connector[\u0027wwpns\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_faa653ab","line":1029,"range":{"start_line":1014,"start_character":0,"end_line":1029,"end_character":22},"in_reply_to":"9f560f44_30c13582","updated":"2020-08-18 05:01:24.000000000","message":"Done","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"71b6f7765923883a6b989267992642ef33d851fa","unresolved":false,"context_lines":[{"line_number":723,"context_line":"    def _is_multiattach(self, volume):"},{"line_number":724,"context_line":"        if volume.multiattach:"},{"line_number":725,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":726,"context_line":"            LOG.debug(\"Volume attachment list: %(attach_list)s\","},{"line_number":727,"context_line":"                      {\u0027attach_list\u0027: attachment_list})"},{"line_number":728,"context_line":"            try:"},{"line_number":729,"context_line":"                attachment_list \u003d attachment_list.objects"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_4e869c67","line":726,"updated":"2020-08-18 14:23:51.000000000","message":"This looks like it would be an issue. If a volume is multiattach, it looks like you won\u0027t remove anything until all attachments are removed. So if you have a volume exposed to two different hosts, and the operator removes the attachment from one of the hosts, this will still keep the volume exposed to both until later when it is also removed from the other host.\n\nWorse, if it is a long running environment and the volume is added and removed from various hosts over time, eventually it will be exposed to several hosts when in reality it is only being used by one host.","commit_id":"f3ce63af7a8c51aabfec8568682ab69c74746bd7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"c60e49867a3224cea9c4914a9e8f3e3203a05dbf","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"        if encrypt.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":1210,"context_line":"            cipher \u003d AES_256_XTS_CIPHER"},{"line_number":1211,"context_line":"        data[\u0027cipher\u0027] \u003d cipher"},{"line_number":1212,"context_line":"        data[\u0027multi_initiator\u0027] \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":1213,"context_line":"        folder_name \u003d extra_specs_map_updated[EXTRA_SPEC_FOLDER]"},{"line_number":1214,"context_line":"        folder_id \u003d None"},{"line_number":1215,"context_line":"        pool_id \u003d vol_info[\u0027pool_id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_7b102e5a","line":1212,"range":{"start_line":1212,"start_character":8,"end_line":1212,"end_character":66},"updated":"2020-08-23 01:35:30.000000000","message":"this doesn\u0027t seem right.\nwhile retyping you should check if the new type specs has multiattach enabled or not\nlike here\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/rbd.py#L821-L828","commit_id":"b7170da6312b78b6cfb14881cfe152456f7e4c71"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            except AttributeError:"},{"line_number":729,"context_line":"                pass"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"            if attachment_list is not None and len(attachment_list) \u003e 1:"},{"line_number":732,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":733,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":734,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_e79d4e6d","line":731,"range":{"start_line":731,"start_character":12,"end_line":731,"end_character":72},"updated":"2020-09-15 18:05:45.000000000","message":"Could change this to just be:\n\nif attachment_list:","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                         {\u0027volume\u0027: volume.name,"},{"line_number":736,"context_line":"                          \u0027host_name\u0027: volume.host.split(\u0027@\u0027)[0]})"},{"line_number":737,"context_line":"                return True"},{"line_number":738,"context_line":"            else:"},{"line_number":739,"context_line":"                return False"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"@interface.volumedriver"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a79b5671","line":739,"range":{"start_line":738,"start_character":12,"end_line":739,"end_character":28},"updated":"2020-09-15 18:05:45.000000000","message":"Should probably remove this else block and just have a return False at the end that will be reach when volume.mutiattach is False and when it is True but attachment_list is empty.","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"                  \"initiator_group_id\": initiator_group_id}"},{"line_number":1539,"context_line":"        api \u003d \"access_control_records\""},{"line_number":1540,"context_line":"        r \u003d self.get_query(api, filter)"},{"line_number":1541,"context_line":"        LOG.info(\"ACL record is %result\", {\u0027result\u0027: r.json()})"},{"line_number":1542,"context_line":"        if not r.json()[\u0027data\u0027]:"},{"line_number":1543,"context_line":"            LOG.warning(\u0027ACL is not available for this volume %vol_id\u0027, {"},{"line_number":1544,"context_line":"                        \u0027vol_id\u0027: volume_id})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_07868214","line":1541,"range":{"start_line":1541,"start_character":32,"end_line":1541,"end_character":39},"updated":"2020-09-15 18:05:45.000000000","message":"Bad format here. This path must not have unit test coverage. Should be \"%(result)s\"","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":1540,"context_line":"        r \u003d self.get_query(api, filter)"},{"line_number":1541,"context_line":"        LOG.info(\"ACL record is %result\", {\u0027result\u0027: r.json()})"},{"line_number":1542,"context_line":"        if not r.json()[\u0027data\u0027]:"},{"line_number":1543,"context_line":"            LOG.warning(\u0027ACL is not available for this volume %vol_id\u0027, {"},{"line_number":1544,"context_line":"                        \u0027vol_id\u0027: volume_id})"},{"line_number":1545,"context_line":"            return"},{"line_number":1546,"context_line":"        return r.json()[\u0027data\u0027][0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_c7900a46","line":1543,"range":{"start_line":1543,"start_character":62,"end_line":1543,"end_character":69},"updated":"2020-09-15 18:05:45.000000000","message":"Same here.","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":1579,"context_line":"            LOG.debug(\"ACL Record %(acl)s\", {\"acl\": acl_record})"},{"line_number":1580,"context_line":"            if acl_record is not None:"},{"line_number":1581,"context_line":"                acl_id \u003d acl_record[\u0027id\u0027]"},{"line_number":1582,"context_line":"                api \u003d \u0027access_control_records/\u0027 + six.text_type(acl_id)"},{"line_number":1583,"context_line":"                self.delete(api)"},{"line_number":1584,"context_line":"        except NimbleAPIException as ex:"},{"line_number":1585,"context_line":"            LOG.debug(\"remove_acl_exception: %s\", ex)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_679f7e51","line":1582,"range":{"start_line":1582,"start_character":50,"end_line":1582,"end_character":63},"updated":"2020-09-15 18:05:45.000000000","message":"Six should not be needed here since we no longer support py2. To ensure the string conversion, you should probably just do:\n\napi \u003d \u0027access_control_records/%s\u0027 % acl_id","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"}],"doc/source/configuration/block-storage/drivers/nimble-volume-driver.rst":[{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"5f13b9f7b42ab316adc071995e4b8ca50ec9b053","unresolved":false,"context_lines":[{"line_number":125,"context_line":"\u0027nimble:perfpol-name\u0027\u003dPERF_POL_NAME"},{"line_number":126,"context_line":"  PERF_POL_NAME is the name of a performance policy which exists on the"},{"line_number":127,"context_line":"  Nimble array and should be enabled for every volume in a volume type."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"\u0027nimble:multi-initiator\u0027\u003d\u0027true\u0027"},{"line_number":130,"context_line":"  Used to enable multi-initiator access for a volume-type."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9f560f44_f51ad414","side":"PARENT","line":128,"updated":"2020-09-03 14:26:56.000000000","message":"If your customers are already using the multiattach feature with \"nimble:multi-initiator\" extra-spec, you may add a note telling them what they should do when upgrading their OpenStack deployment to Victoria (unset \"nimble:multi-initiator\" extra-spec and set \"multiattach\u003d\u0027\u003cis\u003e True\u0027\").","commit_id":"c354d5bd04537f7efa6fae2eacf8980cc02bef5f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"\u0027nimble:perfpol-name\u0027\u003dPERF_POL_NAME"},{"line_number":128,"context_line":"  PERF_POL_NAME is the name of a performance policy which exists on the"},{"line_number":129,"context_line":"  Nimble array and should be enabled for every volume in a volume type."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"nimble:dedupe\u0027\u003d\u0027true\u0027"},{"line_number":132,"context_line":"  Used to enable dedupe support for a volume-type."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9f560f44_27af467e","line":130,"updated":"2020-09-15 18:05:45.000000000","message":"Agree with Lucio that it would be good to include a note about the change in multiattach configuration now.","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"}],"releasenotes/notes/1885946-17bc5c3dc0535044.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a08cff9cd4f36d68c6164e5a6e8c504361ef9553","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver"},{"line_number":5,"context_line":"deprecations:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed and common extra-spec multiattach is added"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_0e996d1e","line":7,"updated":"2020-08-14 12:02:02.000000000","message":"I think this would make more sense under the \"upgrade\" section since this isn\u0027t actually being deprecated, it\u0027s being dropped completely.","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":16186,"name":"Ajitha Robert","email":"ajitharobert01@gmail.com","username":"ajitharobert"},"change_message_id":"db22c02c0cc30a08bb2c7e4357a9c1d408ea8a08","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver"},{"line_number":5,"context_line":"deprecations:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed and common extra-spec multiattach is added"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_daca6f4d","line":7,"in_reply_to":"9f560f44_0e996d1e","updated":"2020-08-18 05:01:24.000000000","message":"Done","commit_id":"de8d44a22165db33b3f87e7a7a73586e94ff95a9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"71b6f7765923883a6b989267992642ef33d851fa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver"},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed and common extra-spec multiattach is added"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_2e91a89a","line":4,"updated":"2020-08-18 14:23:51.000000000","message":"End with a period if you update.","commit_id":"f3ce63af7a8c51aabfec8568682ab69c74746bd7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"71b6f7765923883a6b989267992642ef33d851fa","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver"},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed and common extra-spec multiattach is added"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_ce910c9d","line":7,"updated":"2020-08-18 14:23:51.000000000","message":"Please add line breaks if you do an update.","commit_id":"f3ce63af7a8c51aabfec8568682ab69c74746bd7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"be43c942e80585f0a8252c8a789e06391e6df66f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9f560f44_0d81814b","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":7},"updated":"2020-08-31 12:07:21.000000000","message":"NIT: Added","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f446c69355927905918cb42eb178a0215277801f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add Multi-attach feature in Nimble driver."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Nimble specific extra-spec nimble:multi-initiator is removed."},{"line_number":8,"context_line":"    Common extra-spec multiattach is added."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9f560f44_c7bdaad8","line":7,"range":{"start_line":7,"start_character":31,"end_line":7,"end_character":53},"updated":"2020-09-15 18:05:45.000000000","message":"If you do an update, change this to ``nimble:multi-initiator`` so the extra-spec value gets formatted in the html output.","commit_id":"437a9674ec7cec160c7a93229bfb40ac461395d1"}]}
