)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9829596fde09dc0615f9ef3b4294d255b8e1ee43","unresolved":true,"context_lines":[{"line_number":12,"context_line":"- Supports updating QoS parameters when retype operation is performed"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Note(s):"},{"line_number":15,"context_line":"1) The version history added to cinder/volume/drivers/rbd.py is incomplete due to lack of prior knowledge in regards to the driver versioning."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Signed-off-by: Danny Webb \u003cdanny.webb@thehutgroup.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Sergey Drozdov \u003csergey.drozdov.dev@gmail.com, sergey.drozdov93@thehutgroup.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"39523d82_c9388abf","line":15,"updated":"2022-09-14 14:04:15.000000000","message":"nit: We should try to keep commit message lines within the recommended length.","commit_id":"f1bb51c25138a1aaab45b64e2934c0468b941677"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c473ae80_67dc8235","updated":"2022-07-05 11:22:23.000000000","message":"Thank you very much for working on this RBD missing feature.\n\nThe code structure looks good, most comments are repeated comments that occur in multiple places and are related to consistency with the rest of the driver code.\n\nBesides inline comments the patch is missing:\n\n- A release note to make users aware of the new feature once we do a release [1].\n- An update of the RBD driver documentation [2].\n- An update of the support matrix where it should now say that RBD QoS support is complete [3].\n\n[1]: https://docs.openstack.org/cinder/latest/contributor/releasenotes.html\n[2]: https://opendev.org/openstack/cinder/src/branch/master/doc/source/configuration/block-storage/drivers/ceph-rbd-volume-driver.rst\n[3]: https://opendev.org/openstack/cinder/src/commit/ce4d531707d181c39952075b30e06919870f379a/doc/source/reference/support-matrix.ini#L425","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"646b7c58_7d17bb1b","updated":"2022-07-27 09:40:20.000000000","message":"Thank you for the updated patch.\n\nThere are some things that I believe need to be fixed (the -1) and some nits that you may take into consideration (the nits).\n\nAlso the please add a release note to the patch so users can now that this feature has been added (this is a requirement): https://docs.openstack.org/cinder/latest/contributor/releasenotes.html","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"74c92f01_a2d5bd27","in_reply_to":"646b7c58_7d17bb1b","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ed54111a_ced44ac6","updated":"2022-08-11 11:03:49.000000000","message":"Thank you for all the changes. The downvote is for missing release note and for something I think may not be correct when changing the consumer.","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"208e186b_eeb0abd6","in_reply_to":"ed54111a_ced44ac6","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"311f521e_4ca70a46","updated":"2022-08-18 08:08:44.000000000","message":"Thank you for checking the previous patchset","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"63dbd0f09b49cea0538bf585a3a67d0c610fcf7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"d5c77d87_7275f344","updated":"2022-09-09 15:45:40.000000000","message":"Changing vote to -1 since Sergey reported that there is a bug in the retype that he\u0027ll fix on Monday.","commit_id":"8b904cbac4f013164223b9309075cb0fa5abb728"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9c6ceb792d29bae5e7796efab028f5096a747f82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"2aa5a3c2_4dcbb00d","updated":"2022-09-08 15:47:07.000000000","message":"Thank you for the great effort and the patience and willingness to accommodate to the requests. ","commit_id":"8b904cbac4f013164223b9309075cb0fa5abb728"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2a3c1f66bac68a7670a45c52b732a3cfedfe1d49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"57e40dd4_2baf77b7","updated":"2022-09-08 15:49:35.000000000","message":"The code looks good, but Sergey is going to do a last test and confirm everything still works fine before we merge it.","commit_id":"8b904cbac4f013164223b9309075cb0fa5abb728"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"b55c7d9f263fb73153dfe11ae63e8010542e1f0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3f9bb39c_b027bd84","updated":"2022-09-08 13:01:01.000000000","message":"recheck please","commit_id":"8b904cbac4f013164223b9309075cb0fa5abb728"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"48cbd49f5d3651dbe1680feb79a32668078409d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"747d4e18_7f080b3f","updated":"2022-09-13 15:29:12.000000000","message":"Exploratory testing passed, unit tests written; ready for review! Thank you !","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d68092f70a2dc0aaa156ee32ea65af127609a70b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"1e9f1cd2_ae70157c","updated":"2022-09-13 18:53:01.000000000","message":"For what it\u0027s worth, this is a good example of how to update a driver\nand provide valuable versioning comments and updates.  So, a deployer can know what is in the driver and what\u0027s been fixed/added over time.  This also helps anyone debugging the driver know what version the driver state is in at the time the volume service is started.  The version is always logged at init_host time by the volume manager.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_fc.py#L57-L121","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5fc06043382f105069d92b2faaedd58c54546ab8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"0315c60e_f5cda9e1","updated":"2022-09-13 15:57:39.000000000","message":"Should include a version bump in the driver code, since this is a major feature addition.","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"89bca5f66d77669910c5e350c60e324d45c1f0fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"98979aa6_decdb39d","updated":"2022-09-13 15:53:33.000000000","message":"Thanks","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"f39c4fdc437bb366b4475935f788af123c0413fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"9aa6475b_97c6b122","updated":"2022-09-14 12:17:34.000000000","message":"ready for review","commit_id":"acad11cc4e3cb09b5471f8d8f86d770eec92ff6a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9829596fde09dc0615f9ef3b4294d255b8e1ee43","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"c47455a4_6116422a","updated":"2022-09-14 14:04:15.000000000","message":"LGTM","commit_id":"f1bb51c25138a1aaab45b64e2934c0468b941677"}],"cinder/tests/unit/volume/drivers/test_rbd.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":1784,"context_line":"            mock_get_fsid.return_value \u003d expected_fsid"},{"line_number":1785,"context_line":"            actual \u003d self.driver.get_volume_stats(True)"},{"line_number":1786,"context_line":"            self.assertDictEqual(expected, actual)"},{"line_number":1787,"context_line":""},{"line_number":1788,"context_line":"    @common_mocks"},{"line_number":1789,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._supports_qos\u0027)"},{"line_number":1790,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._get_usage_info\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"2ef27195_daf1fcb8","line":1787,"updated":"2022-08-22 16:35:19.000000000","message":"nit: You should confirm that the QoS support method has been called:\n\n  mock_qos_supported.assert_called_once_with()","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":1784,"context_line":"            mock_get_fsid.return_value \u003d expected_fsid"},{"line_number":1785,"context_line":"            actual \u003d self.driver.get_volume_stats(True)"},{"line_number":1786,"context_line":"            self.assertDictEqual(expected, actual)"},{"line_number":1787,"context_line":""},{"line_number":1788,"context_line":"    @common_mocks"},{"line_number":1789,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._supports_qos\u0027)"},{"line_number":1790,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._get_usage_info\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"6871c6ae_1d5132f1","line":1787,"in_reply_to":"2ef27195_daf1fcb8","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":1794,"context_line":"        stats_mock.return_value \u003d (mock.sentinel.free_capacity_gb,"},{"line_number":1795,"context_line":"                                   mock.sentinel.total_capacity_gb)"},{"line_number":1796,"context_line":""},{"line_number":1797,"context_line":"        mock_qos_supported.return_value \u003d True"},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"        expected_fsid \u003d \u0027abc\u0027"},{"line_number":1800,"context_line":"        expected_location_info \u003d (\u0027nondefault:%s:%s:%s:rbd\u0027 %"}],"source_content_type":"text/x-python","patch_set":20,"id":"de496cf2_3cd849cf","line":1797,"updated":"2022-08-22 16:35:19.000000000","message":"nit: Please test with False here to confirm that we are not always blinding returning True.","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":1794,"context_line":"        stats_mock.return_value \u003d (mock.sentinel.free_capacity_gb,"},{"line_number":1795,"context_line":"                                   mock.sentinel.total_capacity_gb)"},{"line_number":1796,"context_line":""},{"line_number":1797,"context_line":"        mock_qos_supported.return_value \u003d True"},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"        expected_fsid \u003d \u0027abc\u0027"},{"line_number":1800,"context_line":"        expected_location_info \u003d (\u0027nondefault:%s:%s:%s:rbd\u0027 %"}],"source_content_type":"text/x-python","patch_set":20,"id":"4a8dd8eb_386318f4","line":1797,"in_reply_to":"de496cf2_3cd849cf","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self.assertDictEqual(expected, actual)"},{"line_number":1828,"context_line":"        usage_mock.assert_not_called()"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @common_mocks"},{"line_number":1831,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._supports_qos\u0027)"},{"line_number":1832,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._get_usage_info\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5771c02b_6e04a4e6","line":1829,"updated":"2022-08-22 16:35:19.000000000","message":"nit: Same as in previous method, check that the qos support mock method has been called.","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self.assertDictEqual(expected, actual)"},{"line_number":1828,"context_line":"        usage_mock.assert_not_called()"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @common_mocks"},{"line_number":1831,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._supports_qos\u0027)"},{"line_number":1832,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.rbd.RBDDriver._get_usage_info\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"637ee74a_0e5f8a08","line":1829,"in_reply_to":"5771c02b_6e04a4e6","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":2385,"context_line":"        qos_a \u003d qos_specs.create(ctxt, \"qos-vers-a\", self.qos_policy_a)"},{"line_number":2386,"context_line":"        qos_b \u003d qos_specs.create(ctxt, \"qos-vers-b\", self.qos_policy_b)"},{"line_number":2387,"context_line":""},{"line_number":2388,"context_line":"        vol_config \u003d {"},{"line_number":2389,"context_line":"            \"rbd_atime_update_interval\": \"60\","},{"line_number":2390,"context_line":"            \"rbd_balance_parent_reads\": \"false\","},{"line_number":2391,"context_line":"            \"rbd_balance_snap_reads\": \"false\","},{"line_number":2392,"context_line":"            \"rbd_blkin_trace_all\": \"false\","},{"line_number":2393,"context_line":"            \"rbd_blocklist_expire_seconds\": \"0\","},{"line_number":2394,"context_line":"            \"rbd_blocklist_on_break_lock\": \"true\","},{"line_number":2395,"context_line":"            \"rbd_cache\": \"true\","},{"line_number":2396,"context_line":"            \"rbd_cache_block_writes_upfront\": \"false\","},{"line_number":2397,"context_line":"            \"rbd_cache_max_dirty\": \"25165824\","},{"line_number":2398,"context_line":"            \"rbd_cache_max_dirty_age\": \"1.000000\","},{"line_number":2399,"context_line":"            \"rbd_cache_max_dirty_object\": \"0\","},{"line_number":2400,"context_line":"            \"rbd_cache_policy\": \"writearound\","},{"line_number":2401,"context_line":"            \"rbd_cache_size\": \"33554432\","},{"line_number":2402,"context_line":"            \"rbd_cache_target_dirty\": \"16777216\","},{"line_number":2403,"context_line":"            \"rbd_cache_writethrough_until_flush\": \"true\","},{"line_number":2404,"context_line":"            \"rbd_clone_copy_on_read\": \"false\","},{"line_number":2405,"context_line":"            \"rbd_compression_hint\": \"none\","},{"line_number":2406,"context_line":"            \"rbd_concurrent_management_ops\": \"10\","},{"line_number":2407,"context_line":"            \"rbd_default_snapshot_quiesce_mode\": \"required\","},{"line_number":2408,"context_line":"            \"rbd_disable_zero_copy_writes\": \"true\","},{"line_number":2409,"context_line":"            \"rbd_discard_granularity_bytes\": \"65536\","},{"line_number":2410,"context_line":"            \"rbd_enable_alloc_hint\": \"true\","},{"line_number":2411,"context_line":"            \"rbd_invalidate_object_map_on_timeout\": \"true\","},{"line_number":2412,"context_line":"            \"rbd_io_scheduler\": \"simple\","},{"line_number":2413,"context_line":"            \"rbd_io_scheduler_simple_max_delay\": \"0\","},{"line_number":2414,"context_line":"            \"rbd_journal_commit_age\": \"5.000000\","},{"line_number":2415,"context_line":"            \"rbd_journal_max_concurrent_object_sets\": \"0\","},{"line_number":2416,"context_line":"            \"rbd_journal_max_payload_bytes\": \"16384\","},{"line_number":2417,"context_line":"            \"rbd_journal_object_flush_age\": \"0.000000\","},{"line_number":2418,"context_line":"            \"rbd_journal_object_flush_bytes\": \"1048576\","},{"line_number":2419,"context_line":"            \"rbd_journal_object_flush_interval\": \"0\","},{"line_number":2420,"context_line":"            \"rbd_journal_object_max_in_flight_appends\": \"0\","},{"line_number":2421,"context_line":"            \"rbd_journal_object_writethrough_until_flush\": \"true\","},{"line_number":2422,"context_line":"            \"rbd_localize_parent_reads\": \"false\","},{"line_number":2423,"context_line":"            \"rbd_localize_snap_reads\": \"false\","},{"line_number":2424,"context_line":"            \"rbd_mirroring_delete_delay\": \"0\","},{"line_number":2425,"context_line":"            \"rbd_mirroring_max_mirroring_snapshots\": \"3\","},{"line_number":2426,"context_line":"            \"rbd_mirroring_replay_delay\": \"0\","},{"line_number":2427,"context_line":"            \"rbd_mirroring_resync_after_disconnect\": \"false\","},{"line_number":2428,"context_line":"            \"rbd_move_parent_to_trash_on_remove\": \"false\","},{"line_number":2429,"context_line":"            \"rbd_move_to_trash_on_remove\": \"false\","},{"line_number":2430,"context_line":"            \"rbd_move_to_trash_on_remove_expire_seconds\": \"0\","},{"line_number":2431,"context_line":"            \"rbd_mtime_update_interval\": \"60\","},{"line_number":2432,"context_line":"            \"rbd_non_blocking_aio\": \"true\","},{"line_number":2433,"context_line":"            \"rbd_parent_cache_enabled\": \"false\","},{"line_number":2434,"context_line":"            \"rbd_persistent_cache_log_periodic_stats\": \"false\","},{"line_number":2435,"context_line":"            \"rbd_persistent_cache_mode\": \"disabled\","},{"line_number":2436,"context_line":"            \"rbd_persistent_cache_path\": \"/tmp\","},{"line_number":2437,"context_line":"            \"rbd_persistent_cache_size\": \"1073741824\","},{"line_number":2438,"context_line":"            \"rbd_plugins\": \"\","},{"line_number":2439,"context_line":"            \"rbd_qos_bps_burst\": \"0\","},{"line_number":2440,"context_line":"            \"rbd_qos_bps_burst_seconds\": \"1\","},{"line_number":2441,"context_line":"            \"rbd_qos_bps_limit\": \"1024\","},{"line_number":2442,"context_line":"            \"rbd_qos_iops_burst\": \"0\","},{"line_number":2443,"context_line":"            \"rbd_qos_iops_burst_seconds\": \"1\","},{"line_number":2444,"context_line":"            \"rbd_qos_iops_limit\": \"100\","},{"line_number":2445,"context_line":"            \"rbd_qos_read_bps_burst\": \"0\","},{"line_number":2446,"context_line":"            \"rbd_qos_read_bps_burst_seconds\": \"1\","},{"line_number":2447,"context_line":"            \"rbd_qos_read_bps_limit\": \"0\","},{"line_number":2448,"context_line":"            \"rbd_qos_read_iops_burst\": \"0\","},{"line_number":2449,"context_line":"            \"rbd_qos_read_iops_burst_seconds\": \"1\","},{"line_number":2450,"context_line":"            \"rbd_qos_read_iops_limit\": \"0\","},{"line_number":2451,"context_line":"            \"rbd_qos_schedule_tick_min\": \"50\","},{"line_number":2452,"context_line":"            \"rbd_qos_write_bps_burst\": \"0\","},{"line_number":2453,"context_line":"            \"rbd_qos_write_bps_burst_seconds\": \"1\","},{"line_number":2454,"context_line":"            \"rbd_qos_write_bps_limit\": \"0\","},{"line_number":2455,"context_line":"            \"rbd_qos_write_iops_burst\": \"0\","},{"line_number":2456,"context_line":"            \"rbd_qos_write_iops_burst_seconds\": \"1\","},{"line_number":2457,"context_line":"            \"rbd_qos_write_iops_limit\": \"0\","},{"line_number":2458,"context_line":"            \"rbd_quiesce_notification_attempts\": \"10\","},{"line_number":2459,"context_line":"            \"rbd_read_from_replica_policy\": \"default\","},{"line_number":2460,"context_line":"            \"rbd_readahead_disable_after_bytes\": \"52428800\","},{"line_number":2461,"context_line":"            \"rbd_readahead_max_bytes\": \"524288\","},{"line_number":2462,"context_line":"            \"rbd_readahead_trigger_requests\": \"10\","},{"line_number":2463,"context_line":"            \"rbd_request_timed_out_seconds\": \"30\","},{"line_number":2464,"context_line":"            \"rbd_skip_partial_discard\": \"true\","},{"line_number":2465,"context_line":"            \"rbd_sparse_read_threshold_bytes\": \"65536\""},{"line_number":2466,"context_line":"        }"},{"line_number":2467,"context_line":""},{"line_number":2468,"context_line":"        mock_get_vol_qos.return_value \u003d vol_config"},{"line_number":2469,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"97c24e9a_5669ea49","line":2466,"range":{"start_line":2388,"start_character":0,"end_line":2466,"end_character":9},"updated":"2022-08-22 16:35:19.000000000","message":"nit: Doesn\u0027t seem necessary to include EVERYTHING.  It makes it hard to see what values are actually relevant.\n\nProbably just leaving all qos values is enough (even those that are not currently supported).","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":2385,"context_line":"        qos_a \u003d qos_specs.create(ctxt, \"qos-vers-a\", self.qos_policy_a)"},{"line_number":2386,"context_line":"        qos_b \u003d qos_specs.create(ctxt, \"qos-vers-b\", self.qos_policy_b)"},{"line_number":2387,"context_line":""},{"line_number":2388,"context_line":"        vol_config \u003d {"},{"line_number":2389,"context_line":"            \"rbd_atime_update_interval\": \"60\","},{"line_number":2390,"context_line":"            \"rbd_balance_parent_reads\": \"false\","},{"line_number":2391,"context_line":"            \"rbd_balance_snap_reads\": \"false\","},{"line_number":2392,"context_line":"            \"rbd_blkin_trace_all\": \"false\","},{"line_number":2393,"context_line":"            \"rbd_blocklist_expire_seconds\": \"0\","},{"line_number":2394,"context_line":"            \"rbd_blocklist_on_break_lock\": \"true\","},{"line_number":2395,"context_line":"            \"rbd_cache\": \"true\","},{"line_number":2396,"context_line":"            \"rbd_cache_block_writes_upfront\": \"false\","},{"line_number":2397,"context_line":"            \"rbd_cache_max_dirty\": \"25165824\","},{"line_number":2398,"context_line":"            \"rbd_cache_max_dirty_age\": \"1.000000\","},{"line_number":2399,"context_line":"            \"rbd_cache_max_dirty_object\": \"0\","},{"line_number":2400,"context_line":"            \"rbd_cache_policy\": \"writearound\","},{"line_number":2401,"context_line":"            \"rbd_cache_size\": \"33554432\","},{"line_number":2402,"context_line":"            \"rbd_cache_target_dirty\": \"16777216\","},{"line_number":2403,"context_line":"            \"rbd_cache_writethrough_until_flush\": \"true\","},{"line_number":2404,"context_line":"            \"rbd_clone_copy_on_read\": \"false\","},{"line_number":2405,"context_line":"            \"rbd_compression_hint\": \"none\","},{"line_number":2406,"context_line":"            \"rbd_concurrent_management_ops\": \"10\","},{"line_number":2407,"context_line":"            \"rbd_default_snapshot_quiesce_mode\": \"required\","},{"line_number":2408,"context_line":"            \"rbd_disable_zero_copy_writes\": \"true\","},{"line_number":2409,"context_line":"            \"rbd_discard_granularity_bytes\": \"65536\","},{"line_number":2410,"context_line":"            \"rbd_enable_alloc_hint\": \"true\","},{"line_number":2411,"context_line":"            \"rbd_invalidate_object_map_on_timeout\": \"true\","},{"line_number":2412,"context_line":"            \"rbd_io_scheduler\": \"simple\","},{"line_number":2413,"context_line":"            \"rbd_io_scheduler_simple_max_delay\": \"0\","},{"line_number":2414,"context_line":"            \"rbd_journal_commit_age\": \"5.000000\","},{"line_number":2415,"context_line":"            \"rbd_journal_max_concurrent_object_sets\": \"0\","},{"line_number":2416,"context_line":"            \"rbd_journal_max_payload_bytes\": \"16384\","},{"line_number":2417,"context_line":"            \"rbd_journal_object_flush_age\": \"0.000000\","},{"line_number":2418,"context_line":"            \"rbd_journal_object_flush_bytes\": \"1048576\","},{"line_number":2419,"context_line":"            \"rbd_journal_object_flush_interval\": \"0\","},{"line_number":2420,"context_line":"            \"rbd_journal_object_max_in_flight_appends\": \"0\","},{"line_number":2421,"context_line":"            \"rbd_journal_object_writethrough_until_flush\": \"true\","},{"line_number":2422,"context_line":"            \"rbd_localize_parent_reads\": \"false\","},{"line_number":2423,"context_line":"            \"rbd_localize_snap_reads\": \"false\","},{"line_number":2424,"context_line":"            \"rbd_mirroring_delete_delay\": \"0\","},{"line_number":2425,"context_line":"            \"rbd_mirroring_max_mirroring_snapshots\": \"3\","},{"line_number":2426,"context_line":"            \"rbd_mirroring_replay_delay\": \"0\","},{"line_number":2427,"context_line":"            \"rbd_mirroring_resync_after_disconnect\": \"false\","},{"line_number":2428,"context_line":"            \"rbd_move_parent_to_trash_on_remove\": \"false\","},{"line_number":2429,"context_line":"            \"rbd_move_to_trash_on_remove\": \"false\","},{"line_number":2430,"context_line":"            \"rbd_move_to_trash_on_remove_expire_seconds\": \"0\","},{"line_number":2431,"context_line":"            \"rbd_mtime_update_interval\": \"60\","},{"line_number":2432,"context_line":"            \"rbd_non_blocking_aio\": \"true\","},{"line_number":2433,"context_line":"            \"rbd_parent_cache_enabled\": \"false\","},{"line_number":2434,"context_line":"            \"rbd_persistent_cache_log_periodic_stats\": \"false\","},{"line_number":2435,"context_line":"            \"rbd_persistent_cache_mode\": \"disabled\","},{"line_number":2436,"context_line":"            \"rbd_persistent_cache_path\": \"/tmp\","},{"line_number":2437,"context_line":"            \"rbd_persistent_cache_size\": \"1073741824\","},{"line_number":2438,"context_line":"            \"rbd_plugins\": \"\","},{"line_number":2439,"context_line":"            \"rbd_qos_bps_burst\": \"0\","},{"line_number":2440,"context_line":"            \"rbd_qos_bps_burst_seconds\": \"1\","},{"line_number":2441,"context_line":"            \"rbd_qos_bps_limit\": \"1024\","},{"line_number":2442,"context_line":"            \"rbd_qos_iops_burst\": \"0\","},{"line_number":2443,"context_line":"            \"rbd_qos_iops_burst_seconds\": \"1\","},{"line_number":2444,"context_line":"            \"rbd_qos_iops_limit\": \"100\","},{"line_number":2445,"context_line":"            \"rbd_qos_read_bps_burst\": \"0\","},{"line_number":2446,"context_line":"            \"rbd_qos_read_bps_burst_seconds\": \"1\","},{"line_number":2447,"context_line":"            \"rbd_qos_read_bps_limit\": \"0\","},{"line_number":2448,"context_line":"            \"rbd_qos_read_iops_burst\": \"0\","},{"line_number":2449,"context_line":"            \"rbd_qos_read_iops_burst_seconds\": \"1\","},{"line_number":2450,"context_line":"            \"rbd_qos_read_iops_limit\": \"0\","},{"line_number":2451,"context_line":"            \"rbd_qos_schedule_tick_min\": \"50\","},{"line_number":2452,"context_line":"            \"rbd_qos_write_bps_burst\": \"0\","},{"line_number":2453,"context_line":"            \"rbd_qos_write_bps_burst_seconds\": \"1\","},{"line_number":2454,"context_line":"            \"rbd_qos_write_bps_limit\": \"0\","},{"line_number":2455,"context_line":"            \"rbd_qos_write_iops_burst\": \"0\","},{"line_number":2456,"context_line":"            \"rbd_qos_write_iops_burst_seconds\": \"1\","},{"line_number":2457,"context_line":"            \"rbd_qos_write_iops_limit\": \"0\","},{"line_number":2458,"context_line":"            \"rbd_quiesce_notification_attempts\": \"10\","},{"line_number":2459,"context_line":"            \"rbd_read_from_replica_policy\": \"default\","},{"line_number":2460,"context_line":"            \"rbd_readahead_disable_after_bytes\": \"52428800\","},{"line_number":2461,"context_line":"            \"rbd_readahead_max_bytes\": \"524288\","},{"line_number":2462,"context_line":"            \"rbd_readahead_trigger_requests\": \"10\","},{"line_number":2463,"context_line":"            \"rbd_request_timed_out_seconds\": \"30\","},{"line_number":2464,"context_line":"            \"rbd_skip_partial_discard\": \"true\","},{"line_number":2465,"context_line":"            \"rbd_sparse_read_threshold_bytes\": \"65536\""},{"line_number":2466,"context_line":"        }"},{"line_number":2467,"context_line":""},{"line_number":2468,"context_line":"        mock_get_vol_qos.return_value \u003d vol_config"},{"line_number":2469,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"668f0e16_bd66fa3f","line":2466,"range":{"start_line":2388,"start_character":0,"end_line":2466,"end_character":9},"in_reply_to":"97c24e9a_5669ea49","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":2493,"context_line":""},{"line_number":2494,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"},{"line_number":2495,"context_line":"        mock_del_vol_qos.assert_called_once_with(self.volume_a, delete_qos)"},{"line_number":2496,"context_line":""},{"line_number":2497,"context_line":"    @common_mocks"},{"line_number":2498,"context_line":"    def test_update_migrated_volume(self):"},{"line_number":2499,"context_line":"        client \u003d self.mock_client.return_value"}],"source_content_type":"text/x-python","patch_set":20,"id":"a6add2cb_820c24e0","line":2496,"updated":"2022-08-22 16:35:19.000000000","message":"-1: As far as I can tell there are a good number of new methods that don\u0027t have unit tests:\n\n- _supports_qos\n- _qos_specs_from_volume_type\n- get_rbd_image_qos\n- update_rbd_image_qos\n- delete_rbd_image_qos_keys","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":2493,"context_line":""},{"line_number":2494,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"},{"line_number":2495,"context_line":"        mock_del_vol_qos.assert_called_once_with(self.volume_a, delete_qos)"},{"line_number":2496,"context_line":""},{"line_number":2497,"context_line":"    @common_mocks"},{"line_number":2498,"context_line":"    def test_update_migrated_volume(self):"},{"line_number":2499,"context_line":"        client \u003d self.mock_client.return_value"}],"source_content_type":"text/x-python","patch_set":20,"id":"ac8b45f3_64f6d8ee","line":2496,"in_reply_to":"a6add2cb_820c24e0","updated":"2022-08-31 23:50:27.000000000","message":"Done; the last 3 may need further attention.","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3720ade1e8c62fa9aae7811bfb383eafb1afdded","unresolved":true,"context_lines":[{"line_number":1827,"context_line":"                               return_value\u003dexpected_fsid):"},{"line_number":1828,"context_line":"            actual \u003d self.driver.get_volume_stats(True)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        # Test the differing qos_support parameters first, then"},{"line_number":1831,"context_line":"        # delete the differing qos_support parameter and check"},{"line_number":1832,"context_line":"        # the rest of presumably equal expected and actual outputs."},{"line_number":1833,"context_line":"        self.assertNotEqual(expected, actual)"},{"line_number":1834,"context_line":"        del expected[\"qos_support\"]"},{"line_number":1835,"context_line":"        del actual[\"qos_support\"]"},{"line_number":1836,"context_line":"        self.assertDictEqual(expected, actual)"},{"line_number":1837,"context_line":""},{"line_number":1838,"context_line":"        usage_mock.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":23,"id":"79b27e87_bc8a6865","line":1835,"range":{"start_line":1830,"start_character":0,"end_line":1835,"end_character":33},"updated":"2022-09-08 12:10:47.000000000","message":"-1: The right way to test this is to change L1820 to\n\n  qos_support\u003dFalse\n  \nAnd remove these lines","commit_id":"f107dbf2d779301893e33063c1591180f6f158aa"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"b55c7d9f263fb73153dfe11ae63e8010542e1f0a","unresolved":false,"context_lines":[{"line_number":1827,"context_line":"                               return_value\u003dexpected_fsid):"},{"line_number":1828,"context_line":"            actual \u003d self.driver.get_volume_stats(True)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        # Test the differing qos_support parameters first, then"},{"line_number":1831,"context_line":"        # delete the differing qos_support parameter and check"},{"line_number":1832,"context_line":"        # the rest of presumably equal expected and actual outputs."},{"line_number":1833,"context_line":"        self.assertNotEqual(expected, actual)"},{"line_number":1834,"context_line":"        del expected[\"qos_support\"]"},{"line_number":1835,"context_line":"        del actual[\"qos_support\"]"},{"line_number":1836,"context_line":"        self.assertDictEqual(expected, actual)"},{"line_number":1837,"context_line":""},{"line_number":1838,"context_line":"        usage_mock.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":23,"id":"5c53b47b_3e727b6c","line":1835,"range":{"start_line":1830,"start_character":0,"end_line":1835,"end_character":33},"in_reply_to":"79b27e87_bc8a6865","updated":"2022-09-08 13:01:01.000000000","message":"Done","commit_id":"f107dbf2d779301893e33063c1591180f6f158aa"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"23444434120dc26d9b3363808f94d6e17bf1266d","unresolved":true,"context_lines":[{"line_number":2419,"context_line":"        diff \u003d {\u0027encryption\u0027: {},"},{"line_number":2420,"context_line":"                \u0027extra_specs\u0027: {},"},{"line_number":2421,"context_line":"                \u0027qos_specs\u0027: {\u0027consumer\u0027: (u\u0027front-end\u0027, u\u0027back-end\u0027),"},{"line_number":2422,"context_line":"                              u\u0027total_bytes_sec\u0027: (u\u00271024\u0027, None),"},{"line_number":2423,"context_line":"                              u\u0027total_iops_sec\u0027: (u\u0027200\u0027, None)}}"},{"line_number":2424,"context_line":""},{"line_number":2425,"context_line":"        delete_qos \u003d [\u0027total_iops_sec\u0027, \u0027total_bytes_sec\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"60cc787d_d2336d5e","line":2422,"updated":"2022-09-13 11:03:30.000000000","message":"-1: This is where you need to add the:\n\n  \u0027created_at\u0027: (123, 456),\n  \nTo verify that the call check on L2444 below doesn\u0027t pass that key to mock_del_vol_qos","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"48cbd49f5d3651dbe1680feb79a32668078409d6","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"        diff \u003d {\u0027encryption\u0027: {},"},{"line_number":2420,"context_line":"                \u0027extra_specs\u0027: {},"},{"line_number":2421,"context_line":"                \u0027qos_specs\u0027: {\u0027consumer\u0027: (u\u0027front-end\u0027, u\u0027back-end\u0027),"},{"line_number":2422,"context_line":"                              u\u0027total_bytes_sec\u0027: (u\u00271024\u0027, None),"},{"line_number":2423,"context_line":"                              u\u0027total_iops_sec\u0027: (u\u0027200\u0027, None)}}"},{"line_number":2424,"context_line":""},{"line_number":2425,"context_line":"        delete_qos \u003d [\u0027total_iops_sec\u0027, \u0027total_bytes_sec\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"6c443484_4836fd1f","line":2422,"in_reply_to":"60cc787d_d2336d5e","updated":"2022-09-13 15:29:12.000000000","message":"Done","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"23444434120dc26d9b3363808f94d6e17bf1266d","unresolved":true,"context_lines":[{"line_number":2499,"context_line":"        rbd_image \u003d self.mock_proxy.return_value.__enter__.return_value"},{"line_number":2500,"context_line":""},{"line_number":2501,"context_line":"        updated_specs \u003d {\"total_iops_sec\": \u002750\u0027}"},{"line_number":2502,"context_line":"        self.assertEqual([spec for spec in updated_specs.keys()"},{"line_number":2503,"context_line":"                         if spec in driver.QOS_KEY_MAP.keys()],"},{"line_number":2504,"context_line":"                         list(updated_specs.keys()))"},{"line_number":2505,"context_line":""},{"line_number":2506,"context_line":"        rbd_image.config_set.return_value \u003d qos_specs.update(ctxt,"},{"line_number":2507,"context_line":"                                                             qos.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"593afbb9_46a06e73","line":2504,"range":{"start_line":2502,"start_character":0,"end_line":2504,"end_character":52},"updated":"2022-09-13 11:03:30.000000000","message":"-1: These changes doesn\u0027t test anything of the actual code.  I have added above how the test should be check the new behavior that removes non QoS keys.","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"48cbd49f5d3651dbe1680feb79a32668078409d6","unresolved":false,"context_lines":[{"line_number":2499,"context_line":"        rbd_image \u003d self.mock_proxy.return_value.__enter__.return_value"},{"line_number":2500,"context_line":""},{"line_number":2501,"context_line":"        updated_specs \u003d {\"total_iops_sec\": \u002750\u0027}"},{"line_number":2502,"context_line":"        self.assertEqual([spec for spec in updated_specs.keys()"},{"line_number":2503,"context_line":"                         if spec in driver.QOS_KEY_MAP.keys()],"},{"line_number":2504,"context_line":"                         list(updated_specs.keys()))"},{"line_number":2505,"context_line":""},{"line_number":2506,"context_line":"        rbd_image.config_set.return_value \u003d qos_specs.update(ctxt,"},{"line_number":2507,"context_line":"                                                             qos.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"894cfe83_bf307e2e","line":2504,"range":{"start_line":2502,"start_character":0,"end_line":2504,"end_character":52},"in_reply_to":"593afbb9_46a06e73","updated":"2022-09-13 15:29:12.000000000","message":"Done","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"23444434120dc26d9b3363808f94d6e17bf1266d","unresolved":true,"context_lines":[{"line_number":2524,"context_line":"        rbd_image \u003d self.mock_proxy.return_value.__enter__.return_value"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        keys \u003d [\u0027total_iops_sec\u0027]"},{"line_number":2527,"context_line":"        self.assertEqual([key for key in keys"},{"line_number":2528,"context_line":"                         if key in driver.QOS_KEY_MAP.keys()],"},{"line_number":2529,"context_line":"                         keys)"},{"line_number":2530,"context_line":""},{"line_number":2531,"context_line":"        rbd_image.config_remove.return_value \u003d qos_specs.delete_keys(ctxt,"},{"line_number":2532,"context_line":"                                                                     qos.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"65d61dfa_40e5f20f","line":2529,"range":{"start_line":2527,"start_character":0,"end_line":2529,"end_character":30},"updated":"2022-09-13 11:03:30.000000000","message":"-1: The same as above","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"48cbd49f5d3651dbe1680feb79a32668078409d6","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        rbd_image \u003d self.mock_proxy.return_value.__enter__.return_value"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        keys \u003d [\u0027total_iops_sec\u0027]"},{"line_number":2527,"context_line":"        self.assertEqual([key for key in keys"},{"line_number":2528,"context_line":"                         if key in driver.QOS_KEY_MAP.keys()],"},{"line_number":2529,"context_line":"                         keys)"},{"line_number":2530,"context_line":""},{"line_number":2531,"context_line":"        rbd_image.config_remove.return_value \u003d qos_specs.delete_keys(ctxt,"},{"line_number":2532,"context_line":"                                                                     qos.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"b252c577_4df66875","line":2529,"range":{"start_line":2527,"start_character":0,"end_line":2529,"end_character":30},"in_reply_to":"65d61dfa_40e5f20f","updated":"2022-09-13 15:29:12.000000000","message":"Done","commit_id":"f67840c1287c34ff6c27190b63cc5ffb014aa627"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"54f1648307ce4160db88d315180312163b98dc0b","unresolved":true,"context_lines":[{"line_number":2440,"context_line":"        res \u003d self.driver.retype(ctxt, self.volume_a, new_type, diff,"},{"line_number":2441,"context_line":"                                 None)"},{"line_number":2442,"context_line":"        self.assertEqual((True, {}), res)"},{"line_number":2443,"context_line":"        "},{"line_number":2444,"context_line":"        assert delete_qos \u003d\u003d [key for key in delete_qos"},{"line_number":2445,"context_line":"                              if key in driver.QOS_KEY_MAP]"},{"line_number":2446,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"31504bf1_5cc12a52","line":2443,"range":{"start_line":2443,"start_character":0,"end_line":2443,"end_character":8},"updated":"2022-09-13 17:03:03.000000000","message":"this is causing pep8 failure, remove whitespaces\n\n2022-09-13 15:35:03.249310 | ubuntu-focal | ./cinder/tests/unit/volume/drivers/test_rbd.py:2441:1: W293 blank line contains whitespace\n2022-09-13 15:35:03.308649 | ubuntu-focal | ERROR: InvocationError for command /home/zuul/src/opendev.org/openstack/cinder/.tox/pep8/bin/flake8 . (exited with code 1)","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"f39c4fdc437bb366b4475935f788af123c0413fd","unresolved":false,"context_lines":[{"line_number":2440,"context_line":"        res \u003d self.driver.retype(ctxt, self.volume_a, new_type, diff,"},{"line_number":2441,"context_line":"                                 None)"},{"line_number":2442,"context_line":"        self.assertEqual((True, {}), res)"},{"line_number":2443,"context_line":"        "},{"line_number":2444,"context_line":"        assert delete_qos \u003d\u003d [key for key in delete_qos"},{"line_number":2445,"context_line":"                              if key in driver.QOS_KEY_MAP]"},{"line_number":2446,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"6902eca4_ecaa832f","line":2443,"range":{"start_line":2443,"start_character":0,"end_line":2443,"end_character":8},"in_reply_to":"31504bf1_5cc12a52","updated":"2022-09-14 12:17:34.000000000","message":"Done","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"061aba6128096a775a042d3df238c6bcd77828c1","unresolved":true,"context_lines":[{"line_number":2441,"context_line":"                                 None)"},{"line_number":2442,"context_line":"        self.assertEqual((True, {}), res)"},{"line_number":2443,"context_line":"        "},{"line_number":2444,"context_line":"        assert delete_qos \u003d\u003d [key for key in delete_qos"},{"line_number":2445,"context_line":"                              if key in driver.QOS_KEY_MAP]"},{"line_number":2446,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"},{"line_number":2447,"context_line":"        mock_del_vol_qos.assert_called_once_with(self.volume_a, delete_qos)"},{"line_number":2448,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"681d35ee_b60951a8","line":2445,"range":{"start_line":2444,"start_character":0,"end_line":2445,"end_character":59},"updated":"2022-09-13 15:41:14.000000000","message":"nit: We don\u0027t really need this and it\u0027s a bit confusing, but not a reason to downvote","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"89bca5f66d77669910c5e350c60e324d45c1f0fc","unresolved":false,"context_lines":[{"line_number":2441,"context_line":"                                 None)"},{"line_number":2442,"context_line":"        self.assertEqual((True, {}), res)"},{"line_number":2443,"context_line":"        "},{"line_number":2444,"context_line":"        assert delete_qos \u003d\u003d [key for key in delete_qos"},{"line_number":2445,"context_line":"                              if key in driver.QOS_KEY_MAP]"},{"line_number":2446,"context_line":"        mock_update_qos.assert_called_once_with(self.volume_a, qos_b.specs)"},{"line_number":2447,"context_line":"        mock_del_vol_qos.assert_called_once_with(self.volume_a, delete_qos)"},{"line_number":2448,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9fbf0fad_c71e769b","line":2445,"range":{"start_line":2444,"start_character":0,"end_line":2445,"end_character":59},"in_reply_to":"681d35ee_b60951a8","updated":"2022-09-13 15:53:33.000000000","message":"Ack","commit_id":"c391e42cf6c9bda9ad14911b3d2e766adb4e20c8"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"8a537442_bb101c9e","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"updated":"2022-07-05 11:22:23.000000000","message":"nit: I think it\u0027s a bit more readable if we format it like this:\n\n  QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027: {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \n                                    \u0027default\u0027: 0},\n                 \u0027read_iops_sec\u0027: {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027,\n                                   \u0027default\u0027: 0},","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"fa5df2b9ed2e561431f724f5547f2fa38282adb3","unresolved":true,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"2eada13d_a7e5ce38","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"in_reply_to":"17fd9712_41d0b46c","updated":"2022-07-26 18:54:18.000000000","message":"Comment above","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7fbaa75a_743601ec","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"in_reply_to":"2eada13d_a7e5ce38","updated":"2022-07-27 09:40:20.000000000","message":"nit: In that case we could leave the { on the previous line and indent the next line.\n\nCan be done like this:\n\n  QOS_KEY_MAP \u003d {\n      \u0027total_iops_sec\u0027: {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027,\n                         \u0027default\u0027: 0},\n\nOr like this:\n\n  QOS_KEY_MAP \u003d {\n      \u0027total_iops_sec\u0027: {\n          \u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027,\n          \u0027default\u0027: 0\n      },","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"bd73b6f2_0d92720e","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"in_reply_to":"7fbaa75a_743601ec","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"c583093d_cc5860ca","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"in_reply_to":"7fbaa75a_743601ec","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"EXTRA_SPECS_REPL_ENABLED \u003d \"replication_enabled\""},{"line_number":132,"context_line":"EXTRA_SPECS_MULTIATTACH \u003d \"multiattach\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"QOS_KEY_MAP \u003d {\u0027total_iops_sec\u0027:"},{"line_number":135,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":136,"context_line":"               \u0027read_iops_sec\u0027:"},{"line_number":137,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":138,"context_line":"               \u0027write_iops_sec\u0027:"},{"line_number":139,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_limit\u0027, \u0027default\u0027: 0},"},{"line_number":140,"context_line":"               \u0027total_bytes_sec\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"17fd9712_41d0b46c","line":137,"range":{"start_line":134,"start_character":0,"end_line":137,"end_character":69},"in_reply_to":"8a537442_bb101c9e","updated":"2022-07-26 18:52:23.000000000","message":"Given the proposed format, some of the lines are too long as per pep8. To that end, I though it would be best to keep it in the current format for the sake of consistency. Let me know if you would like me to implement your suggested structure to some lines and not others!","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":154,"context_line":"               \u0027read_bytes_sec_max\u0027:"},{"line_number":155,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":156,"context_line":"               \u0027write_bytes_sec_max\u0027:"},{"line_number":157,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":158,"context_line":"               \u0027total_iops_sec_period\u0027:"},{"line_number":159,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":160,"context_line":"               \u0027read_iops_sec_period\u0027:"},{"line_number":161,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":162,"context_line":"               \u0027write_iops_sec_period\u0027:"},{"line_number":163,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":164,"context_line":"               \u0027total_bytes_sec_period\u0027:"},{"line_number":165,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":166,"context_line":"               \u0027read_bytes_sec_period\u0027:"},{"line_number":167,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":168,"context_line":"               \u0027write_bytes_sec_period\u0027:"},{"line_number":169,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst_seconds\u0027, \u0027default\u0027: 1}}"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"CEPH_QOS_SUPPORTED_VERSION \u003d 15"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"44d49310_6bff7cc6","line":169,"range":{"start_line":157,"start_character":0,"end_line":169,"end_character":77},"updated":"2022-07-05 11:22:23.000000000","message":"-1: These are not standard values supported by OpenStack [1].\n\n[1]: https://docs.openstack.org/cinder/latest/admin/basic-volume-qos.html","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"fa5df2b9ed2e561431f724f5547f2fa38282adb3","unresolved":true,"context_lines":[{"line_number":154,"context_line":"               \u0027read_bytes_sec_max\u0027:"},{"line_number":155,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":156,"context_line":"               \u0027write_bytes_sec_max\u0027:"},{"line_number":157,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":158,"context_line":"               \u0027total_iops_sec_period\u0027:"},{"line_number":159,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":160,"context_line":"               \u0027read_iops_sec_period\u0027:"},{"line_number":161,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":162,"context_line":"               \u0027write_iops_sec_period\u0027:"},{"line_number":163,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":164,"context_line":"               \u0027total_bytes_sec_period\u0027:"},{"line_number":165,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":166,"context_line":"               \u0027read_bytes_sec_period\u0027:"},{"line_number":167,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":168,"context_line":"               \u0027write_bytes_sec_period\u0027:"},{"line_number":169,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst_seconds\u0027, \u0027default\u0027: 1}}"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"CEPH_QOS_SUPPORTED_VERSION \u003d 15"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"847aa4f9_3201e056","line":169,"range":{"start_line":157,"start_character":0,"end_line":169,"end_character":77},"in_reply_to":"2ca903bf_8e1e9cd5","updated":"2022-07-26 18:54:18.000000000","message":"Noted! What do you think should be done about the other values ? Should they simply be removed ?","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":154,"context_line":"               \u0027read_bytes_sec_max\u0027:"},{"line_number":155,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":156,"context_line":"               \u0027write_bytes_sec_max\u0027:"},{"line_number":157,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":158,"context_line":"               \u0027total_iops_sec_period\u0027:"},{"line_number":159,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":160,"context_line":"               \u0027read_iops_sec_period\u0027:"},{"line_number":161,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":162,"context_line":"               \u0027write_iops_sec_period\u0027:"},{"line_number":163,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":164,"context_line":"               \u0027total_bytes_sec_period\u0027:"},{"line_number":165,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":166,"context_line":"               \u0027read_bytes_sec_period\u0027:"},{"line_number":167,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":168,"context_line":"               \u0027write_bytes_sec_period\u0027:"},{"line_number":169,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst_seconds\u0027, \u0027default\u0027: 1}}"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"CEPH_QOS_SUPPORTED_VERSION \u003d 15"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"334ae79e_1932cfa1","line":169,"range":{"start_line":157,"start_character":0,"end_line":169,"end_character":77},"in_reply_to":"308ca5ea_51bd9608","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":154,"context_line":"               \u0027read_bytes_sec_max\u0027:"},{"line_number":155,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":156,"context_line":"               \u0027write_bytes_sec_max\u0027:"},{"line_number":157,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":158,"context_line":"               \u0027total_iops_sec_period\u0027:"},{"line_number":159,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":160,"context_line":"               \u0027read_iops_sec_period\u0027:"},{"line_number":161,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":162,"context_line":"               \u0027write_iops_sec_period\u0027:"},{"line_number":163,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":164,"context_line":"               \u0027total_bytes_sec_period\u0027:"},{"line_number":165,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":166,"context_line":"               \u0027read_bytes_sec_period\u0027:"},{"line_number":167,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":168,"context_line":"               \u0027write_bytes_sec_period\u0027:"},{"line_number":169,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst_seconds\u0027, \u0027default\u0027: 1}}"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"CEPH_QOS_SUPPORTED_VERSION \u003d 15"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"2ca903bf_8e1e9cd5","line":169,"range":{"start_line":157,"start_character":0,"end_line":169,"end_character":77},"in_reply_to":"44d49310_6bff7cc6","updated":"2022-07-26 18:52:23.000000000","message":"Noted! What do you think should be done about the other values ? Should they simply be removed ?","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":154,"context_line":"               \u0027read_bytes_sec_max\u0027:"},{"line_number":155,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":156,"context_line":"               \u0027write_bytes_sec_max\u0027:"},{"line_number":157,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst\u0027, \u0027default\u0027: 0},"},{"line_number":158,"context_line":"               \u0027total_iops_sec_period\u0027:"},{"line_number":159,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":160,"context_line":"               \u0027read_iops_sec_period\u0027:"},{"line_number":161,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":162,"context_line":"               \u0027write_iops_sec_period\u0027:"},{"line_number":163,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_iops_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":164,"context_line":"               \u0027total_bytes_sec_period\u0027:"},{"line_number":165,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":166,"context_line":"               \u0027read_bytes_sec_period\u0027:"},{"line_number":167,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_read_bps_burst_seconds\u0027, \u0027default\u0027: 1},"},{"line_number":168,"context_line":"               \u0027write_bytes_sec_period\u0027:"},{"line_number":169,"context_line":"               {\u0027ceph_key\u0027: \u0027rbd_qos_write_bps_burst_seconds\u0027, \u0027default\u0027: 1}}"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"CEPH_QOS_SUPPORTED_VERSION \u003d 15"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"308ca5ea_51bd9608","line":169,"range":{"start_line":157,"start_character":0,"end_line":169,"end_character":77},"in_reply_to":"847aa4f9_3201e056","updated":"2022-07-27 09:40:20.000000000","message":"Review will be faster if you remove them.\n\nThe alternative is to add them as vendor capabilities reported to the scheduler and then look for them in the volume type extra specs when QoS is enabled.  This will be a bit more complex and will increase the review time.  This can be added in a future patch.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":549,"context_line":"        ioctx.close()"},{"line_number":550,"context_line":"        client.shutdown()"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def _ceph_qos_supported_version(self):"},{"line_number":553,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def _get_backup_snaps(self, rbd_image):"}],"source_content_type":"text/x-python","patch_set":8,"id":"e8686fb1_b0d725e2","line":552,"range":{"start_line":552,"start_character":8,"end_line":552,"end_character":35},"updated":"2022-07-05 11:22:23.000000000","message":"nit: We are in the ceph driver, we could rename the method to something simpler:\n\n  def _supports_qos(self):","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        ioctx.close()"},{"line_number":550,"context_line":"        client.shutdown()"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def _ceph_qos_supported_version(self):"},{"line_number":553,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def _get_backup_snaps(self, rbd_image):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5ac10073_0d14306e","line":552,"range":{"start_line":552,"start_character":8,"end_line":552,"end_character":35},"in_reply_to":"e8686fb1_b0d725e2","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":914,"context_line":"            LOG.debug(\u0027Unable to retrieve extra specs info\u0027)"},{"line_number":915,"context_line":"            return False"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _qos_specs_from_volume(self, context, volume_type):"},{"line_number":918,"context_line":"        if not volume_type:"},{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f9ee73c_7532274c","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":30},"updated":"2022-07-05 11:22:23.000000000","message":"-1: It\u0027s not from volume but from volume_type","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":914,"context_line":"            LOG.debug(\u0027Unable to retrieve extra specs info\u0027)"},{"line_number":915,"context_line":"            return False"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _qos_specs_from_volume(self, context, volume_type):"},{"line_number":918,"context_line":"        if not volume_type:"},{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1b2bde0f_7d639ff4","line":917,"range":{"start_line":917,"start_character":37,"end_line":917,"end_character":44},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Parameter not used.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            LOG.debug(\u0027Unable to retrieve extra specs info\u0027)"},{"line_number":915,"context_line":"            return False"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _qos_specs_from_volume(self, context, volume_type):"},{"line_number":918,"context_line":"        if not volume_type:"},{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"f4be8575_91dcf541","line":917,"range":{"start_line":917,"start_character":37,"end_line":917,"end_character":44},"in_reply_to":"1b2bde0f_7d639ff4","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            LOG.debug(\u0027Unable to retrieve extra specs info\u0027)"},{"line_number":915,"context_line":"            return False"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _qos_specs_from_volume(self, context, volume_type):"},{"line_number":918,"context_line":"        if not volume_type:"},{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fbff2b9_6927dd90","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":30},"in_reply_to":"9f9ee73c_7532274c","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"},{"line_number":921,"context_line":"        LOG.debug(\u0027qos_specs: %s\u0027, qos_specs)"},{"line_number":922,"context_line":"        if qos_specs and getattr(qos_specs, \u0027consumer\u0027, None) \u003d\u003d \u0027back-end\u0027:"},{"line_number":923,"context_line":"            return getattr(qos_specs, \u0027specs\u0027, None)"},{"line_number":924,"context_line":"        return None"},{"line_number":925,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"726edf5e_aec944e9","line":922,"range":{"start_line":922,"start_character":62,"end_line":922,"end_character":76},"updated":"2022-07-05 11:22:23.000000000","message":"-1: We also have to account for \"both\", and we should be able to do the getattr without checking if qos_specs is not None:\n\n   if getattr(qos_specs, \u0027consumer\u0027, None) in (\u0027back-end\u0027, \u0027both\u0027):","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":919,"context_line":"            return None"},{"line_number":920,"context_line":"        qos_specs \u003d getattr(volume_type, \u0027qos_specs\u0027, None)"},{"line_number":921,"context_line":"        LOG.debug(\u0027qos_specs: %s\u0027, qos_specs)"},{"line_number":922,"context_line":"        if qos_specs and getattr(qos_specs, \u0027consumer\u0027, None) \u003d\u003d \u0027back-end\u0027:"},{"line_number":923,"context_line":"            return getattr(qos_specs, \u0027specs\u0027, None)"},{"line_number":924,"context_line":"        return None"},{"line_number":925,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"c802d7a9_64a29b18","line":922,"range":{"start_line":922,"start_character":62,"end_line":922,"end_character":76},"in_reply_to":"726edf5e_aec944e9","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":933,"context_line":"            had_multiattach \u003d False"},{"line_number":934,"context_line":"            volume_type \u003d volume.volume_type"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        specs \u003d self._qos_specs_from_volume(volume.obj_context, volume_type)"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        if specs:"},{"line_number":939,"context_line":"            if self._ceph_qos_supported_version():"}],"source_content_type":"text/x-python","patch_set":8,"id":"7bb5550f_4520a1dd","line":936,"range":{"start_line":936,"start_character":44,"end_line":936,"end_character":62},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Parameter not used","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":933,"context_line":"            had_multiattach \u003d False"},{"line_number":934,"context_line":"            volume_type \u003d volume.volume_type"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        specs \u003d self._qos_specs_from_volume(volume.obj_context, volume_type)"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        if specs:"},{"line_number":939,"context_line":"            if self._ceph_qos_supported_version():"}],"source_content_type":"text/x-python","patch_set":8,"id":"cb366c04_92ad79cf","line":936,"range":{"start_line":936,"start_character":44,"end_line":936,"end_character":62},"in_reply_to":"7bb5550f_4520a1dd","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":1441,"context_line":"        \"\"\""},{"line_number":1442,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1443,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"}],"source_content_type":"text/x-python","patch_set":8,"id":"5758f9a8_e3e7284e","line":1444,"updated":"2022-07-05 11:22:23.000000000","message":"-1: I may be missing something, but I think the check from here, the one from L1446, and the specs diff should be checked at once:\n\n  if diff and diff.get(\u0027qos_specs\u0027) and self._ceph_qos_supported_version():","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":1441,"context_line":"        \"\"\""},{"line_number":1442,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1443,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"}],"source_content_type":"text/x-python","patch_set":8,"id":"dd48bcf0_94dc29c1","line":1444,"in_reply_to":"5758f9a8_e3e7284e","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":1442,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1443,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1448,"context_line":"                del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1b302b34_01959960","line":1445,"range":{"start_line":1445,"start_character":35,"end_line":1445,"end_character":57},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Naming things is always difficult, but I think it would be helpful to refer to volumes in the Ceph backend as \"images\"or \"rbd_images\" like we do in other parts of the driver:\n\n  existing_config \u003d self.get_image_qos(volume)","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1443,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1448,"context_line":"                del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"df99021d_aecd25bb","line":1445,"range":{"start_line":1445,"start_character":35,"end_line":1445,"end_character":57},"in_reply_to":"1b302b34_01959960","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1448,"context_line":"                del_qos_keys \u003d []"},{"line_number":1449,"context_line":"                for k, v in QOS_KEY_MAP.items():"},{"line_number":1450,"context_line":"                    qos_val \u003d specs.get(k, None)"},{"line_number":1451,"context_line":"                    vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1452,"context_line":"                    if not qos_val:"},{"line_number":1453,"context_line":"                        if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1454,"context_line":"                            del_qos_keys.append(k)"},{"line_number":1455,"context_line":"                        continue"},{"line_number":1456,"context_line":"                    if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1457,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1458,"context_line":"                self.delete_volume_backend_qos_keys(volume, del_qos_keys)"},{"line_number":1459,"context_line":"        return True, self._setup_volume(volume, new_type)"},{"line_number":1460,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"8c6cbb8d_14d0efa4","line":1457,"range":{"start_line":1447,"start_character":0,"end_line":1457,"end_character":46},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Why iterate through the larger list (all possible values) instead of the smaller one (the diff)?  I think this should be changed to iterate through the diff dict, and that should lead to a simpler code here.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1448,"context_line":"                del_qos_keys \u003d []"},{"line_number":1449,"context_line":"                for k, v in QOS_KEY_MAP.items():"},{"line_number":1450,"context_line":"                    qos_val \u003d specs.get(k, None)"},{"line_number":1451,"context_line":"                    vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1452,"context_line":"                    if not qos_val:"},{"line_number":1453,"context_line":"                        if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1454,"context_line":"                            del_qos_keys.append(k)"},{"line_number":1455,"context_line":"                        continue"},{"line_number":1456,"context_line":"                    if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1457,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1458,"context_line":"                self.delete_volume_backend_qos_keys(volume, del_qos_keys)"},{"line_number":1459,"context_line":"        return True, self._setup_volume(volume, new_type)"},{"line_number":1460,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1e19cc5c_32c47baa","line":1457,"range":{"start_line":1447,"start_character":0,"end_line":1457,"end_character":46},"in_reply_to":"6cbc60f5_7186ab15","updated":"2022-07-27 09:40:20.000000000","message":"That scenario doesn\u0027t seem to work with patchset #8 or #16.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"        if self._ceph_qos_supported_version():"},{"line_number":1445,"context_line":"            existing_config \u003d self.get_volume_backend_qos(volume)"},{"line_number":1446,"context_line":"            if diff:"},{"line_number":1447,"context_line":"                specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1448,"context_line":"                del_qos_keys \u003d []"},{"line_number":1449,"context_line":"                for k, v in QOS_KEY_MAP.items():"},{"line_number":1450,"context_line":"                    qos_val \u003d specs.get(k, None)"},{"line_number":1451,"context_line":"                    vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1452,"context_line":"                    if not qos_val:"},{"line_number":1453,"context_line":"                        if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1454,"context_line":"                            del_qos_keys.append(k)"},{"line_number":1455,"context_line":"                        continue"},{"line_number":1456,"context_line":"                    if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1457,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1458,"context_line":"                self.delete_volume_backend_qos_keys(volume, del_qos_keys)"},{"line_number":1459,"context_line":"        return True, self._setup_volume(volume, new_type)"},{"line_number":1460,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"6cbc60f5_7186ab15","line":1457,"range":{"start_line":1447,"start_character":0,"end_line":1457,"end_character":46},"in_reply_to":"8c6cbb8d_14d0efa4","updated":"2022-07-26 18:52:23.000000000","message":"I appreciate the feedback. Would the proposed amendments still work given the following scenario?\n\nvolume type a:\ntotal_iops_s \u003d 100\nconsumer \u003d backend\n \nvolume type b:\ntotal_iops_s \u003d 100\nconsumer \u003d frontend\n \nretype from a -\u003e b\ndiff \u003d qos_specs: (consumer(backend, frontend))","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":1455,"context_line":"                        continue"},{"line_number":1456,"context_line":"                    if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1457,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1458,"context_line":"                self.delete_volume_backend_qos_keys(volume, del_qos_keys)"},{"line_number":1459,"context_line":"        return True, self._setup_volume(volume, new_type)"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"    def _dumps(self, obj):"}],"source_content_type":"text/x-python","patch_set":8,"id":"c922b813_7ce83da2","line":1458,"range":{"start_line":1458,"start_character":21,"end_line":1458,"end_character":51},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Instead of volume_backend it\u0027s better to refer to it as \"image\" or \"rbd_image\"\n\n  delete_rbd_image_qos_keys","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":1455,"context_line":"                        continue"},{"line_number":1456,"context_line":"                    if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1457,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1458,"context_line":"                self.delete_volume_backend_qos_keys(volume, del_qos_keys)"},{"line_number":1459,"context_line":"        return True, self._setup_volume(volume, new_type)"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"    def _dumps(self, obj):"}],"source_content_type":"text/x-python","patch_set":8,"id":"f61c36bb_fba2614e","line":1458,"range":{"start_line":1458,"start_character":21,"end_line":1458,"end_character":51},"in_reply_to":"c922b813_7ce83da2","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2217,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2218,"context_line":"        return (volume, False)"},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"c9b3041d_520c7d77","line":2220,"range":{"start_line":2220,"start_character":8,"end_line":2220,"end_character":30},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Instead of volume_backend it\u0027s better to refer to it as \"image\" or \"rbd_image\"\n\n def get_rbd_image_qos(self, volume):","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2217,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2218,"context_line":"        return (volume, False)"},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"c423ea36_f3018eaa","line":2220,"range":{"start_line":2220,"start_character":8,"end_line":2220,"end_character":30},"in_reply_to":"c9b3041d_520c7d77","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2218,"context_line":"        return (volume, False)"},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"722d0878_9b7ec87a","line":2221,"updated":"2022-07-05 11:22:23.000000000","message":"nit: Not real gain using an intermediate variable, as we\u0027ll only reference it a second time if there is an exception, which should be the uncommon case.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2218,"context_line":"        return (volume, False)"},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"21c7cbbc_f190566e","line":2221,"in_reply_to":"722d0878_9b7ec87a","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"},{"line_number":2225,"context_line":"                           for k in volume.config_list()}"}],"source_content_type":"text/x-python","patch_set":8,"id":"dd2de6ff_7ad2644b","line":2222,"range":{"start_line":2222,"start_character":50,"end_line":2222,"end_character":56},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Please use image or rbd_image instead to avoid confussion","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"    def get_volume_backend_qos(self, volume):"},{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"},{"line_number":2225,"context_line":"                           for k in volume.config_list()}"}],"source_content_type":"text/x-python","patch_set":8,"id":"9dcc61c1_d42de053","line":2222,"range":{"start_line":2222,"start_character":50,"end_line":2222,"end_character":56},"in_reply_to":"dd2de6ff_7ad2644b","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"},{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""}],"source_content_type":"text/x-python","patch_set":8,"id":"6429fa6e_cce99958","line":2225,"range":{"start_line":2224,"start_character":0,"end_line":2225,"end_character":57},"updated":"2022-07-05 11:22:23.000000000","message":"-1: If \u0027name\u0027 or \u0027value\u0027 can be missing (as suggested by the usage of the get method) we would be generating some weird values, such as:\n\n {\n  None: \u0027value\u0027\n  \u0027name\u0027: None\n }","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2221,"context_line":"        volume_name \u003d volume.name"},{"line_number":2222,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2223,"context_line":"            try:"},{"line_number":2224,"context_line":"                current \u003d {k.get(\u0027name\u0027): k.get(\u0027value\u0027)"},{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""}],"source_content_type":"text/x-python","patch_set":8,"id":"d629a32e_f2c164e1","line":2225,"range":{"start_line":2224,"start_character":0,"end_line":2225,"end_character":57},"in_reply_to":"6429fa6e_cce99958","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""},{"line_number":2229,"context_line":"                                       \"%(volume_name)s, due to \""},{"line_number":2230,"context_line":"                                       \"%(error)s.\")"},{"line_number":2231,"context_line":"                                     % {\u0027vol_name\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"f8807d5c_77b0b351","line":2228,"range":{"start_line":2228,"start_character":16,"end_line":2228,"end_character":33},"updated":"2022-07-05 11:22:23.000000000","message":"nit: Can use a shorter name.  We usually use \"msg\"","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""},{"line_number":2229,"context_line":"                                       \"%(volume_name)s, due to \""},{"line_number":2230,"context_line":"                                       \"%(error)s.\")"},{"line_number":2231,"context_line":"                                     % {\u0027vol_name\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"40af2c4c_a5c1e263","line":2228,"range":{"start_line":2228,"start_character":68,"end_line":2228,"end_character":74},"updated":"2022-07-05 11:22:23.000000000","message":"nit: rbd image","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""},{"line_number":2229,"context_line":"                                       \"%(volume_name)s, due to \""},{"line_number":2230,"context_line":"                                       \"%(error)s.\")"},{"line_number":2231,"context_line":"                                     % {\u0027vol_name\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"350deacd_fea3187a","line":2228,"range":{"start_line":2228,"start_character":68,"end_line":2228,"end_character":74},"in_reply_to":"40af2c4c_a5c1e263","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"                           for k in volume.config_list()}"},{"line_number":2226,"context_line":"                return current"},{"line_number":2227,"context_line":"            except Exception as e:"},{"line_number":2228,"context_line":"                exception_message \u003d (_(\"Failed to get qos specs for volume \""},{"line_number":2229,"context_line":"                                       \"%(volume_name)s, due to \""},{"line_number":2230,"context_line":"                                       \"%(error)s.\")"},{"line_number":2231,"context_line":"                                     % {\u0027vol_name\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"85c091c6_7c95966d","line":2228,"range":{"start_line":2228,"start_character":16,"end_line":2228,"end_character":33},"in_reply_to":"f8807d5c_77b0b351","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2233,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2234,"context_line":"                    data\u003dexception_message)"},{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"}],"source_content_type":"text/x-python","patch_set":8,"id":"aadad12f_c83aa38f","line":2236,"updated":"2022-07-05 11:22:23.000000000","message":"-1: This is unreachable code because we raise an exception in the previous line.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2233,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2234,"context_line":"                    data\u003dexception_message)"},{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"}],"source_content_type":"text/x-python","patch_set":8,"id":"d0f7eb73_179f8c7f","line":2236,"in_reply_to":"aadad12f_c83aa38f","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2234,"context_line":"                    data\u003dexception_message)"},{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"}],"source_content_type":"text/x-python","patch_set":8,"id":"207053a9_76d3c0fa","line":2237,"range":{"start_line":2237,"start_character":8,"end_line":2237,"end_character":33},"updated":"2022-07-05 11:22:23.000000000","message":"-1: rbd_image","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2234,"context_line":"                    data\u003dexception_message)"},{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"}],"source_content_type":"text/x-python","patch_set":8,"id":"bb9580a8_52239453","line":2237,"range":{"start_line":2237,"start_character":8,"end_line":2237,"end_character":33},"in_reply_to":"207053a9_76d3c0fa","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2241,"context_line":"                if qos_key in QOS_KEY_MAP:"}],"source_content_type":"text/x-python","patch_set":8,"id":"495a0c8e_c1f7cf7b","line":2238,"updated":"2022-07-05 11:22:23.000000000","message":"nit: Not real gain using an intermediate variable, as the method only references it once.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2235,"context_line":"                return None"},{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2241,"context_line":"                if qos_key in QOS_KEY_MAP:"}],"source_content_type":"text/x-python","patch_set":8,"id":"432a8c55_7fced500","line":2238,"in_reply_to":"495a0c8e_c1f7cf7b","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2241,"context_line":"                if qos_key in QOS_KEY_MAP:"},{"line_number":2242,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"2136d097_ad73ffc2","line":2239,"range":{"start_line":2239,"start_character":50,"end_line":2239,"end_character":56},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Please use image or rbd_image instead to avoid confussion","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2236,"context_line":""},{"line_number":2237,"context_line":"    def update_volume_backend_qos(self, volume, qos_specs):"},{"line_number":2238,"context_line":"        volume_name \u003d volume.name"},{"line_number":2239,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2240,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2241,"context_line":"                if qos_key in QOS_KEY_MAP:"},{"line_number":2242,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"8652dc61_c71f2077","line":2239,"range":{"start_line":2239,"start_character":50,"end_line":2239,"end_character":56},"in_reply_to":"2136d097_ad73ffc2","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2247,"context_line":"                                                     \u0027qos_value\u0027: qos_val})"},{"line_number":2248,"context_line":"                    except Exception as e:"},{"line_number":2249,"context_line":"                        exception_message \u003d (_(\"Failed to set qos spec \""},{"line_number":2250,"context_line":"                                               \"%(qos_key)s, due to \""},{"line_number":2251,"context_line":"                                               \"%(error)s.\")"},{"line_number":2252,"context_line":"                                             % {\u0027qos_key\u0027: qos_key,"},{"line_number":2253,"context_line":"                                                \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":8,"id":"48991c9c_44a3a84d","line":2250,"updated":"2022-07-05 11:22:23.000000000","message":"?: Why do we mention the image name on method get_volume_backend_qos but not here?","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2247,"context_line":"                                                     \u0027qos_value\u0027: qos_val})"},{"line_number":2248,"context_line":"                    except Exception as e:"},{"line_number":2249,"context_line":"                        exception_message \u003d (_(\"Failed to set qos spec \""},{"line_number":2250,"context_line":"                                               \"%(qos_key)s, due to \""},{"line_number":2251,"context_line":"                                               \"%(error)s.\")"},{"line_number":2252,"context_line":"                                             % {\u0027qos_key\u0027: qos_key,"},{"line_number":2253,"context_line":"                                                \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":8,"id":"b9a48223_8b14362a","line":2250,"in_reply_to":"48991c9c_44a3a84d","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2254,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"}],"source_content_type":"text/x-python","patch_set":8,"id":"83455580_6629b33c","line":2257,"range":{"start_line":2257,"start_character":53,"end_line":2257,"end_character":62},"updated":"2022-07-05 11:22:23.000000000","message":"-1: The name is wrong, as these are not qos_specs but qos_keys","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2254,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"}],"source_content_type":"text/x-python","patch_set":8,"id":"296fdaa7_1737e483","line":2257,"updated":"2022-07-05 11:22:23.000000000","message":"-1: rbd_image","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2254,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"}],"source_content_type":"text/x-python","patch_set":8,"id":"beb11f39_6b84621b","line":2257,"in_reply_to":"296fdaa7_1737e483","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2254,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"}],"source_content_type":"text/x-python","patch_set":8,"id":"14f3ecce_5cd0c82f","line":2257,"range":{"start_line":2257,"start_character":53,"end_line":2257,"end_character":62},"in_reply_to":"83455580_6629b33c","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"},{"line_number":2261,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"c831a9af_05b0053b","line":2258,"updated":"2022-07-05 11:22:23.000000000","message":"nit: Not real gain using an intermediate variable, as the method only references it once.","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2255,"context_line":"                            data\u003dexception_message)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"},{"line_number":2261,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"26ea4fb7_029345e6","line":2258,"in_reply_to":"c831a9af_05b0053b","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"},{"line_number":2261,"context_line":"                try:"},{"line_number":2262,"context_line":"                    volume.config_remove(QOS_KEY_MAP[key][\u0027ceph_key\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"197bdcba_a157b22c","line":2259,"range":{"start_line":2259,"start_character":50,"end_line":2259,"end_character":56},"updated":"2022-07-05 11:22:23.000000000","message":"-1: Please use image or rbd_image instead to avoid confussion","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def delete_volume_backend_qos_keys(self, volume, qos_specs):"},{"line_number":2258,"context_line":"        volume_name \u003d volume.name"},{"line_number":2259,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":2260,"context_line":"            for key in qos_specs:"},{"line_number":2261,"context_line":"                try:"},{"line_number":2262,"context_line":"                    volume.config_remove(QOS_KEY_MAP[key][\u0027ceph_key\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"54ff1040_3322c6da","line":2259,"range":{"start_line":2259,"start_character":50,"end_line":2259,"end_character":56},"in_reply_to":"197bdcba_a157b22c","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8b4650d292da13494b1d6de1ef041b051b72612c","unresolved":true,"context_lines":[{"line_number":2265,"context_line":"                              {\u0027qos_key\u0027: key})"},{"line_number":2266,"context_line":"                except Exception as e:"},{"line_number":2267,"context_line":"                    exception_message \u003d (_(\"Failed to delete qos spec \""},{"line_number":2268,"context_line":"                                           \"%(qos_key)s, due to \""},{"line_number":2269,"context_line":"                                           \"%(error)s.\")"},{"line_number":2270,"context_line":"                                         % {\u0027qos_key\u0027: key,"},{"line_number":2271,"context_line":"                                            \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9b74f786_41a21687","line":2268,"updated":"2022-07-05 11:22:23.000000000","message":"?: Why do we mention the image name on method get_volume_backend_qos but not here?","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"7fb17df8447dfb32c7dcc48445a0ad482ac9dff9","unresolved":false,"context_lines":[{"line_number":2265,"context_line":"                              {\u0027qos_key\u0027: key})"},{"line_number":2266,"context_line":"                except Exception as e:"},{"line_number":2267,"context_line":"                    exception_message \u003d (_(\"Failed to delete qos spec \""},{"line_number":2268,"context_line":"                                           \"%(qos_key)s, due to \""},{"line_number":2269,"context_line":"                                           \"%(error)s.\")"},{"line_number":2270,"context_line":"                                         % {\u0027qos_key\u0027: key,"},{"line_number":2271,"context_line":"                                            \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":8,"id":"0643a104_a5118c48","line":2268,"in_reply_to":"9b74f786_41a21687","updated":"2022-07-26 18:52:23.000000000","message":"Done","commit_id":"6bd33ae94975e07e9d73de834fa5c5ed66900248"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":594,"context_line":"        client.shutdown()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def _supports_qos(self):"},{"line_number":597,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    @staticmethod"},{"line_number":600,"context_line":"    def _get_backup_snaps(rbd_image) -\u003e list:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a667af7_ecb6080d","line":597,"updated":"2022-07-27 09:40:20.000000000","message":"nit: In a future patch we may cache this value and only refresh it every N minutes, or every N reads, since this is not something that changes frequently.","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":true,"context_lines":[{"line_number":594,"context_line":"        client.shutdown()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def _supports_qos(self):"},{"line_number":597,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    @staticmethod"},{"line_number":600,"context_line":"    def _get_backup_snaps(rbd_image) -\u003e list:"}],"source_content_type":"text/x-python","patch_set":16,"id":"eb8cb951_3d1cca88","line":597,"in_reply_to":"7a667af7_ecb6080d","updated":"2022-08-18 08:08:44.000000000","message":"I am a bit unclear on what you would like me to do; could you please elaborate?","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        client.shutdown()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def _supports_qos(self):"},{"line_number":597,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    @staticmethod"},{"line_number":600,"context_line":"    def _get_backup_snaps(rbd_image) -\u003e list:"}],"source_content_type":"text/x-python","patch_set":16,"id":"01d9a602_d7620180","line":597,"in_reply_to":"bdbdea95_8197f8a5","updated":"2022-08-31 23:50:27.000000000","message":"Ack","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":594,"context_line":"        client.shutdown()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def _supports_qos(self):"},{"line_number":597,"context_line":"        return self.RBDProxy().version()[1] \u003e\u003d CEPH_QOS_SUPPORTED_VERSION"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    @staticmethod"},{"line_number":600,"context_line":"    def _get_backup_snaps(rbd_image) -\u003e list:"}],"source_content_type":"text/x-python","patch_set":16,"id":"bdbdea95_8197f8a5","line":597,"in_reply_to":"eb8cb951_3d1cca88","updated":"2022-08-22 16:35:19.000000000","message":"A ceph cluster is unlikely to suddenly change this value from supporting QoS to not supporting it.\n\nThis means that we can cache the value and only make a request every hour or something like that.\n\nThis is NOT required for this patch, this is a possible future improvement.","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":730,"context_line":"            \u0027max_over_subscription_ratio\u0027: ("},{"line_number":731,"context_line":"                self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)),"},{"line_number":732,"context_line":"            \u0027location_info\u0027: location_info,"},{"line_number":733,"context_line":"            \u0027backend_state\u0027: \u0027down\u0027"},{"line_number":734,"context_line":"        }"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"8b5daa24_efbf5733","line":733,"updated":"2022-07-27 09:40:20.000000000","message":"-1: We need to report that the driver supports QoS\n\n           \u0027backend_state\u0027: \u0027down\u0027,\n           \u0027QoS_support\u0027: self._supports_qos(),\n       }","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            \u0027max_over_subscription_ratio\u0027: ("},{"line_number":731,"context_line":"                self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)),"},{"line_number":732,"context_line":"            \u0027location_info\u0027: location_info,"},{"line_number":733,"context_line":"            \u0027backend_state\u0027: \u0027down\u0027"},{"line_number":734,"context_line":"        }"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"26f05a1f_34b4a52d","line":733,"in_reply_to":"8b5daa24_efbf5733","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            \u0027max_over_subscription_ratio\u0027: ("},{"line_number":731,"context_line":"                self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)),"},{"line_number":732,"context_line":"            \u0027location_info\u0027: location_info,"},{"line_number":733,"context_line":"            \u0027backend_state\u0027: \u0027down\u0027"},{"line_number":734,"context_line":"        }"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5904ffc9_c8923676","line":733,"in_reply_to":"8b5daa24_efbf5733","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":1519,"context_line":"                \u0027encryption\u0027: {},"},{"line_number":1520,"context_line":"                \u0027extra_specs\u0027: {},"},{"line_number":1521,"context_line":"                \u0027qos_specs\u0027: {\u0027consumer\u0027: (u\u0027front-end\u0027, u\u0027back-end\u0027),"},{"line_number":1522,"context_line":"                              \u0027created_at\u0027: (datetime.datetime(...),"},{"line_number":1523,"context_line":"                                             datetime.datetime(...)),"},{"line_number":1524,"context_line":"                              u\u0027total_bytes_sec\u0027: (None, u\u00272048000\u0027),"},{"line_number":1525,"context_line":"                              u\u0027total_iops_sec\u0027: (u\u0027200\u0027, None)"},{"line_number":1526,"context_line":"                              {...}}"}],"source_content_type":"text/x-python","patch_set":16,"id":"277f7508_fd7e1ca9","line":1523,"range":{"start_line":1522,"start_character":30,"end_line":1523,"end_character":69},"updated":"2022-07-27 09:40:20.000000000","message":"-1: I believe this is incorrect, and the \u0027created_at\u0027 key will not be present.  If created_at is present, then we have a bug, because it\u0027s part of the keys to ignore:  https://github.com/openstack/cinder/blob/2790c631d0a82a694f3a14adf585ca8b890301ce/cinder/volume/volume_types.py#L44","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1519,"context_line":"                \u0027encryption\u0027: {},"},{"line_number":1520,"context_line":"                \u0027extra_specs\u0027: {},"},{"line_number":1521,"context_line":"                \u0027qos_specs\u0027: {\u0027consumer\u0027: (u\u0027front-end\u0027, u\u0027back-end\u0027),"},{"line_number":1522,"context_line":"                              \u0027created_at\u0027: (datetime.datetime(...),"},{"line_number":1523,"context_line":"                                             datetime.datetime(...)),"},{"line_number":1524,"context_line":"                              u\u0027total_bytes_sec\u0027: (None, u\u00272048000\u0027),"},{"line_number":1525,"context_line":"                              u\u0027total_iops_sec\u0027: (u\u0027200\u0027, None)"},{"line_number":1526,"context_line":"                              {...}}"}],"source_content_type":"text/x-python","patch_set":16,"id":"39267825_05ac86b1","line":1523,"range":{"start_line":1522,"start_character":30,"end_line":1523,"end_character":69},"in_reply_to":"277f7508_fd7e1ca9","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":1519,"context_line":"                \u0027encryption\u0027: {},"},{"line_number":1520,"context_line":"                \u0027extra_specs\u0027: {},"},{"line_number":1521,"context_line":"                \u0027qos_specs\u0027: {\u0027consumer\u0027: (u\u0027front-end\u0027, u\u0027back-end\u0027),"},{"line_number":1522,"context_line":"                              \u0027created_at\u0027: (datetime.datetime(...),"},{"line_number":1523,"context_line":"                                             datetime.datetime(...)),"},{"line_number":1524,"context_line":"                              u\u0027total_bytes_sec\u0027: (None, u\u00272048000\u0027),"},{"line_number":1525,"context_line":"                              u\u0027total_iops_sec\u0027: (u\u0027200\u0027, None)"},{"line_number":1526,"context_line":"                              {...}}"}],"source_content_type":"text/x-python","patch_set":16,"id":"7080864f_b779e52b","line":1523,"range":{"start_line":1522,"start_character":30,"end_line":1523,"end_character":69},"in_reply_to":"277f7508_fd7e1ca9","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":1528,"context_line":"        \"\"\""},{"line_number":1529,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"e41aacad_1b295e33","line":1531,"updated":"2022-07-27 09:40:20.000000000","message":"nit: It would be a good idea to add a comment on why this code here is only deleting keys and not adding them (because they are added in _setup_volume).","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":1528,"context_line":"        \"\"\""},{"line_number":1529,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"1b844a73_d21f5c03","line":1531,"in_reply_to":"e41aacad_1b295e33","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1528,"context_line":"        \"\"\""},{"line_number":1529,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"a9c7a36e_cac6eee8","line":1531,"in_reply_to":"e41aacad_1b295e33","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"},{"line_number":1535,"context_line":"            for k, v in QOS_KEY_MAP.items():"},{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"c0f60548_a3ec4e00","line":1533,"updated":"2022-07-27 09:40:20.000000000","message":"-1: Like you mentioned on patchset #8 this will not behave as expected when changing the consumer from back-end/both to front-end QoS.\n\nIn that scenario it should remove all existing QoS keys from the rbd image.","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"},{"line_number":1535,"context_line":"            for k, v in QOS_KEY_MAP.items():"},{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f45ce6a_6fc1c1fb","line":1533,"in_reply_to":"c0f60548_a3ec4e00","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"        # the `consumer` parameter, whether or not there is a difference."},{"line_number":1531,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1532,"context_line":"            existing_config \u003d self.get_rbd_image_qos(volume)"},{"line_number":1533,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1534,"context_line":"            del_qos_keys \u003d []"},{"line_number":1535,"context_line":"            for k, v in QOS_KEY_MAP.items():"},{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9dc4d5fb_fca51f9f","line":1533,"in_reply_to":"c0f60548_a3ec4e00","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"},{"line_number":1537,"context_line":"                vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1538,"context_line":"                if not qos_val:"},{"line_number":1539,"context_line":"                    if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1540,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1541,"context_line":"                    continue"},{"line_number":1542,"context_line":"                if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ca198cf4_c7844b91","line":1539,"range":{"start_line":1539,"start_character":31,"end_line":1539,"end_character":32},"updated":"2022-07-27 09:40:20.000000000","message":"nit: I believe it would be better to use !\u003d","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"},{"line_number":1537,"context_line":"                vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1538,"context_line":"                if not qos_val:"},{"line_number":1539,"context_line":"                    if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1540,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1541,"context_line":"                    continue"},{"line_number":1542,"context_line":"                if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"af092bb5_2270e884","line":1539,"range":{"start_line":1539,"start_character":31,"end_line":1539,"end_character":32},"in_reply_to":"ca198cf4_c7844b91","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"                qos_val \u003d specs.get(k, None)"},{"line_number":1537,"context_line":"                vol_val \u003d int(existing_config.get(v[\u0027ceph_key\u0027]))"},{"line_number":1538,"context_line":"                if not qos_val:"},{"line_number":1539,"context_line":"                    if vol_val \u003e v[\u0027default\u0027]:"},{"line_number":1540,"context_line":"                        del_qos_keys.append(k)"},{"line_number":1541,"context_line":"                    continue"},{"line_number":1542,"context_line":"                if qos_val[1] is None and vol_val \u003e v[\u0027default\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"bfae8162_c8634f3f","line":1539,"range":{"start_line":1539,"start_character":31,"end_line":1539,"end_character":32},"in_reply_to":"ca198cf4_c7844b91","updated":"2022-08-11 11:03:49.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":2388,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2389,"context_line":"        return (volume, False)"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"    def get_rbd_image_qos(self, volume):"},{"line_number":2392,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2393,"context_line":"            try:"},{"line_number":2394,"context_line":"                current \u003d {k[\u0027name\u0027]: k[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"eab3e4ea_58f11a84","line":2391,"updated":"2022-07-27 09:40:20.000000000","message":"nit: What about adding a retry decorator to the get, update, and delete qos methods in case of a spurious error?","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":2388,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2389,"context_line":"        return (volume, False)"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"    def get_rbd_image_qos(self, volume):"},{"line_number":2392,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2393,"context_line":"            try:"},{"line_number":2394,"context_line":"                current \u003d {k[\u0027name\u0027]: k[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"36a51987_90bd1f82","line":2391,"in_reply_to":"eab3e4ea_58f11a84","updated":"2022-08-18 08:08:44.000000000","message":"Please double check","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee0f73fdca7dc63db2dad4dfd298f705667309a","unresolved":true,"context_lines":[{"line_number":2406,"context_line":"    def update_rbd_image_qos(self, volume, qos_specs):"},{"line_number":2407,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2408,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2409,"context_line":"                if qos_key in QOS_KEY_MAP:"},{"line_number":2410,"context_line":"                    try:"},{"line_number":2411,"context_line":"                        rbd_image.config_set(QOS_KEY_MAP[qos_key][\u0027ceph_key\u0027],"},{"line_number":2412,"context_line":"                                             str(qos_val))"}],"source_content_type":"text/x-python","patch_set":16,"id":"4e54e576_9b6d0126","line":2409,"range":{"start_line":2409,"start_character":16,"end_line":2409,"end_character":42},"updated":"2022-07-27 09:40:20.000000000","message":"nit: We should warn when a requested key doesn\u0027t exist.","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"    def update_rbd_image_qos(self, volume, qos_specs):"},{"line_number":2407,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2408,"context_line":"            for qos_key, qos_val in qos_specs.items():"},{"line_number":2409,"context_line":"                if qos_key in QOS_KEY_MAP:"},{"line_number":2410,"context_line":"                    try:"},{"line_number":2411,"context_line":"                        rbd_image.config_set(QOS_KEY_MAP[qos_key][\u0027ceph_key\u0027],"},{"line_number":2412,"context_line":"                                             str(qos_val))"}],"source_content_type":"text/x-python","patch_set":16,"id":"b4ce90d0_9299a472","line":2409,"range":{"start_line":2409,"start_character":16,"end_line":2409,"end_character":42},"in_reply_to":"4e54e576_9b6d0126","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"d95444a4a75ea836eede0315ca4265a298269680"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":true,"context_lines":[{"line_number":1539,"context_line":"        \"\"\""},{"line_number":1540,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1541,"context_line":"        # the `consumer` parameter, whether or not there is a difference.]"},{"line_number":1542,"context_line":"        # It is also worth noting that the retype functions only performs the "},{"line_number":1543,"context_line":"        # delete operation on keys."},{"line_number":1544,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"529c5ca7_a657f67d","line":1543,"range":{"start_line":1542,"start_character":0,"end_line":1543,"end_character":35},"updated":"2022-08-11 11:03:49.000000000","message":"nit: You don\u0027t mention why it only removes them...\n\n    # Remove qos keys present in RBD image that are no longer in cinder qos \n    # spec, new keys are added in _setup_volume.","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1539,"context_line":"        \"\"\""},{"line_number":1540,"context_line":"        # NOTE(rogeryu): If `diff` contains `qos_specs`, `qos_spec` must have"},{"line_number":1541,"context_line":"        # the `consumer` parameter, whether or not there is a difference.]"},{"line_number":1542,"context_line":"        # It is also worth noting that the retype functions only performs the "},{"line_number":1543,"context_line":"        # delete operation on keys."},{"line_number":1544,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"51d53c5c_618754e3","line":1543,"range":{"start_line":1542,"start_character":0,"end_line":1543,"end_character":35},"in_reply_to":"529c5ca7_a657f67d","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":true,"context_lines":[{"line_number":1544,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"},{"line_number":1547,"context_line":"            if specs.get(\u0027consumer\u0027) and (specs[\u0027consumer\u0027][0] \u003d\u003d \u0027both\u0027 or specs[\u0027consumer\u0027][1] \u003d\u003d \u0027front-end\u0027):"},{"line_number":1548,"context_line":"                del_qos_keys.extend(list(specs.keys()))"},{"line_number":1549,"context_line":"                del_qos_keys.remove(\u0027consumer\u0027)"},{"line_number":1550,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9e287fa5_d081e9ef","line":1547,"range":{"start_line":1547,"start_character":41,"end_line":1547,"end_character":113},"updated":"2022-08-11 11:03:49.000000000","message":"-1: I don\u0027t think this is correct, though I could be wrong, because if we change from \u0027both\u0027 to \u0027back-end\u0027 then we shouldn\u0027t clear them all, right?  It\u0027s only for the case where we change to front-end.\n\n            if specs.get(\u0027consumer\u0027) and specs[\u0027consumer\u0027][1] \u003d\u003d \u0027front-end\u0027:","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1544,"context_line":"        if diff and diff.get(\u0027qos_specs\u0027) and self._supports_qos():"},{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"},{"line_number":1547,"context_line":"            if specs.get(\u0027consumer\u0027) and (specs[\u0027consumer\u0027][0] \u003d\u003d \u0027both\u0027 or specs[\u0027consumer\u0027][1] \u003d\u003d \u0027front-end\u0027):"},{"line_number":1548,"context_line":"                del_qos_keys.extend(list(specs.keys()))"},{"line_number":1549,"context_line":"                del_qos_keys.remove(\u0027consumer\u0027)"},{"line_number":1550,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"fe668305_66c9c144","line":1547,"range":{"start_line":1547,"start_character":41,"end_line":1547,"end_character":113},"in_reply_to":"9e287fa5_d081e9ef","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":true,"context_lines":[{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"},{"line_number":1547,"context_line":"            if specs.get(\u0027consumer\u0027) and (specs[\u0027consumer\u0027][0] \u003d\u003d \u0027both\u0027 or specs[\u0027consumer\u0027][1] \u003d\u003d \u0027front-end\u0027):"},{"line_number":1548,"context_line":"                del_qos_keys.extend(list(specs.keys()))"},{"line_number":1549,"context_line":"                del_qos_keys.remove(\u0027consumer\u0027)"},{"line_number":1550,"context_line":"            else:"},{"line_number":1551,"context_line":"                existing_config \u003d self.get_rbd_image_qos(volume)"}],"source_content_type":"text/x-python","patch_set":17,"id":"791fd57a_75ee1ef3","line":1548,"updated":"2022-08-11 11:03:49.000000000","message":"nit:  Move L1546 to L1551 and then just sel del_qos_keys here instead of extending\n\n                del_qos_keys \u003d list(specs.keys())\n                del_qos_keys.remove(\u0027consumer\u0027)\n            else:\n                del_qos_keys \u003d []\n                existing_config \u003d self.get_rbd_image_qos(volume)","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"            specs \u003d diff.get(\u0027qos_specs\u0027, {})"},{"line_number":1546,"context_line":"            del_qos_keys \u003d []"},{"line_number":1547,"context_line":"            if specs.get(\u0027consumer\u0027) and (specs[\u0027consumer\u0027][0] \u003d\u003d \u0027both\u0027 or specs[\u0027consumer\u0027][1] \u003d\u003d \u0027front-end\u0027):"},{"line_number":1548,"context_line":"                del_qos_keys.extend(list(specs.keys()))"},{"line_number":1549,"context_line":"                del_qos_keys.remove(\u0027consumer\u0027)"},{"line_number":1550,"context_line":"            else:"},{"line_number":1551,"context_line":"                existing_config \u003d self.get_rbd_image_qos(volume)"}],"source_content_type":"text/x-python","patch_set":17,"id":"a320972f_f39a665b","line":1548,"in_reply_to":"791fd57a_75ee1ef3","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f7f3b57533562d995ba48a9f934a085c8ccb27b","unresolved":true,"context_lines":[{"line_number":2440,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2441,"context_line":"                            data\u003dmsg)"},{"line_number":2442,"context_line":"                else:"},{"line_number":2443,"context_line":"                    LOG.debug(\u0027qos_specs: the requested qos key\u0027 "},{"line_number":2444,"context_line":"                              \u0027%(qos_key)s does not exist\u0027,"},{"line_number":2445,"context_line":"                              {\u0027qos_key\u0027: qos_key,"},{"line_number":2446,"context_line":"                               \u0027qos_value\u0027: qos_val})"}],"source_content_type":"text/x-python","patch_set":17,"id":"2babc761_9c9a08fb","line":2443,"range":{"start_line":2443,"start_character":24,"end_line":2443,"end_character":29},"updated":"2022-08-11 11:03:49.000000000","message":"nit: Maybe use warning?","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"091b6420ce193026b25d99bb1cf072c6649a4d12","unresolved":false,"context_lines":[{"line_number":2440,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":2441,"context_line":"                            data\u003dmsg)"},{"line_number":2442,"context_line":"                else:"},{"line_number":2443,"context_line":"                    LOG.debug(\u0027qos_specs: the requested qos key\u0027 "},{"line_number":2444,"context_line":"                              \u0027%(qos_key)s does not exist\u0027,"},{"line_number":2445,"context_line":"                              {\u0027qos_key\u0027: qos_key,"},{"line_number":2446,"context_line":"                               \u0027qos_value\u0027: qos_val})"}],"source_content_type":"text/x-python","patch_set":17,"id":"d273dd3e_573ce22e","line":2443,"range":{"start_line":2443,"start_character":24,"end_line":2443,"end_character":29},"in_reply_to":"2babc761_9c9a08fb","updated":"2022-08-18 08:08:44.000000000","message":"Done","commit_id":"19a1437801ca15e1ac848b312ad362759a6071e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":2407,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2408,"context_line":"        return (volume, False)"},{"line_number":2409,"context_line":""},{"line_number":2410,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2411,"context_line":"    def get_rbd_image_qos(self, volume):"},{"line_number":2412,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2413,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ccf92db6_3ae4dc33","line":2410,"updated":"2022-08-22 16:35:19.000000000","message":"-1: We can never raise this exception here, it will be exception.VolumeBackendAPIException if config_list fails (as per L2423) or any other exception that is raised by the RBDVolumeProxy on initialization.\n\nIf we move the try ... except to the whole method, then we can just retry on VolumeBackendAPIException:\n\n  try:\n     with RBDVolumeProxy\n        ...\n  except ...\n      raise exception.VolumeBackendAPIException(...","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"        volume \u003d objects.Volume.get_by_id(context, backup.volume_id)"},{"line_number":2408,"context_line":"        return (volume, False)"},{"line_number":2409,"context_line":""},{"line_number":2410,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2411,"context_line":"    def get_rbd_image_qos(self, volume):"},{"line_number":2412,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2413,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"154405bd_3a0ee431","line":2410,"in_reply_to":"ccf92db6_3ae4dc33","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":2423,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2424,"context_line":"                    data\u003dmsg)"},{"line_number":2425,"context_line":""},{"line_number":2426,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2427,"context_line":"    def update_rbd_image_qos(self, volume, qos_specs):"},{"line_number":2428,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2429,"context_line":"            for qos_key, qos_val in qos_specs.items():"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f1b1c60_149c714e","line":2426,"updated":"2022-08-22 16:35:19.000000000","message":"-1: ditto","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":2423,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2424,"context_line":"                    data\u003dmsg)"},{"line_number":2425,"context_line":""},{"line_number":2426,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2427,"context_line":"    def update_rbd_image_qos(self, volume, qos_specs):"},{"line_number":2428,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2429,"context_line":"            for qos_key, qos_val in qos_specs.items():"}],"source_content_type":"text/x-python","patch_set":20,"id":"6f80bc56_1b90ea17","line":2426,"in_reply_to":"9f1b1c60_149c714e","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"10334b0e7ad998f74ad8d4858736338cc46c632f","unresolved":true,"context_lines":[{"line_number":2449,"context_line":"                                {\u0027qos_key\u0027: qos_key,"},{"line_number":2450,"context_line":"                                 \u0027qos_value\u0027: qos_val})"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2453,"context_line":"    def delete_rbd_image_qos_keys(self, volume, qos_keys):"},{"line_number":2454,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2455,"context_line":"            for key in qos_keys:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba29b7c0_c0777cb2","line":2452,"updated":"2022-08-22 16:35:19.000000000","message":"-1: ditto","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"2e2d012154a6cb3d9109feed55ad21abd357fe39","unresolved":false,"context_lines":[{"line_number":2449,"context_line":"                                {\u0027qos_key\u0027: qos_key,"},{"line_number":2450,"context_line":"                                 \u0027qos_value\u0027: qos_val})"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"    @utils.retry(putils.ProcessExecutionError)"},{"line_number":2453,"context_line":"    def delete_rbd_image_qos_keys(self, volume, qos_keys):"},{"line_number":2454,"context_line":"        with RBDVolumeProxy(self, volume.name) as rbd_image:"},{"line_number":2455,"context_line":"            for key in qos_keys:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fe19656_0b007172","line":2452,"in_reply_to":"ba29b7c0_c0777cb2","updated":"2022-08-31 23:50:27.000000000","message":"Done","commit_id":"fd10f3fe8178f47d2c3afbf89b933f43b73040a2"}],"releasenotes/notes/rbd-backend-qos-implementation-0e141b742e277d26.yaml":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3720ade1e8c62fa9aae7811bfb383eafb1afdded","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    RBD driver: Added support for injecting QoS metadata into ceph when creating a volume."},{"line_number":5,"context_line":"                Added support for updating QoS parameters when retype operation is performed."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"62e79344_86179369","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":93},"updated":"2022-09-08 12:10:47.000000000","message":"nit: I think it looks better to just say that QoS support has been added.","commit_id":"f107dbf2d779301893e33063c1591180f6f158aa"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"b55c7d9f263fb73153dfe11ae63e8010542e1f0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    RBD driver: Added support for injecting QoS metadata into ceph when creating a volume."},{"line_number":5,"context_line":"                Added support for updating QoS parameters when retype operation is performed."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"5fbc5496_408417c5","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":93},"in_reply_to":"62e79344_86179369","updated":"2022-09-08 13:01:01.000000000","message":"Done","commit_id":"f107dbf2d779301893e33063c1591180f6f158aa"},{"author":{"_account_id":35041,"name":"Sergey Drozdov","email":"sergey.drozdov.dev@gmail.com","username":"drozdov"},"change_message_id":"b55c7d9f263fb73153dfe11ae63e8010542e1f0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    RBD driver: Added support for injecting QoS metadata into ceph when creating a volume."},{"line_number":5,"context_line":"                Added support for updating QoS parameters when retype operation is performed."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"892127d1_e055f9bd","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":93},"in_reply_to":"62e79344_86179369","updated":"2022-09-08 13:01:01.000000000","message":"Done","commit_id":"f107dbf2d779301893e33063c1591180f6f158aa"}]}
