)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Nahim Alves de Souza \u003cnahimsouza@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-08-16 18:30:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Implemented REST Client for ONTAP"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As the result of adoption of a REST API by NetApp ONTAP, some methods"},{"line_number":10,"context_line":"are now being moved to the new format. A fallback mechanism will be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"c69d4648_c48fb822","line":7,"updated":"2022-08-27 07:15:51.000000000","message":"Change Implemented to Add","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Nahim Alves de Souza \u003cnahimsouza@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-08-16 18:30:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Implemented REST Client for ONTAP"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As the result of adoption of a REST API by NetApp ONTAP, some methods"},{"line_number":10,"context_line":"are now being moved to the new format. A fallback mechanism will be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a6419f2_d5782d52","line":7,"in_reply_to":"c69d4648_c48fb822","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Implemented REST Client for ONTAP"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As the result of adoption of a REST API by NetApp ONTAP, some methods"},{"line_number":10,"context_line":"are now being moved to the new format. A fallback mechanism will be"},{"line_number":11,"context_line":"used to switch back to Zapi if a client is using an old version with"},{"line_number":12,"context_line":"an unsupported rest endpoint."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7c7d27e4_16fefc6d","line":9,"updated":"2022-08-27 07:15:51.000000000","message":"client requests are now being gradually moved to the new format. \nor \nclient operations are now being gradually moved to the new format. \nor \nclient methods are now being gradually moved to the new format.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NetApp ONTAP: Implemented REST Client for ONTAP"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As the result of adoption of a REST API by NetApp ONTAP, some methods"},{"line_number":10,"context_line":"are now being moved to the new format. A fallback mechanism will be"},{"line_number":11,"context_line":"used to switch back to Zapi if a client is using an old version with"},{"line_number":12,"context_line":"an unsupported rest endpoint."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"29b0f192_19ba8934","line":9,"in_reply_to":"7c7d27e4_16fefc6d","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":12,"context_line":"an unsupported rest endpoint."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A new module was created to handle the REST requests, but the old"},{"line_number":15,"context_line":"Zapi client was not removed yet to keep the compatibility with old ONTAP"},{"line_number":16,"context_line":"systems."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"In this patch the functions needed for the NetApp driver intialization"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1bc0ce9d_b834b726","line":15,"updated":"2022-08-27 07:15:51.000000000","message":"ZAPI","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"an unsupported rest endpoint."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A new module was created to handle the REST requests, but the old"},{"line_number":15,"context_line":"Zapi client was not removed yet to keep the compatibility with old ONTAP"},{"line_number":16,"context_line":"systems."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"In this patch the functions needed for the NetApp driver intialization"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"69183f93_02c8b375","line":15,"in_reply_to":"1bc0ce9d_b834b726","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":24,"context_line":"Co-authored-by: Luisa Amaral \u003cluisaa@netapp.com\u003e"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I2df082fc79152ade713fea2474eefe639b43b4b8"},{"line_number":27,"context_line":"partially-implements: bp netapp-ontap-rest-api-client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"149884a6_89bc6025","line":27,"updated":"2022-08-27 07:15:51.000000000","message":"I\u0027ve seen people using blueprint more often (instead of bp).","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Co-authored-by: Luisa Amaral \u003cluisaa@netapp.com\u003e"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I2df082fc79152ade713fea2474eefe639b43b4b8"},{"line_number":27,"context_line":"partially-implements: bp netapp-ontap-rest-api-client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"e5d84296_4a64f02d","line":27,"in_reply_to":"149884a6_89bc6025","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7e785589_8e4507f2","updated":"2022-07-19 12:24:49.000000000","message":"thank you nahim for providing this new API mode, please, see my comments.","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"28efeff6_dfb50c6b","updated":"2022-08-03 11:38:05.000000000","message":"Thank you, Felipe, for your valuable comments. The issues were addressed in the latest patch set.","commit_id":"3445328cd5e2cd14ec2bcc0a74c19078cef42741"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6f56cb90_f346716e","updated":"2022-08-27 07:15:51.000000000","message":"Hi Nahim, see my initial comments inline. I will work on another round tomorrow.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"3e47227bda8576616a7a2589279aaa91914b2e89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b38e905a_e3b4673f","updated":"2022-08-18 11:19:49.000000000","message":"recheck: got `post_failure` for unknown reason","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"bab3c882d7ff3246b3b1d739c2b26cccd6bb987f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"854cbf34_683c0132","updated":"2022-08-28 15:15:17.000000000","message":"thanks Nahim.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"cb1b4a9cf5472df7bc83180e6b49eafe3860dd2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8078fe2a_2f30672d","updated":"2022-09-01 04:42:37.000000000","message":"run-NetApp CI","commit_id":"18c2ec2d5467b3ea096308e966daa777ed60962c"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"7ffc218a4ae195f0719dcc5201ce7629b7d3e7b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"cc0706c5_35d64b22","updated":"2022-09-01 04:39:46.000000000","message":"run-NetApp CI","commit_id":"18c2ec2d5467b3ea096308e966daa777ed60962c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b5bfb725_58bd0c96","updated":"2022-09-05 16:38:46.000000000","message":"Haven\u0027t checked out the tests yet but have some suggestions and comments on the code.","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"fe79335f841dcccfb708ff841d206d4d64a0cf77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"604fb536_cffcb32e","updated":"2022-09-01 17:22:53.000000000","message":"run-NetApp CI","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b104359480a4284db97bc8d681f7de8dd4b19780","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b4b13924_813e3c71","updated":"2022-09-08 22:36:14.000000000","message":"Code and test coverage look good.  There\u0027s a minor improvement you could make to one of the option help strings noted inline, and there\u0027s a problem I noticed in a unit test noted inline (but since it\u0027s an already existing issue not introduced by this patch, I won\u0027t hold this patch up over it ... but please look it over and see if you need to do a followup patch for that issue).","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"44d3348d_8ef54a95","updated":"2022-09-06 19:31:04.000000000","message":"Hi, Rajat, thank you for the review. I uploaded a new patch with the fixes and answered the comments inline.","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5ab9349d1cac100a3665bcceca1481accfeb989b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3bdd92d7_3e033f08","updated":"2022-09-07 11:50:01.000000000","message":"My comments have been addressed and NetApp CI is passing. LGTM.","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"d1aa0447dc17de5dd2b8dd7977040a3e0e5890a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c951ad48_eaedc911","updated":"2022-09-09 10:50:13.000000000","message":"Thanks for the review, Brian.","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f0a37978e1ff928f0f98bef1d1d4beb163337331","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"31c9a895_2853a29b","updated":"2022-09-07 07:12:47.000000000","message":"recheck\n\nunrelated failures and timeouts","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5ae17a8c1ad5110e004ba2943ffdfa64833990af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6e10fda4_e58ece0b","updated":"2022-09-07 07:47:24.000000000","message":"run-NetApp CI","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_api.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":586,"context_line":"            self.assertEqual(ssl_cert_path, client._ssl_verify)"},{"line_number":587,"context_line":"        else:"},{"line_number":588,"context_line":"            self.assertTrue(client._ssl_verify)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @ddt.data(None, \u0027ftp\u0027)"},{"line_number":591,"context_line":"    def test_set_transport_type_value_error(self, transport_type):"},{"line_number":592,"context_line":"        self.assertRaises(ValueError, self.rest_client.set_transport_type,"},{"line_number":593,"context_line":"                          transport_type)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @ddt.data(\u0027!\u0026\u0027, \u002780na\u0027, \u0027\u0027)"},{"line_number":596,"context_line":"    def test_set_port__value_error(self, port):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3761da10_0dc41b4d","line":593,"range":{"start_line":589,"start_character":0,"end_line":593,"end_character":41},"updated":"2022-09-05 16:38:46.000000000","message":"we also need a positive case where we specify \u0027http\u0027 or \u0027https\u0027 and that won\u0027t raise","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            self.assertEqual(ssl_cert_path, client._ssl_verify)"},{"line_number":587,"context_line":"        else:"},{"line_number":588,"context_line":"            self.assertTrue(client._ssl_verify)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @ddt.data(None, \u0027ftp\u0027)"},{"line_number":591,"context_line":"    def test_set_transport_type_value_error(self, transport_type):"},{"line_number":592,"context_line":"        self.assertRaises(ValueError, self.rest_client.set_transport_type,"},{"line_number":593,"context_line":"                          transport_type)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @ddt.data(\u0027!\u0026\u0027, \u002780na\u0027, \u0027\u0027)"},{"line_number":596,"context_line":"    def test_set_port__value_error(self, port):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c93006a0_67f4940d","line":593,"range":{"start_line":589,"start_character":0,"end_line":593,"end_character":41},"in_reply_to":"3761da10_0dc41b4d","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/utils/test_utils.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b104359480a4284db97bc8d681f7de8dd4b19780","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        self.mock_object(utils, \u0027get_backend_configuration\u0027,"},{"line_number":115,"context_line":"                         return_value\u003dself.config)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        CONF.set_override(\u0027netapp_vserver\u0027, \u0027fake_vserver\u0027,"},{"line_number":118,"context_line":"                          group\u003dself.backend)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        utils.get_client_for_backend(self.backend)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"0e76db0d_4e4964bc","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":45},"updated":"2022-09-08 22:36:14.000000000","message":"This changes the value in the actual CONF object and it\u0027s not reset.  I think you should be using self.override_config here (which is defined in cinder.tests.unit.test.TestCase, which you inherit from).  But since this isn\u0027t actually your line of code, I guess it\u0027s OK for now, though you should follow up with a review of how the CONF object is being used throughout the file to make sure all tests are cleaning up after themselves.","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"d1aa0447dc17de5dd2b8dd7977040a3e0e5890a5","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        self.mock_object(utils, \u0027get_backend_configuration\u0027,"},{"line_number":115,"context_line":"                         return_value\u003dself.config)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        CONF.set_override(\u0027netapp_vserver\u0027, \u0027fake_vserver\u0027,"},{"line_number":118,"context_line":"                          group\u003dself.backend)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        utils.get_client_for_backend(self.backend)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"accc32e3_d130950a","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":45},"in_reply_to":"0e76db0d_4e4964bc","updated":"2022-09-09 10:50:13.000000000","message":"Ack","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"}],"cinder/volume/drivers/netapp/dataontap/client/api.py":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":641,"context_line":"                break"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"REST_UNAUTHORIZED \u003d \u00276\u0027"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"class RestNaServer(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ea574b0d_4b49ddeb","line":644,"updated":"2022-08-27 07:15:51.000000000","message":"I understand this was moved to here to facilitate backports, but there is always the risk that a unwary developer would try to redefine this error code since it is not in the same section as the others.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":641,"context_line":"                break"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"REST_UNAUTHORIZED \u003d \u00276\u0027"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"class RestNaServer(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ce8c2d92_c701e9bc","line":644,"in_reply_to":"343dde63_1d868cf7","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":true,"context_lines":[{"line_number":641,"context_line":"                break"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"REST_UNAUTHORIZED \u003d \u00276\u0027"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"class RestNaServer(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"343dde63_1d868cf7","line":644,"in_reply_to":"ea574b0d_4b49ddeb","updated":"2022-09-01 04:35:07.000000000","message":"agree, so adding a comment warning the reader about this section REST error code","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":666,"context_line":"        if ssl_cert_path is not None:"},{"line_number":667,"context_line":"            self._ssl_verify \u003d ssl_cert_path"},{"line_number":668,"context_line":"        else:"},{"line_number":669,"context_line":"            # Note(felipe_rodrigues): it will verify with the mozila CA roots,"},{"line_number":670,"context_line":"            # given by certifi package."},{"line_number":671,"context_line":"            self._ssl_verify \u003d True"},{"line_number":672,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d6da5fec_eac59c6c","line":669,"updated":"2022-08-27 07:15:51.000000000","message":"*Mozilla","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        if ssl_cert_path is not None:"},{"line_number":667,"context_line":"            self._ssl_verify \u003d ssl_cert_path"},{"line_number":668,"context_line":"        else:"},{"line_number":669,"context_line":"            # Note(felipe_rodrigues): it will verify with the mozila CA roots,"},{"line_number":670,"context_line":"            # given by certifi package."},{"line_number":671,"context_line":"            self._ssl_verify \u003d True"},{"line_number":672,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"10e43a64_55478127","line":669,"in_reply_to":"d6da5fec_eac59c6c","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def get_api_version(self):"},{"line_number":702,"context_line":"        \"\"\"Gets the API version tuple.\"\"\""},{"line_number":703,"context_line":"        if hasattr(self, \u0027_api_version\u0027):"},{"line_number":704,"context_line":"            return (self._api_major_version, self._api_minor_version)"},{"line_number":705,"context_line":"        return None"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dd7e3bf6_274e45bc","line":703,"range":{"start_line":703,"start_character":26,"end_line":703,"end_character":38},"updated":"2022-09-05 16:38:46.000000000","message":"assigning this to None in the constructor would make this logic simpler, just do\n\n    def __init__(self):\n        self._api_version \u003d None\n\n    def set_api_version(self, major, minor):\n        ...\n\n    def get_api_version(self):\n        return self._api_version","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def get_api_version(self):"},{"line_number":702,"context_line":"        \"\"\"Gets the API version tuple.\"\"\""},{"line_number":703,"context_line":"        if hasattr(self, \u0027_api_version\u0027):"},{"line_number":704,"context_line":"            return (self._api_major_version, self._api_minor_version)"},{"line_number":705,"context_line":"        return None"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"d6dca080_51ec6705","line":703,"range":{"start_line":703,"start_character":26,"end_line":703,"end_character":38},"in_reply_to":"dd7e3bf6_274e45bc","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    def get_ontap_version(self):"},{"line_number":712,"context_line":"        \"\"\"Gets the ONTAP version.\"\"\""},{"line_number":713,"context_line":"        if hasattr(self, \u0027_ontap_version\u0027):"},{"line_number":714,"context_line":"            return self._ontap_version"},{"line_number":715,"context_line":"        return None"},{"line_number":716,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"e1006e4a_921cec21","line":713,"range":{"start_line":713,"start_character":26,"end_line":713,"end_character":40},"updated":"2022-09-05 16:38:46.000000000","message":"same","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    def get_ontap_version(self):"},{"line_number":712,"context_line":"        \"\"\"Gets the ONTAP version.\"\"\""},{"line_number":713,"context_line":"        if hasattr(self, \u0027_ontap_version\u0027):"},{"line_number":714,"context_line":"            return self._ontap_version"},{"line_number":715,"context_line":"        return None"},{"line_number":716,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"174dc475_6b4cf0a3","line":713,"range":{"start_line":713,"start_character":26,"end_line":713,"end_character":40},"in_reply_to":"e1006e4a_921cec21","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    def set_port(self, port\u003dNone):"},{"line_number":718,"context_line":"        \"\"\"Set the ONTAP port, if not informed, set with default one.\"\"\""},{"line_number":719,"context_line":"        if port is None and self._protocol \u003d\u003d RestNaServer.TRANSPORT_TYPE_HTTP:"},{"line_number":720,"context_line":"            self._port \u003d RestNaServer.HTTP_PORT"},{"line_number":721,"context_line":"        elif port is None:"},{"line_number":722,"context_line":"            self._port \u003d RestNaServer.HTTPS_PORT"}],"source_content_type":"text/x-python","patch_set":9,"id":"e89d3443_39b81311","line":719,"range":{"start_line":719,"start_character":59,"end_line":719,"end_character":78},"updated":"2022-09-05 16:38:46.000000000","message":"would\u0027ve been better to declare this as a dictionary\n\n    transport_port \u003d {TRANSPORT_TYPE_HTTP: HTTP_PORT, TRANSPORT_TYPE_HTTPS: HTTPS_PORT}\n\nNow the logic here would become:\n\n    if not port and self._protocol in self.transport_port:\n        self._port \u003d self.transport_port[self._protocol]\n    else:\n        try:\n            int(port)\n        except ValueError:\n            raise ValueError(\u0027Port must be integer\u0027)\n        self._port \u003d str(port)","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    def set_port(self, port\u003dNone):"},{"line_number":718,"context_line":"        \"\"\"Set the ONTAP port, if not informed, set with default one.\"\"\""},{"line_number":719,"context_line":"        if port is None and self._protocol \u003d\u003d RestNaServer.TRANSPORT_TYPE_HTTP:"},{"line_number":720,"context_line":"            self._port \u003d RestNaServer.HTTP_PORT"},{"line_number":721,"context_line":"        elif port is None:"},{"line_number":722,"context_line":"            self._port \u003d RestNaServer.HTTPS_PORT"}],"source_content_type":"text/x-python","patch_set":9,"id":"e67b0b24_a24072ae","line":719,"range":{"start_line":719,"start_character":59,"end_line":719,"end_character":78},"in_reply_to":"e89d3443_39b81311","updated":"2022-09-06 19:31:04.000000000","message":"I agree. Changed.","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def get_timeout(self):"},{"line_number":742,"context_line":"        \"\"\"Gets the timeout in seconds if set.\"\"\""},{"line_number":743,"context_line":"        if hasattr(self, \u0027_timeout\u0027):"},{"line_number":744,"context_line":"            return self._timeout"},{"line_number":745,"context_line":"        return None"},{"line_number":746,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"11bab40f_a7a5b6a1","line":743,"range":{"start_line":743,"start_character":26,"end_line":743,"end_character":34},"updated":"2022-09-05 16:38:46.000000000","message":"I think all these parameters can be initialized as None in the constructor and then you would reduce the LOC on all getter methods,\n\n    def __init__(self):\n        self._timeout \u003d None\n\n    def get_timeout(self):\n        return self._timeout","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def get_timeout(self):"},{"line_number":742,"context_line":"        \"\"\"Gets the timeout in seconds if set.\"\"\""},{"line_number":743,"context_line":"        if hasattr(self, \u0027_timeout\u0027):"},{"line_number":744,"context_line":"            return self._timeout"},{"line_number":745,"context_line":"        return None"},{"line_number":746,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"e98951d7_0f0b00f4","line":743,"range":{"start_line":743,"start_character":26,"end_line":743,"end_character":34},"in_reply_to":"11bab40f_a7a5b6a1","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":772,"context_line":"        \"\"\"Populates the URL with specified filters.\"\"\""},{"line_number":773,"context_line":"        filters \u003d \"\""},{"line_number":774,"context_line":"        for k, v in query.items():"},{"line_number":775,"context_line":"            filters +\u003d \"%(key)s\u003d%(value)s\u0026\" % {\"key\": k, \"value\": v}"},{"line_number":776,"context_line":"        url +\u003d \"?\" + filters"},{"line_number":777,"context_line":"        return url"},{"line_number":778,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"a5905229_1cccf937","line":775,"range":{"start_line":775,"start_character":41,"end_line":775,"end_character":42},"updated":"2022-09-05 16:38:46.000000000","message":"there will be an additional \u0026 in the filters, hopefully it won\u0027t affect the request","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":772,"context_line":"        \"\"\"Populates the URL with specified filters.\"\"\""},{"line_number":773,"context_line":"        filters \u003d \"\""},{"line_number":774,"context_line":"        for k, v in query.items():"},{"line_number":775,"context_line":"            filters +\u003d \"%(key)s\u003d%(value)s\u0026\" % {\"key\": k, \"value\": v}"},{"line_number":776,"context_line":"        url +\u003d \"?\" + filters"},{"line_number":777,"context_line":"        return url"},{"line_number":778,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7f7dff30_c39206a7","line":775,"range":{"start_line":775,"start_character":41,"end_line":775,"end_character":42},"in_reply_to":"a5905229_1cccf937","updated":"2022-09-06 19:31:04.000000000","message":"Yep, it will not affect the request, but since it\u0027s an easy fix I\u0027ll change.","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":781,"context_line":"        host \u003d self._host"},{"line_number":782,"context_line":"        if \u0027:\u0027 in host:"},{"line_number":783,"context_line":"            host \u003d \u0027[%s]\u0027 % host"},{"line_number":784,"context_line":"        return \u0027%s://%s:%s/api/\u0027 % (self._protocol, host, self._port)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    def _build_session(self, headers):"},{"line_number":787,"context_line":"        \"\"\"Builds a session in the client.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1c417658_fec6cfa7","line":784,"range":{"start_line":784,"start_character":36,"end_line":784,"end_character":68},"updated":"2022-09-05 16:38:46.000000000","message":"again if this method is called before set_transport_type and set_port then these variables would raise exception as undeclared hence I would like it better if they\u0027re initialized as None in the constructor as mentioned above","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        host \u003d self._host"},{"line_number":782,"context_line":"        if \u0027:\u0027 in host:"},{"line_number":783,"context_line":"            host \u003d \u0027[%s]\u0027 % host"},{"line_number":784,"context_line":"        return \u0027%s://%s:%s/api/\u0027 % (self._protocol, host, self._port)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    def _build_session(self, headers):"},{"line_number":787,"context_line":"        \"\"\"Builds a session in the client.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"c37f063f_fa39dded","line":784,"range":{"start_line":784,"start_character":36,"end_line":784,"end_character":68},"in_reply_to":"1c417658_fec6cfa7","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    @volume_utils.trace_api("},{"line_number":816,"context_line":"        filter_function\u003dna_utils.trace_filter_func_rest_api)"},{"line_number":817,"context_line":"    def send_http_request(self, method, url, body, headers):"},{"line_number":818,"context_line":"        \"\"\"Invoke the API on the server."},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        The passed parameters and returned parameters will be logged if trace"}],"source_content_type":"text/x-python","patch_set":9,"id":"814a7cd6_e3e0d286","line":817,"range":{"start_line":817,"start_character":8,"end_line":817,"end_character":60},"updated":"2022-09-05 16:38:46.000000000","message":"if this is only called from L#850 then it\u0027s OK else i think the body and headers should have default values as empty dict/None","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    @volume_utils.trace_api("},{"line_number":816,"context_line":"        filter_function\u003dna_utils.trace_filter_func_rest_api)"},{"line_number":817,"context_line":"    def send_http_request(self, method, url, body, headers):"},{"line_number":818,"context_line":"        \"\"\"Invoke the API on the server."},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        The passed parameters and returned parameters will be logged if trace"}],"source_content_type":"text/x-python","patch_set":9,"id":"5af678bb_a2b43c23","line":817,"range":{"start_line":817,"start_character":8,"end_line":817,"end_character":60},"in_reply_to":"814a7cd6_e3e0d286","updated":"2022-09-06 19:31:04.000000000","message":"Yes, the idea is to call this only inside \u0027invoke_successfully\u0027. No external call is expected.","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":853,"context_line":"            return code, response"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        result_error \u003d response.get(\u0027error\u0027)"},{"line_number":856,"context_line":"        code \u003d result_error.get(\u0027code\u0027) or \u0027ESTATUSFAILED\u0027"},{"line_number":857,"context_line":"        # TODO: add the correct code number for REST not licensed clone error."},{"line_number":858,"context_line":"        if code \u003d\u003d ESIS_CLONE_NOT_LICENSED:"},{"line_number":859,"context_line":"            msg \u003d \u0027Clone operation failed: FlexClone not licensed.\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"0194237e_f7404f5e","line":856,"range":{"start_line":856,"start_character":15,"end_line":856,"end_character":58},"updated":"2022-09-05 16:38:46.000000000","message":"nit: instead of the or clause, we can specify the default inside the get call\n\n    result_error.get(\u0027code\u0027, \u0027ESTATUSFAILED\u0027)\n\nAlso I assume the code value will never be 0 else even if the key \u0027code\u0027 exists, it will use the default value (since 0 evaluates to False)","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":853,"context_line":"            return code, response"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        result_error \u003d response.get(\u0027error\u0027)"},{"line_number":856,"context_line":"        code \u003d result_error.get(\u0027code\u0027) or \u0027ESTATUSFAILED\u0027"},{"line_number":857,"context_line":"        # TODO: add the correct code number for REST not licensed clone error."},{"line_number":858,"context_line":"        if code \u003d\u003d ESIS_CLONE_NOT_LICENSED:"},{"line_number":859,"context_line":"            msg \u003d \u0027Clone operation failed: FlexClone not licensed.\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"bb4e98a6_ec486aad","line":856,"range":{"start_line":856,"start_character":15,"end_line":856,"end_character":58},"in_reply_to":"0194237e_f7404f5e","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"}],"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":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":136,"context_line":"    def set_vserver(self, vserver):"},{"line_number":137,"context_line":"        self.vserver \u003d vserver"},{"line_number":138,"context_line":"        self.connection.set_vserver(vserver)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def send_request(self, api_name, api_args\u003dNone, enable_tunneling\u003dTrue):"},{"line_number":141,"context_line":"        \"\"\"Sends request to Ontapi.\"\"\""},{"line_number":142,"context_line":"        request \u003d netapp_api.NaElement(api_name)"},{"line_number":143,"context_line":"        if api_args:"},{"line_number":144,"context_line":"            request.translate_struct(api_args)"},{"line_number":145,"context_line":"        return self.connection.invoke_successfully("},{"line_number":146,"context_line":"            request, enable_tunneling\u003denable_tunneling)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def send_iter_request(self, api_name, api_args\u003dNone, enable_tunneling\u003dTrue,"},{"line_number":149,"context_line":"                          max_page_length\u003dDEFAULT_MAX_PAGE_LENGTH):"},{"line_number":150,"context_line":"        \"\"\"Invoke an iterator-style getter API.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"03bb10ba_e66b3fd8","line":147,"range":{"start_line":139,"start_character":0,"end_line":147,"end_character":0},"updated":"2022-07-19 12:24:49.000000000","message":"we don\u0027t need to move it to \"client_cmode\", it could be as before: inside the connection, so you don\u0027t need to change all code below. In another words, this file does not need any change. Easier for review and avoid new bugs. We want to keep as much as possible the ZAPI client same as before.","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def set_vserver(self, vserver):"},{"line_number":137,"context_line":"        self.vserver \u003d vserver"},{"line_number":138,"context_line":"        self.connection.set_vserver(vserver)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def send_request(self, api_name, api_args\u003dNone, enable_tunneling\u003dTrue):"},{"line_number":141,"context_line":"        \"\"\"Sends request to Ontapi.\"\"\""},{"line_number":142,"context_line":"        request \u003d netapp_api.NaElement(api_name)"},{"line_number":143,"context_line":"        if api_args:"},{"line_number":144,"context_line":"            request.translate_struct(api_args)"},{"line_number":145,"context_line":"        return self.connection.invoke_successfully("},{"line_number":146,"context_line":"            request, enable_tunneling\u003denable_tunneling)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def send_iter_request(self, api_name, api_args\u003dNone, enable_tunneling\u003dTrue,"},{"line_number":149,"context_line":"                          max_page_length\u003dDEFAULT_MAX_PAGE_LENGTH):"},{"line_number":150,"context_line":"        \"\"\"Invoke an iterator-style getter API.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"330105ad_29549b43","line":147,"range":{"start_line":139,"start_character":0,"end_line":147,"end_character":0},"in_reply_to":"03bb10ba_e66b3fd8","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":27,"context_line":"DEFAULT_MAX_PAGE_LENGTH \u003d 10000"},{"line_number":28,"context_line":"ONTAP_SELECT_MODEL \u003d \u0027FDvM300\u0027"},{"line_number":29,"context_line":"ONTAP_C190 \u003d \u0027C190\u0027"},{"line_number":30,"context_line":"CLIENT_ZAPI \u003d \u0027zapi\u0027"},{"line_number":31,"context_line":"CLIENT_REST \u003d \u0027rest\u0027"},{"line_number":32,"context_line":"CLIENT_HYBRID \u003d \u0027hybrid\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@six.add_metaclass(volume_utils.TraceWrapperMetaclass)"}],"source_content_type":"text/x-python","patch_set":2,"id":"be33e7e2_eec1f381","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":24},"updated":"2022-07-19 12:24:49.000000000","message":"will be removed with new client selection","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DEFAULT_MAX_PAGE_LENGTH \u003d 10000"},{"line_number":28,"context_line":"ONTAP_SELECT_MODEL \u003d \u0027FDvM300\u0027"},{"line_number":29,"context_line":"ONTAP_C190 \u003d \u0027C190\u0027"},{"line_number":30,"context_line":"CLIENT_ZAPI \u003d \u0027zapi\u0027"},{"line_number":31,"context_line":"CLIENT_REST \u003d \u0027rest\u0027"},{"line_number":32,"context_line":"CLIENT_HYBRID \u003d \u0027hybrid\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@six.add_metaclass(volume_utils.TraceWrapperMetaclass)"}],"source_content_type":"text/x-python","patch_set":2,"id":"08b18f04_64c77646","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":24},"in_reply_to":"be33e7e2_eec1f381","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        self.vserver \u003d kwargs.get(\u0027vserver\u0027, None)"},{"line_number":60,"context_line":"        self.connection.set_vserver(self.vserver)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # Default values to run first api"},{"line_number":63,"context_line":"        self.connection.set_api_version(1, 15)"},{"line_number":64,"context_line":"        (major, minor) \u003d self.get_ontapi_version(cached\u003dFalse)"},{"line_number":65,"context_line":"        self.connection.set_api_version(major, minor)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"},{"line_number":68,"context_line":"        self.connection.set_ontap_version(self.ontap_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"31650dda_f8973f3d","line":65,"range":{"start_line":62,"start_character":8,"end_line":65,"end_character":53},"updated":"2022-07-19 12:24:49.000000000","message":"The ONTAPI version means the ZAPI version, it is not required for the REST. client It could be removed since it won\u0027t be used. We can set the API version of the connection as the REST version (I think fixed as 1.0):\n\n# REST has only 1.0 version yet.\nself.connection.set_api_version(1, 0)","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.vserver \u003d kwargs.get(\u0027vserver\u0027, None)"},{"line_number":60,"context_line":"        self.connection.set_vserver(self.vserver)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # Default values to run first api"},{"line_number":63,"context_line":"        self.connection.set_api_version(1, 15)"},{"line_number":64,"context_line":"        (major, minor) \u003d self.get_ontapi_version(cached\u003dFalse)"},{"line_number":65,"context_line":"        self.connection.set_api_version(major, minor)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"},{"line_number":68,"context_line":"        self.connection.set_ontap_version(self.ontap_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c2b55c62_19a78850","line":65,"range":{"start_line":62,"start_character":8,"end_line":65,"end_character":53},"in_reply_to":"31650dda_f8973f3d","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        (major, minor) \u003d self.get_ontapi_version(cached\u003dFalse)"},{"line_number":65,"context_line":"        self.connection.set_api_version(major, minor)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"},{"line_number":68,"context_line":"        self.connection.set_ontap_version(self.ontap_version)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.info(\u0027Reported ONTAP Version: %(generation)s.%(major)s.%(minor)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5e8d8d31_e0a3a015","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":65},"updated":"2022-07-19 12:24:49.000000000","message":"You have already collected the ONTAP version at line #56, so you could just:\n\nself.ontap_version \u003d self.zapi_client.get_ontap_version()","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        (major, minor) \u003d self.get_ontapi_version(cached\u003dFalse)"},{"line_number":65,"context_line":"        self.connection.set_api_version(major, minor)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"},{"line_number":68,"context_line":"        self.connection.set_ontap_version(self.ontap_version)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.info(\u0027Reported ONTAP Version: %(generation)s.%(major)s.%(minor)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec6c8976_87897568","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":65},"in_reply_to":"4d371a35_02378545","updated":"2022-08-03 11:38:05.000000000","message":"Ack","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"857297bed4569fb1821a4aa605fecb8cbb4e4a36","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        (major, minor) \u003d self.get_ontapi_version(cached\u003dFalse)"},{"line_number":65,"context_line":"        self.connection.set_api_version(major, minor)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"},{"line_number":68,"context_line":"        self.connection.set_ontap_version(self.ontap_version)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.info(\u0027Reported ONTAP Version: %(generation)s.%(major)s.%(minor)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"4d371a35_02378545","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":65},"in_reply_to":"5e8d8d31_e0a3a015","updated":"2022-07-20 12:13:18.000000000","message":"Don\u0027t do that, prefer get from the REST \"get_ontap_version\" (as it is now). That way, if the REST mode is ON, the REST call get_version must work always.\n\nThus, just ignore my previous comment.","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    def __getattr__(self, name):"},{"line_number":142,"context_line":"        \"\"\"If method is not implemented in REST, try to call the ZAPI Client\"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        zapi_modes \u003d [CLIENT_HYBRID, CLIENT_ZAPI]"},{"line_number":145,"context_line":"        if self.client_api \u003d\u003d CLIENT_HYBRID:"},{"line_number":146,"context_line":"            LOG.debug(f\u0027Using ZAPI instead of REST for {name} call.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()"},{"line_number":149,"context_line":"        if self.client_api in zapi_modes:"},{"line_number":150,"context_line":"            zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":151,"context_line":"            return getattr(zapi_client, name)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        raise na_utils.NetAppDriverException("},{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3378e9_19547a8b","line":154,"range":{"start_line":144,"start_character":8,"end_line":154,"end_character":58},"updated":"2022-07-19 12:24:49.000000000","message":"As we discussed, the idea is the client_api option be used out RestClient scope. Here, it would just call the fallback directly, as:\n\nLOG.debug(f\u0027The {name} call is not supported for REST, falling back to ZAPI.\u0027)\n\n# Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()            \nzapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)\nreturn getattr(zapi_client, name)","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def __getattr__(self, name):"},{"line_number":142,"context_line":"        \"\"\"If method is not implemented in REST, try to call the ZAPI Client\"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        zapi_modes \u003d [CLIENT_HYBRID, CLIENT_ZAPI]"},{"line_number":145,"context_line":"        if self.client_api \u003d\u003d CLIENT_HYBRID:"},{"line_number":146,"context_line":"            LOG.debug(f\u0027Using ZAPI instead of REST for {name} call.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()"},{"line_number":149,"context_line":"        if self.client_api in zapi_modes:"},{"line_number":150,"context_line":"            zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":151,"context_line":"            return getattr(zapi_client, name)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        raise na_utils.NetAppDriverException("},{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"699a158e_dbee0d08","line":154,"range":{"start_line":144,"start_character":8,"end_line":154,"end_character":58},"in_reply_to":"73254faf_e9f83226","updated":"2022-08-03 11:38:05.000000000","message":"Ack","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"857297bed4569fb1821a4aa605fecb8cbb4e4a36","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    def __getattr__(self, name):"},{"line_number":142,"context_line":"        \"\"\"If method is not implemented in REST, try to call the ZAPI Client\"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        zapi_modes \u003d [CLIENT_HYBRID, CLIENT_ZAPI]"},{"line_number":145,"context_line":"        if self.client_api \u003d\u003d CLIENT_HYBRID:"},{"line_number":146,"context_line":"            LOG.debug(f\u0027Using ZAPI instead of REST for {name} call.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()"},{"line_number":149,"context_line":"        if self.client_api in zapi_modes:"},{"line_number":150,"context_line":"            zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":151,"context_line":"            return getattr(zapi_client, name)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        raise na_utils.NetAppDriverException("},{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"73254faf_e9f83226","line":154,"range":{"start_line":144,"start_character":8,"end_line":154,"end_character":58},"in_reply_to":"ba3378e9_19547a8b","updated":"2022-07-20 12:13:18.000000000","message":"Avoid building the string on the debugger, better to pass as parameter, so it only runs when the debug mode is on:\n\nLOG.debug(\"The %s call is not supported for RESt, falling back to ZAPI.\", name)","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"},{"line_number":158,"context_line":"        \"\"\"Determine if should fallback to a ZAPI method with the same name."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        @params min_version:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad786cc7_142823df","line":157,"range":{"start_line":157,"start_character":34,"end_line":157,"end_character":50},"updated":"2022-07-19 12:24:49.000000000","message":"this option is useless, because forcing falling back to REST is done by implementing the method here","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"},{"line_number":158,"context_line":"        \"\"\"Determine if should fallback to a ZAPI method with the same name."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        @params min_version:"}],"source_content_type":"text/x-python","patch_set":2,"id":"0beadc8e_ac9b4ab9","line":157,"range":{"start_line":157,"start_character":34,"end_line":157,"end_character":50},"in_reply_to":"5831001c_99f7d88d","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"857297bed4569fb1821a4aa605fecb8cbb4e4a36","unresolved":true,"context_lines":[{"line_number":154,"context_line":"            _(\u0027Method %s not implemented on REST\u0027) % name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def check_version_or_fallback(min_version\u003d(9, 6, 0),"},{"line_number":157,"context_line":"                                  fallback_to_zapi\u003dTrue):"},{"line_number":158,"context_line":"        \"\"\"Determine if should fallback to a ZAPI method with the same name."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        @params min_version:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5831001c_99f7d88d","line":157,"range":{"start_line":157,"start_character":34,"end_line":157,"end_character":50},"in_reply_to":"ad786cc7_142823df","updated":"2022-07-20 12:13:18.000000000","message":"If a method must be REST only (not fallback to zapi), we just don\u0027t add this decorator to it. So, this parameter can be removed.","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":172,"context_line":"            def _wrapper(self, *args, **kwargs):"},{"line_number":173,"context_line":"                current_version \u003d self.ontap_version"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"                if self.client_api \u003d\u003d CLIENT_HYBRID:"},{"line_number":176,"context_line":"                    if current_version \u003e\u003d min_version or not fallback_to_zapi:"},{"line_number":177,"context_line":"                        return method(self, *args, **kwargs)"},{"line_number":178,"context_line":"                    elif hasattr(self.zapi_client, method.__name__):"},{"line_number":179,"context_line":"                        LOG.debug(\u0027Using ZAPI instead of REST for \u0027"},{"line_number":180,"context_line":"                                  f\u0027{method.__name__} call.\u0027)"},{"line_number":181,"context_line":"                        zapi_fallback \u003d getattr(self.zapi_client,"},{"line_number":182,"context_line":"                                                method.__name__)"},{"line_number":183,"context_line":"                        return zapi_fallback(*args, **kwargs)"},{"line_number":184,"context_line":"                    else:"},{"line_number":185,"context_line":"                        raise na_utils.NetAppDriverException("},{"line_number":186,"context_line":"                            _(\u0027Version %(min_version)s or above is required to\u0027"},{"line_number":187,"context_line":"                              \u0027 run the method %(method)s. Current ONTAP \u0027"},{"line_number":188,"context_line":"                              \u0027version is %(current_version)s.\u0027)"},{"line_number":189,"context_line":"                            % {\u0027min_version\u0027: str(min_version),"},{"line_number":190,"context_line":"                               \u0027method\u0027: method.__name__,"},{"line_number":191,"context_line":"                               \u0027current_version\u0027: str(current_version)})"},{"line_number":192,"context_line":"                elif self.client_api \u003d\u003d CLIENT_ZAPI:"},{"line_number":193,"context_line":"                    zapi_fallback \u003d getattr(self.zapi_client, method.__name__)"},{"line_number":194,"context_line":"                    return zapi_fallback(*args, **kwargs)"},{"line_number":195,"context_line":"                elif self.client_api \u003d\u003d CLIENT_REST:"},{"line_number":196,"context_line":"                    return method(self, *args, **kwargs)"},{"line_number":197,"context_line":"            return _wrapper"},{"line_number":198,"context_line":"        return _decorator"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"197aa500_0c0129a3","line":196,"range":{"start_line":175,"start_character":16,"end_line":196,"end_character":56},"updated":"2022-07-19 12:24:49.000000000","message":"as we discussed, the client_api should be used out of RestClient scope, since the code reach here, it will use the \"hybrid mode\", so just do:\n\nif current_version \u003e\u003d min_version:\n    return method(self, *args, **kwargs)\nelif hasattr(self.zapi_client, method.__name__):\n    LOG.debug(\u0027Using ZAPI instead of REST for \u0027\n              f\u0027{method.__name__} call.\u0027)\n    zapi_fallback \u003d getattr(self.zapi_client, method.__name__)\n    return zapi_fallback(*args, **kwargs)\nelse:\n     raise na_utils.NetAppDriverException(\n          _(\u0027Version %(min_version)s or above is required to\u0027\n            \u0027 run the method %(method)s. Current ONTAP \u0027\n            \u0027version is %(current_version)s.\u0027)\n            % {\u0027min_version\u0027: str(min_version),\n            \u0027method\u0027: method.__name__,\n            \u0027current_version\u0027: str(current_version)})","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            def _wrapper(self, *args, **kwargs):"},{"line_number":173,"context_line":"                current_version \u003d self.ontap_version"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"                if self.client_api \u003d\u003d CLIENT_HYBRID:"},{"line_number":176,"context_line":"                    if current_version \u003e\u003d min_version or not fallback_to_zapi:"},{"line_number":177,"context_line":"                        return method(self, *args, **kwargs)"},{"line_number":178,"context_line":"                    elif hasattr(self.zapi_client, method.__name__):"},{"line_number":179,"context_line":"                        LOG.debug(\u0027Using ZAPI instead of REST for \u0027"},{"line_number":180,"context_line":"                                  f\u0027{method.__name__} call.\u0027)"},{"line_number":181,"context_line":"                        zapi_fallback \u003d getattr(self.zapi_client,"},{"line_number":182,"context_line":"                                                method.__name__)"},{"line_number":183,"context_line":"                        return zapi_fallback(*args, **kwargs)"},{"line_number":184,"context_line":"                    else:"},{"line_number":185,"context_line":"                        raise na_utils.NetAppDriverException("},{"line_number":186,"context_line":"                            _(\u0027Version %(min_version)s or above is required to\u0027"},{"line_number":187,"context_line":"                              \u0027 run the method %(method)s. Current ONTAP \u0027"},{"line_number":188,"context_line":"                              \u0027version is %(current_version)s.\u0027)"},{"line_number":189,"context_line":"                            % {\u0027min_version\u0027: str(min_version),"},{"line_number":190,"context_line":"                               \u0027method\u0027: method.__name__,"},{"line_number":191,"context_line":"                               \u0027current_version\u0027: str(current_version)})"},{"line_number":192,"context_line":"                elif self.client_api \u003d\u003d CLIENT_ZAPI:"},{"line_number":193,"context_line":"                    zapi_fallback \u003d getattr(self.zapi_client, method.__name__)"},{"line_number":194,"context_line":"                    return zapi_fallback(*args, **kwargs)"},{"line_number":195,"context_line":"                elif self.client_api \u003d\u003d CLIENT_REST:"},{"line_number":196,"context_line":"                    return method(self, *args, **kwargs)"},{"line_number":197,"context_line":"            return _wrapper"},{"line_number":198,"context_line":"        return _decorator"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"83661c26_33ff8ec6","line":196,"range":{"start_line":175,"start_character":16,"end_line":196,"end_character":56},"in_reply_to":"197aa500_0c0129a3","updated":"2022-08-03 11:38:05.000000000","message":"Ack. We decided to change the approach remove the decorator, so this code is not needed anymore.","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":213,"context_line":"        :returns: parsed REST response"},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if enable_tunneling:"},{"line_number":217,"context_line":"            # initialize headers if it is None"},{"line_number":218,"context_line":"            headers \u003d headers if headers else {}"},{"line_number":219,"context_line":"            headers[\"X-Dot-SVM-Name\"] \u003d self.connection.get_vserver()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5872c222_8734cdee","line":216,"range":{"start_line":216,"start_character":10,"end_line":216,"end_character":28},"updated":"2022-07-19 12:24:49.000000000","message":"During setting the tunneling, the ZAPI checks the boolean and the value saved for the server, it prevents send a request for a server \"None\":\n\nif enable_tunneling and self.connection.get_vserver():","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        :returns: parsed REST response"},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if enable_tunneling:"},{"line_number":217,"context_line":"            # initialize headers if it is None"},{"line_number":218,"context_line":"            headers \u003d headers if headers else {}"},{"line_number":219,"context_line":"            headers[\"X-Dot-SVM-Name\"] \u003d self.connection.get_vserver()"}],"source_content_type":"text/x-python","patch_set":2,"id":"6eb972ea_6f133b3e","line":216,"range":{"start_line":216,"start_character":10,"end_line":216,"end_character":28},"in_reply_to":"5872c222_8734cdee","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2021 NetApp, Inc. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"f68cab51_287c0ebc","line":1,"updated":"2022-08-27 07:15:51.000000000","message":"* 2022","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2021 NetApp, Inc. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"34762497_b00c4cda","line":1,"in_reply_to":"f68cab51_287c0ebc","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"bab3c882d7ff3246b3b1d739c2b26cccd6bb987f","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":138,"context_line":"        return getattr(zapi_client, name)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @utils.retry(netapp_api.NaRetryableError, interval\u003d2, retries\u003d60)"},{"line_number":141,"context_line":"    def _wait_job_result(self, job_url):"},{"line_number":142,"context_line":"        response \u003d self.send_request(job_url, \u0027get\u0027, enable_tunneling\u003dFalse)"},{"line_number":143,"context_line":"        if response and response.get(\u0027state\u0027) \u003d\u003d \u0027success\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7c76e721_e9352576","line":140,"range":{"start_line":140,"start_character":59,"end_line":140,"end_character":68},"updated":"2022-08-28 15:15:17.000000000","message":"this hard-coded value should be a config option.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"28f9ca54da0097351fcbed27d83ef9c2dc304b85","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":138,"context_line":"        return getattr(zapi_client, name)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @utils.retry(netapp_api.NaRetryableError, interval\u003d2, retries\u003d60)"},{"line_number":141,"context_line":"    def _wait_job_result(self, job_url):"},{"line_number":142,"context_line":"        response \u003d self.send_request(job_url, \u0027get\u0027, enable_tunneling\u003dFalse)"},{"line_number":143,"context_line":"        if response and response.get(\u0027state\u0027) \u003d\u003d \u0027success\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"8f7aea45_27a961bc","line":140,"range":{"start_line":140,"start_character":59,"end_line":140,"end_character":68},"in_reply_to":"7c76e721_e9352576","updated":"2022-09-01 04:27:42.000000000","message":"Each retry waits for: interval * (2) ^ (retry- 1)\n\nfirst: 2 * 2^0 \u003d 2seconds\nsecond: 2 * 2^1 \u003d 4seconds\n...\n60th: 2 * 2^59 \u003d forever..\n\nIt should be changed.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":138,"context_line":"        return getattr(zapi_client, name)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @utils.retry(netapp_api.NaRetryableError, interval\u003d2, retries\u003d60)"},{"line_number":141,"context_line":"    def _wait_job_result(self, job_url):"},{"line_number":142,"context_line":"        response \u003d self.send_request(job_url, \u0027get\u0027, enable_tunneling\u003dFalse)"},{"line_number":143,"context_line":"        if response and response.get(\u0027state\u0027) \u003d\u003d \u0027success\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"94ac44a2_52278778","line":140,"range":{"start_line":140,"start_character":59,"end_line":140,"end_character":68},"in_reply_to":"8f7aea45_27a961bc","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"28f9ca54da0097351fcbed27d83ef9c2dc304b85","unresolved":true,"context_lines":[{"line_number":146,"context_line":"            msg \u003d response[\u0027error\u0027][\u0027message\u0027]"},{"line_number":147,"context_line":"            code \u003d response[\u0027error\u0027][\u0027code\u0027]"},{"line_number":148,"context_line":"            raise netapp_api.NaApiError(message\u003dmsg, code\u003dcode)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            raise netapp_api.NaRetryableError(message\u003d\u0027Job is running.\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def send_request(self, action_url, method, body\u003dNone, query\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"0edd9f27_8ddda703","line":149,"updated":"2022-09-01 04:27:42.000000000","message":"it would be nice to have a LOG.debug with the job state, since this function may affect the debugging process.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            msg \u003d response[\u0027error\u0027][\u0027message\u0027]"},{"line_number":147,"context_line":"            code \u003d response[\u0027error\u0027][\u0027code\u0027]"},{"line_number":148,"context_line":"            raise netapp_api.NaApiError(message\u003dmsg, code\u003dcode)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            raise netapp_api.NaRetryableError(message\u003d\u0027Job is running.\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def send_request(self, action_url, method, body\u003dNone, query\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ed0708d_d0820574","line":149,"in_reply_to":"0edd9f27_8ddda703","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"28f9ca54da0097351fcbed27d83ef9c2dc304b85","unresolved":true,"context_lines":[{"line_number":147,"context_line":"            code \u003d response[\u0027error\u0027][\u0027code\u0027]"},{"line_number":148,"context_line":"            raise netapp_api.NaApiError(message\u003dmsg, code\u003dcode)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            raise netapp_api.NaRetryableError(message\u003d\u0027Job is running.\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def send_request(self, action_url, method, body\u003dNone, query\u003dNone,"},{"line_number":153,"context_line":"                     enable_tunneling\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9e5d4c42_75a9cfcd","line":150,"range":{"start_line":150,"start_character":10,"end_line":150,"end_character":71},"updated":"2022-09-01 04:27:42.000000000","message":"Since there is no code catching the retry, when the retry reaches the limit this \"NaRetryableError\" will be raised and logged with \"Job is running\". I think it would be better to catch the error and reraise with a more meaningful message.","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            code \u003d response[\u0027error\u0027][\u0027code\u0027]"},{"line_number":148,"context_line":"            raise netapp_api.NaApiError(message\u003dmsg, code\u003dcode)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            raise netapp_api.NaRetryableError(message\u003d\u0027Job is running.\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def send_request(self, action_url, method, body\u003dNone, query\u003dNone,"},{"line_number":153,"context_line":"                     enable_tunneling\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"6e3c41b1_1ff86404","line":150,"range":{"start_line":150,"start_character":10,"end_line":150,"end_character":71},"in_reply_to":"9e5d4c42_75a9cfcd","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.async_rest_timeout \u003d kwargs.get(\u0027async_rest_timeout\u0027, 60)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.vserver \u003d kwargs.get(\u0027vserver\u0027, None)"},{"line_number":53,"context_line":"        self.connection.set_vserver(self.vserver)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9946fab0_3af7ac0a","line":52,"range":{"start_line":52,"start_character":45,"end_line":52,"end_character":49},"updated":"2022-09-05 16:38:46.000000000","message":"nit: no need to specify this, default value for dict.get is already None","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.async_rest_timeout \u003d kwargs.get(\u0027async_rest_timeout\u0027, 60)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.vserver \u003d kwargs.get(\u0027vserver\u0027, None)"},{"line_number":53,"context_line":"        self.connection.set_vserver(self.vserver)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        ontap_version \u003d self.get_ontap_version(cached\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"97819925_15a250af","line":52,"range":{"start_line":52,"start_character":45,"end_line":52,"end_character":49},"in_reply_to":"9946fab0_3af7ac0a","updated":"2022-09-06 19:31:04.000000000","message":"Done","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d5fe531aac52fe00a25d5ac8cf05e335cfbe4760","unresolved":true,"context_lines":[{"line_number":137,"context_line":"                  \"ZAPI.\", name)"},{"line_number":138,"context_line":"        # Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()"},{"line_number":139,"context_line":"        zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":140,"context_line":"        return getattr(zapi_client, name)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _wait_job_result(self, job_url):"},{"line_number":143,"context_line":"        \"\"\"Waits for a job to finish.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ad3ffd3f_09f266d9","line":140,"range":{"start_line":140,"start_character":36,"end_line":140,"end_character":40},"updated":"2022-09-05 16:38:46.000000000","message":"is there a case possible where the method also doesn\u0027t exist in ZAPI? (maybe removal of a method in future), what will be the behavior of this if that happens? I might be wrong but getattr calls hasattr and might cause cyclic calls?","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"e37a13ef05400cbf3df5d5c25fcaf9168d2842bb","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                  \"ZAPI.\", name)"},{"line_number":138,"context_line":"        # Don\u0027t use self.zapi_client to avoid reentrant call to __getattr__()"},{"line_number":139,"context_line":"        zapi_client \u003d object.__getattribute__(self, \u0027zapi_client\u0027)"},{"line_number":140,"context_line":"        return getattr(zapi_client, name)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _wait_job_result(self, job_url):"},{"line_number":143,"context_line":"        \"\"\"Waits for a job to finish.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"b3cfeeb2_e7bc3934","line":140,"range":{"start_line":140,"start_character":36,"end_line":140,"end_character":40},"in_reply_to":"ad3ffd3f_09f266d9","updated":"2022-09-06 19:31:04.000000000","message":"It\u0027s not possible to have this case - if a function does not exist in ZAPI today, it\u0027s because no operation needs such ZAPI call. In the future, all new features must be implemented using only ONTAP REST API. Hence, it does not make sense to the developer try to call a function that is not implemented in REST API.\n\nAbout getattr calls, in our tests, we had problems with cyclic calls when the code was calling \u0027self.zapi_client\u0027 directly - I believe this problem will not happen now. This code was based on \u0027configuration.py\u0027 [1].\n\n[1]https://github.com/openstack/cinder/blob/f97f7ff514971701a8cd606f65ae5b9f06204a50/cinder/volume/configuration.py#L68","commit_id":"dae7ee1bad6d4e1f6f967d7d15f6f92eda637daf"}],"cinder/volume/drivers/netapp/dataontap/utils/utils.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":65,"context_line":"    \"\"\"Get a cDOT API client for a specific backend.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    config \u003d get_backend_configuration(backend_name)"},{"line_number":68,"context_line":"    client \u003d client_cmode_rest.RestClient("},{"line_number":69,"context_line":"        client_api\u003dconfig.netapp_client_api,"},{"line_number":70,"context_line":"        transport_type\u003dconfig.netapp_transport_type,"},{"line_number":71,"context_line":"        username\u003dconfig.netapp_login,"},{"line_number":72,"context_line":"        password\u003dconfig.netapp_password,"},{"line_number":73,"context_line":"        hostname\u003dconfig.netapp_server_hostname,"},{"line_number":74,"context_line":"        port\u003dconfig.netapp_server_port,"},{"line_number":75,"context_line":"        vserver\u003dvserver_name or config.netapp_vserver,"},{"line_number":76,"context_line":"        trace\u003dvolume_utils.TRACE_API,"},{"line_number":77,"context_line":"        api_trace_pattern\u003dconfig.netapp_api_trace_pattern)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    return client"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"daedba65_62625a59","line":78,"range":{"start_line":68,"start_character":3,"end_line":78,"end_character":0},"updated":"2022-07-19 12:24:49.000000000","message":"As we discussed, the client should be given by the \"client_api\" option (it should be modified to something like \"netapp_use_legacy_client_api\"):\n\nif config.netapp_use_legacy_client_api:\n  clent \u003d client_cmode.Client()\nelse:\n  client \u003d client_cmode_rest.RestClient()","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\"Get a cDOT API client for a specific backend.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    config \u003d get_backend_configuration(backend_name)"},{"line_number":68,"context_line":"    client \u003d client_cmode_rest.RestClient("},{"line_number":69,"context_line":"        client_api\u003dconfig.netapp_client_api,"},{"line_number":70,"context_line":"        transport_type\u003dconfig.netapp_transport_type,"},{"line_number":71,"context_line":"        username\u003dconfig.netapp_login,"},{"line_number":72,"context_line":"        password\u003dconfig.netapp_password,"},{"line_number":73,"context_line":"        hostname\u003dconfig.netapp_server_hostname,"},{"line_number":74,"context_line":"        port\u003dconfig.netapp_server_port,"},{"line_number":75,"context_line":"        vserver\u003dvserver_name or config.netapp_vserver,"},{"line_number":76,"context_line":"        trace\u003dvolume_utils.TRACE_API,"},{"line_number":77,"context_line":"        api_trace_pattern\u003dconfig.netapp_api_trace_pattern)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    return client"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"75fff621_58fd99ad","line":78,"range":{"start_line":68,"start_character":3,"end_line":78,"end_character":0},"in_reply_to":"daedba65_62625a59","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"}],"cinder/volume/drivers/netapp/options.py":[{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"4d60fbaa622ece39b05a0e29e10a695749e952cf","unresolved":true,"context_lines":[{"line_number":51,"context_line":"               help\u003d(\u0027The TCP port to use for communication with the storage \u0027"},{"line_number":52,"context_line":"                     \u0027system or proxy server. If not specified, Data ONTAP \u0027"},{"line_number":53,"context_line":"                     \u0027drivers will use 80 for HTTP and 443 for HTTPS.\u0027)),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027netapp_client_api\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027hybrid\u0027,"},{"line_number":56,"context_line":"               choices\u003d[\u0027zapi\u0027, \u0027rest\u0027, \u0027hybrid\u0027],"},{"line_number":57,"context_line":"               help\u003d(\u0027The ONTAP API used for retrieving and modifying data on \u0027"},{"line_number":58,"context_line":"                     \u0027the storage. If not specified the Hybrid mode is used by\u0027"},{"line_number":59,"context_line":"                     \u0027 default. Hybrid mode will rely on REST first\u0027"},{"line_number":60,"context_line":"                     \u0027, if the operations is not supported, then it falls back\u0027"},{"line_number":61,"context_line":"                     \u0027 to ZAPI.\u0027)), ]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"netapp_transport_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027netapp_transport_type\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5cfb5d9_c1ba53b4","line":61,"range":{"start_line":54,"start_character":3,"end_line":61,"end_character":37},"updated":"2022-07-19 12:24:49.000000000","message":"As we discussed, it should be a different name that would have just two value: True and False. True would mean using the legacy client mode and False try to use the new client mode (REST if supported, otherwise, ZAPI). Maybe:\n\nnetapp_use_legacy_client_api \ndefault\u003dTrue","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"5beb5cfb500087f1c55363a1e96ee372d3a7b241","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               help\u003d(\u0027The TCP port to use for communication with the storage \u0027"},{"line_number":52,"context_line":"                     \u0027system or proxy server. If not specified, Data ONTAP \u0027"},{"line_number":53,"context_line":"                     \u0027drivers will use 80 for HTTP and 443 for HTTPS.\u0027)),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027netapp_client_api\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027hybrid\u0027,"},{"line_number":56,"context_line":"               choices\u003d[\u0027zapi\u0027, \u0027rest\u0027, \u0027hybrid\u0027],"},{"line_number":57,"context_line":"               help\u003d(\u0027The ONTAP API used for retrieving and modifying data on \u0027"},{"line_number":58,"context_line":"                     \u0027the storage. If not specified the Hybrid mode is used by\u0027"},{"line_number":59,"context_line":"                     \u0027 default. Hybrid mode will rely on REST first\u0027"},{"line_number":60,"context_line":"                     \u0027, if the operations is not supported, then it falls back\u0027"},{"line_number":61,"context_line":"                     \u0027 to ZAPI.\u0027)), ]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"netapp_transport_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027netapp_transport_type\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f60696d_684bb287","line":61,"range":{"start_line":54,"start_character":3,"end_line":61,"end_character":37},"in_reply_to":"c5cfb5d9_c1ba53b4","updated":"2022-08-03 11:38:05.000000000","message":"Done","commit_id":"b8e1f89597b5e778a59b077ee2773d25a523ecb6"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"5f8226f3c3d6ab168cb8718ad0cc7119770c2f1a","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                     \u0027drivers will use 80 for HTTP and 443 for HTTPS.\u0027)),"},{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027netapp_use_legacy_client\u0027,"},{"line_number":55,"context_line":"                default\u003dTrue,"},{"line_number":56,"context_line":"                help\u003d(\u0027The ONTAP client used for retrieving and modifying \u0027"},{"line_number":57,"context_line":"                      \u0027data on the storage. The legacy client relies on ZAPI \u0027"},{"line_number":58,"context_line":"                      \u0027calls. If set to False, the new REST client is used, \u0027"},{"line_number":59,"context_line":"                      \u0027which runs REST calls if supported, otherwise falls \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"d5b94608_b9be42f4","line":56,"updated":"2022-08-27 07:15:51.000000000","message":"Set the ONTAP client used for ...\nor\nSelect which ONTAP client to use for ...","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"6244390157036983abccee3d50d76527408e1ea7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                     \u0027drivers will use 80 for HTTP and 443 for HTTPS.\u0027)),"},{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027netapp_use_legacy_client\u0027,"},{"line_number":55,"context_line":"                default\u003dTrue,"},{"line_number":56,"context_line":"                help\u003d(\u0027The ONTAP client used for retrieving and modifying \u0027"},{"line_number":57,"context_line":"                      \u0027data on the storage. The legacy client relies on ZAPI \u0027"},{"line_number":58,"context_line":"                      \u0027calls. If set to False, the new REST client is used, \u0027"},{"line_number":59,"context_line":"                      \u0027which runs REST calls if supported, otherwise falls \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"2ea21a89_bc3e2bde","line":56,"in_reply_to":"d5b94608_b9be42f4","updated":"2022-09-01 04:35:07.000000000","message":"Done","commit_id":"b88adbc2371bd91595774e062713dfe5e811532e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b104359480a4284db97bc8d681f7de8dd4b19780","unresolved":true,"context_lines":[{"line_number":74,"context_line":"               help\u003d(\"The path to a CA_BUNDLE file or directory with \""},{"line_number":75,"context_line":"                     \"certificates of trusted CA. If set to a directory, it \""},{"line_number":76,"context_line":"                     \"must have been processed using the c_rehash utility \""},{"line_number":77,"context_line":"                     \"supplied with OpenSSL. If not informed, it will use the \""},{"line_number":78,"context_line":"                     \"Mozilla\u0027s carefully curated collection of Root \""},{"line_number":79,"context_line":"                     \"Certificates for validating the trustworthiness of SSL \""},{"line_number":80,"context_line":"                     \"certificates. Only applies with new REST client.\")), ]"}],"source_content_type":"text/x-python","patch_set":10,"id":"e457e6fc_5d13a4a6","line":77,"range":{"start_line":77,"start_character":52,"end_line":77,"end_character":65},"updated":"2022-09-08 22:36:14.000000000","message":"nit: \"set\" is probably better than \"informed\" here.  Also, \"it\" is referring to the driver here (the last referent was a directory), so it would be better to s/it/the driver/ in this sentence to be completely clear.","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"d1aa0447dc17de5dd2b8dd7977040a3e0e5890a5","unresolved":true,"context_lines":[{"line_number":74,"context_line":"               help\u003d(\"The path to a CA_BUNDLE file or directory with \""},{"line_number":75,"context_line":"                     \"certificates of trusted CA. If set to a directory, it \""},{"line_number":76,"context_line":"                     \"must have been processed using the c_rehash utility \""},{"line_number":77,"context_line":"                     \"supplied with OpenSSL. If not informed, it will use the \""},{"line_number":78,"context_line":"                     \"Mozilla\u0027s carefully curated collection of Root \""},{"line_number":79,"context_line":"                     \"Certificates for validating the trustworthiness of SSL \""},{"line_number":80,"context_line":"                     \"certificates. Only applies with new REST client.\")), ]"}],"source_content_type":"text/x-python","patch_set":10,"id":"8d3b199c_14443ce9","line":77,"range":{"start_line":77,"start_character":52,"end_line":77,"end_character":65},"in_reply_to":"e457e6fc_5d13a4a6","updated":"2022-09-09 10:50:13.000000000","message":"Ack","commit_id":"4775ca93706f58cd1aa8739c35408fd75040302e"}]}
