)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Add storage assisted migration support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for storage assited migration to NetApp"},{"line_number":10,"context_line":"ONTAP drivers (iSCSI/FC/NFS)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint ontap-storage-assisted-migration"},{"line_number":13,"context_line":"Change-Id: Iaad87c80ae37b6c0fc5f788dc56f1f72c0ca07fa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"b26f707d_cd4311dc","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":0},"updated":"2021-08-27 18:42:39.000000000","message":"You have an XL patch, so I think you could make the commit body more meaningful.\n\nIdeas: add the new configs, the covered and not covered scenarios and so on.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"83c03e615ed225162003d0bcfeaecaa24f90e843","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Add storage assisted migration support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for storage assited migration to NetApp"},{"line_number":10,"context_line":"ONTAP drivers (iSCSI/FC/NFS)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint ontap-storage-assisted-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"61571994_46e8fb34","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":43},"updated":"2021-08-31 06:39:14.000000000","message":"typo: assisted","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"3fe72c79477967665c1f8e5516724591e5d68afb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Add storage assisted migration support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for storage assited migration to NetApp"},{"line_number":10,"context_line":"ONTAP drivers (iSCSI/FC/NFS)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint ontap-storage-assisted-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"e456ed11_2b545dd4","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":43},"in_reply_to":"61571994_46e8fb34","updated":"2021-09-01 03:32:40.000000000","message":"Done","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4116,"context_line":"                                                  enable_tunneling\u003dFalse)"},{"line_number":4117,"context_line":"        self.assertEqual(fake_client.CLUSTER_NAME, result)"},{"line_number":4118,"context_line":""},{"line_number":4119,"context_line":"    @ddt.data((\u0027fake-lun-name\u0027, None, None, \u0027fake-ontap-vol\u0027),"},{"line_number":4120,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, None, \u0027fake-dest-ontap-vol\u0027),"},{"line_number":4121,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-new-lun-name\u0027,"},{"line_number":4122,"context_line":"               \u0027fake-dest-ontap-vol\u0027))"},{"line_number":4123,"context_line":"    @ddt.unpack"},{"line_number":4124,"context_line":"    def test_start_lun_move(self, src_lun_name, src_ontap_vol, dest_lun_name,"},{"line_number":4125,"context_line":"                            dest_ontap_vol):"}],"source_content_type":"text/x-python","patch_set":9,"id":"740f6da7_ad9d195b","line":4122,"range":{"start_line":4119,"start_character":11,"end_line":4122,"end_character":38},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4116,"context_line":"                                                  enable_tunneling\u003dFalse)"},{"line_number":4117,"context_line":"        self.assertEqual(fake_client.CLUSTER_NAME, result)"},{"line_number":4118,"context_line":""},{"line_number":4119,"context_line":"    @ddt.data((\u0027fake-lun-name\u0027, None, None, \u0027fake-ontap-vol\u0027),"},{"line_number":4120,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, None, \u0027fake-dest-ontap-vol\u0027),"},{"line_number":4121,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-new-lun-name\u0027,"},{"line_number":4122,"context_line":"               \u0027fake-dest-ontap-vol\u0027))"},{"line_number":4123,"context_line":"    @ddt.unpack"},{"line_number":4124,"context_line":"    def test_start_lun_move(self, src_lun_name, src_ontap_vol, dest_lun_name,"},{"line_number":4125,"context_line":"                            dest_ontap_vol):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c6255d47_9b273026","line":4122,"range":{"start_line":4119,"start_character":11,"end_line":4122,"end_character":38},"in_reply_to":"740f6da7_ad9d195b","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4169,"context_line":"        }"},{"line_number":4170,"context_line":"        self.assertEqual(expected, result)"},{"line_number":4171,"context_line":""},{"line_number":4172,"context_line":"    @ddt.data((\u0027fake-lun-name\u0027, None, \u0027fake-vserver\u0027, None, \u0027fake-ontap-vol\u0027,"},{"line_number":4173,"context_line":"               \u0027fake-new-lun-name\u0027),"},{"line_number":4174,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, None, \u0027fake-new-lun-name\u0027,"},{"line_number":4175,"context_line":"               \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027),"},{"line_number":4176,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-vserver\u0027, None,"},{"line_number":4177,"context_line":"               \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027),"},{"line_number":4178,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-vserver\u0027,"},{"line_number":4179,"context_line":"               \u0027fake-new-lun-name\u0027, \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027))"},{"line_number":4180,"context_line":"    @ddt.unpack"},{"line_number":4181,"context_line":"    def test_start_lun_copy(self, src_lun_name, src_ontap_vol, src_vserver,"},{"line_number":4182,"context_line":"                            dest_lun_name, dest_ontap_vol, dest_vserver):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bef4dd3f_ee26d502","line":4179,"range":{"start_line":4172,"start_character":4,"end_line":4179,"end_character":79},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4169,"context_line":"        }"},{"line_number":4170,"context_line":"        self.assertEqual(expected, result)"},{"line_number":4171,"context_line":""},{"line_number":4172,"context_line":"    @ddt.data((\u0027fake-lun-name\u0027, None, \u0027fake-vserver\u0027, None, \u0027fake-ontap-vol\u0027,"},{"line_number":4173,"context_line":"               \u0027fake-new-lun-name\u0027),"},{"line_number":4174,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, None, \u0027fake-new-lun-name\u0027,"},{"line_number":4175,"context_line":"               \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027),"},{"line_number":4176,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-vserver\u0027, None,"},{"line_number":4177,"context_line":"               \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027),"},{"line_number":4178,"context_line":"              (\u0027fake-lun-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-vserver\u0027,"},{"line_number":4179,"context_line":"               \u0027fake-new-lun-name\u0027, \u0027fake-dest-ontap-vol\u0027, \u0027fake-new-vserver\u0027))"},{"line_number":4180,"context_line":"    @ddt.unpack"},{"line_number":4181,"context_line":"    def test_start_lun_copy(self, src_lun_name, src_ontap_vol, src_vserver,"},{"line_number":4182,"context_line":"                            dest_lun_name, dest_ontap_vol, dest_vserver):"}],"source_content_type":"text/x-python","patch_set":9,"id":"95c72b48_bcc7a0c2","line":4179,"range":{"start_line":4172,"start_character":4,"end_line":4179,"end_character":79},"in_reply_to":"bef4dd3f_ee26d502","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4233,"context_line":"        }"},{"line_number":4234,"context_line":"        self.assertEqual(expected, result)"},{"line_number":4235,"context_line":""},{"line_number":4236,"context_line":"    @ddt.data((\u0027fake-file-name\u0027, None, None, \u0027fake-ontap-vol\u0027),"},{"line_number":4237,"context_line":"              (\u0027fake-file-name\u0027, \u0027fake-ontap-vol\u0027, None,"},{"line_number":4238,"context_line":"               \u0027fake-dest-ontap-vol\u0027),"},{"line_number":4239,"context_line":"              (\u0027fake-file-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-new-file-name\u0027,"},{"line_number":4240,"context_line":"               \u0027fake-dest-ontap-vol\u0027))"},{"line_number":4241,"context_line":"    @ddt.unpack"},{"line_number":4242,"context_line":"    def test_start_file_copy(self, src_file_name, src_ontap_vol,"},{"line_number":4243,"context_line":"                             dest_file_name, dest_ontap_vol):"}],"source_content_type":"text/x-python","patch_set":9,"id":"10fc02c4_68ca0fff","line":4240,"range":{"start_line":4236,"start_character":7,"end_line":4240,"end_character":38},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4233,"context_line":"        }"},{"line_number":4234,"context_line":"        self.assertEqual(expected, result)"},{"line_number":4235,"context_line":""},{"line_number":4236,"context_line":"    @ddt.data((\u0027fake-file-name\u0027, None, None, \u0027fake-ontap-vol\u0027),"},{"line_number":4237,"context_line":"              (\u0027fake-file-name\u0027, \u0027fake-ontap-vol\u0027, None,"},{"line_number":4238,"context_line":"               \u0027fake-dest-ontap-vol\u0027),"},{"line_number":4239,"context_line":"              (\u0027fake-file-name\u0027, \u0027fake-ontap-vol\u0027, \u0027fake-new-file-name\u0027,"},{"line_number":4240,"context_line":"               \u0027fake-dest-ontap-vol\u0027))"},{"line_number":4241,"context_line":"    @ddt.unpack"},{"line_number":4242,"context_line":"    def test_start_file_copy(self, src_file_name, src_ontap_vol,"},{"line_number":4243,"context_line":"                             dest_file_name, dest_ontap_vol):"}],"source_content_type":"text/x-python","patch_set":9,"id":"783adbd6_3346663b","line":4240,"range":{"start_line":4236,"start_character":7,"end_line":4240,"end_character":38},"in_reply_to":"10fc02c4_68ca0fff","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4294,"context_line":"            fake_client.DESTROY_FILE_COPY_RESPONSE)"},{"line_number":4295,"context_line":"        mock_send_request \u003d self.mock_object("},{"line_number":4296,"context_line":"            self.client.connection, \u0027send_request\u0027, return_value\u003dapi_response)"},{"line_number":4297,"context_line":"        result \u003d self.client.destroy_file_copy(\u0027fake-job-uuid\u0027)"},{"line_number":4298,"context_line":"        api_args \u003d {"},{"line_number":4299,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4300,"context_line":"            \u0027file-index\u0027: 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"449f5f20_486d8990","line":4297,"range":{"start_line":4297,"start_character":47,"end_line":4297,"end_character":61},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4294,"context_line":"            fake_client.DESTROY_FILE_COPY_RESPONSE)"},{"line_number":4295,"context_line":"        mock_send_request \u003d self.mock_object("},{"line_number":4296,"context_line":"            self.client.connection, \u0027send_request\u0027, return_value\u003dapi_response)"},{"line_number":4297,"context_line":"        result \u003d self.client.destroy_file_copy(\u0027fake-job-uuid\u0027)"},{"line_number":4298,"context_line":"        api_args \u003d {"},{"line_number":4299,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4300,"context_line":"            \u0027file-index\u0027: 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"e12efee1_65971082","line":4297,"range":{"start_line":4297,"start_character":47,"end_line":4297,"end_character":61},"in_reply_to":"449f5f20_486d8990","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4295,"context_line":"        mock_send_request \u003d self.mock_object("},{"line_number":4296,"context_line":"            self.client.connection, \u0027send_request\u0027, return_value\u003dapi_response)"},{"line_number":4297,"context_line":"        result \u003d self.client.destroy_file_copy(\u0027fake-job-uuid\u0027)"},{"line_number":4298,"context_line":"        api_args \u003d {"},{"line_number":4299,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4300,"context_line":"            \u0027file-index\u0027: 0"},{"line_number":4301,"context_line":"        }"},{"line_number":4302,"context_line":"        mock_send_request.assert_called_once_with(\u0027file-copy-destroy\u0027,"},{"line_number":4303,"context_line":"                                                  api_args,"},{"line_number":4304,"context_line":"                                                  enable_tunneling\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"294b86fc_18d5c7b6","line":4301,"range":{"start_line":4298,"start_character":8,"end_line":4301,"end_character":9},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4295,"context_line":"        mock_send_request \u003d self.mock_object("},{"line_number":4296,"context_line":"            self.client.connection, \u0027send_request\u0027, return_value\u003dapi_response)"},{"line_number":4297,"context_line":"        result \u003d self.client.destroy_file_copy(\u0027fake-job-uuid\u0027)"},{"line_number":4298,"context_line":"        api_args \u003d {"},{"line_number":4299,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4300,"context_line":"            \u0027file-index\u0027: 0"},{"line_number":4301,"context_line":"        }"},{"line_number":4302,"context_line":"        mock_send_request.assert_called_once_with(\u0027file-copy-destroy\u0027,"},{"line_number":4303,"context_line":"                                                  api_args,"},{"line_number":4304,"context_line":"                                                  enable_tunneling\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a0d6bcc8_a2c1c974","line":4301,"range":{"start_line":4298,"start_character":8,"end_line":4301,"end_character":9},"in_reply_to":"294b86fc_18d5c7b6","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4311,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":4312,"context_line":"                          self.client.destroy_file_copy,"},{"line_number":4313,"context_line":"                          \u0027fake-job-uuid\u0027)"},{"line_number":4314,"context_line":"        api_args \u003d {"},{"line_number":4315,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4316,"context_line":"            \u0027file-index\u0027: 0"},{"line_number":4317,"context_line":"        }"},{"line_number":4318,"context_line":"        mock_send_request.assert_called_once_with(\u0027file-copy-destroy\u0027,"},{"line_number":4319,"context_line":"                                                  api_args,"},{"line_number":4320,"context_line":"                                                  enable_tunneling\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"37dfb764_928905ad","line":4317,"range":{"start_line":4314,"start_character":7,"end_line":4317,"end_character":9},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4311,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":4312,"context_line":"                          self.client.destroy_file_copy,"},{"line_number":4313,"context_line":"                          \u0027fake-job-uuid\u0027)"},{"line_number":4314,"context_line":"        api_args \u003d {"},{"line_number":4315,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027,"},{"line_number":4316,"context_line":"            \u0027file-index\u0027: 0"},{"line_number":4317,"context_line":"        }"},{"line_number":4318,"context_line":"        mock_send_request.assert_called_once_with(\u0027file-copy-destroy\u0027,"},{"line_number":4319,"context_line":"                                                  api_args,"},{"line_number":4320,"context_line":"                                                  enable_tunneling\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"cc3d7772_915b2bfd","line":4317,"range":{"start_line":4314,"start_character":7,"end_line":4317,"end_character":9},"in_reply_to":"37dfb764_928905ad","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":4339,"context_line":"                                             side_effect\u003dnetapp_api.NaApiError)"},{"line_number":4340,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":4341,"context_line":"                          self.client.cancel_lun_copy,"},{"line_number":4342,"context_line":"                          \u0027fake-job-uuid\u0027)"},{"line_number":4343,"context_line":"        api_args \u003d {"},{"line_number":4344,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027"},{"line_number":4345,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"e2cb154d_02aec539","line":4342,"range":{"start_line":4342,"start_character":27,"end_line":4342,"end_character":39},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de46f3ef96bc340249b251a3b01fab1aba239645","unresolved":false,"context_lines":[{"line_number":4339,"context_line":"                                             side_effect\u003dnetapp_api.NaApiError)"},{"line_number":4340,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":4341,"context_line":"                          self.client.cancel_lun_copy,"},{"line_number":4342,"context_line":"                          \u0027fake-job-uuid\u0027)"},{"line_number":4343,"context_line":"        api_args \u003d {"},{"line_number":4344,"context_line":"            \u0027job-uuid\u0027: \u0027fake-job-uuid\u0027"},{"line_number":4345,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"2b59440b_56d0f641","line":4342,"range":{"start_line":4342,"start_character":27,"end_line":4342,"end_character":39},"in_reply_to":"e2cb154d_02aec539","updated":"2021-08-31 04:58:56.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_cmode.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":986,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":987,"context_line":"        }"},{"line_number":988,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":989,"context_line":"        result \u003d self.library._move_lun("},{"line_number":990,"context_line":"            fake_vol, fake.SOURCE_POOL, fake.DEST_POOL,"},{"line_number":991,"context_line":"            dest_lun_name\u003dfake.VOLUME_NAME)"},{"line_number":992,"context_line":"        mock_start_lun_move.assert_called_with("},{"line_number":993,"context_line":"            fake_vol.name, fake.DEST_POOL, src_ontap_volume\u003dfake.SOURCE_POOL,"},{"line_number":994,"context_line":"            dest_lun_name\u003dfake.VOLUME_NAME)"}],"source_content_type":"text/x-python","patch_set":9,"id":"01b33d4f_fb33a123","line":991,"range":{"start_line":989,"start_character":7,"end_line":991,"end_character":43},"updated":"2021-08-27 18:42:39.000000000","message":"Following the code pattern, the function being tested should be separated by empty lines:\n\n\u003cmocks\u003e\n\nfunction_to_test\n\n\u003casserts\u003e\n\n\nAlmost all of your unit tests are not following that pattern. Please, fix it.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":986,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":987,"context_line":"        }"},{"line_number":988,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":989,"context_line":"        result \u003d self.library._move_lun("},{"line_number":990,"context_line":"            fake_vol, fake.SOURCE_POOL, fake.DEST_POOL,"},{"line_number":991,"context_line":"            dest_lun_name\u003dfake.VOLUME_NAME)"},{"line_number":992,"context_line":"        mock_start_lun_move.assert_called_with("},{"line_number":993,"context_line":"            fake_vol.name, fake.DEST_POOL, src_ontap_volume\u003dfake.SOURCE_POOL,"},{"line_number":994,"context_line":"            dest_lun_name\u003dfake.VOLUME_NAME)"}],"source_content_type":"text/x-python","patch_set":9,"id":"48c98439_ca891f9b","line":991,"range":{"start_line":989,"start_character":7,"end_line":991,"end_character":43},"in_reply_to":"01b33d4f_fb33a123","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1000,"context_line":"    @ddt.unpack"},{"line_number":1001,"context_line":"    def test_move_lun_error(self, status_on_error, move_exception):"},{"line_number":1002,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1003,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1004,"context_line":"        fake_job_status \u003d {"},{"line_number":1005,"context_line":"            \u0027job-status\u0027: status_on_error,"},{"line_number":1006,"context_line":"            \u0027last-failure-reason\u0027: None"},{"line_number":1007,"context_line":"        }"},{"line_number":1008,"context_line":"        mock_start_lun_move \u003d self.mock_object(self.zapi_client,"},{"line_number":1009,"context_line":"                                               \u0027start_lun_move\u0027,"},{"line_number":1010,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"54fdecb5_3e55fe74","line":1007,"range":{"start_line":1003,"start_character":8,"end_line":1007,"end_character":9},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    @ddt.unpack"},{"line_number":1001,"context_line":"    def test_move_lun_error(self, status_on_error, move_exception):"},{"line_number":1002,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1003,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1004,"context_line":"        fake_job_status \u003d {"},{"line_number":1005,"context_line":"            \u0027job-status\u0027: status_on_error,"},{"line_number":1006,"context_line":"            \u0027last-failure-reason\u0027: None"},{"line_number":1007,"context_line":"        }"},{"line_number":1008,"context_line":"        mock_start_lun_move \u003d self.mock_object(self.zapi_client,"},{"line_number":1009,"context_line":"                                               \u0027start_lun_move\u0027,"},{"line_number":1010,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"74d05446_6d02c7b3","line":1007,"range":{"start_line":1003,"start_character":8,"end_line":1007,"end_character":9},"in_reply_to":"54fdecb5_3e55fe74","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1012,"context_line":"            self.zapi_client, \u0027get_lun_move_status\u0027,"},{"line_number":1013,"context_line":"            return_value\u003dfake_job_status)"},{"line_number":1014,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1015,"context_line":"        vol_fields \u003d {"},{"line_number":1016,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1017,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1018,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1019,"context_line":"        }"},{"line_number":1020,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1021,"context_line":"        self.assertRaises(move_exception,"},{"line_number":1022,"context_line":"                          self.library._move_lun,"},{"line_number":1023,"context_line":"                          fake_vol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5230d315_b6ad6f10","line":1020,"range":{"start_line":1015,"start_character":8,"end_line":1020,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1030,"context_line":"        mock_get_lun_move_status.assert_called_with(fake_job_uuid)"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def test_cancel_lun_copy(self):"},{"line_number":1033,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1034,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1035,"context_line":"                                                \u0027cancel_lun_copy\u0027)"},{"line_number":1036,"context_line":"        mock_get_client_for_backend \u003d self.mock_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"48f9ff97_07c37c86","line":1033,"range":{"start_line":1033,"start_character":8,"end_line":1033,"end_character":39},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        mock_get_lun_move_status.assert_called_with(fake_job_uuid)"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def test_cancel_lun_copy(self):"},{"line_number":1033,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1034,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1035,"context_line":"                                                \u0027cancel_lun_copy\u0027)"},{"line_number":1036,"context_line":"        mock_get_client_for_backend \u003d self.mock_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"f70ef579_408c403a","line":1033,"range":{"start_line":1033,"start_character":8,"end_line":1033,"end_character":39},"in_reply_to":"48f9ff97_07c37c86","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1038,"context_line":"        mock_destroy_lun \u003d self.mock_object(self.zapi_client,"},{"line_number":1039,"context_line":"                                            \u0027destroy_lun\u0027)"},{"line_number":1040,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1041,"context_line":"        vol_fields \u003d {"},{"line_number":1042,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1043,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1044,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1045,"context_line":"        }"},{"line_number":1046,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1047,"context_line":"        result \u003d self.library._cancel_lun_copy(fake_job_uuid,"},{"line_number":1048,"context_line":"                                               fake_vol,"},{"line_number":1049,"context_line":"                                               fake.DEST_POOL,"}],"source_content_type":"text/x-python","patch_set":9,"id":"6fea6e63_aa45922d","line":1046,"range":{"start_line":1041,"start_character":8,"end_line":1046,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1054,"context_line":"        self.assertIsNone(result)"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"    def test_cancel_lun_copy_force_destroy_lun(self):"},{"line_number":1057,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1058,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1059,"context_line":"            self.zapi_client, \u0027cancel_lun_copy\u0027,"},{"line_number":1060,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fc8c639_e086f19e","line":1057,"range":{"start_line":1057,"start_character":8,"end_line":1057,"end_character":39},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1054,"context_line":"        self.assertIsNone(result)"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"    def test_cancel_lun_copy_force_destroy_lun(self):"},{"line_number":1057,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1058,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1059,"context_line":"            self.zapi_client, \u0027cancel_lun_copy\u0027,"},{"line_number":1060,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a824282c_4689f36b","line":1057,"range":{"start_line":1057,"start_character":8,"end_line":1057,"end_character":39},"in_reply_to":"3fc8c639_e086f19e","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1062,"context_line":"            dot_utils, \u0027get_client_for_backend\u0027, return_value\u003dself.zapi_client)"},{"line_number":1063,"context_line":"        mock_destroy_lun \u003d self.mock_object(self.zapi_client, \u0027destroy_lun\u0027)"},{"line_number":1064,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1065,"context_line":"        vol_fields \u003d {"},{"line_number":1066,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1067,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1068,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1069,"context_line":"        }"},{"line_number":1070,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1071,"context_line":"        result \u003d self.library._cancel_lun_copy(fake_job_uuid,"},{"line_number":1072,"context_line":"                                               fake_vol,"},{"line_number":1073,"context_line":"                                               fake.DEST_POOL,"}],"source_content_type":"text/x-python","patch_set":9,"id":"22d10506_43acb4c7","line":1070,"range":{"start_line":1065,"start_character":8,"end_line":1070,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1080,"context_line":"        self.assertIsNone(result)"},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"    def test_cancel_lun_copy_error_on_force_destroy_lun(self):"},{"line_number":1083,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1084,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1085,"context_line":"            self.zapi_client, \u0027cancel_lun_copy\u0027,"},{"line_number":1086,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"f5a85b52_83136d5e","line":1083,"range":{"start_line":1083,"start_character":8,"end_line":1083,"end_character":39},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1080,"context_line":"        self.assertIsNone(result)"},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"    def test_cancel_lun_copy_error_on_force_destroy_lun(self):"},{"line_number":1083,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1084,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1085,"context_line":"            self.zapi_client, \u0027cancel_lun_copy\u0027,"},{"line_number":1086,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a64dbb09_4d178bf9","line":1083,"range":{"start_line":1083,"start_character":8,"end_line":1083,"end_character":39},"in_reply_to":"f5a85b52_83136d5e","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1090,"context_line":"            self.zapi_client, \u0027destroy_lun\u0027,"},{"line_number":1091,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"},{"line_number":1092,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1093,"context_line":"        vol_fields \u003d {"},{"line_number":1094,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1095,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1096,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1097,"context_line":"        }"},{"line_number":1098,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1099,"context_line":"        result \u003d self.library._cancel_lun_copy(fake_job_uuid,"},{"line_number":1100,"context_line":"                                               fake_vol,"},{"line_number":1101,"context_line":"                                               fake.DEST_POOL,"}],"source_content_type":"text/x-python","patch_set":9,"id":"26c2a05f_17e1c253","line":1098,"range":{"start_line":1093,"start_character":8,"end_line":1098,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def test_copy_lun(self):"},{"line_number":1111,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1112,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1113,"context_line":"        fake_job_status \u003d {\u0027job-status\u0027: \u0027complete\u0027}"},{"line_number":1114,"context_line":"        mock_start_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1115,"context_line":"                                               \u0027start_lun_copy\u0027,"},{"line_number":1116,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"85edf2d2_f26c14fa","line":1113,"range":{"start_line":1112,"start_character":8,"end_line":1113,"end_character":52},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def test_copy_lun(self):"},{"line_number":1111,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1112,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1113,"context_line":"        fake_job_status \u003d {\u0027job-status\u0027: \u0027complete\u0027}"},{"line_number":1114,"context_line":"        mock_start_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1115,"context_line":"                                               \u0027start_lun_copy\u0027,"},{"line_number":1116,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ae83d427_853817f0","line":1113,"range":{"start_line":1112,"start_character":8,"end_line":1113,"end_character":52},"in_reply_to":"85edf2d2_f26c14fa","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1120,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1121,"context_line":"            self.library, \u0027_cancel_lun_copy\u0027)"},{"line_number":1122,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1123,"context_line":"        vol_fields \u003d {"},{"line_number":1124,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1125,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1126,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1127,"context_line":"        }"},{"line_number":1128,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1129,"context_line":"        result \u003d self.library._copy_lun("},{"line_number":1130,"context_line":"            fake_vol, fake.SOURCE_POOL, fake.SOURCE_VSERVER, fake.DEST_POOL,"},{"line_number":1131,"context_line":"            fake.DEST_VSERVER, dest_lun_name\u003dfake.VOLUME_NAME,"}],"source_content_type":"text/x-python","patch_set":9,"id":"daaed6d4_89ff21c8","line":1128,"range":{"start_line":1123,"start_character":8,"end_line":1128,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1144,"context_line":"    @ddt.unpack"},{"line_number":1145,"context_line":"    def test_copy_lun_error(self, status_on_error, copy_exception):"},{"line_number":1146,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1147,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1148,"context_line":"        fake_job_status \u003d {"},{"line_number":1149,"context_line":"            \u0027job-status\u0027: status_on_error,"},{"line_number":1150,"context_line":"            \u0027last-failure-reason\u0027: None"},{"line_number":1151,"context_line":"        }"},{"line_number":1152,"context_line":"        mock_start_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1153,"context_line":"                                               \u0027start_lun_copy\u0027,"},{"line_number":1154,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5a9396_6500ff4b","line":1151,"range":{"start_line":1147,"start_character":8,"end_line":1151,"end_character":9},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"    @ddt.unpack"},{"line_number":1145,"context_line":"    def test_copy_lun_error(self, status_on_error, copy_exception):"},{"line_number":1146,"context_line":"        self.library.configuration.netapp_migrate_volume_timeout \u003d 1"},{"line_number":1147,"context_line":"        fake_job_uuid \u003d \u0027fake-job-uuid\u0027"},{"line_number":1148,"context_line":"        fake_job_status \u003d {"},{"line_number":1149,"context_line":"            \u0027job-status\u0027: status_on_error,"},{"line_number":1150,"context_line":"            \u0027last-failure-reason\u0027: None"},{"line_number":1151,"context_line":"        }"},{"line_number":1152,"context_line":"        mock_start_lun_copy \u003d self.mock_object(self.zapi_client,"},{"line_number":1153,"context_line":"                                               \u0027start_lun_copy\u0027,"},{"line_number":1154,"context_line":"                                               return_value\u003dfake_job_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"0e3d10c3_b9906045","line":1151,"range":{"start_line":1147,"start_character":8,"end_line":1151,"end_character":9},"in_reply_to":"ba5a9396_6500ff4b","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1158,"context_line":"        mock_cancel_lun_copy \u003d self.mock_object("},{"line_number":1159,"context_line":"            self.library, \u0027_cancel_lun_copy\u0027)"},{"line_number":1160,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1161,"context_line":"        vol_fields \u003d {"},{"line_number":1162,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1163,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1164,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1165,"context_line":"        }"},{"line_number":1166,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1167,"context_line":"        self.assertRaises(copy_exception,"},{"line_number":1168,"context_line":"                          self.library._copy_lun,"},{"line_number":1169,"context_line":"                          fake_vol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"28cbb92e_f61f3fb0","line":1166,"range":{"start_line":1161,"start_character":8,"end_line":1166,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1184,"context_line":"            dest_backend_name\u003dfake.DEST_BACKEND_NAME)"},{"line_number":1185,"context_line":""},{"line_number":1186,"context_line":"    def test_migrate_volume_to_pool(self):"},{"line_number":1187,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1188,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1189,"context_line":"        mock_move_lun \u003d self.mock_object(self.library, \u0027_move_lun\u0027)"},{"line_number":1190,"context_line":"        mock_finish_migrate_volume_to_pool \u003d self.mock_object("},{"line_number":1191,"context_line":"            self.library, \u0027_finish_migrate_volume_to_pool\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"263fed10_177075db","line":1188,"range":{"start_line":1187,"start_character":8,"end_line":1188,"end_character":41},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"            dest_backend_name\u003dfake.DEST_BACKEND_NAME)"},{"line_number":1185,"context_line":""},{"line_number":1186,"context_line":"    def test_migrate_volume_to_pool(self):"},{"line_number":1187,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1188,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1189,"context_line":"        mock_move_lun \u003d self.mock_object(self.library, \u0027_move_lun\u0027)"},{"line_number":1190,"context_line":"        mock_finish_migrate_volume_to_pool \u003d self.mock_object("},{"line_number":1191,"context_line":"            self.library, \u0027_finish_migrate_volume_to_pool\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3508de9a_07b2f8c7","line":1188,"range":{"start_line":1187,"start_character":8,"end_line":1188,"end_character":41},"in_reply_to":"263fed10_177075db","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1201,"context_line":"        self.assertEqual({}, updates)"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"    def test_migrate_volume_to_pool_lun_move_error(self):"},{"line_number":1204,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1205,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1206,"context_line":"        mock_move_lun \u003d self.mock_object("},{"line_number":1207,"context_line":"            self.library, \u0027_move_lun\u0027,"},{"line_number":1208,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"e8a8f85c_95797ff3","line":1205,"range":{"start_line":1204,"start_character":8,"end_line":1205,"end_character":41},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1201,"context_line":"        self.assertEqual({}, updates)"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"    def test_migrate_volume_to_pool_lun_move_error(self):"},{"line_number":1204,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1205,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1206,"context_line":"        mock_move_lun \u003d self.mock_object("},{"line_number":1207,"context_line":"            self.library, \u0027_move_lun\u0027,"},{"line_number":1208,"context_line":"            side_effect\u003dna_utils.NetAppDriverException)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7dc0ce4f_3e446eae","line":1205,"range":{"start_line":1204,"start_character":8,"end_line":1205,"end_character":41},"in_reply_to":"e8a8f85c_95797ff3","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1221,"context_line":"        mock_finish_migrate_volume_to_pool.assert_not_called()"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def test_migrate_volume_to_pool_lun_move_timeout(self):"},{"line_number":1224,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1225,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1226,"context_line":"        mock_move_lun \u003d self.mock_object("},{"line_number":1227,"context_line":"            self.library, \u0027_move_lun\u0027,"},{"line_number":1228,"context_line":"            side_effect\u003dna_utils.NetAppDriverTimeout)"}],"source_content_type":"text/x-python","patch_set":9,"id":"25adfb25_dbbe93d1","line":1225,"range":{"start_line":1224,"start_character":8,"end_line":1225,"end_character":41},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        mock_finish_migrate_volume_to_pool.assert_not_called()"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def test_migrate_volume_to_pool_lun_move_timeout(self):"},{"line_number":1224,"context_line":"        fake_src_pool \u003d \u0027src-ontap-vol\u0027"},{"line_number":1225,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1226,"context_line":"        mock_move_lun \u003d self.mock_object("},{"line_number":1227,"context_line":"            self.library, \u0027_move_lun\u0027,"},{"line_number":1228,"context_line":"            side_effect\u003dna_utils.NetAppDriverTimeout)"}],"source_content_type":"text/x-python","patch_set":9,"id":"6c00a317_d6cf60eb","line":1225,"range":{"start_line":1224,"start_character":8,"end_line":1225,"end_character":41},"in_reply_to":"25adfb25_dbbe93d1","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1240,"context_line":"        self.assertEqual({\u0027status\u0027: fields.VolumeStatus.MAINTENANCE}, updates)"},{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"    def test_finish_migrate_volume_to_pool(self):"},{"line_number":1243,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1244,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1245,"context_line":"        vol_fields \u003d {\u0027id\u0027: fake.VOLUME_ID, \u0027name\u0027: \u0027fake-vol\u0027}"},{"line_number":1246,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"}],"source_content_type":"text/x-python","patch_set":9,"id":"eba2c295_b3c3cdbe","line":1243,"range":{"start_line":1243,"start_character":8,"end_line":1243,"end_character":41},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1240,"context_line":"        self.assertEqual({\u0027status\u0027: fields.VolumeStatus.MAINTENANCE}, updates)"},{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"    def test_finish_migrate_volume_to_pool(self):"},{"line_number":1243,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1244,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1245,"context_line":"        vol_fields \u003d {\u0027id\u0027: fake.VOLUME_ID, \u0027name\u0027: \u0027fake-vol\u0027}"},{"line_number":1246,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"}],"source_content_type":"text/x-python","patch_set":9,"id":"0b80a92a_bdac86d8","line":1243,"range":{"start_line":1243,"start_character":8,"end_line":1243,"end_character":41},"in_reply_to":"eba2c295_b3c3cdbe","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1242,"context_line":"    def test_finish_migrate_volume_to_pool(self):"},{"line_number":1243,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1244,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1245,"context_line":"        vol_fields \u003d {\u0027id\u0027: fake.VOLUME_ID, \u0027name\u0027: \u0027fake-vol\u0027}"},{"line_number":1246,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1247,"context_line":"        fake_lun_cache \u003d block_base.NetAppLun(fake.LUN_HANDLE, fake.LUN_NAME,"},{"line_number":1248,"context_line":"                                              fake.SIZE, None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"d1ccb54d_8d5984b2","line":1245,"range":{"start_line":1245,"start_character":8,"end_line":1245,"end_character":63},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"dafe67d0152fcd1cabc8968d528c34256e191c74","unresolved":false,"context_lines":[{"line_number":1242,"context_line":"    def test_finish_migrate_volume_to_pool(self):"},{"line_number":1243,"context_line":"        fake_dest_pool \u003d \u0027dest-ontap-vol\u0027"},{"line_number":1244,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1245,"context_line":"        vol_fields \u003d {\u0027id\u0027: fake.VOLUME_ID, \u0027name\u0027: \u0027fake-vol\u0027}"},{"line_number":1246,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1247,"context_line":"        fake_lun_cache \u003d block_base.NetAppLun(fake.LUN_HANDLE, fake.LUN_NAME,"},{"line_number":1248,"context_line":"                                              fake.SIZE, None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"e76b29a3_efe70a02","line":1245,"range":{"start_line":1245,"start_character":8,"end_line":1245,"end_character":63},"in_reply_to":"d1ccb54d_8d5984b2","updated":"2021-08-31 04:10:07.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1377,"context_line":"        mock_finish_migrate_volume_to_vserver \u003d self.mock_object("},{"line_number":1378,"context_line":"            self.library, \u0027_finish_migrate_volume_to_vserver\u0027)"},{"line_number":1379,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1380,"context_line":"        vol_fields \u003d {"},{"line_number":1381,"context_line":"            \u0027id\u0027: fake.VOLUME_ID,"},{"line_number":1382,"context_line":"            \u0027name\u0027: fake.VOLUME_NAME,"},{"line_number":1383,"context_line":"            \u0027status\u0027: fields.VolumeStatus.AVAILABLE"},{"line_number":1384,"context_line":"        }"},{"line_number":1385,"context_line":"        fake_vol \u003d fake_volume.fake_volume_obj(ctxt, **vol_fields)"},{"line_number":1386,"context_line":"        self.assertRaises(exception.InvalidVolume,"},{"line_number":1387,"context_line":"                          self.library._migrate_volume_to_vserver,"},{"line_number":1388,"context_line":"                          fake_vol, fake.SOURCE_POOL, fake.SOURCE_VSERVER,"}],"source_content_type":"text/x-python","patch_set":9,"id":"c8a3d318_8eb70b8e","line":1385,"range":{"start_line":1380,"start_character":8,"end_line":1385,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"I think you may use the fake module, avoiding repeting and fake strings here.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":503,"context_line":"            self.zapi_client.add_igroup_initiator(igroup_name, initiator)"},{"line_number":504,"context_line":"        return igroup_name"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    def _delete_lun_from_table(self, name):"},{"line_number":507,"context_line":"        if self.lun_table.get(name, None):"},{"line_number":508,"context_line":"            self.lun_table.pop(name)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"01a28f15_08fc659e","line":506,"range":{"start_line":506,"start_character":8,"end_line":506,"end_character":30},"updated":"2021-08-27 18:42:39.000000000","message":"add a header to the function as other functions have:\n\"\"\"bla bla bla.\"\"\"","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self.zapi_client.add_igroup_initiator(igroup_name, initiator)"},{"line_number":504,"context_line":"        return igroup_name"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    def _delete_lun_from_table(self, name):"},{"line_number":507,"context_line":"        if self.lun_table.get(name, None):"},{"line_number":508,"context_line":"            self.lun_table.pop(name)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"12702c9e_78d2d816","line":506,"range":{"start_line":506,"start_character":8,"end_line":506,"end_character":30},"in_reply_to":"01a28f15_08fc659e","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"2e381f2d_04ca3d58","line":613,"range":{"start_line":613,"start_character":11,"end_line":613,"end_character":18},"updated":"2021-08-27 18:42:39.000000000","message":"I think it is not starting, it is doing it.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"8ee0c5c9_f9237a93","line":613,"range":{"start_line":613,"start_character":40,"end_line":613,"end_character":42},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1026fa70_aeb8e5d6","line":613,"range":{"start_line":613,"start_character":20,"end_line":613,"end_character":25},"updated":"2021-08-27 18:42:39.000000000","message":"move lun operation","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"c127fdc0_2f63f0de","line":613,"range":{"start_line":613,"start_character":20,"end_line":613,"end_character":25},"in_reply_to":"1026fa70_aeb8e5d6","updated":"2021-08-30 19:34:48.000000000","message":"Changed to Moves LUN from...","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"610feb11_7e39240c","line":613,"range":{"start_line":613,"start_character":11,"end_line":613,"end_character":18},"in_reply_to":"2e381f2d_04ca3d58","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def _move_lun(self, volume, src_ontap_volume, dest_ontap_volume,"},{"line_number":612,"context_line":"                  dest_lun_name\u003dNone):"},{"line_number":613,"context_line":"        \"\"\"Starts a move operation from a ONTAP volume to another.\"\"\""},{"line_number":614,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_move("},{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ae5e5d26_a6d43f6a","line":613,"range":{"start_line":613,"start_character":40,"end_line":613,"end_character":42},"in_reply_to":"8ee0c5c9_f9237a93","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"},{"line_number":617,"context_line":"        LOG.debug(\u0027Start moving volume %s from %s to %s. \u0027"},{"line_number":618,"context_line":"                  \u0027Job uuid is %s.\u0027, volume.name, src_ontap_volume,"},{"line_number":619,"context_line":"                  dest_ontap_volume, job_uuid)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        def _wait_lun_move_complete():"}],"source_content_type":"text/x-python","patch_set":9,"id":"191aa37d_afb9ab53","line":618,"range":{"start_line":618,"start_character":23,"end_line":618,"end_character":28},"updated":"2021-08-27 18:42:39.000000000","message":"UUID","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":616,"context_line":"            dest_lun_name\u003ddest_lun_name)"},{"line_number":617,"context_line":"        LOG.debug(\u0027Start moving volume %s from %s to %s. \u0027"},{"line_number":618,"context_line":"                  \u0027Job uuid is %s.\u0027, volume.name, src_ontap_volume,"},{"line_number":619,"context_line":"                  dest_ontap_volume, job_uuid)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        def _wait_lun_move_complete():"}],"source_content_type":"text/x-python","patch_set":9,"id":"f0b2f097_e878dccc","line":618,"range":{"start_line":618,"start_character":23,"end_line":618,"end_character":28},"in_reply_to":"191aa37d_afb9ab53","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":623,"context_line":"            LOG.debug(\u0027Waiting for LUN move job %s to complete. \u0027"},{"line_number":624,"context_line":"                      \u0027Current status is: %s.\u0027, job_uuid,"},{"line_number":625,"context_line":"                      move_status[\u0027job-status\u0027])"},{"line_number":626,"context_line":"            if move_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":627,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":628,"context_line":"            elif move_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":629,"context_line":"                status_error_msg \u003d (_(\u0027Error moving volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"eeaff605_451ea0ee","line":626,"range":{"start_line":626,"start_character":15,"end_line":626,"end_character":26},"updated":"2021-08-27 18:42:39.000000000","message":"move_status might be a `None` value (when the job is not found), you should treat this scenario before accessing it as dict.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            LOG.debug(\u0027Waiting for LUN move job %s to complete. \u0027"},{"line_number":624,"context_line":"                      \u0027Current status is: %s.\u0027, job_uuid,"},{"line_number":625,"context_line":"                      move_status[\u0027job-status\u0027])"},{"line_number":626,"context_line":"            if move_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":627,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":628,"context_line":"            elif move_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":629,"context_line":"                status_error_msg \u003d (_(\u0027Error moving volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"86041bd4_4e1a4e1d","line":626,"range":{"start_line":626,"start_character":15,"end_line":626,"end_character":26},"in_reply_to":"eeaff605_451ea0ee","updated":"2021-08-30 19:34:48.000000000","message":"Good catch. Fixed by including a check to fail the operation in case job uuid is missing for any reason.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":625,"context_line":"                      move_status[\u0027job-status\u0027])"},{"line_number":626,"context_line":"            if move_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":627,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":628,"context_line":"            elif move_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":629,"context_line":"                status_error_msg \u003d (_(\u0027Error moving volume %s. %s.\u0027))"},{"line_number":630,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":631,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"61811aac_9d645279","line":628,"range":{"start_line":628,"start_character":16,"end_line":628,"end_character":57},"updated":"2021-08-27 18:42:39.000000000","message":"if the job gets the status `paused_error`, should it continue the wait process ?!","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":625,"context_line":"                      move_status[\u0027job-status\u0027])"},{"line_number":626,"context_line":"            if move_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":627,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":628,"context_line":"            elif move_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":629,"context_line":"                status_error_msg \u003d (_(\u0027Error moving volume %s. %s.\u0027))"},{"line_number":630,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":631,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"eb431f91_56fa8fef","line":628,"range":{"start_line":628,"start_character":16,"end_line":628,"end_character":57},"in_reply_to":"61811aac_9d645279","updated":"2021-08-30 19:34:48.000000000","message":"I wasn\u0027t able to reproduce a `paused_error` status in any of my test scenarios and in fact documentation is very unclear on which situations we could get such error. I\u0027m worried that failing the execution immediately after getting a `pause_error` wouldn\u0027t give ONTAP the chance to automatically cleanup and destroy the failed copy in the destination. But even if we get stuck in such status, the operation should still fail due to the configured timeout and a cleanup will be done by the driver anyway, so I believe we are still covered even if we eventually hit something like this.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"55cfcae5_2d2bc602","line":666,"range":{"start_line":666,"start_character":40,"end_line":666,"end_character":41},"updated":"2021-08-27 18:42:39.000000000","message":"an ONTAP","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1db6dbfd_1b6d9743","line":666,"range":{"start_line":666,"start_character":20,"end_line":666,"end_character":25},"updated":"2021-08-27 18:42:39.000000000","message":"copy lun","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"00b562c2_4dab38d2","line":666,"range":{"start_line":666,"start_character":11,"end_line":666,"end_character":18},"updated":"2021-08-27 18:42:39.000000000","message":"starts only ? I think it starts and performs the entire copy, right ?","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"18067e84_81092c5f","line":666,"range":{"start_line":666,"start_character":11,"end_line":666,"end_character":18},"in_reply_to":"00b562c2_4dab38d2","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"4740ab12_3b7b64cc","line":666,"range":{"start_line":666,"start_character":20,"end_line":666,"end_character":25},"in_reply_to":"1db6dbfd_1b6d9743","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":663,"context_line":"    def _copy_lun(self, volume, src_ontap_volume, src_vserver,"},{"line_number":664,"context_line":"                  dest_ontap_volume, dest_vserver, dest_lun_name\u003dNone,"},{"line_number":665,"context_line":"                  dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":666,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":667,"context_line":"        job_uuid \u003d self.zapi_client.start_lun_copy("},{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1d5f1ff8_b39566fc","line":666,"range":{"start_line":666,"start_character":40,"end_line":666,"end_character":41},"in_reply_to":"55cfcae5_2d2bc602","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":668,"context_line":"            volume.name, dest_ontap_volume, dest_vserver,"},{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"},{"line_number":670,"context_line":"            dest_lun_name\u003ddest_lun_name)"},{"line_number":671,"context_line":"        LOG.debug(\u0027Start copying volume %s from %s (%s) to %s (%s). \u0027"},{"line_number":672,"context_line":"                  \u0027Job uuid is %s.\u0027, volume.name, src_ontap_volume,"},{"line_number":673,"context_line":"                  src_vserver, dest_ontap_volume, dest_vserver, job_uuid)"},{"line_number":674,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"32c43191_7016c29f","line":671,"range":{"start_line":671,"start_character":47,"end_line":671,"end_character":66},"updated":"2021-08-27 18:42:39.000000000","message":"nit: we might copy ONTAP format to print vserver and volume togethe.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"},{"line_number":670,"context_line":"            dest_lun_name\u003ddest_lun_name)"},{"line_number":671,"context_line":"        LOG.debug(\u0027Start copying volume %s from %s (%s) to %s (%s). \u0027"},{"line_number":672,"context_line":"                  \u0027Job uuid is %s.\u0027, volume.name, src_ontap_volume,"},{"line_number":673,"context_line":"                  src_vserver, dest_ontap_volume, dest_vserver, job_uuid)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        def _wait_lun_copy_complete():"}],"source_content_type":"text/x-python","patch_set":9,"id":"0f2f553f_71fdddff","line":672,"range":{"start_line":672,"start_character":23,"end_line":672,"end_character":28},"updated":"2021-08-27 18:42:39.000000000","message":"UUID. or better: `ONTAP job %s.` or `internal job %s`.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":669,"context_line":"            src_ontap_volume\u003dsrc_ontap_volume, src_vserver\u003dsrc_vserver,"},{"line_number":670,"context_line":"            dest_lun_name\u003ddest_lun_name)"},{"line_number":671,"context_line":"        LOG.debug(\u0027Start copying volume %s from %s (%s) to %s (%s). \u0027"},{"line_number":672,"context_line":"                  \u0027Job uuid is %s.\u0027, volume.name, src_ontap_volume,"},{"line_number":673,"context_line":"                  src_vserver, dest_ontap_volume, dest_vserver, job_uuid)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        def _wait_lun_copy_complete():"}],"source_content_type":"text/x-python","patch_set":9,"id":"3b23d5e0_2ce2de88","line":672,"range":{"start_line":672,"start_character":23,"end_line":672,"end_character":28},"in_reply_to":"0f2f553f_71fdddff","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":676,"context_line":"            copy_status \u003d self.zapi_client.get_lun_copy_status(job_uuid)"},{"line_number":677,"context_line":"            LOG.debug(\u0027Waiting for LUN copy job %s to complete. Current \u0027"},{"line_number":678,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":679,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":680,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":681,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":682,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"abc31cc4_fdedb1ea","line":679,"range":{"start_line":679,"start_character":15,"end_line":679,"end_character":26},"updated":"2021-08-27 18:42:39.000000000","message":"copy_status might be a `None` value (when the job is not found), you should treat this scenario before accessing it as dict.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":676,"context_line":"            copy_status \u003d self.zapi_client.get_lun_copy_status(job_uuid)"},{"line_number":677,"context_line":"            LOG.debug(\u0027Waiting for LUN copy job %s to complete. Current \u0027"},{"line_number":678,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":679,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":680,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":681,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":682,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f5d088d_5a35fc7b","line":679,"range":{"start_line":679,"start_character":15,"end_line":679,"end_character":26},"in_reply_to":"abc31cc4_fdedb1ea","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":678,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":679,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":680,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":681,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":682,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"},{"line_number":683,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":684,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"e50cbe5b_d90b4c7e","line":681,"range":{"start_line":681,"start_character":17,"end_line":681,"end_character":57},"updated":"2021-08-27 18:42:39.000000000","message":"it the job gets the status `paused_error`, should it continue the wait process ?!","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":678,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":679,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":680,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":681,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":682,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"},{"line_number":683,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":684,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"75409fbe_caa7154a","line":681,"range":{"start_line":681,"start_character":17,"end_line":681,"end_character":57},"in_reply_to":"e50cbe5b_d90b4c7e","updated":"2021-08-30 19:34:48.000000000","message":"I wasn\u0027t able to reproduce a `paused_error` status in any of my test scenarios and in fact documentation is very unclear on which situations we could get such error. I\u0027m worried that failing the execution immediately after getting a `pause_error` wouldn\u0027t give ONTAP the chance to automatically cleanup and destroy the failed copy in the destination. But even if we get stuck in such status, the operation should still fail due to the configured timeout and a cleanup will be done by the driver anyway, so I believe we are still covered even if we eventually hit something like this.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":721,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        if not self.using_cluster_credentials:"},{"line_number":724,"context_line":"            msg \u003d _(\"vserver migration requires ONTAP cluster level \""},{"line_number":725,"context_line":"                    \"credentials.\")"},{"line_number":726,"context_line":"            LOG.error(msg)"},{"line_number":727,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7b346423_20c05b5a","line":724,"range":{"start_line":724,"start_character":22,"end_line":724,"end_character":38},"updated":"2021-08-27 18:42:39.000000000","message":"it is not a vserver migration:\n\n\"volume migration across vservers..\"","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":721,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        if not self.using_cluster_credentials:"},{"line_number":724,"context_line":"            msg \u003d _(\"vserver migration requires ONTAP cluster level \""},{"line_number":725,"context_line":"                    \"credentials.\")"},{"line_number":726,"context_line":"            LOG.error(msg)"},{"line_number":727,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"cd958f6e_203c4ec2","line":724,"range":{"start_line":724,"start_character":22,"end_line":724,"end_character":38},"in_reply_to":"7b346423_20c05b5a","updated":"2021-08-30 19:34:48.000000000","message":"Done, function was moved to data_motion.py.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":739,"context_line":"        return {}"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _finish_migrate_volume_to_pool(self, src_volume, dest_pool):"},{"line_number":742,"context_line":"        \"\"\"Finish volume migration to another pool within the cluster.\"\"\""},{"line_number":743,"context_line":"        # LUN cache must be updated with new path and volume information"},{"line_number":744,"context_line":"        lun \u003d self._get_lun_from_table(src_volume.name)"},{"line_number":745,"context_line":"        new_lun_path \u003d \u0027/vol/%s/%s\u0027 % (dest_pool, src_volume.name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"39724f5d_70a7c97b","line":742,"range":{"start_line":742,"start_character":62,"end_line":742,"end_character":69},"updated":"2021-08-27 18:42:39.000000000","message":"vserver","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        return {}"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _finish_migrate_volume_to_pool(self, src_volume, dest_pool):"},{"line_number":742,"context_line":"        \"\"\"Finish volume migration to another pool within the cluster.\"\"\""},{"line_number":743,"context_line":"        # LUN cache must be updated with new path and volume information"},{"line_number":744,"context_line":"        lun \u003d self._get_lun_from_table(src_volume.name)"},{"line_number":745,"context_line":"        new_lun_path \u003d \u0027/vol/%s/%s\u0027 % (dest_pool, src_volume.name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"d699dd91_4095fe9e","line":742,"range":{"start_line":742,"start_character":62,"end_line":742,"end_character":69},"in_reply_to":"39724f5d_70a7c97b","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _finish_migrate_volume_to_pool(self, src_volume, dest_pool):"},{"line_number":742,"context_line":"        \"\"\"Finish volume migration to another pool within the cluster.\"\"\""},{"line_number":743,"context_line":"        # LUN cache must be updated with new path and volume information"},{"line_number":744,"context_line":"        lun \u003d self._get_lun_from_table(src_volume.name)"},{"line_number":745,"context_line":"        new_lun_path \u003d \u0027/vol/%s/%s\u0027 % (dest_pool, src_volume.name)"},{"line_number":746,"context_line":"        lun.metadata[\u0027Path\u0027] \u003d new_lun_path"}],"source_content_type":"text/x-python","patch_set":9,"id":"ae4c401d_af26b436","line":743,"range":{"start_line":743,"start_character":61,"end_line":743,"end_character":72},"updated":"2021-08-27 18:42:39.000000000","message":".","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _finish_migrate_volume_to_pool(self, src_volume, dest_pool):"},{"line_number":742,"context_line":"        \"\"\"Finish volume migration to another pool within the cluster.\"\"\""},{"line_number":743,"context_line":"        # LUN cache must be updated with new path and volume information"},{"line_number":744,"context_line":"        lun \u003d self._get_lun_from_table(src_volume.name)"},{"line_number":745,"context_line":"        new_lun_path \u003d \u0027/vol/%s/%s\u0027 % (dest_pool, src_volume.name)"},{"line_number":746,"context_line":"        lun.metadata[\u0027Path\u0027] \u003d new_lun_path"}],"source_content_type":"text/x-python","patch_set":9,"id":"1dda2de3_50a999c8","line":743,"range":{"start_line":743,"start_character":61,"end_line":743,"end_character":72},"in_reply_to":"ae4c401d_af26b436","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":773,"context_line":"        return updates"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":776,"context_line":"        \"\"\"Migrate a ONTAP Volume to the specified pool, vserver or cluster.\"\"\""},{"line_number":777,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":778,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":779,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"cabcdc45_c6f4b68b","line":776,"range":{"start_line":776,"start_character":19,"end_line":776,"end_character":21},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        return updates"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":776,"context_line":"        \"\"\"Migrate a ONTAP Volume to the specified pool, vserver or cluster.\"\"\""},{"line_number":777,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":778,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":779,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"6aefd77d_1c9ab1e5","line":776,"range":{"start_line":776,"start_character":19,"end_line":776,"end_character":21},"in_reply_to":"cabcdc45_c6f4b68b","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":796,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":797,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":798,"context_line":"            # SnapMirrors is required."},{"line_number":799,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":800,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":801,"context_line":"                # If origin and destination vservers are the same, simply move"},{"line_number":802,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":803,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"}],"source_content_type":"text/x-python","patch_set":9,"id":"9e0f90eb_505668fe","line":800,"range":{"start_line":799,"start_character":17,"end_line":800,"end_character":57},"updated":"2021-08-27 18:42:39.000000000","message":"SVM scoped user does not have access to this call. please, fix it.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":796,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":797,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":798,"context_line":"            # SnapMirrors is required."},{"line_number":799,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":800,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":801,"context_line":"                # If origin and destination vservers are the same, simply move"},{"line_number":802,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":803,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"}],"source_content_type":"text/x-python","patch_set":9,"id":"67a6ecce_4fc2d351","line":800,"range":{"start_line":799,"start_character":17,"end_line":800,"end_character":57},"in_reply_to":"9e0f90eb_505668fe","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":777,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":778,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":779,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        # Check if migration occurs in the same backend. If so, a migration"},{"line_number":782,"context_line":"        # between Cinder pools in the same vserver will be performed."},{"line_number":783,"context_line":"        if self.backend_name \u003d\u003d dest_backend_name:"},{"line_number":784,"context_line":"            # We should skip the operation in case source and destination pools"},{"line_number":785,"context_line":"            # are the same."},{"line_number":786,"context_line":"            if src_pool \u003d\u003d dest_pool:"},{"line_number":787,"context_line":"                LOG.info(\u0027Skipping volume migration as source and destination \u0027"},{"line_number":788,"context_line":"                         \u0027are the same.\u0027)"},{"line_number":789,"context_line":"                return True, {}"},{"line_number":790,"context_line":"            updates \u003d self._migrate_volume_to_pool(volume, src_pool, dest_pool)"},{"line_number":791,"context_line":"        else:"},{"line_number":792,"context_line":"            dest_backend_config \u003d dot_utils.get_backend_configuration("},{"line_number":793,"context_line":"                dest_backend_name)"},{"line_number":794,"context_line":"            dest_client \u003d dot_utils.get_client_for_backend(dest_backend_name)"},{"line_number":795,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":796,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":797,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":798,"context_line":"            # SnapMirrors is required."},{"line_number":799,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":800,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":801,"context_line":"                # If origin and destination vservers are the same, simply move"},{"line_number":802,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":803,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"},{"line_number":804,"context_line":"                # followed by a volume copy operation are required."},{"line_number":805,"context_line":"                # Both operations will copy data between ONTAP volumes"},{"line_number":806,"context_line":"                # and won\u0027t finish in constant time as volume clones."},{"line_number":807,"context_line":"                if (dest_backend_config.netapp_vserver \u003d\u003d"},{"line_number":808,"context_line":"                        self.configuration.netapp_vserver):"},{"line_number":809,"context_line":"                    # We should skip the operation in case source and"},{"line_number":810,"context_line":"                    # destination pools are the same"},{"line_number":811,"context_line":"                    if src_pool \u003d\u003d dest_pool:"},{"line_number":812,"context_line":"                        LOG.info(\u0027Skipping volume migration as source and \u0027"},{"line_number":813,"context_line":"                                 \u0027destination are the same.\u0027)"},{"line_number":814,"context_line":"                        return True, {}"},{"line_number":815,"context_line":"                    updates \u003d self._migrate_volume_to_pool(volume, src_pool,"},{"line_number":816,"context_line":"                                                           dest_pool)"},{"line_number":817,"context_line":"                else:"},{"line_number":818,"context_line":"                    updates \u003d self._migrate_volume_to_vserver("},{"line_number":819,"context_line":"                        volume, src_pool, self.configuration.netapp_vserver,"},{"line_number":820,"context_line":"                        dest_pool, dest_backend_config.netapp_vserver,"},{"line_number":821,"context_line":"                        dest_backend_name)"},{"line_number":822,"context_line":"            else:"},{"line_number":823,"context_line":"                LOG.info(\u0027Driver only supports storage assisted migration \u0027"},{"line_number":824,"context_line":"                         \u0027between pools in a same cluster. Falling back to \u0027"},{"line_number":825,"context_line":"                         \u0027host assisted migration.\u0027)"},{"line_number":826,"context_line":"                return False, {}"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        LOG.info(\u0027Successfully migrated volume %s to host %s.\u0027,"},{"line_number":829,"context_line":"                 volume.id, host[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"787298c6_ecb0c9af","line":826,"range":{"start_line":780,"start_character":0,"end_line":826,"end_character":32},"updated":"2021-08-27 18:42:39.000000000","message":"There are a long chain of if/else. Please, could you try to improve it ?!","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":777,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":778,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":779,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        # Check if migration occurs in the same backend. If so, a migration"},{"line_number":782,"context_line":"        # between Cinder pools in the same vserver will be performed."},{"line_number":783,"context_line":"        if self.backend_name \u003d\u003d dest_backend_name:"},{"line_number":784,"context_line":"            # We should skip the operation in case source and destination pools"},{"line_number":785,"context_line":"            # are the same."},{"line_number":786,"context_line":"            if src_pool \u003d\u003d dest_pool:"},{"line_number":787,"context_line":"                LOG.info(\u0027Skipping volume migration as source and destination \u0027"},{"line_number":788,"context_line":"                         \u0027are the same.\u0027)"},{"line_number":789,"context_line":"                return True, {}"},{"line_number":790,"context_line":"            updates \u003d self._migrate_volume_to_pool(volume, src_pool, dest_pool)"},{"line_number":791,"context_line":"        else:"},{"line_number":792,"context_line":"            dest_backend_config \u003d dot_utils.get_backend_configuration("},{"line_number":793,"context_line":"                dest_backend_name)"},{"line_number":794,"context_line":"            dest_client \u003d dot_utils.get_client_for_backend(dest_backend_name)"},{"line_number":795,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":796,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":797,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":798,"context_line":"            # SnapMirrors is required."},{"line_number":799,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":800,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":801,"context_line":"                # If origin and destination vservers are the same, simply move"},{"line_number":802,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":803,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"},{"line_number":804,"context_line":"                # followed by a volume copy operation are required."},{"line_number":805,"context_line":"                # Both operations will copy data between ONTAP volumes"},{"line_number":806,"context_line":"                # and won\u0027t finish in constant time as volume clones."},{"line_number":807,"context_line":"                if (dest_backend_config.netapp_vserver \u003d\u003d"},{"line_number":808,"context_line":"                        self.configuration.netapp_vserver):"},{"line_number":809,"context_line":"                    # We should skip the operation in case source and"},{"line_number":810,"context_line":"                    # destination pools are the same"},{"line_number":811,"context_line":"                    if src_pool \u003d\u003d dest_pool:"},{"line_number":812,"context_line":"                        LOG.info(\u0027Skipping volume migration as source and \u0027"},{"line_number":813,"context_line":"                                 \u0027destination are the same.\u0027)"},{"line_number":814,"context_line":"                        return True, {}"},{"line_number":815,"context_line":"                    updates \u003d self._migrate_volume_to_pool(volume, src_pool,"},{"line_number":816,"context_line":"                                                           dest_pool)"},{"line_number":817,"context_line":"                else:"},{"line_number":818,"context_line":"                    updates \u003d self._migrate_volume_to_vserver("},{"line_number":819,"context_line":"                        volume, src_pool, self.configuration.netapp_vserver,"},{"line_number":820,"context_line":"                        dest_pool, dest_backend_config.netapp_vserver,"},{"line_number":821,"context_line":"                        dest_backend_name)"},{"line_number":822,"context_line":"            else:"},{"line_number":823,"context_line":"                LOG.info(\u0027Driver only supports storage assisted migration \u0027"},{"line_number":824,"context_line":"                         \u0027between pools in a same cluster. Falling back to \u0027"},{"line_number":825,"context_line":"                         \u0027host assisted migration.\u0027)"},{"line_number":826,"context_line":"                return False, {}"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        LOG.info(\u0027Successfully migrated volume %s to host %s.\u0027,"},{"line_number":829,"context_line":"                 volume.id, host[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"2a74718d_9b9c4075","line":826,"range":{"start_line":780,"start_character":0,"end_line":826,"end_character":32},"in_reply_to":"787298c6_ecb0c9af","updated":"2021-08-30 19:34:48.000000000","message":"ok, I\u0027ve tried to reduce it a bit.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":635,"context_line":"        return result.get_child_content(\u0027job-uuid\u0027)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    def destroy_file_copy(self, job_uuid):"},{"line_number":638,"context_line":"        \"\"\"Cancel/Destroy a in-progress file copy.\"\"\""},{"line_number":639,"context_line":"        api_args \u003d {"},{"line_number":640,"context_line":"            \u0027job-uuid\u0027: job_uuid,"},{"line_number":641,"context_line":"            \u0027file-index\u0027: 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"2fcaa087_42b4b928","line":638,"range":{"start_line":638,"start_character":26,"end_line":638,"end_character":28},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        return result.get_child_content(\u0027job-uuid\u0027)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    def destroy_file_copy(self, job_uuid):"},{"line_number":638,"context_line":"        \"\"\"Cancel/Destroy a in-progress file copy.\"\"\""},{"line_number":639,"context_line":"        api_args \u003d {"},{"line_number":640,"context_line":"            \u0027job-uuid\u0027: job_uuid,"},{"line_number":641,"context_line":"            \u0027file-index\u0027: 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"a5e2b73a_5deb96cd","line":638,"range":{"start_line":638,"start_character":26,"end_line":638,"end_character":28},"in_reply_to":"2fcaa087_42b4b928","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":697,"context_line":"        return result.get_child_content(\u0027job-uuid\u0027)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def cancel_lun_copy(self, job_uuid):"},{"line_number":700,"context_line":"        \"\"\"Cancel a in-progress lun copy.\"\"\""},{"line_number":701,"context_line":"        api_args \u003d {"},{"line_number":702,"context_line":"            \u0027job-uuid\u0027: job_uuid"},{"line_number":703,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"f883cd46_b5efa2b3","line":700,"range":{"start_line":700,"start_character":18,"end_line":700,"end_character":20},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        return result.get_child_content(\u0027job-uuid\u0027)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def cancel_lun_copy(self, job_uuid):"},{"line_number":700,"context_line":"        \"\"\"Cancel a in-progress lun copy.\"\"\""},{"line_number":701,"context_line":"        api_args \u003d {"},{"line_number":702,"context_line":"            \u0027job-uuid\u0027: job_uuid"},{"line_number":703,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"43f41db4_7d8930bf","line":700,"range":{"start_line":700,"start_character":18,"end_line":700,"end_character":20},"in_reply_to":"f883cd46_b5efa2b3","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"}],"cinder/volume/drivers/netapp/dataontap/nfs_cmode.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def _cancel_file_copy(self, job_uuid, volume, dest_pool,"},{"line_number":990,"context_line":"                          dest_backend_name\u003dNone):"},{"line_number":991,"context_line":"        \"\"\"Cancel a on-going file copy operation.\"\"\""},{"line_number":992,"context_line":"        try:"},{"line_number":993,"context_line":"            # NOTE(sfernand): Another approach would be first checking if"},{"line_number":994,"context_line":"            # the copy operation isn\u0027t in `destroying` or `destroyed` states"}],"source_content_type":"text/x-python","patch_set":9,"id":"e88b3ef2_90d96025","line":991,"range":{"start_line":991,"start_character":18,"end_line":991,"end_character":20},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def _cancel_file_copy(self, job_uuid, volume, dest_pool,"},{"line_number":990,"context_line":"                          dest_backend_name\u003dNone):"},{"line_number":991,"context_line":"        \"\"\"Cancel a on-going file copy operation.\"\"\""},{"line_number":992,"context_line":"        try:"},{"line_number":993,"context_line":"            # NOTE(sfernand): Another approach would be first checking if"},{"line_number":994,"context_line":"            # the copy operation isn\u0027t in `destroying` or `destroyed` states"}],"source_content_type":"text/x-python","patch_set":9,"id":"e54e118d_25cf2c8d","line":991,"range":{"start_line":991,"start_character":18,"end_line":991,"end_character":20},"in_reply_to":"e88b3ef2_90d96025","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"    def _copy_file(self, volume, src_ontap_volume, src_vserver,"},{"line_number":1009,"context_line":"                   dest_ontap_volume, dest_vserver, dest_file_name\u003dNone,"},{"line_number":1010,"context_line":"                   dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":1011,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":1012,"context_line":"        job_uuid \u003d self.zapi_client.start_file_copy("},{"line_number":1013,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"e33fada2_2366249e","line":1010,"range":{"start_line":1010,"start_character":43,"end_line":1010,"end_character":58},"updated":"2021-08-27 18:42:39.000000000","message":"why is it optional if all callers are canceling on error ? Is there any case for not canceling ?!","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"    def _copy_file(self, volume, src_ontap_volume, src_vserver,"},{"line_number":1009,"context_line":"                   dest_ontap_volume, dest_vserver, dest_file_name\u003dNone,"},{"line_number":1010,"context_line":"                   dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":1011,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":1012,"context_line":"        job_uuid \u003d self.zapi_client.start_file_copy("},{"line_number":1013,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"6bcac135_b69b67ce","line":1010,"range":{"start_line":1010,"start_character":43,"end_line":1010,"end_character":58},"in_reply_to":"e33fada2_2366249e","updated":"2021-08-30 19:34:48.000000000","message":"Don\u0027t think so. At the begging of the development process this function was designed to be re-used by inter-cluster migration, where we would copy files to a temporary ONTAP volume to be later copied to the destination cluster. As the inter-cluster operation have many other challenges to be covered, the decision was to address that in later releases. I believe the cancel_on_error will be used in this scenario in future and keeping it has no significant impact in current code.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1008,"context_line":"    def _copy_file(self, volume, src_ontap_volume, src_vserver,"},{"line_number":1009,"context_line":"                   dest_ontap_volume, dest_vserver, dest_file_name\u003dNone,"},{"line_number":1010,"context_line":"                   dest_backend_name\u003dNone, cancel_on_error\u003dFalse):"},{"line_number":1011,"context_line":"        \"\"\"Starts a copy operation from a ONTAP volume to another.\"\"\""},{"line_number":1012,"context_line":"        job_uuid \u003d self.zapi_client.start_file_copy("},{"line_number":1013,"context_line":"            volume.name, dest_ontap_volume, src_ontap_volume\u003dsrc_ontap_volume,"},{"line_number":1014,"context_line":"            dest_file_name\u003ddest_file_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"4945be96_b9e22827","line":1011,"range":{"start_line":1011,"start_character":40,"end_line":1011,"end_character":42},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1020,"context_line":"            copy_status \u003d self.zapi_client.get_file_copy_status(job_uuid)"},{"line_number":1021,"context_line":"            LOG.debug(\u0027Waiting for file copy job %s to complete. Current \u0027"},{"line_number":1022,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":1023,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":1024,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1025,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":1026,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"417d14da_eb9984b5","line":1023,"range":{"start_line":1023,"start_character":14,"end_line":1023,"end_character":54},"updated":"2021-08-27 18:42:39.000000000","message":"copy_status might be \u0027None\u0027, please, check and treat it.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1020,"context_line":"            copy_status \u003d self.zapi_client.get_file_copy_status(job_uuid)"},{"line_number":1021,"context_line":"            LOG.debug(\u0027Waiting for file copy job %s to complete. Current \u0027"},{"line_number":1022,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":1023,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":1024,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1025,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":1026,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"69cacdad_cb6ace9f","line":1023,"range":{"start_line":1023,"start_character":14,"end_line":1023,"end_character":54},"in_reply_to":"417d14da_eb9984b5","updated":"2021-08-30 19:34:48.000000000","message":"good catch. Fixed by including a check to fail the operation in case job uuid is missing for any reason.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":1023,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":1024,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1025,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":1026,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"},{"line_number":1027,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":1028,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"914a4716_fd93af8a","line":1025,"range":{"start_line":1025,"start_character":16,"end_line":1025,"end_character":57},"updated":"2021-08-27 18:42:39.000000000","message":"same about `paused_error`, should it continue waiting ?","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                      \u0027status is: %s.\u0027, job_uuid, copy_status[\u0027job-status\u0027])"},{"line_number":1023,"context_line":"            if copy_status[\u0027job-status\u0027] \u003d\u003d \u0027complete\u0027:"},{"line_number":1024,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1025,"context_line":"            elif copy_status[\u0027job-status\u0027] \u003d\u003d \u0027destroyed\u0027:"},{"line_number":1026,"context_line":"                status_error_msg \u003d (_(\u0027Error copying volume %s. %s.\u0027))"},{"line_number":1027,"context_line":"                raise na_utils.NetAppDriverException("},{"line_number":1028,"context_line":"                    status_error_msg % (volume.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3ff41a4b_3c352a09","line":1025,"range":{"start_line":1025,"start_character":16,"end_line":1025,"end_character":57},"in_reply_to":"914a4716_fd93af8a","updated":"2021-08-30 19:34:48.000000000","message":"I wasn\u0027t able to reproduce a `paused_error` status in any of my test scenarios and in fact documentation is very unclear on which situations we could get such error. I\u0027m worried that failing the execution immediately after getting a `pause_error` wouldn\u0027t give ONTAP the chance to automatically cleanup and destroy the failed copy in the destination. But even if we get stuck in such status, the operation should still fail due to the configured timeout and a cleanup will be done by the driver anyway, so I believe we are still covered even if we eventually hit something like this.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    def _finish_volume_migration(self, src_volume, dest_pool):"},{"line_number":1054,"context_line":"        \"\"\"Finish volume migration to another ONTAP volume.\"\"\""},{"line_number":1055,"context_line":"        # The source volume can be safely deleted after a successful migration."},{"line_number":1056,"context_line":"        self.delete_volume(src_volume)"},{"line_number":1057,"context_line":"        # NFS driver requires the provider_location to be updated with the new"},{"line_number":1058,"context_line":"        # destination."}],"source_content_type":"text/x-python","patch_set":9,"id":"45fcbcd7_84d96ecf","line":1055,"range":{"start_line":1055,"start_character":8,"end_line":1055,"end_character":79},"updated":"2021-08-27 18:42:39.000000000","message":"I dont think those comments are necessary. It is very clear from my view what and why it is doing it.\n\nIf you think that it is important, you could add it for the function documentation:\n\n\"Finish volume migration by deleting the copied source.\"","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    def _finish_volume_migration(self, src_volume, dest_pool):"},{"line_number":1054,"context_line":"        \"\"\"Finish volume migration to another ONTAP volume.\"\"\""},{"line_number":1055,"context_line":"        # The source volume can be safely deleted after a successful migration."},{"line_number":1056,"context_line":"        self.delete_volume(src_volume)"},{"line_number":1057,"context_line":"        # NFS driver requires the provider_location to be updated with the new"},{"line_number":1058,"context_line":"        # destination."}],"source_content_type":"text/x-python","patch_set":9,"id":"6c2d04e1_1887f1ae","line":1055,"range":{"start_line":1055,"start_character":8,"end_line":1055,"end_character":79},"in_reply_to":"45fcbcd7_84d96ecf","updated":"2021-08-30 19:34:48.000000000","message":"I believe that leaving the comment wouldn\u0027t make any harm + tell what we are trying to accomplish.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1054,"context_line":"        \"\"\"Finish volume migration to another ONTAP volume.\"\"\""},{"line_number":1055,"context_line":"        # The source volume can be safely deleted after a successful migration."},{"line_number":1056,"context_line":"        self.delete_volume(src_volume)"},{"line_number":1057,"context_line":"        # NFS driver requires the provider_location to be updated with the new"},{"line_number":1058,"context_line":"        # destination."},{"line_number":1059,"context_line":"        updates \u003d {\u0027provider_location\u0027: dest_pool}"},{"line_number":1060,"context_line":"        return updates"},{"line_number":1061,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dff5d10f_3a00cdca","line":1058,"range":{"start_line":1057,"start_character":8,"end_line":1058,"end_character":22},"updated":"2021-08-27 18:42:39.000000000","message":"I dont think those comments are necessary. It is very clear from my view what and why it is doing it.\n\nIf you think that it is important, you could add it for the function documentation:\n\n\":return: dict with updated provider location.\"","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1054,"context_line":"        \"\"\"Finish volume migration to another ONTAP volume.\"\"\""},{"line_number":1055,"context_line":"        # The source volume can be safely deleted after a successful migration."},{"line_number":1056,"context_line":"        self.delete_volume(src_volume)"},{"line_number":1057,"context_line":"        # NFS driver requires the provider_location to be updated with the new"},{"line_number":1058,"context_line":"        # destination."},{"line_number":1059,"context_line":"        updates \u003d {\u0027provider_location\u0027: dest_pool}"},{"line_number":1060,"context_line":"        return updates"},{"line_number":1061,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"82d9f24d_9c2dc897","line":1058,"range":{"start_line":1057,"start_character":8,"end_line":1058,"end_character":22},"in_reply_to":"dff5d10f_3a00cdca","updated":"2021-08-30 19:34:48.000000000","message":"I believe that leaving the comment wouldn\u0027t make any harm.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    def _migrate_volume_to_vserver(self, volume, src_pool, src_vserver,"},{"line_number":1063,"context_line":"                                   dest_pool, dest_vserver, dest_backend_name):"},{"line_number":1064,"context_line":"        \"\"\"Migrate volume to a another vserver within the same cluster.\"\"\""},{"line_number":1065,"context_line":"        LOG.info(\u0027Migrating volume %s from vserver %s to %s.\u0027,"},{"line_number":1066,"context_line":"                 volume.id, src_vserver, dest_vserver)"},{"line_number":1067,"context_line":"        vserver_peer_application \u003d \u0027file_copy\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ce661a65_73e88b2b","line":1064,"range":{"start_line":1064,"start_character":29,"end_line":1064,"end_character":31},"updated":"2021-08-27 18:42:39.000000000","message":"remove it: another \u003d an + other","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    def _migrate_volume_to_vserver(self, volume, src_pool, src_vserver,"},{"line_number":1063,"context_line":"                                   dest_pool, dest_vserver, dest_backend_name):"},{"line_number":1064,"context_line":"        \"\"\"Migrate volume to a another vserver within the same cluster.\"\"\""},{"line_number":1065,"context_line":"        LOG.info(\u0027Migrating volume %s from vserver %s to %s.\u0027,"},{"line_number":1066,"context_line":"                 volume.id, src_vserver, dest_vserver)"},{"line_number":1067,"context_line":"        vserver_peer_application \u003d \u0027file_copy\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"e81079a0_12ed9ab1","line":1064,"range":{"start_line":1064,"start_character":29,"end_line":1064,"end_character":31},"in_reply_to":"ce661a65_73e88b2b","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1095,"context_line":"        return updates"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1098,"context_line":"        \"\"\"Migrate a ONTAP Volume to the specified pool, vserver or cluster.\"\"\""},{"line_number":1099,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":1100,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":1101,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"07b64fa3_59db19ef","line":1098,"range":{"start_line":1098,"start_character":19,"end_line":1098,"end_character":21},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"        return updates"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1098,"context_line":"        \"\"\"Migrate a ONTAP Volume to the specified pool, vserver or cluster.\"\"\""},{"line_number":1099,"context_line":"        _, src_pool \u003d volume.host.split(\u0027#\u0027)"},{"line_number":1100,"context_line":"        dest_backend, dest_pool \u003d host[\"host\"].split(\u0027#\u0027)"},{"line_number":1101,"context_line":"        _, dest_backend_name \u003d dest_backend.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"91a117eb_2b3ed091","line":1098,"range":{"start_line":1098,"start_character":19,"end_line":1098,"end_character":21},"in_reply_to":"07b64fa3_59db19ef","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1129,"context_line":"                dest_backend_name)"},{"line_number":1130,"context_line":"            dest_client \u003d dot_utils.get_client_for_backend(dest_backend_name)"},{"line_number":1131,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":1132,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":1133,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":1134,"context_line":"            # SnapMirrors is required."},{"line_number":1135,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":9,"id":"804860aa_f3a5f799","line":1132,"range":{"start_line":1132,"start_character":23,"end_line":1132,"end_character":25},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                dest_backend_name)"},{"line_number":1130,"context_line":"            dest_client \u003d dot_utils.get_client_for_backend(dest_backend_name)"},{"line_number":1131,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":1132,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":1133,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":1134,"context_line":"            # SnapMirrors is required."},{"line_number":1135,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":9,"id":"55a8da82_e2a55674","line":1132,"range":{"start_line":1132,"start_character":23,"end_line":1132,"end_character":25},"in_reply_to":"804860aa_f3a5f799","updated":"2021-08-30 19:34:48.000000000","message":"Done","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1131,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":1132,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":1133,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":1134,"context_line":"            # SnapMirrors is required."},{"line_number":1135,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":1136,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":1137,"context_line":"                # if origin and destination vservers are the same, simply move"},{"line_number":1138,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":1139,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"}],"source_content_type":"text/x-python","patch_set":9,"id":"31a3a98c_b353dcbb","line":1136,"range":{"start_line":1134,"start_character":16,"end_line":1136,"end_character":57},"updated":"2021-08-27 18:42:39.000000000","message":"SVM scoped user does not have access to this call. please, fix it.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1131,"context_line":"            # In case origin and destination backends are pointing to the same"},{"line_number":1132,"context_line":"            # cluster, a intra-cluster operation can be done to complete the"},{"line_number":1133,"context_line":"            # migration. Otherwise, a volume migration strategy using"},{"line_number":1134,"context_line":"            # SnapMirrors is required."},{"line_number":1135,"context_line":"            if (dest_client.get_cluster_name() \u003d\u003d"},{"line_number":1136,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":1137,"context_line":"                # if origin and destination vservers are the same, simply move"},{"line_number":1138,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":1139,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"}],"source_content_type":"text/x-python","patch_set":9,"id":"1070e670_872e7be2","line":1136,"range":{"start_line":1134,"start_character":16,"end_line":1136,"end_character":57},"in_reply_to":"31a3a98c_b353dcbb","updated":"2021-08-30 19:34:48.000000000","message":"Function moved to data_motion module (dataontap/utils/data_motion.py). Operation requires Cluster-wide credentials and a check to make sure user have the necessary privileges has been included.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"5b2a6b9c620c2e9628aa678a437a5abb0e5f9e2b","unresolved":true,"context_lines":[{"line_number":1136,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":1137,"context_line":"                # if origin and destination vservers are the same, simply move"},{"line_number":1138,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":1139,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"},{"line_number":1140,"context_line":"                # followed by a volume copy operation are required."},{"line_number":1141,"context_line":"                # Both operations will copy data between ONTAP volumes"},{"line_number":1142,"context_line":"                # and won\u0027t finish in constant time as volume clones."}],"source_content_type":"text/x-python","patch_set":9,"id":"6232082a_0b118297","line":1139,"range":{"start_line":1139,"start_character":29,"end_line":1139,"end_character":31},"updated":"2021-08-27 18:42:39.000000000","message":"an","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5efadb53235dad59faa9c31b005e2829821da493","unresolved":true,"context_lines":[{"line_number":1136,"context_line":"                    self.zapi_client.get_cluster_name()):"},{"line_number":1137,"context_line":"                # if origin and destination vservers are the same, simply move"},{"line_number":1138,"context_line":"                # the cinder volume from one pool to the other."},{"line_number":1139,"context_line":"                # Otherwise, a intra-cluster Vserver peer relationship"},{"line_number":1140,"context_line":"                # followed by a volume copy operation are required."},{"line_number":1141,"context_line":"                # Both operations will copy data between ONTAP volumes"},{"line_number":1142,"context_line":"                # and won\u0027t finish in constant time as volume clones."}],"source_content_type":"text/x-python","patch_set":9,"id":"a5771520_1a1511db","line":1139,"range":{"start_line":1139,"start_character":29,"end_line":1139,"end_character":31},"in_reply_to":"6232082a_0b118297","updated":"2021-08-30 19:34:48.000000000","message":"Function moved to data_motion module (dataontap/utils/data_motion.py). Fixed in the new location.","commit_id":"01194ddf880df33a156e20a32fdb5aaf0672dfa6"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1d1924a0a9fcad3b925b20076b741469d6bf0396","unresolved":true,"context_lines":[{"line_number":1077,"context_line":"                                 [vserver_peer_application])"},{"line_number":1078,"context_line":"        src_ontap_volume_name \u003d src_pool.split(\u0027:/\u0027)[1]"},{"line_number":1079,"context_line":"        dest_ontap_volume_name \u003d dest_pool.split(\u0027:/\u0027)[1]"},{"line_number":1080,"context_line":"        self._copy_file(volume, src_ontap_volume_name, src_vserver,"},{"line_number":1081,"context_line":"                        dest_ontap_volume_name, dest_vserver,"},{"line_number":1082,"context_line":"                        dest_backend_name\u003ddest_backend_name,"},{"line_number":1083,"context_line":"                        cancel_on_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1dae75e4_62338e55","line":1080,"updated":"2021-08-31 07:52:46.000000000","message":"In my opinion, it would be better to catch exceptions (eg. timeout) from _copy_file \u0026 re-raise them.\nSince this function is used in data_motion.py, the exceptions can be propagated.","commit_id":"5ae64278fb7a6c853acd5c779d87bc438f3e1870"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1d1924a0a9fcad3b925b20076b741469d6bf0396","unresolved":true,"context_lines":[{"line_number":1093,"context_line":"                 volume.id, src_pool, dest_pool)"},{"line_number":1094,"context_line":"        src_ontap_volume_name \u003d src_pool.split(\u0027:/\u0027)[1]"},{"line_number":1095,"context_line":"        dest_ontap_volume_name \u003d dest_pool.split(\u0027:/\u0027)[1]"},{"line_number":1096,"context_line":"        self._copy_file(volume, src_ontap_volume_name, src_vserver,"},{"line_number":1097,"context_line":"                        dest_ontap_volume_name, dest_vserver,"},{"line_number":1098,"context_line":"                        dest_backend_name\u003ddest_backend_name,"},{"line_number":1099,"context_line":"                        cancel_on_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"a253a1de_64d914d7","line":1096,"updated":"2021-08-31 07:52:46.000000000","message":"Same as line 1080","commit_id":"5ae64278fb7a6c853acd5c779d87bc438f3e1870"}],"cinder/volume/drivers/netapp/dataontap/utils/data_motion.py":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"83c03e615ed225162003d0bcfeaecaa24f90e843","unresolved":true,"context_lines":[{"line_number":620,"context_line":"                vserver_peer_application\u003dpeer_applications)"},{"line_number":621,"context_line":"            LOG.debug(\"Vserver peer relationship created between %s \""},{"line_number":622,"context_line":"                      \"and %s. Peering application set to %s.\","},{"line_number":623,"context_line":"                      src_vserver, dest_vserver, peer_applications)"},{"line_number":624,"context_line":"            return None"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        for vserver_peer in vserver_peers:"}],"source_content_type":"text/x-python","patch_set":12,"id":"67ee18bd_c5d02229","line":623,"updated":"2021-08-31 06:39:14.000000000","message":"For multiple variables, better way would be:\nLOG.debug(\"... created between %(src)s and %(dest)s. ... set to %(peer)s\",\n  % {\u0027src\u0027: src_vserver, \u0027dest\u0027: dest_vserver, \u0027peer\u0027: peer_applications} )","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"3fe72c79477967665c1f8e5516724591e5d68afb","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                vserver_peer_application\u003dpeer_applications)"},{"line_number":621,"context_line":"            LOG.debug(\"Vserver peer relationship created between %s \""},{"line_number":622,"context_line":"                      \"and %s. Peering application set to %s.\","},{"line_number":623,"context_line":"                      src_vserver, dest_vserver, peer_applications)"},{"line_number":624,"context_line":"            return None"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        for vserver_peer in vserver_peers:"}],"source_content_type":"text/x-python","patch_set":12,"id":"973330dd_8159383f","line":623,"in_reply_to":"67ee18bd_c5d02229","updated":"2021-09-01 03:32:40.000000000","message":"Done","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"83c03e615ed225162003d0bcfeaecaa24f90e843","unresolved":true,"context_lines":[{"line_number":626,"context_line":"        for vserver_peer in vserver_peers:"},{"line_number":627,"context_line":"            if all(app in vserver_peer[\u0027applications\u0027] for app in"},{"line_number":628,"context_line":"                   peer_applications):"},{"line_number":629,"context_line":"                LOG.debug(\"Found vserver peer relationship between %s and %s.\","},{"line_number":630,"context_line":"                          src_vserver, dest_vserver)"},{"line_number":631,"context_line":"                return None"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"aede4062_4d17537a","line":629,"updated":"2021-08-31 06:39:14.000000000","message":"same as line 623","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"3fe72c79477967665c1f8e5516724591e5d68afb","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        for vserver_peer in vserver_peers:"},{"line_number":627,"context_line":"            if all(app in vserver_peer[\u0027applications\u0027] for app in"},{"line_number":628,"context_line":"                   peer_applications):"},{"line_number":629,"context_line":"                LOG.debug(\"Found vserver peer relationship between %s and %s.\","},{"line_number":630,"context_line":"                          src_vserver, dest_vserver)"},{"line_number":631,"context_line":"                return None"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"98603ae6_01f7fc91","line":629,"in_reply_to":"aede4062_4d17537a","updated":"2021-09-01 03:32:40.000000000","message":"Done","commit_id":"a8a74ffbd66b565d4cc940f57718eae47e29435f"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1d1924a0a9fcad3b925b20076b741469d6bf0396","unresolved":true,"context_lines":[{"line_number":829,"context_line":"                             \u0027destination are the same.\u0027)"},{"line_number":830,"context_line":"                    return True, {}"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"                updates \u003d self._migrate_volume_to_pool("},{"line_number":833,"context_line":"                    volume, src_pool, src_vserver, dest_pool,"},{"line_number":834,"context_line":"                    dest_backend_config.netapp_vserver,"},{"line_number":835,"context_line":"                    dest_backend_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"68fbe2af_5cd1b35f","line":832,"updated":"2021-08-31 07:52:46.000000000","message":"If any exception (eg. timeout) occurs, then ...\n[1] the exception can be caught here\n[2] LOG.error(\u0027what went to wrong\u0027)\n[3] return False, {}","commit_id":"5ae64278fb7a6c853acd5c779d87bc438f3e1870"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"1b0da3a582772745dbb13a1e6222dd7f2814955e","unresolved":true,"context_lines":[{"line_number":829,"context_line":"                             \u0027destination are the same.\u0027)"},{"line_number":830,"context_line":"                    return True, {}"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"                updates \u003d self._migrate_volume_to_pool("},{"line_number":833,"context_line":"                    volume, src_pool, src_vserver, dest_pool,"},{"line_number":834,"context_line":"                    dest_backend_config.netapp_vserver,"},{"line_number":835,"context_line":"                    dest_backend_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"e49409ad_273f35ee","line":832,"in_reply_to":"68fbe2af_5cd1b35f","updated":"2021-08-31 13:32:43.000000000","message":"Hi Raghavendra, thank you for helping the review. I have just a concern about it. For the manager, returning \"False\" means: \"I can not perform the migration, so please do it genericly using the host\". While raising an exception, means: \"I can do migration, but something went wrong in my storage/process\".\n\nFrom my point of view, we should only return \"False\" in scenarios where we do not support migration (Example: migration across cluster). In scenarios where we failed for some unexpected reason (like timeout or any bug in the code), we should treat as an error,  the user should fix its environment or/and report the bug. Otherwise, the user may keep using bug code/env.\n\nAnother issue, the move operation (migration between pools for iSCSI/FCP) might not be able to delete the migrated volume when failing. So, if we return \"False\" a second migration would start. \n\nThere are some advantages of doing your approach, though. We can see how other drivers are doing and reach a consensus. I am just adding another point of view.","commit_id":"5ae64278fb7a6c853acd5c779d87bc438f3e1870"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1d1924a0a9fcad3b925b20076b741469d6bf0396","unresolved":true,"context_lines":[{"line_number":834,"context_line":"                    dest_backend_config.netapp_vserver,"},{"line_number":835,"context_line":"                    dest_backend_name)"},{"line_number":836,"context_line":"            else:"},{"line_number":837,"context_line":"                updates \u003d self._migrate_volume_to_vserver("},{"line_number":838,"context_line":"                    volume, src_pool, src_vserver, dest_pool,"},{"line_number":839,"context_line":"                    dest_backend_config.netapp_vserver,"},{"line_number":840,"context_line":"                    dest_backend_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"efb902ac_5aa7b406","line":837,"updated":"2021-08-31 07:52:46.000000000","message":"same as line 832","commit_id":"5ae64278fb7a6c853acd5c779d87bc438f3e1870"}]}
