)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a49842e_02a8b2b0","updated":"2021-12-01 11:24:43.000000000","message":"Rajat, thanks for the review, I\u0027m updating it with improvements based on your comments.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b2d1124b_e768ac92","updated":"2021-12-01 05:42:31.000000000","message":"Thanks for putting this together Gorka.\nI\u0027m only halfway through reviewing but thought of leaving comments since it\u0027s not a compact 200-300 line spec and it might take me time to review the other half. Comments inline.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7507238c_40d6686e","updated":"2021-12-07 17:17:19.000000000","message":"Rajat, thanks for the review.\nYour patch seems to be in merge conflict, and there is one concern from Brian that I think needs to be addressed (I have added my opinion there).\nI have updated the spec and added a couple of things that were missing. ","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bc0b3e47_2799a8e7","updated":"2021-12-06 16:36:55.000000000","message":"Took long but I\u0027ve completed reviewing the second half of the spec (what a relief!). Some comments inline.\nAlso I\u0027ve a quota patch to work out the project validation which seems to be restricted by a pep8 failure in a dependent patch. If you would like work on it and add it to the effort then would be great.\nhttps://review.opendev.org/c/openstack/cinder/+/784763","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"33ea6197_9c0e2290","in_reply_to":"7507238c_40d6686e","updated":"2021-12-09 07:35:52.000000000","message":"Yes, i had replied to that comment but before resolving merge conflict, just wanted to know about the way forward. I will update that patch as per your recommendation and resolve merge conflict, thanks.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8432556a_d3b1e0d5","updated":"2021-12-09 07:35:52.000000000","message":"Thanks Gorka. My comments are addressed although there seems to be a gate failure that needs to be addressed with the new text added. adding -1 for bringing attention to the failure.","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9916b639a4d85a491d6038726b98dbc6d73adf59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8d5dc494_c8394041","updated":"2021-12-07 21:19:25.000000000","message":"recheck","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"96953be4e401c767c84c349ba8573731dfaf2e29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e157bd0e_233ddc8d","updated":"2021-12-09 11:47:26.000000000","message":"All my comments are addressed, Thanks Gorka. LGTM!","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"feae03564c044eabcc53d60e94c34e5215dd88e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0c39702e_525aff2a","updated":"2022-03-03 17:38:34.000000000","message":"Needs to move to Zed","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b6fc06b81bb76f417f25dbb05de8adcf42151e68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cee162f0_4c8a8388","updated":"2021-12-14 09:34:57.000000000","message":"Please don\u0027t merge.\nI have done some performance testing on 4 operations (create volume, get defaults, quota show, and quota usage) to compare the current code with the new one, and the quota usage operation seems to be greatly impacted when there\u0027s a high number of volumes (tried with 40K), so I want to dig a bit more on this (in case this is a real issue and not something I missed like missing indexes) before we merge this spec.","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e65912cb683de9f976eefc83bda09eaf347553bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b6e36db0_33c4d892","updated":"2021-12-21 14:28:26.000000000","message":"Upgrading to a +2 as my question was satisfactorily addressed.  Waiting anxiously to hear the results of Gorka\u0027s performance testing!","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"046f79e8b50ef058d41862991d36f577f9b30a8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"555122c0_cf6c365c","updated":"2021-12-11 19:30:08.000000000","message":"Wow, what a spec!  The WIP patch was very helpful in following the discussion.\n\nI\u0027ve got one question inline, but otherwise, this is very thorough and makes a lot of sense, and will really improve our quota system.","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b7e0d605_3675470c","updated":"2022-07-07 14:27:54.000000000","message":"Adding rest of the comments","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c5a3e7ce_b2e21a09","updated":"2022-07-06 19:18:55.000000000","message":"Haven\u0027t finished reading the whole spec but found out one spelling mistake across the whole spec which is also a variable name so needs to be corrected.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"7ac01b7dbedf330310908c037f19e0b7670c686a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"27848424_dc33faed","updated":"2022-07-06 12:24:06.000000000","message":"Looks good to me now it has been moved to Zed","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9c873869_a196363a","updated":"2022-07-09 13:59:12.000000000","message":"Thanks for the reviews.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f2aa0dfb_679f155b","updated":"2022-07-06 21:51:57.000000000","message":"Wow, that is an exhaustive spec.  Only a +1 because I agree with Rajat that the \u0027togled\u0027 typo is a bad one.  A few comments inline, otherwise I\u0027m +2 on this proposal.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"868a8fe5_f35ba3a2","updated":"2022-07-09 15:46:13.000000000","message":"Thanks for addressing all my comments Gorka. LGTM.","commit_id":"b2d55b1b54ddb2b129d2f26c0465651f8c3b646d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"21d3848b08a42d1fd9edeef54bad7bbda67a01cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f289411d_6ab3bc69","updated":"2022-07-11 11:56:18.000000000","message":"Good for me","commit_id":"1f442bf52a7052c3659508c8db884d95feb11214"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6ad977c8843be43452cb93d27c62102140edb04f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"5740fb43_5c075fd2","updated":"2022-07-11 08:36:48.000000000","message":"one minor nit change from last PS. still LGTM.","commit_id":"1f442bf52a7052c3659508c8db884d95feb11214"}],"specs/yoga/quota-system.rst":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"},{"line_number":25,"context_line":"as used resources or rolled back if the operation failed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The current usage and reservations for resources, e.g. number of volumes or"},{"line_number":28,"context_line":"gigabytes, are tracked on the database as a counter in the ``quota_usages``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"72dfe2e7_a6672516","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":20},"updated":"2021-12-01 05:42:31.000000000","message":"nit: are","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"},{"line_number":25,"context_line":"as used resources or rolled back if the operation failed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The current usage and reservations for resources, e.g. number of volumes or"},{"line_number":28,"context_line":"gigabytes, are tracked on the database as a counter in the ``quota_usages``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ab5c6d14_3ebc3477","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":20},"in_reply_to":"72dfe2e7_a6672516","updated":"2021-12-01 11:24:43.000000000","message":"It\u0027s or, because the reservations are either committed OR rolled back IF the operation fails.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"},{"line_number":25,"context_line":"as used resources or rolled back if the operation failed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The current usage and reservations for resources, e.g. number of volumes or"},{"line_number":28,"context_line":"gigabytes, are tracked on the database as a counter in the ``quota_usages``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"84a5f271_df7c4fb7","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":20},"in_reply_to":"ab5c6d14_3ebc3477","updated":"2021-12-06 10:45:35.000000000","message":"Ack","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a workaround for quotas becoming out of sync the Cinder service has code to"},{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Besides the impact on operators and users, the current quota implementation"},{"line_number":41,"context_line":"also has an impact on developers, because the system of reserve/commit and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"84ceaa22_dfde2f23","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":10},"updated":"2021-12-01 05:42:31.000000000","message":"re-syncing ?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a workaround for quotas becoming out of sync the Cinder service has code to"},{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Besides the impact on operators and users, the current quota implementation"},{"line_number":41,"context_line":"also has an impact on developers, because the system of reserve/commit and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"efcb8f9b_ee06f9d2","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":10},"in_reply_to":"84ceaa22_dfde2f23","updated":"2021-12-01 11:24:43.000000000","message":"It is my understanding that both are technically correct, and in theory resynch is more commonly used than resync in general: https://books.google.com/ngrams/graph?content\u003dsynced%2Csynched\u0026year_start\u003d1960\u0026year_end\u003d2000\u0026corpus\u003d5\u0026smoothing\u003d3\u0026direct_url\u003dt1%3B%2Csynced%3B%2Cc0%3B.t1%3B%2Csynched%3B%2Cc0#t1%3B%2Csynced%3B%2Cc0%3B.t1%3B%2Csynched%3B%2Cc0\n\nI\u0027m ok changing it if more people think this looks weird.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a workaround for quotas becoming out of sync the Cinder service has code to"},{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Besides the impact on operators and users, the current quota implementation"},{"line_number":41,"context_line":"also has an impact on developers, because the system of reserve/commit and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c71ce387_ab63661c","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":10},"in_reply_to":"efcb8f9b_ee06f9d2","updated":"2021-12-06 10:45:35.000000000","message":"I think it\u0027s fine, thanks","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In addition to dynamically calculating the resources, the new quota system will"},{"line_number":81,"context_line":"reduce the number of reservations and commits/rollbacks used by the code as"},{"line_number":82,"context_line":"much as possible, and will only use them for the specific cases were they are"},{"line_number":83,"context_line":"the only way to keep track of the resources while the operation is in progress."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Quota limits"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ee94ac06_01eee392","line":82,"range":{"start_line":82,"start_character":64,"end_line":82,"end_character":68},"updated":"2021-12-01 05:42:31.000000000","message":"nit: where","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In addition to dynamically calculating the resources, the new quota system will"},{"line_number":81,"context_line":"reduce the number of reservations and commits/rollbacks used by the code as"},{"line_number":82,"context_line":"much as possible, and will only use them for the specific cases were they are"},{"line_number":83,"context_line":"the only way to keep track of the resources while the operation is in progress."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Quota limits"}],"source_content_type":"text/x-rst","patch_set":1,"id":"91ee00bf_bf4a649a","line":82,"range":{"start_line":82,"start_character":64,"end_line":82,"end_character":68},"in_reply_to":"ee94ac06_01eee392","updated":"2021-12-01 11:24:43.000000000","message":"Done","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":115,"context_line":"The new quota system will not introduce or remove any of the existing quota"},{"line_number":116,"context_line":"resources, so available resources for the quota limits will still be:"},{"line_number":117,"context_line":"``volumes``, ``volumes_\u003cvolume-type\u003e``, ``snapshots``,"},{"line_number":118,"context_line":"``snapshots_\u003cvolume-type\u003e``, ``gigabytes``, ``backups``, ``backup_gigabytes``,"},{"line_number":119,"context_line":"``groups``, and ``per_volume_gigabytes``.  And quota usage will report in-use"},{"line_number":120,"context_line":"and reserved values for all existing limits except the"},{"line_number":121,"context_line":"``per_volume_gigabytes``."}],"source_content_type":"text/x-rst","patch_set":1,"id":"417d1f21_0b074ffc","line":118,"range":{"start_line":118,"start_character":31,"end_line":118,"end_character":40},"updated":"2021-12-01 05:42:31.000000000","message":"we also have gigabytes_\u003cvolume-type\u003e","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"The new quota system will not introduce or remove any of the existing quota"},{"line_number":116,"context_line":"resources, so available resources for the quota limits will still be:"},{"line_number":117,"context_line":"``volumes``, ``volumes_\u003cvolume-type\u003e``, ``snapshots``,"},{"line_number":118,"context_line":"``snapshots_\u003cvolume-type\u003e``, ``gigabytes``, ``backups``, ``backup_gigabytes``,"},{"line_number":119,"context_line":"``groups``, and ``per_volume_gigabytes``.  And quota usage will report in-use"},{"line_number":120,"context_line":"and reserved values for all existing limits except the"},{"line_number":121,"context_line":"``per_volume_gigabytes``."}],"source_content_type":"text/x-rst","patch_set":1,"id":"c46c16ef_407c311a","line":118,"range":{"start_line":118,"start_character":31,"end_line":118,"end_character":40},"in_reply_to":"417d1f21_0b074ffc","updated":"2021-12-01 11:24:43.000000000","message":"I forgot it here, thanks.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"- ``gigabytes`` and ``gigabytes_\u003cvolume_type\u003e`` quotas will be the sum of the"},{"line_number":138,"context_line":"  ``size`` of the quotable volumes (as defined above) incremented in the sum of"},{"line_number":139,"context_line":"  the ``volume_size`` values of the quotable snapshots (as defined above) when"},{"line_number":140,"context_line":"  the ``no_snapshot_gb_quota`` configuration option is set to ``false``"},{"line_number":141,"context_line":"  (default value)."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"63d04cf8_d45c9bd3","line":139,"range":{"start_line":139,"start_character":6,"end_line":139,"end_character":54},"updated":"2021-12-01 05:42:31.000000000","message":"I assume this will be the size of the volume from which snapshot is created from.\nSo should quota worry about if the snapshots are qcow2 images and doesn\u0027t require as much space as the volume?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"- ``gigabytes`` and ``gigabytes_\u003cvolume_type\u003e`` quotas will be the sum of the"},{"line_number":138,"context_line":"  ``size`` of the quotable volumes (as defined above) incremented in the sum of"},{"line_number":139,"context_line":"  the ``volume_size`` values of the quotable snapshots (as defined above) when"},{"line_number":140,"context_line":"  the ``no_snapshot_gb_quota`` configuration option is set to ``false``"},{"line_number":141,"context_line":"  (default value)."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"6e9c86e5_921616ca","line":139,"range":{"start_line":139,"start_character":6,"end_line":139,"end_character":54},"in_reply_to":"63d04cf8_d45c9bd3","updated":"2021-12-01 11:24:43.000000000","message":"Quota doesn\u0027t worry about actual space usage in snapshots or volumes (where thin/thick, compression, deduplication, etc. affects it).","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"- ``gigabytes`` and ``gigabytes_\u003cvolume_type\u003e`` quotas will be the sum of the"},{"line_number":138,"context_line":"  ``size`` of the quotable volumes (as defined above) incremented in the sum of"},{"line_number":139,"context_line":"  the ``volume_size`` values of the quotable snapshots (as defined above) when"},{"line_number":140,"context_line":"  the ``no_snapshot_gb_quota`` configuration option is set to ``false``"},{"line_number":141,"context_line":"  (default value)."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1c2bcca6_f2cf4171","line":139,"range":{"start_line":139,"start_character":6,"end_line":139,"end_character":54},"in_reply_to":"6e9c86e5_921616ca","updated":"2021-12-06 10:45:35.000000000","message":"Ack","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":137,"context_line":"- ``gigabytes`` and ``gigabytes_\u003cvolume_type\u003e`` quotas will be the sum of the"},{"line_number":138,"context_line":"  ``size`` of the quotable volumes (as defined above) incremented in the sum of"},{"line_number":139,"context_line":"  the ``volume_size`` values of the quotable snapshots (as defined above) when"},{"line_number":140,"context_line":"  the ``no_snapshot_gb_quota`` configuration option is set to ``false``"},{"line_number":141,"context_line":"  (default value)."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"- ``groups`` quota will be the number of non deleted rows in the ``groups``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"69761ff5_b7e69241","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":71},"updated":"2021-12-01 05:42:31.000000000","message":"I think we should update the description of this config param to mention that by default (False) we count the snapshot sizes in gigabyte quota since the description is pretty misleading (at least to me)\nfrom this\n``Whether snapshots count against gigabyte quota``\nto something like this\n``Whether snapshots sizes count against gigabyte quota. By default snapshots are counted.``","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"- ``gigabytes`` and ``gigabytes_\u003cvolume_type\u003e`` quotas will be the sum of the"},{"line_number":138,"context_line":"  ``size`` of the quotable volumes (as defined above) incremented in the sum of"},{"line_number":139,"context_line":"  the ``volume_size`` values of the quotable snapshots (as defined above) when"},{"line_number":140,"context_line":"  the ``no_snapshot_gb_quota`` configuration option is set to ``false``"},{"line_number":141,"context_line":"  (default value)."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"- ``groups`` quota will be the number of non deleted rows in the ``groups``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9d2e1d21_b08f6059","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":71},"in_reply_to":"69761ff5_b7e69241","updated":"2021-12-01 11:24:43.000000000","message":"I have to agree, between the name being in the negative form, and the description this is not great.\n\nWe can do that in an unrelated patch though:   https://review.opendev.org/c/openstack/cinder/+/820014","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"   with self.quota_check(self._context, self.volume_type.id,"},{"line_number":189,"context_line":"                         vol_gbs\u003dself.size,"},{"line_number":190,"context_line":"                         vol_qty\u003d1,"},{"line_number":191,"context_line":"                         vol_total_size\u003dself.size):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"      db_volume \u003d db.volume_create(self._context, updates)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1cce9a58_a6f5f930","line":190,"range":{"start_line":190,"start_character":25,"end_line":190,"end_character":34},"updated":"2021-12-01 05:42:31.000000000","message":"IIUC this is the number of volumes created and will always be 1 for one request, so do we need this?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"   with self.quota_check(self._context, self.volume_type.id,"},{"line_number":189,"context_line":"                         vol_gbs\u003dself.size,"},{"line_number":190,"context_line":"                         vol_qty\u003d1,"},{"line_number":191,"context_line":"                         vol_total_size\u003dself.size):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"      db_volume \u003d db.volume_create(self._context, updates)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ae851b99_5d319f30","line":190,"range":{"start_line":190,"start_character":25,"end_line":190,"end_character":34},"in_reply_to":"1cce9a58_a6f5f930","updated":"2021-12-01 11:24:43.000000000","message":"In my opinion we should have it, because we never know what we\u0027ll have in the future, for example if we add a clone group feature where we can clone a whole group of volumes.\n\nThis is similar to how the transfer operation can bring a group of snapshots in a single operation.\n\nNot having it could be a limitation for the future, and it\u0027s not like it\u0027s a lot more code, it\u0027s just passing the parameter, since the underlying code in the DB quota driver still needs to do the check for 1 volume.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"   with self.quota_check(self._context, self.volume_type.id,"},{"line_number":189,"context_line":"                         vol_gbs\u003dself.size,"},{"line_number":190,"context_line":"                         vol_qty\u003d1,"},{"line_number":191,"context_line":"                         vol_total_size\u003dself.size):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"      db_volume \u003d db.volume_create(self._context, updates)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"4cc80580_b57c9397","line":190,"range":{"start_line":190,"start_character":25,"end_line":190,"end_character":34},"in_reply_to":"ae851b99_5d319f30","updated":"2021-12-06 10:45:35.000000000","message":"Ack, sounds like a valid reason, thanks","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":204,"context_line":"parameters that will be used for volume and snapshot context manager checker"},{"line_number":205,"context_line":"are:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"- ``vol_qty``: Delta on the number of volumes that will be consumed within the"},{"line_number":208,"context_line":"  checker context manager.  Will end up using ``volumes`` in the database."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"- ``vol_type_qty``: Delta on the number of volumes for the specific volume type"},{"line_number":211,"context_line":"  that will be consumed within the checker context manager.  Will end up using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6c24593b_2c259c5e","line":208,"range":{"start_line":207,"start_character":28,"end_line":208,"end_character":25},"updated":"2021-12-01 05:42:31.000000000","message":"same question as above, for one request, there should only be one volume created right?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":204,"context_line":"parameters that will be used for volume and snapshot context manager checker"},{"line_number":205,"context_line":"are:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"- ``vol_qty``: Delta on the number of volumes that will be consumed within the"},{"line_number":208,"context_line":"  checker context manager.  Will end up using ``volumes`` in the database."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"- ``vol_type_qty``: Delta on the number of volumes for the specific volume type"},{"line_number":211,"context_line":"  that will be consumed within the checker context manager.  Will end up using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"8684fad5_e727290b","line":208,"range":{"start_line":207,"start_character":28,"end_line":208,"end_character":25},"in_reply_to":"6c24593b_2c259c5e","updated":"2021-12-01 11:24:43.000000000","message":"For now yes, but who knows in the future, and I don\u0027t see a real gain if we remove it.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"- ``snap_gbs``: Delta on the number of snapshot gigabytes that will be consumed"},{"line_number":231,"context_line":"  within the checker context manager.  Will end up using ``gigabytes`` if the"},{"line_number":232,"context_line":"  ``no_snapshot_gb_quota`` configuration option is set to ``false`` or will be"},{"line_number":233,"context_line":"  disregarded if set to ``true``."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"- ``snap_type_gbs``: Delta on the number of snapshot gigabytes for the specific"}],"source_content_type":"text/x-rst","patch_set":1,"id":"e6649263_23037343","line":232,"range":{"start_line":232,"start_character":58,"end_line":232,"end_character":67},"updated":"2021-12-01 05:42:31.000000000","message":"maybe can also mention that this is the default value\na simpler way would be\n``false`` (default)","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"- ``snap_gbs``: Delta on the number of snapshot gigabytes that will be consumed"},{"line_number":231,"context_line":"  within the checker context manager.  Will end up using ``gigabytes`` if the"},{"line_number":232,"context_line":"  ``no_snapshot_gb_quota`` configuration option is set to ``false`` or will be"},{"line_number":233,"context_line":"  disregarded if set to ``true``."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"- ``snap_type_gbs``: Delta on the number of snapshot gigabytes for the specific"}],"source_content_type":"text/x-rst","patch_set":1,"id":"a3d20ef6_9f79785a","line":232,"range":{"start_line":232,"start_character":58,"end_line":232,"end_character":67},"in_reply_to":"e6649263_23037343","updated":"2021-12-01 11:24:43.000000000","message":"Done","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":266,"context_line":"volume) will have the right values for the dynamic quota usage calculations to"},{"line_number":267,"context_line":"do the right calculations."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"As mentioned before reservations will only be necessary for specific"},{"line_number":270,"context_line":"operations, to be exact on 3 operations: extend, transfer, and retype."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Here are the details of the reservation usage on these 3 cases:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"02432be1_151b6e66","line":269,"range":{"start_line":269,"start_character":19,"end_line":269,"end_character":20},"updated":"2021-12-01 05:42:31.000000000","message":"nit: need comma here","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"volume) will have the right values for the dynamic quota usage calculations to"},{"line_number":267,"context_line":"do the right calculations."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"As mentioned before reservations will only be necessary for specific"},{"line_number":270,"context_line":"operations, to be exact on 3 operations: extend, transfer, and retype."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Here are the details of the reservation usage on these 3 cases:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"eb1a0eac_b8beb154","line":269,"range":{"start_line":269,"start_character":19,"end_line":269,"end_character":20},"in_reply_to":"02432be1_151b6e66","updated":"2021-12-01 11:24:43.000000000","message":"Done","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"  ``gigabytes_\u003cdest-volume-type\u003e`` and ``volumes_\u003cdest-volume-type\u003e`` until the"},{"line_number":295,"context_line":"  operation is completed, so we\u0027ll be consuming volumes and gigabytes on both"},{"line_number":296,"context_line":"  types until the operation completes, regardless of whether the operation"},{"line_number":297,"context_line":"  succeeds or fails.  There are multiple reasons why we need to consume quota"},{"line_number":298,"context_line":"  from both types:"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"  * If the retype fails we will need to consume volumes and gigabytes on the"},{"line_number":301,"context_line":"    source volume type again, but if we \"released\" that usage when we started"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d2011f3f_a87ef33a","line":298,"range":{"start_line":297,"start_character":53,"end_line":298,"end_character":18},"updated":"2021-12-01 11:24:43.000000000","message":"This is confusing, need to change this to \"we need to use reservations to temporary consume quota from both types\"","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":303,"context_line":"    for the volume."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"  * Even if the retype succeeds the cloud administrator may have set the quota"},{"line_number":306,"context_line":"    limits for a reason, and freeing the source gigabytes and volumes when"},{"line_number":307,"context_line":"    starting the retype may result with an excess in consumption if a volume"},{"line_number":308,"context_line":"    creation request comes in for the source volume type."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"  This is the only operation where a race condition can happen, though it\u0027s a"},{"line_number":311,"context_line":"  corner case.  It can happen if we are adding a new quota limit, global or per"}],"source_content_type":"text/x-rst","patch_set":1,"id":"979b195b_53276cb1","line":308,"range":{"start_line":306,"start_character":25,"end_line":308,"end_character":57},"updated":"2021-12-01 05:42:31.000000000","message":"IIUC, after the retype completes, we are going to modify ``gigabytes_\u003csource-volume-type\u003e`` and ``volumes_\u003csource-volume-type\u003e`` and therefore we require a lock on these rows as well.\nAs mentioned in L#170-173, we should not be able to create a volume with the source volume type since those rows should be locked during the retype operation.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":true,"context_lines":[{"line_number":303,"context_line":"    for the volume."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"  * Even if the retype succeeds the cloud administrator may have set the quota"},{"line_number":306,"context_line":"    limits for a reason, and freeing the source gigabytes and volumes when"},{"line_number":307,"context_line":"    starting the retype may result with an excess in consumption if a volume"},{"line_number":308,"context_line":"    creation request comes in for the source volume type."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"  This is the only operation where a race condition can happen, though it\u0027s a"},{"line_number":311,"context_line":"  corner case.  It can happen if we are adding a new quota limit, global or per"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c750a901_753d54d3","line":308,"range":{"start_line":306,"start_character":25,"end_line":308,"end_character":57},"in_reply_to":"979b195b_53276cb1","updated":"2021-12-01 11:24:43.000000000","message":"The retype doesn\u0027t lock the rows, otherwise no operation would be able to happen while the retype is ongoing.\n\nWhich is not the point I\u0027m trying to make here, and failing.\n\nThe thing is that now we do reservations like this: -1 volumes_\u003csource_volume_type\u003e -1 gigabytes_\u003csource_volume_type\u003e +1 volumes_\u003cdestination_volume_type\u003e +1 gigabytes_\u003cdestination_volume_type\u003e\n\nBut that is wrong, because freeing resources from the source type means that some other operation can consume those and if the retype fails and we have to rollback the reservations we may end up with over quota on the source volume type.\n\nSo while a retype is ongoing we need to consume type resources in both the source and the destination.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    for the volume."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"  * Even if the retype succeeds the cloud administrator may have set the quota"},{"line_number":306,"context_line":"    limits for a reason, and freeing the source gigabytes and volumes when"},{"line_number":307,"context_line":"    starting the retype may result with an excess in consumption if a volume"},{"line_number":308,"context_line":"    creation request comes in for the source volume type."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"  This is the only operation where a race condition can happen, though it\u0027s a"},{"line_number":311,"context_line":"  corner case.  It can happen if we are adding a new quota limit, global or per"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bbc6d065_99da2532","line":308,"range":{"start_line":306,"start_character":25,"end_line":308,"end_character":57},"in_reply_to":"c750a901_753d54d3","updated":"2021-12-06 10:45:35.000000000","message":"I understand the point, i was just trying to clear the confusion i had regarding the locking mechanism. Now i understand that we are referring to reservations here and not quota.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":323,"context_line":"- Service kill."},{"line_number":324,"context_line":"- Node restart or shutdown."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"For these situations the new quota system will rely on the ``os-reset_status``"},{"line_number":327,"context_line":"REST API action on volumes to automatically clear any reservations that the"},{"line_number":328,"context_line":"volume may have.  This way there is no need to wait until the reservation"},{"line_number":329,"context_line":"expires and the operator can do the cleanup in an easy way without needing"},{"line_number":330,"context_line":"additional API calls."},{"line_number":331,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"68030517_18717a28","line":328,"range":{"start_line":326,"start_character":0,"end_line":328,"end_character":16},"updated":"2021-12-01 05:42:31.000000000","message":"do we have that functionality now or we are going to introduce it? can we have more detail regarding the different cases that how the reset state is going to modify the quota reservations","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"- Service kill."},{"line_number":324,"context_line":"- Node restart or shutdown."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"For these situations the new quota system will rely on the ``os-reset_status``"},{"line_number":327,"context_line":"REST API action on volumes to automatically clear any reservations that the"},{"line_number":328,"context_line":"volume may have.  This way there is no need to wait until the reservation"},{"line_number":329,"context_line":"expires and the operator can do the cleanup in an easy way without needing"},{"line_number":330,"context_line":"additional API calls."},{"line_number":331,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"daf1a636_4ade4e64","line":328,"range":{"start_line":326,"start_character":0,"end_line":328,"end_character":16},"in_reply_to":"4222d77b_c6dd9a2e","updated":"2021-12-06 10:45:35.000000000","message":"Done","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":true,"context_lines":[{"line_number":323,"context_line":"- Service kill."},{"line_number":324,"context_line":"- Node restart or shutdown."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"For these situations the new quota system will rely on the ``os-reset_status``"},{"line_number":327,"context_line":"REST API action on volumes to automatically clear any reservations that the"},{"line_number":328,"context_line":"volume may have.  This way there is no need to wait until the reservation"},{"line_number":329,"context_line":"expires and the operator can do the cleanup in an easy way without needing"},{"line_number":330,"context_line":"additional API calls."},{"line_number":331,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"4222d77b_c6dd9a2e","line":328,"range":{"start_line":326,"start_character":0,"end_line":328,"end_character":16},"in_reply_to":"68030517_18717a28","updated":"2021-12-01 11:24:43.000000000","message":"We don\u0027t have that now because we don\u0027t currently have a way to map reservations to specific resources, but in the new quota system we\u0027ll be setting the uuid to the resource id (I mention it somewhere in the spec).\n\nThere are not really different cases, it blinding resets the reservations: https://review.opendev.org/c/openstack/cinder/+/819691/2/cinder/api/contrib/admin_actions.py#b134\n\nI\u0027ll try to clarify the paragraph.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"Parameters ``project_id`` and ``type_name`` will be used used as filter in the"},{"line_number":429,"context_line":"deletion.  So if only ``project_id`` is provided then only per project entries"},{"line_number":430,"context_line":"will be deleted (in the db driver those from the ``quotas`` table), and if"},{"line_number":431,"context_line":"only the ``type_name`` is provided then only ``gigabytes_\u003ctype-name\u003e``,"},{"line_number":432,"context_line":"``volume_\u003ctype-name\u003e`` and ``snapshots_\u003ctype-name\u003e`` resources will be removed"},{"line_number":433,"context_line":"but for per-project (``quotas`` db table) and global (``quota_classes`` table)."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"If an error"},{"line_number":436,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dafdbb26_e8357fbe","line":433,"range":{"start_line":430,"start_character":68,"end_line":433,"end_character":79},"updated":"2021-12-01 05:42:31.000000000","message":"can you provide any specific case where we will use this?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"Parameters ``project_id`` and ``type_name`` will be used used as filter in the"},{"line_number":429,"context_line":"deletion.  So if only ``project_id`` is provided then only per project entries"},{"line_number":430,"context_line":"will be deleted (in the db driver those from the ``quotas`` table), and if"},{"line_number":431,"context_line":"only the ``type_name`` is provided then only ``gigabytes_\u003ctype-name\u003e``,"},{"line_number":432,"context_line":"``volume_\u003ctype-name\u003e`` and ``snapshots_\u003ctype-name\u003e`` resources will be removed"},{"line_number":433,"context_line":"but for per-project (``quotas`` db table) and global (``quota_classes`` table)."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"If an error"},{"line_number":436,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c7569aa1_68efe52e","line":433,"range":{"start_line":430,"start_character":68,"end_line":433,"end_character":79},"in_reply_to":"dafdbb26_e8357fbe","updated":"2021-12-01 11:24:43.000000000","message":"When deleting a volume type we should be clearing all its quota limits, which we currently don\u0027t do (bug https://launchpad.net/bugs/1952463).","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":432,"context_line":"``volume_\u003ctype-name\u003e`` and ``snapshots_\u003ctype-name\u003e`` resources will be removed"},{"line_number":433,"context_line":"but for per-project (``quotas`` db table) and global (``quota_classes`` table)."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"If an error"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"type_name_change_cm"},{"line_number":438,"context_line":"*******************"}],"source_content_type":"text/x-rst","patch_set":1,"id":"8b76efcb_9e4cb00a","line":435,"range":{"start_line":435,"start_character":0,"end_line":435,"end_character":11},"updated":"2021-12-01 05:42:31.000000000","message":"nit: unfinished paragraph or not needed?","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":432,"context_line":"``volume_\u003ctype-name\u003e`` and ``snapshots_\u003ctype-name\u003e`` resources will be removed"},{"line_number":433,"context_line":"but for per-project (``quotas`` db table) and global (``quota_classes`` table)."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"If an error"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"type_name_change_cm"},{"line_number":438,"context_line":"*******************"}],"source_content_type":"text/x-rst","patch_set":1,"id":"80be18a5_3409366e","line":435,"range":{"start_line":435,"start_character":0,"end_line":435,"end_character":11},"in_reply_to":"8b76efcb_9e4cb00a","updated":"2021-12-01 11:24:43.000000000","message":"Unfinished!!  LOL","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"   def get_defaults(self, context, project_id\u003dNone):"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"Returns **all** system wide defaults for quota limits, if ``project_id`` is"},{"line_number":464,"context_line":"not ``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":465,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":466,"context_line":"based on the project\u0027s visibility of the volume types."}],"source_content_type":"text/x-rst","patch_set":1,"id":"26d494bf_6f932f12","line":463,"range":{"start_line":463,"start_character":53,"end_line":463,"end_character":54},"updated":"2021-12-01 05:42:31.000000000","message":"nit: full stop","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d2c91bc72ad9b36131e0274fc65d730f10ecc49e","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"   def get_defaults(self, context, project_id\u003dNone):"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"Returns **all** system wide defaults for quota limits, if ``project_id`` is"},{"line_number":464,"context_line":"not ``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":465,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":466,"context_line":"based on the project\u0027s visibility of the volume types."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ca07134c_6bf2808e","line":463,"range":{"start_line":463,"start_character":53,"end_line":463,"end_character":54},"in_reply_to":"26d494bf_6f932f12","updated":"2021-12-01 11:24:43.000000000","message":"I\u0027ll rephrase this, because it\u0027s hard to read even to me.","commit_id":"4a7daf11cc235c604c982aefaae0dd2cfda3ced2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"   def get_defaults(self, context, project_id\u003dNone):"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"Returns system wide defaults for quota limits. If ``project_id`` is not"},{"line_number":466,"context_line":"``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":467,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":468,"context_line":"based on the project\u0027s visibility of the volume types, it ``project_id`` is"},{"line_number":469,"context_line":"``None`` then **all** defaults will be returned regardless of the ``is_public``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3d4d7f27_075adecd","line":466,"range":{"start_line":465,"start_character":65,"end_line":466,"end_character":8},"updated":"2021-12-06 16:36:55.000000000","message":"In the rendering the None part bold so maybe can create confusion.\nwe can either bold the whole ``not None`` part or i think we can reword it as, If ``project_id`` is provided then ...","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":true,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"   def get_defaults(self, context, project_id\u003dNone):"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"Returns system wide defaults for quota limits. If ``project_id`` is not"},{"line_number":466,"context_line":"``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":467,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":468,"context_line":"based on the project\u0027s visibility of the volume types, it ``project_id`` is"},{"line_number":469,"context_line":"``None`` then **all** defaults will be returned regardless of the ``is_public``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c5f1ad10_e1230b77","line":466,"range":{"start_line":465,"start_character":65,"end_line":466,"end_character":8},"in_reply_to":"3d4d7f27_075adecd","updated":"2021-12-07 17:17:19.000000000","message":"The not was not included in the `` because I didn\u0027t mean it as python code but as normal English, and the rephrasing you mention can be misinterpreted, because in a call like this: ``quota.driver.get_defaults(context, project_id\u003dNone)`` the project_id (argument) has been provided, and if that\u0027s not considered as provided, then what about ``quota.driver.get_defaults(context, project_id\u003d\"\")`` is that considered provided or not?\n\nI prefer to be explicit.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"   def get_defaults(self, context, project_id\u003dNone):"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"Returns system wide defaults for quota limits. If ``project_id`` is not"},{"line_number":466,"context_line":"``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":467,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":468,"context_line":"based on the project\u0027s visibility of the volume types, it ``project_id`` is"},{"line_number":469,"context_line":"``None`` then **all** defaults will be returned regardless of the ``is_public``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"190928bc_0ea7a7c8","line":466,"range":{"start_line":465,"start_character":65,"end_line":466,"end_character":8},"in_reply_to":"c5f1ad10_e1230b77","updated":"2021-12-09 07:35:52.000000000","message":"Ack","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19999bcb6c51c609e3ba6f9e2f567e3c9c47f47b","unresolved":true,"context_lines":[{"line_number":465,"context_line":"Returns system wide defaults for quota limits. If ``project_id`` is not"},{"line_number":466,"context_line":"``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":467,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":468,"context_line":"based on the project\u0027s visibility of the volume types, it ``project_id`` is"},{"line_number":469,"context_line":"``None`` then **all** defaults will be returned regardless of the ``is_public``"},{"line_number":470,"context_line":"value of the volume types."},{"line_number":471,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"d04c5dbc_89aa6d4d","line":468,"range":{"start_line":468,"start_character":55,"end_line":468,"end_character":57},"updated":"2021-12-06 10:45:35.000000000","message":"nit: If","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":465,"context_line":"Returns system wide defaults for quota limits. If ``project_id`` is not"},{"line_number":466,"context_line":"``None`` then volume types quota resources (``volumes_\u003cvolume-type\u003e``,"},{"line_number":467,"context_line":"``gigabytes_\u003cvolume-type\u003e``, and ``snapshots_\u003cvolume-type\u003e``) will be filtered"},{"line_number":468,"context_line":"based on the project\u0027s visibility of the volume types, it ``project_id`` is"},{"line_number":469,"context_line":"``None`` then **all** defaults will be returned regardless of the ``is_public``"},{"line_number":470,"context_line":"value of the volume types."},{"line_number":471,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"79f0157e_39eea9e3","line":468,"range":{"start_line":468,"start_character":55,"end_line":468,"end_character":57},"in_reply_to":"d04c5dbc_89aa6d4d","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":566,"context_line":"     \u0027snapshots_lvmdriver-1\u0027: {\u0027limit\u0027: -1, \u0027in_use\u0027: 0, \u0027reserved\u0027: 0}"},{"line_number":567,"context_line":"    }"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"This method is different from the ``get_defaults`` method, in that one only"},{"line_number":570,"context_line":"existing values in the database are returned, but here **all** project visible"},{"line_number":571,"context_line":"keys and values will be returned even if there is no entry in the tables.  A"},{"line_number":572,"context_line":"clear example is when this method gets called right after creating a new public"}],"source_content_type":"text/x-rst","patch_set":2,"id":"6108d6db_b2b50ace","line":569,"range":{"start_line":569,"start_character":70,"end_line":569,"end_character":71},"updated":"2021-12-06 16:36:55.000000000","message":"nit: comma here","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":566,"context_line":"     \u0027snapshots_lvmdriver-1\u0027: {\u0027limit\u0027: -1, \u0027in_use\u0027: 0, \u0027reserved\u0027: 0}"},{"line_number":567,"context_line":"    }"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"This method is different from the ``get_defaults`` method, in that one only"},{"line_number":570,"context_line":"existing values in the database are returned, but here **all** project visible"},{"line_number":571,"context_line":"keys and values will be returned even if there is no entry in the tables.  A"},{"line_number":572,"context_line":"clear example is when this method gets called right after creating a new public"}],"source_content_type":"text/x-rst","patch_set":2,"id":"e287dd03_90a7bcfd","line":569,"range":{"start_line":569,"start_character":70,"end_line":569,"end_character":71},"in_reply_to":"6108d6db_b2b50ace","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":567,"context_line":"    }"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"This method is different from the ``get_defaults`` method, in that one only"},{"line_number":570,"context_line":"existing values in the database are returned, but here **all** project visible"},{"line_number":571,"context_line":"keys and values will be returned even if there is no entry in the tables.  A"},{"line_number":572,"context_line":"clear example is when this method gets called right after creating a new public"},{"line_number":573,"context_line":"volume type, in that case the response will include the"},{"line_number":574,"context_line":"``volumes_\u003cvolume-type\u003e``, ``gigabytes_\u003cvolume_type\u003e``, and"},{"line_number":575,"context_line":"``snapshots_\u003cvolume_type\u003e`` keys with values set to ``-1`` since they don\u0027t"},{"line_number":576,"context_line":"exist in the ``quotas`` or ``quota_classes`` tables."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"group_check_cm"},{"line_number":579,"context_line":"**************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"d9792d99_e07945f6","line":576,"range":{"start_line":570,"start_character":46,"end_line":576,"end_character":52},"updated":"2021-12-06 16:36:55.000000000","message":"Isn\u0027t this contradicting to L#527-529","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":567,"context_line":"    }"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"This method is different from the ``get_defaults`` method, in that one only"},{"line_number":570,"context_line":"existing values in the database are returned, but here **all** project visible"},{"line_number":571,"context_line":"keys and values will be returned even if there is no entry in the tables.  A"},{"line_number":572,"context_line":"clear example is when this method gets called right after creating a new public"},{"line_number":573,"context_line":"volume type, in that case the response will include the"},{"line_number":574,"context_line":"``volumes_\u003cvolume-type\u003e``, ``gigabytes_\u003cvolume_type\u003e``, and"},{"line_number":575,"context_line":"``snapshots_\u003cvolume_type\u003e`` keys with values set to ``-1`` since they don\u0027t"},{"line_number":576,"context_line":"exist in the ``quotas`` or ``quota_classes`` tables."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"group_check_cm"},{"line_number":579,"context_line":"**************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1830402c_0ac9199b","line":576,"range":{"start_line":570,"start_character":46,"end_line":576,"end_character":52},"in_reply_to":"c71d81f1_a3b2e18d","updated":"2021-12-09 07:35:52.000000000","message":"I was going to mention L#479-481 but i suppose both have the same meaning.\n\nL#479-481\nReturned data is a dictionary mapping resources to their hard limits, and must\ninclude **all** volume type resources even if there is no record in the\ndatabase.\n\nL#527-529\nJust like the ``get_defaults`` method this returns **all** volume type resources even if\nthere is no record in the database.\n\nbut since this is removed, that doesn\u0027t matter!","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":567,"context_line":"    }"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"This method is different from the ``get_defaults`` method, in that one only"},{"line_number":570,"context_line":"existing values in the database are returned, but here **all** project visible"},{"line_number":571,"context_line":"keys and values will be returned even if there is no entry in the tables.  A"},{"line_number":572,"context_line":"clear example is when this method gets called right after creating a new public"},{"line_number":573,"context_line":"volume type, in that case the response will include the"},{"line_number":574,"context_line":"``volumes_\u003cvolume-type\u003e``, ``gigabytes_\u003cvolume_type\u003e``, and"},{"line_number":575,"context_line":"``snapshots_\u003cvolume_type\u003e`` keys with values set to ``-1`` since they don\u0027t"},{"line_number":576,"context_line":"exist in the ``quotas`` or ``quota_classes`` tables."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"group_check_cm"},{"line_number":579,"context_line":"**************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c71d81f1_a3b2e18d","line":576,"range":{"start_line":570,"start_character":46,"end_line":576,"end_character":52},"in_reply_to":"d9792d99_e07945f6","updated":"2021-12-07 17:17:19.000000000","message":"Thanks for pointing it out, because even if it doesn\u0027t actually contradict L527-529 but L479-481, it\u0027s true that there\u0027s a contradiction.\n\nBoth methods behave the same way.  I\u0027ll remove this whole paragraph.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":585,"context_line":"Context manager to check group quota upon context entering."},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"Raises ``QuotaError`` if quota usage would go over the quota limits upon adding"},{"line_number":588,"context_line":"``qty`` new groups."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Effective quota limits are determined based on the project\u0027s quota limits"},{"line_number":591,"context_line":"(``hard_limit`` for the ``groups`` resource in the ``quotas`` table) if defined"}],"source_content_type":"text/x-rst","patch_set":2,"id":"0c894067_2533c04c","line":588,"range":{"start_line":588,"start_character":0,"end_line":588,"end_character":18},"updated":"2021-12-06 16:36:55.000000000","message":"do you mean\n``qty`` of new groups?","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":true,"context_lines":[{"line_number":585,"context_line":"Context manager to check group quota upon context entering."},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"Raises ``QuotaError`` if quota usage would go over the quota limits upon adding"},{"line_number":588,"context_line":"``qty`` new groups."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Effective quota limits are determined based on the project\u0027s quota limits"},{"line_number":591,"context_line":"(``hard_limit`` for the ``groups`` resource in the ``quotas`` table) if defined"}],"source_content_type":"text/x-rst","patch_set":2,"id":"163559ac_a0a11b27","line":588,"range":{"start_line":588,"start_character":0,"end_line":588,"end_character":18},"in_reply_to":"0c894067_2533c04c","updated":"2021-12-07 17:17:19.000000000","message":"No, I meant ``qty`` new groups, where qty is its value, so if it where 1, then it is \"1 new groups\".\n\nI think we have used this form of writing in docstrings, comments, and specs before.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":585,"context_line":"Context manager to check group quota upon context entering."},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"Raises ``QuotaError`` if quota usage would go over the quota limits upon adding"},{"line_number":588,"context_line":"``qty`` new groups."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Effective quota limits are determined based on the project\u0027s quota limits"},{"line_number":591,"context_line":"(``hard_limit`` for the ``groups`` resource in the ``quotas`` table) if defined"}],"source_content_type":"text/x-rst","patch_set":2,"id":"42a209bd_d202c585","line":588,"range":{"start_line":588,"start_character":0,"end_line":588,"end_character":18},"in_reply_to":"163559ac_a0a11b27","updated":"2021-12-09 07:35:52.000000000","message":"Ack","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"},{"line_number":595,"context_line":"``project_id`` if the optional ``project_id`` parameter value is ``None``."},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"The context manager must ensure that there are no race conditions with"},{"line_number":598,"context_line":"concurrent calls to ``group_check_cm`` within different threads and processes"},{"line_number":599,"context_line":"in the node as well as across different nodes."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"For the database driver this can be achieved using a ``SELECT FOR UPDATE`` on"},{"line_number":602,"context_line":"the ``groups`` quota limit which blocks other requests until the context"},{"line_number":603,"context_line":"manager exists."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Users of this context manager should try to keep the code within the context"},{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da750066_3293f132","line":609,"range":{"start_line":596,"start_character":0,"end_line":609,"end_character":64},"updated":"2021-12-06 16:36:55.000000000","message":"not complaining but this seems to be repeated 4 times throughout the spec. It\u0027s good to be explicit about using the ``SELECT FOR UPDATE`` but at the same time makes the spec long and repeated at places. can we just mention this in one place adding that group_check_cm, backup_check_cm and vol_snap_check_and_reserve_cm will use this mechanism?","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"},{"line_number":595,"context_line":"``project_id`` if the optional ``project_id`` parameter value is ``None``."},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"The context manager must ensure that there are no race conditions with"},{"line_number":598,"context_line":"concurrent calls to ``group_check_cm`` within different threads and processes"},{"line_number":599,"context_line":"in the node as well as across different nodes."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"For the database driver this can be achieved using a ``SELECT FOR UPDATE`` on"},{"line_number":602,"context_line":"the ``groups`` quota limit which blocks other requests until the context"},{"line_number":603,"context_line":"manager exists."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Users of this context manager should try to keep the code within the context"},{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"399a15c6_87d0d2f0","line":609,"range":{"start_line":596,"start_character":0,"end_line":609,"end_character":64},"in_reply_to":"19f3694f_998354e0","updated":"2021-12-09 07:35:52.000000000","message":"Ack","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":true,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"},{"line_number":595,"context_line":"``project_id`` if the optional ``project_id`` parameter value is ``None``."},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"The context manager must ensure that there are no race conditions with"},{"line_number":598,"context_line":"concurrent calls to ``group_check_cm`` within different threads and processes"},{"line_number":599,"context_line":"in the node as well as across different nodes."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"For the database driver this can be achieved using a ``SELECT FOR UPDATE`` on"},{"line_number":602,"context_line":"the ``groups`` quota limit which blocks other requests until the context"},{"line_number":603,"context_line":"manager exists."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Users of this context manager should try to keep the code within the context"},{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"19f3694f_998354e0","line":609,"range":{"start_line":596,"start_character":0,"end_line":609,"end_character":64},"in_reply_to":"da750066_3293f132","updated":"2021-12-07 17:17:19.000000000","message":"I\u0027m doing it like this for 2 reasons:\n\n- So readers have less things to keep in mind\n- So that what we write here can later on be moved directly to the interface file as is.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"An example of using this context manager within the ``create`` method of the"},{"line_number":614,"context_line":"``Group`` Oslo Versioned Object:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b6f92aa2_ddcbe6f8","line":611,"range":{"start_line":609,"start_character":66,"end_line":611,"end_character":7},"updated":"2021-12-06 16:36:55.000000000","message":"maybe it\u0027s just me but took me sometime to read and understand. can we reword it?","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"An example of using this context manager within the ``create`` method of the"},{"line_number":614,"context_line":"``Group`` Oslo Versioned Object:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"93e138fd_8d8fe0b9","line":611,"range":{"start_line":609,"start_character":66,"end_line":611,"end_character":7},"in_reply_to":"72ac7c6d_db28010a","updated":"2021-12-09 07:35:52.000000000","message":"Sounds much better, thanks!","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":606,"context_line":"manager to a minimum to allow higher concurrency."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"For the DB driver the context manager will start a database"},{"line_number":609,"context_line":"transaction/session, making it available in provided ``context``, and will"},{"line_number":610,"context_line":"commit it on normal context manager exit and roll it back when an exception is"},{"line_number":611,"context_line":"raised."},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"An example of using this context manager within the ``create`` method of the"},{"line_number":614,"context_line":"``Group`` Oslo Versioned Object:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"72ac7c6d_db28010a","line":611,"range":{"start_line":609,"start_character":66,"end_line":611,"end_character":7},"in_reply_to":"b6f92aa2_ddcbe6f8","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":639,"context_line":"``quotas`` table) if defined or the global defaults (in the ``quota_classes``"},{"line_number":640,"context_line":"table) otherwise."},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"},{"line_number":643,"context_line":"``project_id`` if the optional ``project_id`` parameter value is ``None``."},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"The context manager must ensure that there are no race conditions with"},{"line_number":646,"context_line":"concurrent calls to ``backup_check_cm`` within different threads and processes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a39b37aa_2d227f75","line":643,"range":{"start_line":642,"start_character":0,"end_line":643,"end_character":74},"updated":"2021-12-06 16:36:55.000000000","message":"this also seems to be a generic line applicable to all 3 methods group_check_cm, backup_check_cm and vol_snap_check_and_reserve_cm","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":true,"context_lines":[{"line_number":639,"context_line":"``quotas`` table) if defined or the global defaults (in the ``quota_classes``"},{"line_number":640,"context_line":"table) otherwise."},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"},{"line_number":643,"context_line":"``project_id`` if the optional ``project_id`` parameter value is ``None``."},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"The context manager must ensure that there are no race conditions with"},{"line_number":646,"context_line":"concurrent calls to ``backup_check_cm`` within different threads and processes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"05476899_77cff996","line":643,"range":{"start_line":642,"start_character":0,"end_line":643,"end_character":74},"in_reply_to":"a39b37aa_2d227f75","updated":"2021-12-07 17:17:19.000000000","message":"Same as commented above.  This will go as it is into the interface file.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":722,"context_line":"Effective quota limits are determined based on the project\u0027s quota limits"},{"line_number":723,"context_line":"(``volumes``, ``volumes_\u003cvolume-type\u003e``, ``snapshots``,"},{"line_number":724,"context_line":"``snapshots_\u003cvolume-type\u003e``, ``gigabytes``, ``gigabytes_\u003cvolume_type\u003e``, and"},{"line_number":725,"context_line":"``per_volume_gigabytes``) if defined or the global defaults (in the"},{"line_number":726,"context_line":"``quota_classes`` table) otherwise."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4f19e7d5_f9983adf","line":725,"range":{"start_line":725,"start_character":24,"end_line":725,"end_character":25},"updated":"2021-12-06 16:36:55.000000000","message":"nit: in the quotas table","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":722,"context_line":"Effective quota limits are determined based on the project\u0027s quota limits"},{"line_number":723,"context_line":"(``volumes``, ``volumes_\u003cvolume-type\u003e``, ``snapshots``,"},{"line_number":724,"context_line":"``snapshots_\u003cvolume-type\u003e``, ``gigabytes``, ``gigabytes_\u003cvolume_type\u003e``, and"},{"line_number":725,"context_line":"``per_volume_gigabytes``) if defined or the global defaults (in the"},{"line_number":726,"context_line":"``quota_classes`` table) otherwise."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"The project is determined by the ``project_id`` parameter or the ``context``\u0027s"}],"source_content_type":"text/x-rst","patch_set":2,"id":"43e12fdc_2b203115","line":725,"range":{"start_line":725,"start_character":24,"end_line":725,"end_character":25},"in_reply_to":"4f19e7d5_f9983adf","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":780,"context_line":"   def quota_check(self):"},{"line_number":781,"context_line":"       if self.get(\u0027use_quota\u0027, True):"},{"line_number":782,"context_line":"           return quota.driver.vol_snap_check_and_reserve"},{"line_number":783,"context_line":"       return self.nullcontext"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"reservations_clean_cm"},{"line_number":786,"context_line":"*********************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7739b4fb_def07264","line":783,"range":{"start_line":783,"start_character":14,"end_line":783,"end_character":30},"updated":"2021-12-06 16:36:55.000000000","message":"is this similar to contextlib.suppress?","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":780,"context_line":"   def quota_check(self):"},{"line_number":781,"context_line":"       if self.get(\u0027use_quota\u0027, True):"},{"line_number":782,"context_line":"           return quota.driver.vol_snap_check_and_reserve"},{"line_number":783,"context_line":"       return self.nullcontext"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"reservations_clean_cm"},{"line_number":786,"context_line":"*********************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"855f73f5_a29d5339","line":783,"range":{"start_line":783,"start_character":14,"end_line":783,"end_character":30},"in_reply_to":"1d73fd1d_e9ae5eff","updated":"2021-12-09 07:35:52.000000000","message":"Ack","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":780,"context_line":"   def quota_check(self):"},{"line_number":781,"context_line":"       if self.get(\u0027use_quota\u0027, True):"},{"line_number":782,"context_line":"           return quota.driver.vol_snap_check_and_reserve"},{"line_number":783,"context_line":"       return self.nullcontext"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"reservations_clean_cm"},{"line_number":786,"context_line":"*********************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1d73fd1d_e9ae5eff","line":783,"range":{"start_line":783,"start_character":14,"end_line":783,"end_character":30},"in_reply_to":"7739b4fb_def07264","updated":"2021-12-07 17:17:19.000000000","message":"Yes, but suppress is meant to suppress exceptions, though it behaves as a null context if no exception is provided. To make the distinction clear Python added the nullcontext on Python 3.7 [1], so we use our custom nullcontext until we only support Python \u003e\u003d 3.7 in Cinder and then change it to the contextlib.nullcontext, which is a clearer change in the code self.nullcontext \u003d\u003e contextlib.nullcontext. The current silly nullcontext implementation:\n\n    @contextlib.contextmanager\n    def nullcontext(*args, **kwargs):\n        yield None\n\n[1]: https://docs.python.org/3/library/contextlib.html#contextlib.nullcontext","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":793,"context_line":""},{"line_number":794,"context_line":"The ``uuid`` is the \"primary\" uuid of the operation and it won\u0027t be a different"},{"line_number":795,"context_line":"uuid for each resource that has been reserved. E.g. when accepting a volume"},{"line_number":796,"context_line":"transfer with its snapshots all reservations will use the volume\u0027s id."},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"The method use\u0027s the ``project_id`` from the ``context``."},{"line_number":799,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"46b5d3fc_3d865607","line":796,"range":{"start_line":796,"start_character":27,"end_line":796,"end_character":28},"updated":"2021-12-06 16:36:55.000000000","message":"nit: comma here","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":793,"context_line":""},{"line_number":794,"context_line":"The ``uuid`` is the \"primary\" uuid of the operation and it won\u0027t be a different"},{"line_number":795,"context_line":"uuid for each resource that has been reserved. E.g. when accepting a volume"},{"line_number":796,"context_line":"transfer with its snapshots all reservations will use the volume\u0027s id."},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"The method use\u0027s the ``project_id`` from the ``context``."},{"line_number":799,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"2adb4e33_19f60a09","line":796,"range":{"start_line":796,"start_character":27,"end_line":796,"end_character":28},"in_reply_to":"46b5d3fc_3d865607","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":847,"context_line":"Limitations"},{"line_number":848,"context_line":"-----------"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"* On the new quota system changing the quota driver will not preserve existing"},{"line_number":851,"context_line":"  quota limits and defaults unless the location where this information is"},{"line_number":852,"context_line":"  stored is shared between the old and the new drivers.  For example, it will"},{"line_number":853,"context_line":"  be preserved if both drivers store their data in the database, but it won\u0027t"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bb234cfe_21bd5e78","line":850,"range":{"start_line":850,"start_character":2,"end_line":850,"end_character":4},"updated":"2021-12-06 16:36:55.000000000","message":"nit: In","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":847,"context_line":"Limitations"},{"line_number":848,"context_line":"-----------"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"* On the new quota system changing the quota driver will not preserve existing"},{"line_number":851,"context_line":"  quota limits and defaults unless the location where this information is"},{"line_number":852,"context_line":"  stored is shared between the old and the new drivers.  For example, it will"},{"line_number":853,"context_line":"  be preserved if both drivers store their data in the database, but it won\u0027t"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7de5598a_f5f740e8","line":850,"range":{"start_line":850,"start_character":2,"end_line":850,"end_character":4},"in_reply_to":"bb234cfe_21bd5e78","updated":"2021-12-07 17:17:19.000000000","message":"Done","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":870,"context_line":"- Refactor existing code to reduce spillage of the quota system implementation"},{"line_number":871,"context_line":"  details all over the code and reduce the usage of reservations to only the"},{"line_number":872,"context_line":"  strictly necessary cases."},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"All the alternatives have the same underlying issue as the current"},{"line_number":875,"context_line":"implementation, where it would be hard to tell whether we have resolved all the"},{"line_number":876,"context_line":"issues or not, and upon encountering another out of sync case in a deployment"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b8f529e1_bd4edb68","line":873,"updated":"2021-12-06 16:36:55.000000000","message":"One more alternative is using keystone\u0027s unified limits\nhttps://docs.openstack.org/keystone/latest/admin/unified-limits.html","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":870,"context_line":"- Refactor existing code to reduce spillage of the quota system implementation"},{"line_number":871,"context_line":"  details all over the code and reduce the usage of reservations to only the"},{"line_number":872,"context_line":"  strictly necessary cases."},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"All the alternatives have the same underlying issue as the current"},{"line_number":875,"context_line":"implementation, where it would be hard to tell whether we have resolved all the"},{"line_number":876,"context_line":"issues or not, and upon encountering another out of sync case in a deployment"}],"source_content_type":"text/x-rst","patch_set":2,"id":"77f7b939_a2fd51d0","line":873,"in_reply_to":"b8f529e1_bd4edb68","updated":"2021-12-07 17:17:19.000000000","message":"Thanks! I had rejected that one a while back but forgot to add it.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":939,"context_line":"---------------------"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"End users of the Cinder service should not have significant impact, except for"},{"line_number":942,"context_line":"how the quota is counted.  Cinder volumes that fail to schedule will consume"},{"line_number":943,"context_line":"quota, which can have a positive impact on a deployment when a backend goes"},{"line_number":944,"context_line":"down, since end users will be forced to clean failed resources instead of being"},{"line_number":945,"context_line":"able to leave them be."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"Performance Impact"},{"line_number":948,"context_line":"------------------"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"0d10fa00_95139ce9","line":946,"range":{"start_line":942,"start_character":27,"end_line":946,"end_character":0},"updated":"2021-12-06 16:36:55.000000000","message":"Sorry for being quota illiterate. So currently when we create a resource, let\u0027s say volume, and it goes in error state (let\u0027s say scheduler is down), does it count in the quotas? If not, seems like we are going to change that behavior. I\u0027m not sure about if it is good to count a resource in quotas if it doesn\u0027t consume any actual space on the backend and is just a DB record? but then again maybe determining that would be a complex thing.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":true,"context_lines":[{"line_number":939,"context_line":"---------------------"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"End users of the Cinder service should not have significant impact, except for"},{"line_number":942,"context_line":"how the quota is counted.  Cinder volumes that fail to schedule will consume"},{"line_number":943,"context_line":"quota, which can have a positive impact on a deployment when a backend goes"},{"line_number":944,"context_line":"down, since end users will be forced to clean failed resources instead of being"},{"line_number":945,"context_line":"able to leave them be."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"Performance Impact"},{"line_number":948,"context_line":"------------------"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"8d17501b_2166371c","line":946,"range":{"start_line":942,"start_character":27,"end_line":946,"end_character":0},"in_reply_to":"0d10fa00_95139ce9","updated":"2021-12-07 17:17:19.000000000","message":"Current behavior is a mess, it all comes down to when/where things fail and what failure we have.\n\nWhen creating a volume, if the cinder API is able to send the request to the scheduler and it fails to schedule, then the volume will have consumed quota. \n\nBut if the failure happens on the API node after the volume has been created in the DB and before we commit the reservations, then the volume will not have consumed quota.\n\nI think in one hand we should make things easy to understand from a user perspective (if it\u0027s there and is using quota, then it\u0027s counted), and even if we could change the SQL query to not count volumes that are in ERROR status and do not have a host/cluster field, this could be a problem for an admin, because a user script could suddenly create a million volume records if the scheduler is rejecting the request.\n\nThat\u0027s what I was trying to convey in that paragraph.\n\nI\u0027ll add a bit more detail here.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":false,"context_lines":[{"line_number":939,"context_line":"---------------------"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"End users of the Cinder service should not have significant impact, except for"},{"line_number":942,"context_line":"how the quota is counted.  Cinder volumes that fail to schedule will consume"},{"line_number":943,"context_line":"quota, which can have a positive impact on a deployment when a backend goes"},{"line_number":944,"context_line":"down, since end users will be forced to clean failed resources instead of being"},{"line_number":945,"context_line":"able to leave them be."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"Performance Impact"},{"line_number":948,"context_line":"------------------"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"e0a76fae_832d79f5","line":946,"range":{"start_line":942,"start_character":27,"end_line":946,"end_character":0},"in_reply_to":"8d17501b_2166371c","updated":"2021-12-09 07:35:52.000000000","message":"Ack, I like the rewording thanks.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"- Write the new database quota driver."},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"- Write database quota driver unit tests."},{"line_number":1056,"context_line":""},{"line_number":1057,"context_line":"- Move operations to the new quota driver:"},{"line_number":1058,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"0f4bc09d_14d01113","line":1055,"range":{"start_line":1055,"start_character":0,"end_line":1055,"end_character":41},"updated":"2021-12-06 16:36:55.000000000","message":"should we move this to the testing section?","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"- Write the new database quota driver."},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"- Write database quota driver unit tests."},{"line_number":1056,"context_line":""},{"line_number":1057,"context_line":"- Move operations to the new quota driver:"},{"line_number":1058,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bc45660c_47ec8cc2","line":1055,"range":{"start_line":1055,"start_character":0,"end_line":1055,"end_character":41},"in_reply_to":"0f4bc09d_14d01113","updated":"2021-12-07 17:17:19.000000000","message":"Well, it\u0027s a work item, so I think it should be here.\nIn the current patches I have up for review this item is one of the things that are missing.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4003e3019d774b49851380989f891c5b272c3ee6","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"Testing"},{"line_number":1093,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"Besides some manual testing that will be performed to do some basic performance"},{"line_number":1096,"context_line":"comparison between the old and the new quota system, most of the testing will"},{"line_number":1097,"context_line":"be focused on the testing of the SQL queries."},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"Currently supported database engines are InnoDB and SQLite, and the second one"},{"line_number":1100,"context_line":"has some limitations and quirks that may make testing some of the queries"}],"source_content_type":"text/x-rst","patch_set":2,"id":"efd7e4a4_b893ca71","line":1097,"range":{"start_line":1095,"start_character":0,"end_line":1097,"end_character":45},"updated":"2021-12-06 16:36:55.000000000","message":"+1, i think this will be good to include in the performance impact section (as a followup after it\u0027s done) since it only mentions theoretical metric based on assumptions.","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ea286ae9a0ec4624f2f6a25dac8fc2eb91b7f515","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"Testing"},{"line_number":1093,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"Besides some manual testing that will be performed to do some basic performance"},{"line_number":1096,"context_line":"comparison between the old and the new quota system, most of the testing will"},{"line_number":1097,"context_line":"be focused on the testing of the SQL queries."},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"Currently supported database engines are InnoDB and SQLite, and the second one"},{"line_number":1100,"context_line":"has some limitations and quirks that may make testing some of the queries"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4c83ce7d_e5d19dfb","line":1097,"range":{"start_line":1095,"start_character":0,"end_line":1097,"end_character":45},"in_reply_to":"efd7e4a4_b893ca71","updated":"2021-12-07 17:17:19.000000000","message":"Ack","commit_id":"92c72babe51f2c20d75ba7a1789fe16407d3b587"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":true,"context_lines":[{"line_number":853,"context_line":"* There is a bottleneck in concurrent code execution, because the code locks on"},{"line_number":854,"context_line":"  the system wide defaults, which are common to **all** projects. So, even if"},{"line_number":855,"context_line":"  the critical section code enveloped by the check context managers is very"},{"line_number":856,"context_line":"  small, it will still limit to only 1 to happen for the whole deployment.  As"},{"line_number":857,"context_line":"  an example, if we are concurrently creating 100 volumes in as many projects,"},{"line_number":858,"context_line":"  they will be happening mostly in parallel, but once they reach the point to"},{"line_number":859,"context_line":"  check quota limits and create the DB record they will be serialized."}],"source_content_type":"text/x-rst","patch_set":3,"id":"0e3e9d80_54297f83","line":856,"range":{"start_line":856,"start_character":37,"end_line":856,"end_character":38},"updated":"2021-12-09 07:35:52.000000000","message":"operation/resource?","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b6fc06b81bb76f417f25dbb05de8adcf42151e68","unresolved":false,"context_lines":[{"line_number":853,"context_line":"* There is a bottleneck in concurrent code execution, because the code locks on"},{"line_number":854,"context_line":"  the system wide defaults, which are common to **all** projects. So, even if"},{"line_number":855,"context_line":"  the critical section code enveloped by the check context managers is very"},{"line_number":856,"context_line":"  small, it will still limit to only 1 to happen for the whole deployment.  As"},{"line_number":857,"context_line":"  an example, if we are concurrently creating 100 volumes in as many projects,"},{"line_number":858,"context_line":"  they will be happening mostly in parallel, but once they reach the point to"},{"line_number":859,"context_line":"  check quota limits and create the DB record they will be serialized."}],"source_content_type":"text/x-rst","patch_set":3,"id":"63fca8d9_9579af54","line":856,"range":{"start_line":856,"start_character":37,"end_line":856,"end_character":38},"in_reply_to":"0e3e9d80_54297f83","updated":"2021-12-14 09:34:57.000000000","message":"Done","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b48436e14c12cdf96e001a8a0e7e721bae4b2de9","unresolved":true,"context_lines":[{"line_number":903,"context_line":"* Supports different enforcement models, including hierarchies."},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"But upon closer inspection it\u0027s not without its disadvantages:"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"* Nobody is currently using it so it cannot be considered a *proven solution*,"},{"line_number":908,"context_line":"  though Nova\\ :sup:`1"},{"line_number":909,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":910,"context_line":"  Glance\\ :sup:`1"},{"line_number":911,"context_line":"  \u003chttps://blueprints.launchpad.net/glance/+spec/implement-unified-limits\u003e`_"},{"line_number":912,"context_line":"  are planning on using it."},{"line_number":913,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"704f5b64_4fea67f6","line":910,"range":{"start_line":906,"start_character":0,"end_line":910,"end_character":17},"updated":"2021-12-09 07:35:52.000000000","message":"the error seems to be around here, not sure about the syntax :sup:\n\npep8 job\n2021-12-07 21:26:59.986545 | ubuntu-focal | specs/yoga/quota-system.rst:907: D000 Mismatch: both interpreted text role prefix and reference suffix.\n2021-12-07 21:26:59.986555 | ubuntu-focal | specs/yoga/quota-system.rst:907: D000 Mismatch: both interpreted text role prefix and reference suffix.\n\ndocs job\n2021-12-07 17:37:09.651500 | ubuntu-focal | /home/zuul/src/opendev.org/openstack/cinder-specs/doc/source/specs/yoga/quota-system.rst:907:Mismatch: both interpreted text role prefix and reference suffix.","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b6fc06b81bb76f417f25dbb05de8adcf42151e68","unresolved":false,"context_lines":[{"line_number":903,"context_line":"* Supports different enforcement models, including hierarchies."},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"But upon closer inspection it\u0027s not without its disadvantages:"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"* Nobody is currently using it so it cannot be considered a *proven solution*,"},{"line_number":908,"context_line":"  though Nova\\ :sup:`1"},{"line_number":909,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":910,"context_line":"  Glance\\ :sup:`1"},{"line_number":911,"context_line":"  \u003chttps://blueprints.launchpad.net/glance/+spec/implement-unified-limits\u003e`_"},{"line_number":912,"context_line":"  are planning on using it."},{"line_number":913,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"e3f1fba2_91d05099","line":910,"range":{"start_line":906,"start_character":0,"end_line":910,"end_character":17},"in_reply_to":"704f5b64_4fea67f6","updated":"2021-12-14 09:34:57.000000000","message":"Doesn\u0027t seem to like the superscript and the link together.","commit_id":"2eb4bf57558599609756d176c2d0c8c70ac146e5"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"046f79e8b50ef058d41862991d36f577f9b30a8f","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"and reservations (``quota_usages`` table) through a listing API that we\u0027ll"},{"line_number":1023,"context_line":"still be able to provide with the current quota driver interface, and we still"},{"line_number":1024,"context_line":"have reservations (even if fewer operations use them) so that information still"},{"line_number":1025,"context_line":"remains relevant and we don\u0027t need to remove it from the response."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Security impact"},{"line_number":1028,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4862018b_6a7db099","line":1025,"updated":"2021-12-11 19:30:08.000000000","message":"I noticed that your WIP patch restricts GET and PUT on /v3/{admin_project_id}/os-quota-class-sets/{quota_class_name} to only recognizing \u0027default\u0027 as the quota_class_name (which makes sense because it\u0027s the only quota-class-set that the code will recognize).  I guess if we take the attitude that \"you can have as many quota-classes as you want as long as they are named \u0027default\u0027\", this doesn\u0027t count as an API change.","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af232b7423774cabf79774a02815b1b342c99d8c","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"and reservations (``quota_usages`` table) through a listing API that we\u0027ll"},{"line_number":1023,"context_line":"still be able to provide with the current quota driver interface, and we still"},{"line_number":1024,"context_line":"have reservations (even if fewer operations use them) so that information still"},{"line_number":1025,"context_line":"remains relevant and we don\u0027t need to remove it from the response."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Security impact"},{"line_number":1028,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"66727ced_80e37038","line":1025,"in_reply_to":"053d8b93_88bf468f","updated":"2022-07-11 08:21:57.000000000","message":"Ack","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b6fc06b81bb76f417f25dbb05de8adcf42151e68","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"and reservations (``quota_usages`` table) through a listing API that we\u0027ll"},{"line_number":1023,"context_line":"still be able to provide with the current quota driver interface, and we still"},{"line_number":1024,"context_line":"have reservations (even if fewer operations use them) so that information still"},{"line_number":1025,"context_line":"remains relevant and we don\u0027t need to remove it from the response."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Security impact"},{"line_number":1028,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5c0df2bd_e467775c","line":1025,"in_reply_to":"4862018b_6a7db099","updated":"2021-12-14 09:34:57.000000000","message":"We can have as many different DB records in the \"quota_classes\" table as we want for the \"default\" class.\nI didn\u0027t consider this an API breaking change and more of an API fix, because right now you can pass anything and it will be accepted, even if it cannot be used in our code.","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e65912cb683de9f976eefc83bda09eaf347553bf","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"and reservations (``quota_usages`` table) through a listing API that we\u0027ll"},{"line_number":1023,"context_line":"still be able to provide with the current quota driver interface, and we still"},{"line_number":1024,"context_line":"have reservations (even if fewer operations use them) so that information still"},{"line_number":1025,"context_line":"remains relevant and we don\u0027t need to remove it from the response."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Security impact"},{"line_number":1028,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"053d8b93_88bf468f","line":1025,"in_reply_to":"5c0df2bd_e467775c","updated":"2021-12-21 14:28:26.000000000","message":"Works for me!","commit_id":"c700e9b99ab0efab5d6b3e0d814176ffc0423a21"}],"specs/yoga/remove-me.rst":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0ec7fce08384f236bbbb11528a09bb2e344e2a10","unresolved":true,"context_lines":[{"line_number":1,"context_line":".. This file is a place holder.  It should be removed by"},{"line_number":2,"context_line":"   any patch proposing a spec for the Wallaby release"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6dee8766_232df277","side":"PARENT","line":1,"updated":"2021-12-01 05:42:31.000000000","message":"I\u0027ve also removed this in my spec :)\nhttps://review.opendev.org/c/openstack/cinder-specs/+/810363","commit_id":"7464b781cfcfcd334be97b20b3f66fc9518f7f9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af232b7423774cabf79774a02815b1b342c99d8c","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. This file is a place holder.  It should be removed by"},{"line_number":2,"context_line":"   any patch proposing a spec for the Wallaby release"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b1c5dbef_4510b171","side":"PARENT","line":1,"in_reply_to":"6dee8766_232df277","updated":"2022-07-11 08:21:57.000000000","message":"Ack","commit_id":"7464b781cfcfcd334be97b20b3f66fc9518f7f9b"}],"specs/zed/quota-system.rst":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cinder\u0027s current quota system is based on reservations and commits/rollbacks."},{"line_number":21,"context_line":"When an operation that consumes quota is received by the API it validates the"},{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e22f4214_78d8e7ea","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":61},"updated":"2022-07-06 19:18:55.000000000","message":"nit: comma here","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cinder\u0027s current quota system is based on reservations and commits/rollbacks."},{"line_number":21,"context_line":"When an operation that consumes quota is received by the API it validates the"},{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"}],"source_content_type":"text/x-rst","patch_set":5,"id":"400d6d4a_28e5fc8e","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":61},"in_reply_to":"ca2a6b60_09656104","updated":"2022-07-09 15:46:13.000000000","message":"+1","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cinder\u0027s current quota system is based on reservations and commits/rollbacks."},{"line_number":21,"context_line":"When an operation that consumes quota is received by the API it validates the"},{"line_number":22,"context_line":"request and checks that there\u0027s enough quota to perform the operation and"},{"line_number":23,"context_line":"creates reservations to ensure that this quota is not consumed by other"},{"line_number":24,"context_line":"operations. Then when the operation finishes these reservations are committed"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ca2a6b60_09656104","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":61},"in_reply_to":"e22f4214_78d8e7ea","updated":"2022-07-09 13:59:12.000000000","message":"I\u0027ve also rephrased it a bit to make it easier to read.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":33,"context_line":"There are many possible reasons why resource tracking can become out of sync in"},{"line_number":34,"context_line":"Cinder, including bugs in the code and services dying during an operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a workaround for quotas becoming out of sync the Cinder service has code to"},{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f152e15e_9056b45f","line":36,"range":{"start_line":36,"start_character":47,"end_line":36,"end_character":48},"updated":"2022-07-06 19:18:55.000000000","message":"nit: comma here","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":33,"context_line":"There are many possible reasons why resource tracking can become out of sync in"},{"line_number":34,"context_line":"Cinder, including bugs in the code and services dying during an operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a workaround for quotas becoming out of sync the Cinder service has code to"},{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b904c216_7ee2ea4c","line":36,"range":{"start_line":36,"start_character":47,"end_line":36,"end_character":48},"in_reply_to":"f152e15e_9056b45f","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Besides the impact on operators and users, the current quota implementation"},{"line_number":41,"context_line":"also has an impact on developers, because the system of reserve/commit and"},{"line_number":42,"context_line":"resource counting in the database has the downside of having to be very"},{"line_number":43,"context_line":"thorough in order to always keep track of everything, making the quota system a"},{"line_number":44,"context_line":"very manual and tedious process to code, which in turn results in hard to find"},{"line_number":45,"context_line":"bugs, since we don\u0027t know at which point the counting went wrong."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Low level implementation details of the current quota system are also present"},{"line_number":48,"context_line":"*everywhere* in Cinder, and almost every single area of the code needs to be"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0bc3b5e1_ee0199e3","line":45,"range":{"start_line":40,"start_character":0,"end_line":45,"end_character":65},"updated":"2022-07-06 19:18:55.000000000","message":"+1","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":37,"context_line":"make reservations expire after a given time and also has the possibility of"},{"line_number":38,"context_line":"resynching the quotas with a certain frequency."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Besides the impact on operators and users, the current quota implementation"},{"line_number":41,"context_line":"also has an impact on developers, because the system of reserve/commit and"},{"line_number":42,"context_line":"resource counting in the database has the downside of having to be very"},{"line_number":43,"context_line":"thorough in order to always keep track of everything, making the quota system a"},{"line_number":44,"context_line":"very manual and tedious process to code, which in turn results in hard to find"},{"line_number":45,"context_line":"bugs, since we don\u0027t know at which point the counting went wrong."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Low level implementation details of the current quota system are also present"},{"line_number":48,"context_line":"*everywhere* in Cinder, and almost every single area of the code needs to be"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7960d8fd_ad02474a","line":45,"range":{"start_line":40,"start_character":0,"end_line":45,"end_character":65},"in_reply_to":"0bc3b5e1_ee0199e3","updated":"2022-07-09 13:59:12.000000000","message":"Ack","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":true,"context_lines":[{"line_number":140,"context_line":"Reservation values will be stored in the ``delta`` field of the"},{"line_number":141,"context_line":"``reservations`` table just like they are today."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"For the ``Counting`` driver these values will dynamically added grouping by"},{"line_number":144,"context_line":"``resource`` for non deleted rows belonging to the specific project.  On the"},{"line_number":145,"context_line":"other hand the ``Counters`` driver will track the sum if the ``reserved`` field"},{"line_number":146,"context_line":"of the ``quota_usages`` table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d45a3753_a801726b","line":143,"range":{"start_line":143,"start_character":41,"end_line":143,"end_character":72},"updated":"2022-07-06 21:51:57.000000000","message":"will be dynamically added, grouping","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Reservation values will be stored in the ``delta`` field of the"},{"line_number":141,"context_line":"``reservations`` table just like they are today."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"For the ``Counting`` driver these values will dynamically added grouping by"},{"line_number":144,"context_line":"``resource`` for non deleted rows belonging to the specific project.  On the"},{"line_number":145,"context_line":"other hand the ``Counters`` driver will track the sum if the ``reserved`` field"},{"line_number":146,"context_line":"of the ``quota_usages`` table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d4d794da_b8bd2fdb","line":143,"range":{"start_line":143,"start_character":41,"end_line":143,"end_character":72},"in_reply_to":"d45a3753_a801726b","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"For the ``Counting`` driver these values will dynamically added grouping by"},{"line_number":144,"context_line":"``resource`` for non deleted rows belonging to the specific project.  On the"},{"line_number":145,"context_line":"other hand the ``Counters`` driver will track the sum if the ``reserved`` field"},{"line_number":146,"context_line":"of the ``quota_usages`` table."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Both drivers will adhere to the following rules when reporting in-use values:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f2419989_d6b87762","line":145,"range":{"start_line":145,"start_character":54,"end_line":145,"end_character":56},"updated":"2022-07-06 21:51:57.000000000","message":"in","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"For the ``Counting`` driver these values will dynamically added grouping by"},{"line_number":144,"context_line":"``resource`` for non deleted rows belonging to the specific project.  On the"},{"line_number":145,"context_line":"other hand the ``Counters`` driver will track the sum if the ``reserved`` field"},{"line_number":146,"context_line":"of the ``quota_usages`` table."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Both drivers will adhere to the following rules when reporting in-use values:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a0ddeb54_1d5ffcf1","line":145,"range":{"start_line":145,"start_character":54,"end_line":145,"end_character":56},"in_reply_to":"f2419989_d6b87762","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"The new system will leverage Python context manager functionality and the Oslo"},{"line_number":203,"context_line":"DB transaction context provider available in the Cinder ``RequestContext`` to"},{"line_number":204,"context_line":"facilitate the sharing of the transaction/session between different areas of"},{"line_number":205,"context_line":"the Cinder code."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This will allow developers to write cleaner code, for example when creating a"}],"source_content_type":"text/x-rst","patch_set":5,"id":"188d3fe8_ecf6f807","line":204,"range":{"start_line":204,"start_character":42,"end_line":204,"end_character":49},"updated":"2022-07-06 19:18:55.000000000","message":"are we referring to the session object or session as in the duration of the DB transaction? If we are referring to the object, then we no longer pass it through different methods for a particular operation, we\u0027ve context.session replacing that behavior now.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"The new system will leverage Python context manager functionality and the Oslo"},{"line_number":203,"context_line":"DB transaction context provider available in the Cinder ``RequestContext`` to"},{"line_number":204,"context_line":"facilitate the sharing of the transaction/session between different areas of"},{"line_number":205,"context_line":"the Cinder code."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This will allow developers to write cleaner code, for example when creating a"}],"source_content_type":"text/x-rst","patch_set":5,"id":"eab01ec4_ac2fc134","line":204,"range":{"start_line":204,"start_character":42,"end_line":204,"end_character":49},"in_reply_to":"188d3fe8_ecf6f807","updated":"2022-07-09 13:59:12.000000000","message":"That\u0027s precisely what I\u0027m saying.  The \"context.session\" is how we access in the code to the \"Oslo DB transaction context provider available in the Cinder ``RequestContext``\".\n\nI will make it explicit that I\u0027m referring to `context.session`","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"The new system will leverage Python context manager functionality and the Oslo"},{"line_number":203,"context_line":"DB transaction context provider available in the Cinder ``RequestContext`` to"},{"line_number":204,"context_line":"facilitate the sharing of the transaction/session between different areas of"},{"line_number":205,"context_line":"the Cinder code."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This will allow developers to write cleaner code, for example when creating a"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b0df52f8_16ed1b8c","line":204,"range":{"start_line":204,"start_character":42,"end_line":204,"end_character":49},"in_reply_to":"eab01ec4_ac2fc134","updated":"2022-07-09 15:46:13.000000000","message":"Ack, much clearer now, thanks","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":251,"context_line":"  checker context manager.  The quota system internal name for this is"},{"line_number":252,"context_line":"  ``volumes`` in the database."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"- ``vol_type_qty``: Delta on the number of volumes for the specific volume type"},{"line_number":255,"context_line":"  that will be consumed within the checker context manager.  Defaults to the"},{"line_number":256,"context_line":"  value of ``vol_qty`` since that\u0027s the most common case. The quota system"},{"line_number":257,"context_line":"  internal name for this is ``volumes_\u003cvolume-type\u003e`` in the database."}],"source_content_type":"text/x-rst","patch_set":5,"id":"534a295b_90707899","line":254,"range":{"start_line":254,"start_character":4,"end_line":254,"end_character":16},"updated":"2022-07-06 19:18:55.000000000","message":"Reading this name makes me think that it is the number of volumes types. I understand the naming is not trivial since ``vol_qty_type`` might not be a very good alternative as well but personally this name is confusing to me. let\u0027s see what others say.\n\nAlso how does this account for different volume types since the field it is abstracting is volumes_\u003cvolume-type\u003e which is not a single value but depends on the number of volume types in the deployment.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":251,"context_line":"  checker context manager.  The quota system internal name for this is"},{"line_number":252,"context_line":"  ``volumes`` in the database."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"- ``vol_type_qty``: Delta on the number of volumes for the specific volume type"},{"line_number":255,"context_line":"  that will be consumed within the checker context manager.  Defaults to the"},{"line_number":256,"context_line":"  value of ``vol_qty`` since that\u0027s the most common case. The quota system"},{"line_number":257,"context_line":"  internal name for this is ``volumes_\u003cvolume-type\u003e`` in the database."}],"source_content_type":"text/x-rst","patch_set":5,"id":"20b1ed03_ee926e3a","line":254,"range":{"start_line":254,"start_character":4,"end_line":254,"end_character":16},"in_reply_to":"0ace3ec7_92341b6f","updated":"2022-07-09 13:59:12.000000000","message":"I agree that the name is not great, and I think `vol_type_vol_qty` may be a better alternative. I\u0027ll change it in the spec and we can always change it and update the spec if we find it\u0027s still confusing during the code review.\n\nLike Brian said, this parameter refers to the provided volume_type_id.\n\nI believe there\u0027s only 1 example that doesn\u0027t use the default value in the proposed example patch: https://review.opendev.org/c/openstack/cinder/+/819691/8/cinder/objects/volume.py#615","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":true,"context_lines":[{"line_number":251,"context_line":"  checker context manager.  The quota system internal name for this is"},{"line_number":252,"context_line":"  ``volumes`` in the database."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"- ``vol_type_qty``: Delta on the number of volumes for the specific volume type"},{"line_number":255,"context_line":"  that will be consumed within the checker context manager.  Defaults to the"},{"line_number":256,"context_line":"  value of ``vol_qty`` since that\u0027s the most common case. The quota system"},{"line_number":257,"context_line":"  internal name for this is ``volumes_\u003cvolume-type\u003e`` in the database."}],"source_content_type":"text/x-rst","patch_set":5,"id":"0ace3ec7_92341b6f","line":254,"range":{"start_line":254,"start_character":4,"end_line":254,"end_character":16},"in_reply_to":"534a295b_90707899","updated":"2022-07-06 21:51:57.000000000","message":"I\u0027m OK with the name, though I do understand Rajat\u0027s point.  But I think it\u0027s better to keep the _qty and _gbs suffixes consistent as Gorka has them now.\n\nMy assumption is that the volume object knows what its own volume type is (and we don\u0027t allow untyped volumes to be created), so the OVO code will know which volumes_\u003cvolume-type\u003e quota to use (or will pass the volume_type_id along with the vol_type_qty to the quota check code, like in lines 215-218 above).","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":287,"context_line":"  database if the ``no_snapshot_gb_quota`` configuration option is set to"},{"line_number":288,"context_line":"  ``false`` or will be disregarded if set to ``true``."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"- ``vol_total_size``: Total volume size when creating or extending it, in the"},{"line_number":291,"context_line":"  internally the quota system uses the ``per_volume_gigabytes`` quota limit to"},{"line_number":292,"context_line":"  check this value."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7edce655_518f8206","line":290,"range":{"start_line":290,"start_character":4,"end_line":290,"end_character":18},"updated":"2022-07-06 19:18:55.000000000","message":"should we consider vol_max_size since thats the maximum size a volume can consume?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":287,"context_line":"  database if the ``no_snapshot_gb_quota`` configuration option is set to"},{"line_number":288,"context_line":"  ``false`` or will be disregarded if set to ``true``."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"- ``vol_total_size``: Total volume size when creating or extending it, in the"},{"line_number":291,"context_line":"  internally the quota system uses the ``per_volume_gigabytes`` quota limit to"},{"line_number":292,"context_line":"  check this value."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"cab42df6_ef3b9f2a","line":290,"range":{"start_line":290,"start_character":4,"end_line":290,"end_character":18},"in_reply_to":"5eee49b5_b218b089","updated":"2022-07-09 15:46:13.000000000","message":"Ack, \u0027vol_size\u0027 sounds good.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":287,"context_line":"  database if the ``no_snapshot_gb_quota`` configuration option is set to"},{"line_number":288,"context_line":"  ``false`` or will be disregarded if set to ``true``."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"- ``vol_total_size``: Total volume size when creating or extending it, in the"},{"line_number":291,"context_line":"  internally the quota system uses the ``per_volume_gigabytes`` quota limit to"},{"line_number":292,"context_line":"  check this value."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5eee49b5_b218b089","line":290,"range":{"start_line":290,"start_character":4,"end_line":290,"end_character":18},"in_reply_to":"64619653_84b43fd1","updated":"2022-07-09 13:59:12.000000000","message":"I admit I got a bit lost in this conversation...\n\nI think I named it `vol_total_size` because at some point I named had named `vol_gbs` as `vol_size` and wanted to make the distinction.\n\nThough now I think it would be clearer to name it `vol_size` instead, since the word total causes more confusion than help.\n\nI also don\u0027t want to bring the concept of thin volumes into the spec, because from the quota perspective it\u0027s not relevant, we only talk about Cinder \"volume.size\".  So I\u0027d rather not talk about \"max\".\n\nChanging it to `vol_size`.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":true,"context_lines":[{"line_number":287,"context_line":"  database if the ``no_snapshot_gb_quota`` configuration option is set to"},{"line_number":288,"context_line":"  ``false`` or will be disregarded if set to ``true``."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"- ``vol_total_size``: Total volume size when creating or extending it, in the"},{"line_number":291,"context_line":"  internally the quota system uses the ``per_volume_gigabytes`` quota limit to"},{"line_number":292,"context_line":"  check this value."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"64619653_84b43fd1","line":290,"range":{"start_line":290,"start_character":4,"end_line":290,"end_character":18},"in_reply_to":"7edce655_518f8206","updated":"2022-07-06 21:51:57.000000000","message":"Actually, we do *not* want to check per_volume_size_limit explicitly (it\u0027s sort of checked indirectly because that limit is what\u0027s used if per_volume_gigabytes is not set on a project).  It\u0027s counterintuitive, but a common use case is that an operator wants the max size to be N for most projects, and only wants a few projects to have volumes of max size M\u003eN.  Allowing the quota to be set to exceed the limit makes it easy to do that.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"  When storing reservations for transfer of volumes with snapshots they have"},{"line_number":353,"context_line":"  to be stored separately in case someone restarts the service after changing"},{"line_number":354,"context_line":"  the ``no_snapshot_gb_quota_togled`` configuration option as detailed in the"},{"line_number":355,"context_line":"  ``vol_snap_check_and_reserve_cm`` method below."},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"- Retype: When doing a retype the API needs to reserve"}],"source_content_type":"text/x-rst","patch_set":5,"id":"681e1b8d_6f401f59","line":354,"range":{"start_line":354,"start_character":29,"end_line":354,"end_character":35},"updated":"2022-07-06 19:18:55.000000000","message":"toggled","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"  When storing reservations for transfer of volumes with snapshots they have"},{"line_number":353,"context_line":"  to be stored separately in case someone restarts the service after changing"},{"line_number":354,"context_line":"  the ``no_snapshot_gb_quota_togled`` configuration option as detailed in the"},{"line_number":355,"context_line":"  ``vol_snap_check_and_reserve_cm`` method below."},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"- Retype: When doing a retype the API needs to reserve"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5c816d83_4d8b50f7","line":354,"range":{"start_line":354,"start_character":29,"end_line":354,"end_character":35},"in_reply_to":"681e1b8d_6f401f59","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"This is always something that can be changed in the future if necessary."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"The ``no_snapshot_gb_quota_togled`` parameter indicates whether the option has"},{"line_number":446,"context_line":"changed since the last run.  This is important for the ``Counters`` driver that"},{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bec83423_3f0ff5df","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":33},"updated":"2022-07-06 19:18:55.000000000","message":"toggled","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"This is always something that can be changed in the future if necessary."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"The ``no_snapshot_gb_quota_togled`` parameter indicates whether the option has"},{"line_number":446,"context_line":"changed since the last run.  This is important for the ``Counters`` driver that"},{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."}],"source_content_type":"text/x-rst","patch_set":5,"id":"334f002a_7e5af8eb","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":33},"in_reply_to":"bec83423_3f0ff5df","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"All cinder services need to be running the same quota system, so changing the"},{"line_number":451,"context_line":"quota system and the snapshot quota counting will be done in a"},{"line_number":452,"context_line":"``cinder-manage`` command, and it will be the operator\u0027s responsibility to run"},{"line_number":453,"context_line":"it without any cinder service running."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Cinder services will refuse to start if their configured quota driver and"},{"line_number":456,"context_line":"``no_snapshot_gb_quota`` values differ from the global values stored in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c7c447a3_b6a42040","line":453,"range":{"start_line":450,"start_character":62,"end_line":453,"end_character":38},"updated":"2022-07-06 19:18:55.000000000","message":"so if an operator changes driver_switched and no_snapshot_gb_quota_toggled then they have to run the cinder-manage command as well else cinder will fail to start? this should be highlighted as i can see lot of people having issues with this because they didn\u0027t read the documentation clearly.\nAlso i would prefer if there is any alternative to it since it requires a manual task that could go wrong ...","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"All cinder services need to be running the same quota system, so changing the"},{"line_number":451,"context_line":"quota system and the snapshot quota counting will be done in a"},{"line_number":452,"context_line":"``cinder-manage`` command, and it will be the operator\u0027s responsibility to run"},{"line_number":453,"context_line":"it without any cinder service running."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Cinder services will refuse to start if their configured quota driver and"},{"line_number":456,"context_line":"``no_snapshot_gb_quota`` values differ from the global values stored in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7ea6d79b_bf8fea95","line":453,"range":{"start_line":450,"start_character":62,"end_line":453,"end_character":38},"in_reply_to":"5742e3b0_72a90533","updated":"2022-07-09 13:59:12.000000000","message":"The explanation is too long for a review comment, and seems like I oversimplified the explanation a bit and not writing everything I had considered when writing the spec backfired.\n\nI\u0027ve added a \"Changing configuration\" and \"Changing configuration alternatives\" sections and reworked this method\u0027s section.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"All cinder services need to be running the same quota system, so changing the"},{"line_number":451,"context_line":"quota system and the snapshot quota counting will be done in a"},{"line_number":452,"context_line":"``cinder-manage`` command, and it will be the operator\u0027s responsibility to run"},{"line_number":453,"context_line":"it without any cinder service running."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Cinder services will refuse to start if their configured quota driver and"},{"line_number":456,"context_line":"``no_snapshot_gb_quota`` values differ from the global values stored in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0a301ead_3b8cfcc8","line":453,"range":{"start_line":450,"start_character":62,"end_line":453,"end_character":38},"in_reply_to":"7ea6d79b_bf8fea95","updated":"2022-07-09 15:46:13.000000000","message":"Thanks, it\u0027s much clear now.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"252ae7d8b23751e8566cb789fccdd6b05acfa774","unresolved":true,"context_lines":[{"line_number":447,"context_line":"would need to recalculate ``in-use`` and ``reserved`` counters.  This is"},{"line_number":448,"context_line":"something that doesn\u0027t work correctly right now."},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"All cinder services need to be running the same quota system, so changing the"},{"line_number":451,"context_line":"quota system and the snapshot quota counting will be done in a"},{"line_number":452,"context_line":"``cinder-manage`` command, and it will be the operator\u0027s responsibility to run"},{"line_number":453,"context_line":"it without any cinder service running."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Cinder services will refuse to start if their configured quota driver and"},{"line_number":456,"context_line":"``no_snapshot_gb_quota`` values differ from the global values stored in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5742e3b0_72a90533","line":453,"range":{"start_line":450,"start_character":62,"end_line":453,"end_character":38},"in_reply_to":"c7c447a3_b6a42040","updated":"2022-07-06 21:51:57.000000000","message":"Gorka can correct me, but I think what he\u0027s proposing is that the only way to change the quota driver being used will be to do it by using cinder-manage, which will check the DB and set the correct values for driver_switched and no_snapshot_gb_quota_toggled.  So the operator\u0027s responsibility will be to make sure that no cinder service is running when the operator used cinder-manage for this purpose.  The operator won\u0027t be setting these things independently, which could lead to the problem you\u0027re pointing out.  (I\u0027m not saying we don\u0027t need good docs, though!)","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":709,"context_line":""},{"line_number":710,"context_line":"   with quota.driver.group_check_cm(self._context, qty\u003d1):"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"       db_groups \u003d db.group_create(self._context,"},{"line_number":713,"context_line":"                                   updates,"},{"line_number":714,"context_line":"                                   group_snapshot_id,"},{"line_number":715,"context_line":"                                   source_group_id)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7e66a9d8_842b06f9","line":712,"range":{"start_line":712,"start_character":15,"end_line":712,"end_character":16},"updated":"2022-07-07 14:27:54.000000000","message":"nit: a single group is being created so the name is better as ``db_group``","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":709,"context_line":""},{"line_number":710,"context_line":"   with quota.driver.group_check_cm(self._context, qty\u003d1):"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"       db_groups \u003d db.group_create(self._context,"},{"line_number":713,"context_line":"                                   updates,"},{"line_number":714,"context_line":"                                   group_snapshot_id,"},{"line_number":715,"context_line":"                                   source_group_id)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e0775cb4_df352b29","line":712,"range":{"start_line":712,"start_character":15,"end_line":712,"end_character":16},"in_reply_to":"7e66a9d8_842b06f9","updated":"2022-07-09 13:59:12.000000000","message":"That\u0027s not my code, that\u0027s what we currently have [1]. I just enclosed it in the quota context manager.  ;-)\n\n[1]: https://github.com/openstack/cinder/blob/a2deecef891a16703e5410eb7805442961307090/cinder/objects/group.py#L116","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":709,"context_line":""},{"line_number":710,"context_line":"   with quota.driver.group_check_cm(self._context, qty\u003d1):"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"       db_groups \u003d db.group_create(self._context,"},{"line_number":713,"context_line":"                                   updates,"},{"line_number":714,"context_line":"                                   group_snapshot_id,"},{"line_number":715,"context_line":"                                   source_group_id)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"79493d29_85bfed30","line":712,"range":{"start_line":712,"start_character":15,"end_line":712,"end_character":16},"in_reply_to":"e0775cb4_df352b29","updated":"2022-07-09 15:46:13.000000000","message":"Ack","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":795,"context_line":""},{"line_number":796,"context_line":"   def vol_snap_check_and_reserve_cm(self, context, type_id, type_name\u003dNone,"},{"line_number":797,"context_line":"                                     project_id\u003dNone,"},{"line_number":798,"context_line":"                                     *,"},{"line_number":799,"context_line":"                                     uuid\u003dNone,"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                                     vol_gbs\u003d0, vol_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"2ee023c4_aa60ce44","line":798,"range":{"start_line":798,"start_character":37,"end_line":798,"end_character":38},"updated":"2022-07-07 14:27:54.000000000","message":"what do we mean by * here?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":795,"context_line":""},{"line_number":796,"context_line":"   def vol_snap_check_and_reserve_cm(self, context, type_id, type_name\u003dNone,"},{"line_number":797,"context_line":"                                     project_id\u003dNone,"},{"line_number":798,"context_line":"                                     *,"},{"line_number":799,"context_line":"                                     uuid\u003dNone,"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                                     vol_gbs\u003d0, vol_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f6467f80_76cd03f9","line":798,"range":{"start_line":798,"start_character":37,"end_line":798,"end_character":38},"in_reply_to":"2ee023c4_aa60ce44","updated":"2022-07-09 13:59:12.000000000","message":"That\u0027s python PEP 3102 [1] for keyword-only arguments, so when a caller passes any of the arguments after the * it must use keywords and cannot use them as positional.\n\nSo a caller cannot do:\n\n  quota_driver.vol_snap_check_and_reserve_cm(context, type_id, type_name,\n                                     project_id, uuid)\n\nThey have to do:\n\n  quota_driver.vol_snap_check_and_reserve_cm(context, type_id, type_name,\n                                     project_id, uuid\u003duuid)\n\n\n[1]: https://peps.python.org/pep-3102/","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":795,"context_line":""},{"line_number":796,"context_line":"   def vol_snap_check_and_reserve_cm(self, context, type_id, type_name\u003dNone,"},{"line_number":797,"context_line":"                                     project_id\u003dNone,"},{"line_number":798,"context_line":"                                     *,"},{"line_number":799,"context_line":"                                     uuid\u003dNone,"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                                     vol_gbs\u003d0, vol_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e1cb309c_f6e825f9","line":798,"range":{"start_line":798,"start_character":37,"end_line":798,"end_character":38},"in_reply_to":"f6467f80_76cd03f9","updated":"2022-07-09 15:46:13.000000000","message":"Ack, seems useful.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":797,"context_line":"                                     project_id\u003dNone,"},{"line_number":798,"context_line":"                                     *,"},{"line_number":799,"context_line":"                                     uuid\u003dNone,"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                                     vol_gbs\u003d0, vol_qty\u003d0,"},{"line_number":802,"context_line":"                                     vol_type_gbs\u003dNone, vol_type_qty\u003dNone,"},{"line_number":803,"context_line":"                                     snap_gbs\u003d0, snap_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"06d2ca3f_ba26f1a7","line":800,"range":{"start_line":800,"start_character":0,"end_line":800,"end_character":0},"updated":"2022-07-07 14:27:54.000000000","message":"is this line left empty for any reason?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":797,"context_line":"                                     project_id\u003dNone,"},{"line_number":798,"context_line":"                                     *,"},{"line_number":799,"context_line":"                                     uuid\u003dNone,"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                                     vol_gbs\u003d0, vol_qty\u003d0,"},{"line_number":802,"context_line":"                                     vol_type_gbs\u003dNone, vol_type_qty\u003dNone,"},{"line_number":803,"context_line":"                                     snap_gbs\u003d0, snap_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c25550e0_42313302","line":800,"range":{"start_line":800,"start_character":0,"end_line":800,"end_character":0},"in_reply_to":"06d2ca3f_ba26f1a7","updated":"2022-07-09 13:59:12.000000000","message":"Visual separation of quota modification arguments and those that aren\u0027t.  Not really necessary.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":814,"context_line":"Raises ``QuotaError`` if quota usage would go over the quota limits upon"},{"line_number":815,"context_line":"consuming provided resources:"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"- ``vol_qty`` volumes."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"- ``vol_gbs`` additional volume gigabytes."},{"line_number":820,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3c402b2a_e2473e88","line":817,"range":{"start_line":817,"start_character":14,"end_line":817,"end_character":21},"updated":"2022-07-07 14:27:54.000000000","message":"since these are already described above so not a strong ask for this but would be clear if these were mentioned in the format:\n\n``vol_qty``: number of volumes\n...","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":814,"context_line":"Raises ``QuotaError`` if quota usage would go over the quota limits upon"},{"line_number":815,"context_line":"consuming provided resources:"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"- ``vol_qty`` volumes."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"- ``vol_gbs`` additional volume gigabytes."},{"line_number":820,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"316091d2_778e23c4","line":817,"range":{"start_line":817,"start_character":14,"end_line":817,"end_character":21},"in_reply_to":"3c402b2a_e2473e88","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":836,"context_line":""},{"line_number":837,"context_line":"Unlike the ``vol_gbs``, ``vol_type_gbs``, ``snap_gbs``, and ``snap_type_gbs``"},{"line_number":838,"context_line":"parameters, the ``vol_total_size`` is not an increment over existing"},{"line_number":839,"context_line":"consumption, but an absolute value representing the total size of the volume."},{"line_number":840,"context_line":"And the context manager also raises a ``QuotaError`` exception if it is greater"},{"line_number":841,"context_line":"than the ``per_volume_gigabytes`` limit."},{"line_number":842,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f76fd47e_e3dc07c0","line":839,"range":{"start_line":839,"start_character":52,"end_line":839,"end_character":57},"updated":"2022-07-07 14:27:54.000000000","message":"maximum?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":836,"context_line":""},{"line_number":837,"context_line":"Unlike the ``vol_gbs``, ``vol_type_gbs``, ``snap_gbs``, and ``snap_type_gbs``"},{"line_number":838,"context_line":"parameters, the ``vol_total_size`` is not an increment over existing"},{"line_number":839,"context_line":"consumption, but an absolute value representing the total size of the volume."},{"line_number":840,"context_line":"And the context manager also raises a ``QuotaError`` exception if it is greater"},{"line_number":841,"context_line":"than the ``per_volume_gigabytes`` limit."},{"line_number":842,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"046500f2_514c8ee0","line":839,"range":{"start_line":839,"start_character":52,"end_line":839,"end_character":57},"in_reply_to":"f76fd47e_e3dc07c0","updated":"2022-07-09 13:59:12.000000000","message":"replaced with ``vol_size`` as decided above.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":862,"context_line":"reservations will pass the volume\u0027s ``uuid``."},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"Both drivers must use different entries for volume and snapshot gigabyte"},{"line_number":865,"context_line":"reservations because the ``no_snapshot_gb_quota_togled`` configuration option"},{"line_number":866,"context_line":"may be changed and the service restarted before a transfer is accepted, and the"},{"line_number":867,"context_line":"``Counters`` driver will need to make a decision both when recalculating (if"},{"line_number":868,"context_line":"driver has changed) and on transfer accept."}],"source_content_type":"text/x-rst","patch_set":5,"id":"042ce7e0_5fd5a87d","line":865,"range":{"start_line":865,"start_character":48,"end_line":865,"end_character":54},"updated":"2022-07-06 19:18:55.000000000","message":"toggled","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":862,"context_line":"reservations will pass the volume\u0027s ``uuid``."},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"Both drivers must use different entries for volume and snapshot gigabyte"},{"line_number":865,"context_line":"reservations because the ``no_snapshot_gb_quota_togled`` configuration option"},{"line_number":866,"context_line":"may be changed and the service restarted before a transfer is accepted, and the"},{"line_number":867,"context_line":"``Counters`` driver will need to make a decision both when recalculating (if"},{"line_number":868,"context_line":"driver has changed) and on transfer accept."}],"source_content_type":"text/x-rst","patch_set":5,"id":"689097c1_73e1c6d4","line":865,"range":{"start_line":865,"start_character":48,"end_line":865,"end_character":54},"in_reply_to":"042ce7e0_5fd5a87d","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":872,"context_line":"and processes in the node as well as across different nodes."},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"For the database driver this can be achieved using a ``SELECT FOR UPDATE`` on"},{"line_number":875,"context_line":"the ``backups`` and ``backup_gigabytes`` quota limits which blocks other"},{"line_number":876,"context_line":"requests until the context manager exists."},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"Users of this context manager should try to keep the code within the context"},{"line_number":879,"context_line":"manager to a minimum to allow higher concurrency."}],"source_content_type":"text/x-rst","patch_set":5,"id":"94aae64e_32f511e9","line":876,"range":{"start_line":875,"start_character":60,"end_line":876,"end_character":8},"updated":"2022-07-07 14:27:54.000000000","message":"we are not actually blocking other requests but only blocking those that requires the tables we\u0027ve locked. The backup operation should not be blocking a volume create right?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":872,"context_line":"and processes in the node as well as across different nodes."},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"For the database driver this can be achieved using a ``SELECT FOR UPDATE`` on"},{"line_number":875,"context_line":"the ``backups`` and ``backup_gigabytes`` quota limits which blocks other"},{"line_number":876,"context_line":"requests until the context manager exists."},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"Users of this context manager should try to keep the code within the context"},{"line_number":879,"context_line":"manager to a minimum to allow higher concurrency."}],"source_content_type":"text/x-rst","patch_set":5,"id":"99a19a2b_8e1d7d94","line":876,"range":{"start_line":875,"start_character":60,"end_line":876,"end_character":8},"in_reply_to":"94aae64e_32f511e9","updated":"2022-07-09 13:59:12.000000000","message":"Correct. Rephrased it.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":915,"context_line":".. code-block:: python"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"   def vol_snap_free(self, context, type_id, type_name\u003dNone, project_id\u003dNone,"},{"line_number":918,"context_line":"                     *,"},{"line_number":919,"context_line":"                     vol_gbs\u003d0, vol_qty\u003d0,"},{"line_number":920,"context_line":"                     vol_type_gbs\u003dNone, vol_type_qty\u003dNone,"},{"line_number":921,"context_line":"                     snap_gbs\u003d0, snap_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f5ccc650_53d8f697","line":918,"range":{"start_line":918,"start_character":21,"end_line":918,"end_character":23},"updated":"2022-07-07 14:27:54.000000000","message":"same, what does this mean?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":915,"context_line":".. code-block:: python"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"   def vol_snap_free(self, context, type_id, type_name\u003dNone, project_id\u003dNone,"},{"line_number":918,"context_line":"                     *,"},{"line_number":919,"context_line":"                     vol_gbs\u003d0, vol_qty\u003d0,"},{"line_number":920,"context_line":"                     vol_type_gbs\u003dNone, vol_type_qty\u003dNone,"},{"line_number":921,"context_line":"                     snap_gbs\u003d0, snap_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a0ab582d_f72f3890","line":918,"range":{"start_line":918,"start_character":21,"end_line":918,"end_character":23},"in_reply_to":"4009a97b_a4f6f814","updated":"2022-07-09 15:46:13.000000000","message":"Ack","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":915,"context_line":".. code-block:: python"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"   def vol_snap_free(self, context, type_id, type_name\u003dNone, project_id\u003dNone,"},{"line_number":918,"context_line":"                     *,"},{"line_number":919,"context_line":"                     vol_gbs\u003d0, vol_qty\u003d0,"},{"line_number":920,"context_line":"                     vol_type_gbs\u003dNone, vol_type_qty\u003dNone,"},{"line_number":921,"context_line":"                     snap_gbs\u003d0, snap_qty\u003d0,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"4009a97b_a4f6f814","line":918,"range":{"start_line":918,"start_character":21,"end_line":918,"end_character":23},"in_reply_to":"f5ccc650_53d8f697","updated":"2022-07-09 13:59:12.000000000","message":"Explained above.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":948,"context_line":"the ``context``\u0027s ``project_id`` will be ignored."},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"The ``Counting`` driver must also take into account the"},{"line_number":951,"context_line":"``no_snapshot_gb_quota_togled`` configuration option when committing a"},{"line_number":952,"context_line":"transfer, because the snapshot reservations are stored in different row entries"},{"line_number":953,"context_line":"in case the option is changed and the service rebooted before a transfer is"},{"line_number":954,"context_line":"accepted."}],"source_content_type":"text/x-rst","patch_set":5,"id":"e9088a40_42146a93","line":951,"range":{"start_line":951,"start_character":23,"end_line":951,"end_character":29},"updated":"2022-07-06 19:18:55.000000000","message":"toggled","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":948,"context_line":"the ``context``\u0027s ``project_id`` will be ignored."},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"The ``Counting`` driver must also take into account the"},{"line_number":951,"context_line":"``no_snapshot_gb_quota_togled`` configuration option when committing a"},{"line_number":952,"context_line":"transfer, because the snapshot reservations are stored in different row entries"},{"line_number":953,"context_line":"in case the option is changed and the service rebooted before a transfer is"},{"line_number":954,"context_line":"accepted."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5beca9d3_4631098d","line":951,"range":{"start_line":951,"start_character":23,"end_line":951,"end_character":29},"in_reply_to":"e9088a40_42146a93","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":973,"context_line":""},{"line_number":974,"context_line":"- The new quota system drops the illusion that Cinder can support multiple ORM"},{"line_number":975,"context_line":"  systems and accepts the fact that Cinder is tightly coupled with SQLAlchemy"},{"line_number":976,"context_line":"  and MySQL/InnoDB (this is not new, there is already a patch proposed that"},{"line_number":977,"context_line":"  removes the intermediate layer, so instead of having all the quota code in"},{"line_number":978,"context_line":"  ``cinder/db/sqlalchemy/api.py`` it will be under ``cinder/quota``, including"},{"line_number":979,"context_line":"  all the database queries."},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"  This approach has the downside of having DB code in multiple places, with"}],"source_content_type":"text/x-rst","patch_set":5,"id":"033b686c_8539acb5","line":978,"range":{"start_line":976,"start_character":37,"end_line":978,"end_character":67},"updated":"2022-07-07 14:27:54.000000000","message":"if we are referring to stephen\u0027s patch[1] then he\u0027s moving DB calls from db/sqlalchemy/api.py to db/api.py so not sure why we will not be keeping quota DB code outside of the db dir\n\n[1] https://review.opendev.org/c/openstack/cinder/+/813229","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":973,"context_line":""},{"line_number":974,"context_line":"- The new quota system drops the illusion that Cinder can support multiple ORM"},{"line_number":975,"context_line":"  systems and accepts the fact that Cinder is tightly coupled with SQLAlchemy"},{"line_number":976,"context_line":"  and MySQL/InnoDB (this is not new, there is already a patch proposed that"},{"line_number":977,"context_line":"  removes the intermediate layer, so instead of having all the quota code in"},{"line_number":978,"context_line":"  ``cinder/db/sqlalchemy/api.py`` it will be under ``cinder/quota``, including"},{"line_number":979,"context_line":"  all the database queries."},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"  This approach has the downside of having DB code in multiple places, with"}],"source_content_type":"text/x-rst","patch_set":5,"id":"993d228f_c5e17166","line":978,"range":{"start_line":976,"start_character":37,"end_line":978,"end_character":67},"in_reply_to":"033b686c_8539acb5","updated":"2022-07-09 13:59:12.000000000","message":"Yes, I\u0027m referring to that patch, and what I\u0027m saying is that since we are dropping the illusion of using something other than sqlalchemy and there is no longer going to be an abstraction, then the quota drivers can directly have sqlalchemy code without needing a DB abstraction layer.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":979,"context_line":"  all the database queries."},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"  This approach has the downside of having DB code in multiple places, with"},{"line_number":982,"context_line":"  potential code duplication, but on the other hand it has the great benefit of"},{"line_number":983,"context_line":"  having the quota code contained in fewer files and using less memory for"},{"line_number":984,"context_line":"  custom quota drivers (currently the standard quota driver file is always"},{"line_number":985,"context_line":"  loaded even if it\u0027s not instantiated)."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"- All deployments will use the default quota class instead of supporting the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"cc13549f_e5481a57","line":984,"range":{"start_line":982,"start_character":52,"end_line":984,"end_character":22},"updated":"2022-07-07 14:27:54.000000000","message":"but isn\u0027t this different from the format we are going to have i.e. DB code in cinder/db/api.py? I\u0027m not sure how keeping the DB related code inside the cinder/db/api.py would cause any issue but maybe I\u0027m just missing some implementation details here","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":979,"context_line":"  all the database queries."},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"  This approach has the downside of having DB code in multiple places, with"},{"line_number":982,"context_line":"  potential code duplication, but on the other hand it has the great benefit of"},{"line_number":983,"context_line":"  having the quota code contained in fewer files and using less memory for"},{"line_number":984,"context_line":"  custom quota drivers (currently the standard quota driver file is always"},{"line_number":985,"context_line":"  loaded even if it\u0027s not instantiated)."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"- All deployments will use the default quota class instead of supporting the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6d2f97b6_4649d7ce","line":984,"range":{"start_line":982,"start_character":52,"end_line":984,"end_character":22},"in_reply_to":"7747ff64_de9c0e33","updated":"2022-07-09 15:46:13.000000000","message":"Ack, makes sense, the two driver methods will conflict in same file so better to implement them separately.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":979,"context_line":"  all the database queries."},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"  This approach has the downside of having DB code in multiple places, with"},{"line_number":982,"context_line":"  potential code duplication, but on the other hand it has the great benefit of"},{"line_number":983,"context_line":"  having the quota code contained in fewer files and using less memory for"},{"line_number":984,"context_line":"  custom quota drivers (currently the standard quota driver file is always"},{"line_number":985,"context_line":"  loaded even if it\u0027s not instantiated)."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"- All deployments will use the default quota class instead of supporting the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7747ff64_de9c0e33","line":984,"range":{"start_line":982,"start_character":52,"end_line":984,"end_character":22},"in_reply_to":"cc13549f_e5481a57","updated":"2022-07-09 13:59:12.000000000","message":"Having the quota code for the 2 different quota drivers in cinder/db/api.py means that when you want to look for the queries of the ``Counter`` driver you not only have to skip the ones from the ``Counting`` driver, but also every single DB query that Cinder has.\n\nAt this point the apy.py is a huge file that is hard to maintain because everything is there, and every time somebody changes something a bunch of patches go into merge conflict.\n\nBy having the DB queries close to their abstraction makes it a lot easier to work with.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1005,"context_line":"-----------"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"* Spec is aimed at these 2 drivers, so additional drivers may not be easy to"},{"line_number":1008,"context_line":"  add.  Though it shouldn\u0027t be a problem if these 2 work as expected."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"* There is a bottleneck in concurrent code execution, because the code locks on"},{"line_number":1011,"context_line":"  the system wide defaults, which are common to **all** projects. So, even if"}],"source_content_type":"text/x-rst","patch_set":5,"id":"70b88c75_da4ab4ad","line":1008,"range":{"start_line":1008,"start_character":8,"end_line":1008,"end_character":69},"updated":"2022-07-07 14:27:54.000000000","message":"+1","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"-----------"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"* Spec is aimed at these 2 drivers, so additional drivers may not be easy to"},{"line_number":1008,"context_line":"  add.  Though it shouldn\u0027t be a problem if these 2 work as expected."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"* There is a bottleneck in concurrent code execution, because the code locks on"},{"line_number":1011,"context_line":"  the system wide defaults, which are common to **all** projects. So, even if"}],"source_content_type":"text/x-rst","patch_set":5,"id":"686e04cc_9a6a7a58","line":1008,"range":{"start_line":1008,"start_character":8,"end_line":1008,"end_character":69},"in_reply_to":"70b88c75_da4ab4ad","updated":"2022-07-09 13:59:12.000000000","message":"Ack","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"But upon closer inspection it\u0027s not without its disadvantages:"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"* Nobody is currently using it so it cannot be considered a *proven solution*,"},{"line_number":1061,"context_line":"  though `Nova"},{"line_number":1062,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":1063,"context_line":"  `Glance"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9d4c63fe_1ac5fa79","line":1060,"range":{"start_line":1060,"start_character":2,"end_line":1060,"end_character":77},"updated":"2022-07-07 14:27:54.000000000","message":"This is not true anymore, glance has already added support for it in yoga\nSee gerrit topic[1] for changes and [2] for documentation\nAlso not sure but from the series of changes merged, looks like nova supports it too now[3]\n\n[1] https://review.opendev.org/q/topic:bp%252Fglance-unified-quotas \n[2] https://docs.openstack.org/glance/latest/admin/quotas.html\n[3] https://review.opendev.org/q/topic:bp%252Funified-limits-nova","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"But upon closer inspection it\u0027s not without its disadvantages:"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"* Nobody is currently using it so it cannot be considered a *proven solution*,"},{"line_number":1061,"context_line":"  though `Nova"},{"line_number":1062,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":1063,"context_line":"  `Glance"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a387ce0c_7e1df5c6","line":1060,"range":{"start_line":1060,"start_character":2,"end_line":1060,"end_character":77},"in_reply_to":"9d4c63fe_1ac5fa79","updated":"2022-07-09 13:59:12.000000000","message":"I\u0027ll update the phrase.\n\nI don\u0027t know how Glance quotas work, but I can tell you that the design of the Unified Limits looks all kinds of wrong to me when I tried to design the new Cinder quota system with it.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"But upon closer inspection it\u0027s not without its disadvantages:"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"* Nobody is currently using it so it cannot be considered a *proven solution*,"},{"line_number":1061,"context_line":"  though `Nova"},{"line_number":1062,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":1063,"context_line":"  `Glance"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6143534b_47d7acde","line":1060,"range":{"start_line":1060,"start_character":2,"end_line":1060,"end_character":77},"in_reply_to":"a387ce0c_7e1df5c6","updated":"2022-07-09 15:46:13.000000000","message":"I agree with all the points you\u0027ve mentioned and it doesn\u0027t seem like a very good solution for us. I think for glance, they didn\u0027t have any quota mechanism initially so this seemed to work best for them regarding implementation and working but that\u0027s just my assumption.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1061,"context_line":"  though `Nova"},{"line_number":1062,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":1063,"context_line":"  `Glance"},{"line_number":1064,"context_line":"  \u003chttps://blueprints.launchpad.net/glance/+spec/implement-unified-limits\u003e`_"},{"line_number":1065,"context_line":"  have expressed their intention to use it."},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"* The Unified Limits system does not have any mechanism to prevent race"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e88181d1_68eb7b85","line":1064,"range":{"start_line":1064,"start_character":3,"end_line":1064,"end_character":73},"updated":"2022-07-07 14:27:54.000000000","message":"this blueprint tracks all changes as gerrit topic\nhttps://blueprints.launchpad.net/glance/+spec/glance-unified-quotas","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"  though `Nova"},{"line_number":1062,"context_line":"  \u003chttps://blueprints.launchpad.net/nova/+spec/unified-limits-nova\u003e`_ and"},{"line_number":1063,"context_line":"  `Glance"},{"line_number":1064,"context_line":"  \u003chttps://blueprints.launchpad.net/glance/+spec/implement-unified-limits\u003e`_"},{"line_number":1065,"context_line":"  have expressed their intention to use it."},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"* The Unified Limits system does not have any mechanism to prevent race"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fe956fb5_8fbce62c","line":1064,"range":{"start_line":1064,"start_character":3,"end_line":1064,"end_character":73},"in_reply_to":"e88181d1_68eb7b85","updated":"2022-07-09 13:59:12.000000000","message":"Ack","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1076,"context_line":"  own would have succeeded)."},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"* The oslo.limit project will fail a limit check if the limit has not been"},{"line_number":1079,"context_line":"  previously registered on KeyStone, which is the opposite of how our quota"},{"line_number":1080,"context_line":"  system currently behaves, as it assumes unlimited (-1).  This means that"},{"line_number":1081,"context_line":"  Cinder will either have to manage the registrations of the limits when we"},{"line_number":1082,"context_line":"  create or destroy volume types, when a project is given access to a volume"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0ccefc2b_0b40fcbd","line":1079,"range":{"start_line":1079,"start_character":24,"end_line":1079,"end_character":26},"updated":"2022-07-07 14:27:54.000000000","message":"nit: in","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"  own would have succeeded)."},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"* The oslo.limit project will fail a limit check if the limit has not been"},{"line_number":1079,"context_line":"  previously registered on KeyStone, which is the opposite of how our quota"},{"line_number":1080,"context_line":"  system currently behaves, as it assumes unlimited (-1).  This means that"},{"line_number":1081,"context_line":"  Cinder will either have to manage the registrations of the limits when we"},{"line_number":1082,"context_line":"  create or destroy volume types, when a project is given access to a volume"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f4ac4f95_78e5b4dd","line":1079,"range":{"start_line":1079,"start_character":24,"end_line":1079,"end_character":26},"in_reply_to":"0ccefc2b_0b40fcbd","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"the same duplication.  These 2 races can be prevented with a ``SELECT ...  FOR"},{"line_number":1142,"context_line":"UPDATE`` on the ``quota_classes`` table."},{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"At the time of this writing we are hoping that the bottleneck is not"},{"line_number":1145,"context_line":"significant enough to warrant the extra effort of removing it.  If time proves"},{"line_number":1146,"context_line":"us wrong we can go and implement one of these or other solution."},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"c0953164_b07bf1d4","line":1144,"range":{"start_line":1144,"start_character":15,"end_line":1144,"end_character":27},"updated":"2022-07-07 14:27:54.000000000","message":"nit: writing this","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"the same duplication.  These 2 races can be prevented with a ``SELECT ...  FOR"},{"line_number":1142,"context_line":"UPDATE`` on the ``quota_classes`` table."},{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"At the time of this writing we are hoping that the bottleneck is not"},{"line_number":1145,"context_line":"significant enough to warrant the extra effort of removing it.  If time proves"},{"line_number":1146,"context_line":"us wrong we can go and implement one of these or other solution."},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f3c9aa65_c5def2f6","line":1144,"range":{"start_line":1144,"start_character":15,"end_line":1144,"end_character":27},"in_reply_to":"c0953164_b07bf1d4","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9f88a0405974d7d30e0df70d7267d4dd5a1b5246","unresolved":true,"context_lines":[{"line_number":1330,"context_line":""},{"line_number":1331,"context_line":"- Write the ``Counting`` database quota driver."},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"- Move operations to the new quota driver:"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"  * Create volume"},{"line_number":1336,"context_line":"  * Delete volume"},{"line_number":1337,"context_line":"  * Manage volume"},{"line_number":1338,"context_line":"  * Extend volume"},{"line_number":1339,"context_line":"  * Retype volume"},{"line_number":1340,"context_line":"  * Transfer volume"},{"line_number":1341,"context_line":"  * Create snapshot"},{"line_number":1342,"context_line":"  * Delete snapshot"},{"line_number":1343,"context_line":"  * Manage snapshot"},{"line_number":1344,"context_line":"  * Backup create"},{"line_number":1345,"context_line":"  * Backup restore"},{"line_number":1346,"context_line":"  * Group create"},{"line_number":1347,"context_line":"  * Group delete"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"- Remove code for the old quota driver."},{"line_number":1350,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"cbee0b86_64f8c7dc","line":1347,"range":{"start_line":1333,"start_character":0,"end_line":1347,"end_character":16},"updated":"2022-07-07 14:27:54.000000000","message":"I didn\u0027t understand this item clearly. what part of these operations we are planning to move to new quota driver?","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1330,"context_line":""},{"line_number":1331,"context_line":"- Write the ``Counting`` database quota driver."},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"- Move operations to the new quota driver:"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"  * Create volume"},{"line_number":1336,"context_line":"  * Delete volume"},{"line_number":1337,"context_line":"  * Manage volume"},{"line_number":1338,"context_line":"  * Extend volume"},{"line_number":1339,"context_line":"  * Retype volume"},{"line_number":1340,"context_line":"  * Transfer volume"},{"line_number":1341,"context_line":"  * Create snapshot"},{"line_number":1342,"context_line":"  * Delete snapshot"},{"line_number":1343,"context_line":"  * Manage snapshot"},{"line_number":1344,"context_line":"  * Backup create"},{"line_number":1345,"context_line":"  * Backup restore"},{"line_number":1346,"context_line":"  * Group create"},{"line_number":1347,"context_line":"  * Group delete"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"- Remove code for the old quota driver."},{"line_number":1350,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b159056a_9ff0a507","line":1347,"range":{"start_line":1333,"start_character":0,"end_line":1347,"end_character":16},"in_reply_to":"cbee0b86_64f8c7dc","updated":"2022-07-09 13:59:12.000000000","message":"Rephrased it.","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f3d84eabce861e4ce5743c402fa33d5fb21369d1","unresolved":true,"context_lines":[{"line_number":1407,"context_line":"The Cinder quota documentation will be updated to reflect how resources will be"},{"line_number":1408,"context_line":"tracked now, to contain description and use cases of the different quota"},{"line_number":1409,"context_line":"drivers, as well as the procedure to change the quota driver driver and the"},{"line_number":1410,"context_line":"``no_snapshot_gb_quota_togled`` configuration option."},{"line_number":1411,"context_line":""},{"line_number":1412,"context_line":"References"},{"line_number":1413,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"2c3e4688_4f9a6347","line":1410,"range":{"start_line":1410,"start_character":23,"end_line":1410,"end_character":29},"updated":"2022-07-06 19:18:55.000000000","message":"toggled","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b95bf3faab9beb2a199b636524e28fea78fb761","unresolved":false,"context_lines":[{"line_number":1407,"context_line":"The Cinder quota documentation will be updated to reflect how resources will be"},{"line_number":1408,"context_line":"tracked now, to contain description and use cases of the different quota"},{"line_number":1409,"context_line":"drivers, as well as the procedure to change the quota driver driver and the"},{"line_number":1410,"context_line":"``no_snapshot_gb_quota_togled`` configuration option."},{"line_number":1411,"context_line":""},{"line_number":1412,"context_line":"References"},{"line_number":1413,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f6a71727_276fb075","line":1410,"range":{"start_line":1410,"start_character":23,"end_line":1410,"end_character":29},"in_reply_to":"2c3e4688_4f9a6347","updated":"2022-07-09 13:59:12.000000000","message":"Done","commit_id":"e403a3de92629df45b5d50ecc4aaaa1f94380c9b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ef731078b6268cf1c1a0333663a859c8fa7b8f76","unresolved":true,"context_lines":[{"line_number":1260,"context_line":"    heartbeats time out.  This introduces an unnecessary delay on the Cinder"},{"line_number":1261,"context_line":"    restart."},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"  - Spurious/temporary network issues that may Cinder think that there are no"},{"line_number":1264,"context_line":"    running services.  This is actually the biggest issues."},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"Since changing the quota configuration options is not something that\u0027s going to"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ea912dd_66f33472","line":1263,"range":{"start_line":1263,"start_character":38,"end_line":1263,"end_character":59},"updated":"2022-07-09 15:46:13.000000000","message":"nit:\nthat may make Cinder think\nOR\nmay make Cinder think","commit_id":"b2d55b1b54ddb2b129d2f26c0465651f8c3b646d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af232b7423774cabf79774a02815b1b342c99d8c","unresolved":false,"context_lines":[{"line_number":1260,"context_line":"    heartbeats time out.  This introduces an unnecessary delay on the Cinder"},{"line_number":1261,"context_line":"    restart."},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"  - Spurious/temporary network issues that may Cinder think that there are no"},{"line_number":1264,"context_line":"    running services.  This is actually the biggest issues."},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"Since changing the quota configuration options is not something that\u0027s going to"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fd1463bb_0aecca9f","line":1263,"range":{"start_line":1263,"start_character":38,"end_line":1263,"end_character":59},"in_reply_to":"1ea912dd_66f33472","updated":"2022-07-11 08:21:57.000000000","message":"Done","commit_id":"b2d55b1b54ddb2b129d2f26c0465651f8c3b646d"}]}
