)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-07-27 17:30:26 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provide support for creating dynamic quota resources"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint dynamic-quota-resource"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I13b8e15896ffcb7d3aafe6bffb394ef1c8f487ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_ac14d3e8","line":8,"updated":"2015-07-27 18:39:18.000000000","message":"Commit message need to be updated.","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"most common amongst all the available options. These options are used"},{"line_number":12,"context_line":"for better operability, managebility and providing specific"},{"line_number":13,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":14,"context_line":"seggregate the cloud as per these options, there is no option"},{"line_number":15,"context_line":"for properly managing the quota associated with them. At present,"},{"line_number":16,"context_line":"there is no option provided for an Openstack admin to set and manage"},{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_dccc058b","line":14,"range":{"start_line":14,"start_character":2,"end_line":14,"end_character":4},"updated":"2015-08-07 10:12:19.000000000","message":"nit: segregate","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"most common amongst all the available options. These options are used"},{"line_number":12,"context_line":"for better operability, managebility and providing specific"},{"line_number":13,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":14,"context_line":"seggregate the cloud as per these options, there is no option"},{"line_number":15,"context_line":"for properly managing the quota associated with them. At present,"},{"line_number":16,"context_line":"there is no option provided for an Openstack admin to set and manage"},{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_5e71b176","line":14,"in_reply_to":"1a4dcd0f_dccc058b","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"for better operability, managebility and providing specific"},{"line_number":13,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":14,"context_line":"seggregate the cloud as per these options, there is no option"},{"line_number":15,"context_line":"for properly managing the quota associated with them. At present,"},{"line_number":16,"context_line":"there is no option provided for an Openstack admin to set and manage"},{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_bc7fb913","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":52},"updated":"2015-08-07 10:12:19.000000000","message":"in fact there is no quota for these options","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"for better operability, managebility and providing specific"},{"line_number":13,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":14,"context_line":"seggregate the cloud as per these options, there is no option"},{"line_number":15,"context_line":"for properly managing the quota associated with them. At present,"},{"line_number":16,"context_line":"there is no option provided for an Openstack admin to set and manage"},{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_de48618d","line":15,"in_reply_to":"1a4dcd0f_bc7fb913","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This spec plans to solve this problem by introducing the concept of"},{"line_number":20,"context_line":"dynamic resource. Dynamic resource can be a combination of"},{"line_number":21,"context_line":"availability zone, flavor or hardware type aggregate exposed"},{"line_number":22,"context_line":"via a flavor which can help for effective quota management in"},{"line_number":23,"context_line":"these comman deployment scenarios."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_1cb26de5","line":20,"range":{"start_line":20,"start_character":8,"end_line":20,"end_character":34},"updated":"2015-08-07 10:12:19.000000000","message":"nit: resources","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Quota by Flavor, Quota by AZ or both."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This spec plans to solve this problem by introducing the concept of"},{"line_number":20,"context_line":"dynamic resource. Dynamic resource can be a combination of"},{"line_number":21,"context_line":"availability zone, flavor or hardware type aggregate exposed"},{"line_number":22,"context_line":"via a flavor which can help for effective quota management in"},{"line_number":23,"context_line":"these comman deployment scenarios."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_3e2b8596","line":20,"in_reply_to":"1a4dcd0f_1cb26de5","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"dynamic resource. Dynamic resource can be a combination of"},{"line_number":21,"context_line":"availability zone, flavor or hardware type aggregate exposed"},{"line_number":22,"context_line":"via a flavor which can help for effective quota management in"},{"line_number":23,"context_line":"these comman deployment scenarios."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Co-Authored-By: Vilobh Meshram \u003cvilobhmm@yahoo-inc.com\u003e"},{"line_number":26,"context_line":"Co-Authored-By: Joshua Harlow \u003charlowja@yahoo-inc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_5ca795bc","line":23,"range":{"start_line":23,"start_character":10,"end_line":23,"end_character":11},"updated":"2015-08-07 10:12:19.000000000","message":"nit: common","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"dynamic resource. Dynamic resource can be a combination of"},{"line_number":21,"context_line":"availability zone, flavor or hardware type aggregate exposed"},{"line_number":22,"context_line":"via a flavor which can help for effective quota management in"},{"line_number":23,"context_line":"these comman deployment scenarios."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Co-Authored-By: Vilobh Meshram \u003cvilobhmm@yahoo-inc.com\u003e"},{"line_number":26,"context_line":"Co-Authored-By: Joshua Harlow \u003charlowja@yahoo-inc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_a1077a17","line":23,"in_reply_to":"1a4dcd0f_5ca795bc","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Co-Authored-By: Vilobh Meshram \u003cvilobhmm@yahoo-inc.com\u003e"},{"line_number":26,"context_line":"Co-Authored-By: Joshua Harlow \u003charlowja@yahoo-inc.com\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"blueprint dynamic-quota-resource"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I13b8e15896ffcb7d3aafe6bffb394ef1c8f487ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_fce541db","line":27,"updated":"2015-08-07 10:12:19.000000000","message":"nit: all tags should be in a single block at the bottom of the commit message","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Co-Authored-By: Vilobh Meshram \u003cvilobhmm@yahoo-inc.com\u003e"},{"line_number":26,"context_line":"Co-Authored-By: Joshua Harlow \u003charlowja@yahoo-inc.com\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"blueprint dynamic-quota-resource"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I13b8e15896ffcb7d3aafe6bffb394ef1c8f487ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_e1cee2b6","line":27,"in_reply_to":"1a4dcd0f_fce541db","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"28d47c51290fcede6c709510e1b045cab3e2d0af","unresolved":false,"context_lines":[{"line_number":9,"context_line":"There are multiple ways to slice an Openstack cloud - availability"},{"line_number":10,"context_line":"zones, aggregates exposed via flavors and special flavors being the"},{"line_number":11,"context_line":"most common amongst all the available options. These options are used"},{"line_number":12,"context_line":"for better operability, managebility and providing specific"},{"line_number":13,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":14,"context_line":"segregate the cloud as per these options, at present, there is"},{"line_number":15,"context_line":"no option provided for an Openstack admin to set and manage Quota"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"da20952f_a3775d01","line":12,"updated":"2015-08-27 11:25:22.000000000","message":"s/managebility/manageability/","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"}],"specs/mitaka/approved/dynamic-quota-resource.rst":[{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":49,"context_line":"   quota resources, Alice also wants to track total number of instances being"},{"line_number":50,"context_line":"   created based on following use cases."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  a. Alice has a special type of HW (containing SSDs for example) and want to"},{"line_number":53,"context_line":"     restrict total number of instances being created using that hardware."},{"line_number":54,"context_line":"  b. Alice has a created a special flavor corresponding to a specific aggregate"},{"line_number":55,"context_line":"     for testing purposes and want to restrict total number of instances being"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_db7c7622","line":52,"updated":"2015-07-27 18:39:18.000000000","message":"wants","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  a. Alice has a special type of HW (containing SSDs for example) and want to"},{"line_number":53,"context_line":"     restrict total number of instances being created using that hardware."},{"line_number":54,"context_line":"  b. Alice has a created a special flavor corresponding to a specific aggregate"},{"line_number":55,"context_line":"     for testing purposes and want to restrict total number of instances being"},{"line_number":56,"context_line":"     created using that flavor."},{"line_number":57,"context_line":"  c. There is a special availability zone and Alice wants to restrict total"},{"line_number":58,"context_line":"     number of instances being created in that AZ."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_7b92024d","line":55,"updated":"2015-07-27 18:39:18.000000000","message":"wants","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  b. Alice has a created a special flavor corresponding to a specific aggregate"},{"line_number":55,"context_line":"     for testing purposes and want to restrict total number of instances being"},{"line_number":56,"context_line":"     created using that flavor."},{"line_number":57,"context_line":"  c. There is a special availability zone and Alice wants to restrict total"},{"line_number":58,"context_line":"     number of instances being created in that AZ."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"2. If Alice has assigned quota based on dynamic quota resources for Bob, he"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_bba88a78","line":57,"updated":"2015-07-27 18:39:18.000000000","message":"availability zone(AZ)","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":72,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"1. In order to assign quota for dynamic quota resources, os-quota-sets wsgi"},{"line_number":75,"context_line":"extension needs to be updated to accept dynamic quota resource key and its"},{"line_number":76,"context_line":"associated value. It could be sent as individual key-value pairs in the"},{"line_number":77,"context_line":"quota-set dictionary."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_fbccd262","line":75,"updated":"2015-07-27 18:39:18.000000000","message":"updated-\u003emodified","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource with"},{"line_number":86,"context_line":"    whatever name he wants. We will not do any validation on the name of the"},{"line_number":87,"context_line":"    quota resource. We will only validate if the type of value is integer. So,"},{"line_number":88,"context_line":"    we will need to update the the extension to accept arbitrary key value"},{"line_number":89,"context_line":"    pairs. For example -"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_bbedeab8","line":86,"updated":"2015-07-27 18:39:18.000000000","message":"he wants -\u003e is needed","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":85,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource with"},{"line_number":86,"context_line":"    whatever name he wants. We will not do any validation on the name of the"},{"line_number":87,"context_line":"    quota resource. We will only validate if the type of value is integer. So,"},{"line_number":88,"context_line":"    we will need to update the the extension to accept arbitrary key value"},{"line_number":89,"context_line":"    pairs. For example -"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_9b490ed3","line":88,"updated":"2015-07-27 18:39:18.000000000","message":"the the","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":176,"context_line":"| cores        | 12    |"},{"line_number":177,"context_line":"+--------------+-------+"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"5. How the dynamic quota resource name is derived during instance creation, is"},{"line_number":180,"context_line":"   something we will need some discussion on. For now I propose the following:"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"   * Since, there will be multiple dynamic quota resources per project, we need"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_ac6613b9","line":179,"updated":"2015-07-27 18:39:18.000000000","message":"Numbering","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":190,"context_line":"      * nova boot --flavor \u003cflavor\u003e --image \u003cimage\u003e --dynamic_quota_resource"},{"line_number":191,"context_line":"        \u003cdynamic quota resource\u003e"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"6. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":194,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":195,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":196,"context_line":"   during instance creation. This will help us during instance deletion and we"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_ccfa7fbd","line":193,"updated":"2015-07-27 18:39:18.000000000","message":"We shoudl add regarding changes to instance object","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"37cb789fbc12f23105d06cd1d59d8b55142ee25f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"   initialization. So, multiple api workers form the same resource dictionary."},{"line_number":203,"context_line":"   With quota resources being created dynamically, we will have to query the"},{"line_number":204,"context_line":"   DB (dynamic_quota_resources table) before every quota operation, to get the"},{"line_number":205,"context_line":"   latest resource dictionary."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Alternatives"},{"line_number":208,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_d64beb29","line":205,"updated":"2015-07-27 18:11:29.000000000","message":"I still wonder if this can be made better. Some way to avoid this constant flood of queries when most of the time nothing will have changed...","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":273,"context_line":"Work Items"},{"line_number":274,"context_line":"----------"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"1. os-quota-sets extension needs to be updated to allow creation of dynamic"},{"line_number":277,"context_line":"   quota resources."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"2. DB scripts needs to be added to create dynamic_quota_resources table. Also,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_4c2d0f45","line":276,"updated":"2015-07-27 18:39:18.000000000","message":"not only creation but deletion, update, show","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"628495d75d39e0a66a46ce675c88c92421369a20","unresolved":false,"context_lines":[{"line_number":297,"context_line":"   below:"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"* test creation of dynamic quota resource."},{"line_number":300,"context_line":"* show dynamic quota resources during os-quota-sets api call."},{"line_number":301,"context_line":"* increment/decrement dynamic quota resource value during"},{"line_number":302,"context_line":"  creation/deletion of instance using dynamic quota resource."},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_cc211f4f","line":300,"updated":"2015-07-27 18:39:18.000000000","message":"not only creation and show but  also deletion and update IMHO","commit_id":"1885d5f03f77bef88070e8d508ab990976ff8065"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bd7622434aca9e1cd5c0dab0ed24f7b03feb7f1a","unresolved":false,"context_lines":[{"line_number":195,"context_line":"8. During instance creation, user will be passing flavor and/or"},{"line_number":196,"context_line":"   availability_zone."},{"line_number":197,"context_line":"   We will have to derive dynamic quota resource against which quota should"},{"line_number":198,"context_line":"   be calculated. So, we will do following lookup -"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"   1. Lookup dynamic_quota_resource table based on flavor\u003d\u003cflavor passed by"},{"line_number":201,"context_line":"      user\u003e and availability_zone\u003d\u003cAZ passed by user\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a50d1a3_9906af84","line":198,"updated":"2015-07-29 01:09:01.000000000","message":"So the user doesn\u0027t need to pass in \u0027ssd_hw\u0027 and all that right?","commit_id":"00b3ef54c4409c36747e2cccfc78922ad0aff0aa"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"d328b1b3a64b23eef6c9f3197828bc129c9a8a94","unresolved":false,"context_lines":[{"line_number":195,"context_line":"8. During instance creation, user will be passing flavor and/or"},{"line_number":196,"context_line":"   availability_zone."},{"line_number":197,"context_line":"   We will have to derive dynamic quota resource against which quota should"},{"line_number":198,"context_line":"   be calculated. So, we will do following lookup -"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"   1. Lookup dynamic_quota_resource table based on flavor\u003d\u003cflavor passed by"},{"line_number":201,"context_line":"      user\u003e and availability_zone\u003d\u003cAZ passed by user\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a50d1a3_79364352","line":198,"in_reply_to":"3a50d1a3_9906af84","updated":"2015-07-29 01:11:52.000000000","message":"Nope. \nQuota resource will be derived from flavor and AZ.","commit_id":"00b3ef54c4409c36747e2cccfc78922ad0aff0aa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bd7622434aca9e1cd5c0dab0ed24f7b03feb7f1a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":213,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":214,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":215,"context_line":"      calculations."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":218,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a50d1a3_99df8f0c","line":215,"updated":"2015-07-29 01:09:01.000000000","message":"Should this error out vs continue on silently?","commit_id":"00b3ef54c4409c36747e2cccfc78922ad0aff0aa"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"d328b1b3a64b23eef6c9f3197828bc129c9a8a94","unresolved":false,"context_lines":[{"line_number":212,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":213,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":214,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":215,"context_line":"      calculations."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":218,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a50d1a3_790de38d","line":215,"in_reply_to":"3a50d1a3_99df8f0c","updated":"2015-07-29 01:11:52.000000000","message":"It should continue silently, because if cloud state is similar to current openstack cloud and if admins want it that way, then admin would not have set quota per flavor or AZ or combination.","commit_id":"00b3ef54c4409c36747e2cccfc78922ad0aff0aa"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_8e7000a6","line":12,"updated":"2015-07-31 22:57:18.000000000","message":"You\u0027re missing an introductory paragraph here (see the template) where you briefly explain in operator-friendly terms why this feature is needed/useful. The purpose of the intro paragraph is to quickly set the stage for what this spec is about, to get the reader into the right context. It should also be the body of the commit message for this patch","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b5f4d3a9d9682925b465f2be4f6098cebe9df258","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_d4e5e7a3","line":12,"in_reply_to":"3a50d1a3_8e7000a6","updated":"2015-08-06 14:51:16.000000000","message":"Changed the below problem description to a paragraph format\nand it would work as an introductory paragraph as well.\nHave added the same in body of the commit message.\nIs that okay?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  specific project to create only 5 instances in a particular availability"},{"line_number":26,"context_line":"  zone, particular flavor type or a particular hardware type (SSD)."},{"line_number":27,"context_line":"* Quota calculation during instance creation and deletion should be based on"},{"line_number":28,"context_line":"  all quota resources - static and dynamic."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"**How an admin chooses to make the selection of hardware is out of scope of"},{"line_number":31,"context_line":"this spec.**"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_4e467822","line":28,"updated":"2015-07-31 22:57:18.000000000","message":"IMO this isn\u0027t too friendly to read as bullet points, for the problem description. It would be better if you write it as a paragraph that explains in detail what the problem is that you are want to solve. This should expand on what was said in the intro paragraph. I see you already have this as a paragraph in the commit message (better) so I would just have this section be that paragraph, and then change your commit message to be the brief intro paragraph after you add it","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  specific project to create only 5 instances in a particular availability"},{"line_number":26,"context_line":"  zone, particular flavor type or a particular hardware type (SSD)."},{"line_number":27,"context_line":"* Quota calculation during instance creation and deletion should be based on"},{"line_number":28,"context_line":"  all quota resources - static and dynamic."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"**How an admin chooses to make the selection of hardware is out of scope of"},{"line_number":31,"context_line":"this spec.**"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_b7896677","line":28,"in_reply_to":"3a50d1a3_4e467822","updated":"2015-08-05 20:27:35.000000000","message":"Will do.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  all quota resources - static and dynamic."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"**How an admin chooses to make the selection of hardware is out of scope of"},{"line_number":31,"context_line":"this spec.**"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_eef18496","line":31,"updated":"2015-07-31 22:57:18.000000000","message":"I\u0027m not sure you need this sentence","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  all quota resources - static and dynamic."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"**How an admin chooses to make the selection of hardware is out of scope of"},{"line_number":31,"context_line":"this spec.**"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_97eb0a13","line":31,"in_reply_to":"3a50d1a3_eef18496","updated":"2015-08-05 20:27:35.000000000","message":"Now, that we are restricting it based on flavor or AZ combination, this sentence is not required.\nWill remove it.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  a. Alice has created a special flavor corresponding to a specific aggregate"},{"line_number":52,"context_line":"     (containing SSD hw) for testing purposes and wants to restrict total"},{"line_number":53,"context_line":"     number of instances being created using that flavor. This relates to"},{"line_number":54,"context_line":"     creating quota per flavor."},{"line_number":55,"context_line":"  b. There is a special availability zone(AZ) and Alice wants to restrict total"},{"line_number":56,"context_line":"     number of instances being created in that AZ."},{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_3e301e07","line":54,"updated":"2015-07-31 10:06:08.000000000","message":"Ah, I understand now - since this is per-flavor, the # of cores, mem etc is fixed by the flavor. So rather than flavor\u003dhw_ssd, you\u0027re more likely to have EG ssd.tiny, ssd.small, ssd.large. And the admin can set quota for each of those.\n\nAn example of how you see this working would be useful. EG:\n\n    Flavors:\n        ssd.tiny: 1 core, 1GB ram, 128GB SSD\n        ssd.small: 2 core, 2GB ram, 512GB SSD\n        ssd.large: 4 core, 8GB ram, 1TB SSD\n\n    Quotas:\n        ssd.tiny: 12\n        ssd.small: 4\n        ssd.large: 2\n        cores: 12\n        ram: 20\n\n    Ensuring that:\n        No more than 3TB SSD is used (2*large + 2*small).\n        (please continue)\n\nBTW even this toy demonstrates it can be tricky to see the SSD cap based on the interaction of per-flavor and core/ram quotas. It seems more direct to find a way to have genuine extra flavor components (like SSD), which can do more than merely decrement a quota resource. There should be a thread on the ML around extra_specs and cpu capabilities currently.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"b10710eba1227e24951e25ef85cc14f0b378963e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  a. Alice has created a special flavor corresponding to a specific aggregate"},{"line_number":52,"context_line":"     (containing SSD hw) for testing purposes and wants to restrict total"},{"line_number":53,"context_line":"     number of instances being created using that flavor. This relates to"},{"line_number":54,"context_line":"     creating quota per flavor."},{"line_number":55,"context_line":"  b. There is a special availability zone(AZ) and Alice wants to restrict total"},{"line_number":56,"context_line":"     number of instances being created in that AZ."},{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_9f0f9c87","line":54,"in_reply_to":"1a4dcd0f_77b3dee9","updated":"2015-08-06 00:16:43.000000000","message":"+1","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  a. Alice has created a special flavor corresponding to a specific aggregate"},{"line_number":52,"context_line":"     (containing SSD hw) for testing purposes and wants to restrict total"},{"line_number":53,"context_line":"     number of instances being created using that flavor. This relates to"},{"line_number":54,"context_line":"     creating quota per flavor."},{"line_number":55,"context_line":"  b. There is a special availability zone(AZ) and Alice wants to restrict total"},{"line_number":56,"context_line":"     number of instances being created in that AZ."},{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_77b3dee9","line":54,"in_reply_to":"3a50d1a3_3e301e07","updated":"2015-08-05 20:27:35.000000000","message":"Thanks for demonstrating it via example.  Will elaborate the use cases with more examples.\n\nNormal disk cap will be taken care by the quota an admin assigns to the user on basis of disk resource.\nThis is in addition to the disk cap, if an admin is testing a new flavor linked to SSD and does not want to allow more than x number of instances using SSD.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."},{"line_number":58,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":59,"context_line":"     flavors in the cloud."},{"line_number":60,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":61,"context_line":"  c. Alice wants to restrict quota for Bob based on a particular flavor,"},{"line_number":62,"context_line":"     say micro, in a particular availability zone AZ. This relates to"},{"line_number":63,"context_line":"     assigning quota per (flavor and AZ)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_be950e89","line":60,"updated":"2015-07-31 10:06:08.000000000","message":"I\u0027m not sure this one is useful. Number of instances is pretty meaningless, what I care about is the amount of resources used.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"b10710eba1227e24951e25ef85cc14f0b378963e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."},{"line_number":58,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":59,"context_line":"     flavors in the cloud."},{"line_number":60,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":61,"context_line":"  c. Alice wants to restrict quota for Bob based on a particular flavor,"},{"line_number":62,"context_line":"     say micro, in a particular availability zone AZ. This relates to"},{"line_number":63,"context_line":"     assigning quota per (flavor and AZ)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_1f2b8c95","line":60,"in_reply_to":"1a4dcd0f_373f9625","updated":"2015-08-06 00:16:43.000000000","message":"+1 Meghal.\nAlexis : The amount of resources used can\u0027t it be tracked from the quota-usage ? IMHO irrespective of the usages we definitely need a way to keep track on the hard-limit of # of resources because usage without a hard-limit becomes unlimited.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":57,"context_line":"     So, Alice wants to assign quota per AZ."},{"line_number":58,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":59,"context_line":"     flavors in the cloud."},{"line_number":60,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":61,"context_line":"  c. Alice wants to restrict quota for Bob based on a particular flavor,"},{"line_number":62,"context_line":"     say micro, in a particular availability zone AZ. This relates to"},{"line_number":63,"context_line":"     assigning quota per (flavor and AZ)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_373f9625","line":60,"in_reply_to":"3a50d1a3_be950e89","updated":"2015-08-05 20:27:35.000000000","message":"Number of instances is not meaningless.\nA lot of cloud-operators do care how many instances of a particular flavor are running in the cloud. Or how many instances in general are running per AZ.\nAnd sometimes, they do want to restrict the total number of instances in a availability zone. \nAnd it is a pretty valid use case for baremetal nodes, where you not only track it based on resource like core,ram,disk but also on total number of instances.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":60,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":61,"context_line":"  c. Alice wants to restrict quota for Bob based on a particular flavor,"},{"line_number":62,"context_line":"     say micro, in a particular availability zone AZ. This relates to"},{"line_number":63,"context_line":"     assigning quota per (flavor and AZ)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"2. Bob will continue passing flavor and AZ for instance creation, as he"},{"line_number":66,"context_line":"   normally would. But, if Alice has assigned quota per flavor, or quota per AZ"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_51015b03","line":63,"updated":"2015-07-31 10:06:08.000000000","message":"Please include this in your example.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":60,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":61,"context_line":"  c. Alice wants to restrict quota for Bob based on a particular flavor,"},{"line_number":62,"context_line":"     say micro, in a particular availability zone AZ. This relates to"},{"line_number":63,"context_line":"     assigning quota per (flavor and AZ)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"2. Bob will continue passing flavor and AZ for instance creation, as he"},{"line_number":66,"context_line":"   normally would. But, if Alice has assigned quota per flavor, or quota per AZ"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_570a627a","line":63,"in_reply_to":"3a50d1a3_51015b03","updated":"2015-08-05 20:27:35.000000000","message":"Will do.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Proposed change"},{"line_number":78,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"1. In order to assign quota for dynamic quota resources, os-quota-sets wsgi"},{"line_number":81,"context_line":"extension needs to be modified to accept dynamic quota resource key and its"},{"line_number":82,"context_line":"associated value. It could be sent as individual key-value pairs in the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_ae17fc52","line":79,"updated":"2015-07-31 22:57:18.000000000","message":"I think here you should start with a paragraph summary of what you\u0027re proposing to change. This is diving into details before giving an overview of the approach for how dynamic quota resources will be added. We want to be able to get a big picture of the change before the detail","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Proposed change"},{"line_number":78,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"1. In order to assign quota for dynamic quota resources, os-quota-sets wsgi"},{"line_number":81,"context_line":"extension needs to be modified to accept dynamic quota resource key and its"},{"line_number":82,"context_line":"associated value. It could be sent as individual key-value pairs in the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_77d43ebc","line":79,"in_reply_to":"3a50d1a3_ae17fc52","updated":"2015-08-05 20:27:35.000000000","message":"Sure...will try to summarize a bit before diving in to details.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7536eff3d64c34426fcdfb3d255ccea76975ae67","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":89,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource"},{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_dff52457","line":91,"updated":"2015-08-05 23:29:16.000000000","message":"Did u want to allow names like \u0027cores\u0027 and others, don\u0027t these conflict with the statically encoded values/names that already exist? Are u planning on migrating the statically encoded names to be dynamic (whatever that involves)?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":89,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource"},{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_314ccf75","line":91,"updated":"2015-07-31 10:06:08.000000000","message":"nit: Why? Prefer \"A will enable B\" over \"A is good\"","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"3f161a83d388a4b73b6d3a571b5aac838d90d825","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":89,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource"},{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_3a4216af","line":91,"in_reply_to":"1a4dcd0f_dff52457","updated":"2015-08-06 00:38:50.000000000","message":"Good point. Yes, we do not want to allow an user to pass names of static resources. Will update.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource"},{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"},{"line_number":95,"context_line":"    key value pairs. For example -"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_915cc31a","line":92,"updated":"2015-07-31 10:06:08.000000000","message":"Given these dynamic resources seem exclusively concerned with flavor and AZ, why not statically generate the names from those?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" b. It would be great if cloud admin could name the dynamic quota resource"},{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"},{"line_number":95,"context_line":"    key value pairs. For example -"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_178cdad8","line":92,"in_reply_to":"3a50d1a3_915cc31a","updated":"2015-08-05 20:27:35.000000000","message":"Sure...that could be a possibility and a great suggestion.\nAny suggestions on generation of name ?\nOr should we just have uuids ?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7536eff3d64c34426fcdfb3d255ccea76975ae67","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"},{"line_number":95,"context_line":"    key value pairs. For example -"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":98,"context_line":"    \"cores\": \"12\", \"flavor_ssd\": \"1\", \"az_pdu\": \"5\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_bf62983c","line":95,"updated":"2015-08-05 23:29:16.000000000","message":"Are negative integers valid? U probably want to verify they are non-negative integers? Is zero ok? If zero is ok, what does zero mean in this case (unlimited?)","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"3f161a83d388a4b73b6d3a571b5aac838d90d825","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    with whatever name is specified. We will not do any validation on the"},{"line_number":93,"context_line":"    name of the quota resource. We will only validate if the type of value"},{"line_number":94,"context_line":"    is integer. So, we will need to update the extension to accept arbitrary"},{"line_number":95,"context_line":"    key value pairs. For example -"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":98,"context_line":"    \"cores\": \"12\", \"flavor_ssd\": \"1\", \"az_pdu\": \"5\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_5a3fe223","line":95,"in_reply_to":"1a4dcd0f_bf62983c","updated":"2015-08-06 00:38:50.000000000","message":"yes, will have to validate if values are \u003e\u003d -1.\n-1 would mean infinite quota.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":98,"context_line":"    \"cores\": \"12\", \"flavor_ssd\": \"1\", \"az_pdu\": \"5\","},{"line_number":99,"context_line":"    \"flavor_ssd_az_pdu\": \"1\" }}\u0027"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"2. Currently, static quota resources are stored in quotas table as::"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_a9dabde7","line":99,"updated":"2015-07-31 10:06:08.000000000","message":"Can you add a paragraph explaining the quota these parameters would result in? Something like:\n\n    This allows the given tenant to launch VMs with up to 12 cores.\n    One of those VMs may be of an SSD flavor. Five of those VMs\n    may be in the \"PDU\" AZ. Only one VM may be both of an SSD\n    flavor and in the \"PDU\" AZ.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":98,"context_line":"    \"cores\": \"12\", \"flavor_ssd\": \"1\", \"az_pdu\": \"5\","},{"line_number":99,"context_line":"    \"flavor_ssd_az_pdu\": \"1\" }}\u0027"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"2. Currently, static quota resources are stored in quotas table as::"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_576b42f1","line":99,"in_reply_to":"3a50d1a3_a9dabde7","updated":"2015-08-05 20:27:35.000000000","message":"Will do.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    hard_limit: 12"},{"line_number":111,"context_line":"    deleted: 0"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"3. Now, dynamic quota resoruces will also be stored along with static quota"},{"line_number":114,"context_line":"   resources in the table. For example::"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    *************************** 1. row ***************************"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_4e59985a","line":113,"range":{"start_line":113,"start_character":22,"end_line":113,"end_character":31},"updated":"2015-07-31 22:57:18.000000000","message":"Typo","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    hard_limit: 12"},{"line_number":111,"context_line":"    deleted: 0"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"3. Now, dynamic quota resoruces will also be stored along with static quota"},{"line_number":114,"context_line":"   resources in the table. For example::"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    *************************** 1. row ***************************"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_377796d4","line":113,"in_reply_to":"3a50d1a3_4e59985a","updated":"2015-08-05 20:27:35.000000000","message":"Thanks for catching it. Will update.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    deleted_at: 2015-07-21 04:26:24"},{"line_number":148,"context_line":"    project_id: 7c0d996ce4e14d86aca38878eb765a68"},{"line_number":149,"context_line":"    resource: flavor_ssd_az_pdu"},{"line_number":150,"context_line":"    hard_limit: 5"},{"line_number":151,"context_line":"    deleted: 0"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"4. We will also track dynamic quota resources in a separate"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_29946de6","line":150,"updated":"2015-07-31 10:06:08.000000000","message":"It\u0027s helpful to remain consistent in your example. Can you ensure the DB records you show match the request shown in step 1 please?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    deleted_at: 2015-07-21 04:26:24"},{"line_number":148,"context_line":"    project_id: 7c0d996ce4e14d86aca38878eb765a68"},{"line_number":149,"context_line":"    resource: flavor_ssd_az_pdu"},{"line_number":150,"context_line":"    hard_limit: 5"},{"line_number":151,"context_line":"    deleted: 0"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"4. We will also track dynamic quota resources in a separate"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_d77f52a9","line":150,"in_reply_to":"3a50d1a3_29946de6","updated":"2015-08-05 20:27:35.000000000","message":"Thanks for catching it. Will update.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":177,"context_line":"   to update AZ and flavor keys for the newly added dynamic"},{"line_number":178,"context_line":"   quota resource."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"7. When user does a nova quota-show or uses the API, he will get"},{"line_number":181,"context_line":"   information on the dynamic quota resources for which his project"},{"line_number":182,"context_line":"   has been assigned quota for. For example,"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_a924fdc5","line":180,"updated":"2015-07-31 10:06:08.000000000","message":"nit: \"he or she\" and (next line) \"his or her\". As an open project it\u0027s important for us to be inclusive.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":177,"context_line":"   to update AZ and flavor keys for the newly added dynamic"},{"line_number":178,"context_line":"   quota resource."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"7. When user does a nova quota-show or uses the API, he will get"},{"line_number":181,"context_line":"   information on the dynamic quota resources for which his project"},{"line_number":182,"context_line":"   has been assigned quota for. For example,"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_57426269","line":180,"in_reply_to":"3a50d1a3_a924fdc5","updated":"2015-08-05 20:27:35.000000000","message":"Point taken. :)","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":199,"context_line":"   be calculated. So, we will do following lookup -"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"   1. Lookup dynamic_quota_resource table based on flavor\u003d\u003cflavor passed by"},{"line_number":202,"context_line":"      user\u003e and availability_zone\u003d\u003cAZ passed by user\u003e"},{"line_number":203,"context_line":"      AZ will be default_scheduling_zone if user has not passed any AZ."},{"line_number":204,"context_line":"      if default_scheduling_zone is NULL, AZ will be NULL."},{"line_number":205,"context_line":"      This will cover (quota per flavor) and (quota per (flavor and AZ))"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_fb0de8e8","line":202,"updated":"2015-07-31 10:06:08.000000000","message":"nit: you can just say \"the requested flavor and AZ\".","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":199,"context_line":"   be calculated. So, we will do following lookup -"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"   1. Lookup dynamic_quota_resource table based on flavor\u003d\u003cflavor passed by"},{"line_number":202,"context_line":"      user\u003e and availability_zone\u003d\u003cAZ passed by user\u003e"},{"line_number":203,"context_line":"      AZ will be default_scheduling_zone if user has not passed any AZ."},{"line_number":204,"context_line":"      if default_scheduling_zone is NULL, AZ will be NULL."},{"line_number":205,"context_line":"      This will cover (quota per flavor) and (quota per (flavor and AZ))"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_375eb644","line":202,"in_reply_to":"3a50d1a3_fb0de8e8","updated":"2015-08-05 20:27:35.000000000","message":"Just wanted to call out the query explicitly.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":213,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":214,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":215,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_fbe5e8db","line":216,"updated":"2015-07-31 10:06:08.000000000","message":"What if I want some quotas per-flavor and some per-AZ? I think I\u0027d need to specify all combinations of these as per-flavor-and-AZ, which could be error-prone and means data redundancy","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":213,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":214,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":215,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_d72d12a9","line":216,"in_reply_to":"3a50d1a3_fbe5e8db","updated":"2015-08-05 20:27:35.000000000","message":"But, that is what an admin needs to decide and we need to provide granular control on the ability to set quota per flavor, per AZ or per flavor and AZ.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_9b71440f","line":219,"updated":"2015-07-31 10:06:08.000000000","message":"It\u0027s pretty limited to only decrement. I\u0027d prefer any per-flavor quota be able to use request parameters when deciding how much quota to allocate.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7536eff3d64c34426fcdfb3d255ccea76975ae67","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_3f8c48d9","line":219,"in_reply_to":"1a4dcd0f_3213245d","updated":"2015-08-05 23:29:16.000000000","message":"2 GPUs in an instance, that\u0027s decrement by 2 (versus decrement by one); GPU(s) support that kind of bonding together (they can also be used individually) so this seems like it could be a valid case?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b5f4d3a9d9682925b465f2be4f6098cebe9df258","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_cf5472ff","line":219,"in_reply_to":"1a4dcd0f_3f8c48d9","updated":"2015-08-06 14:51:16.000000000","message":"But then the question is how would you expose gpu flavor right now ?\nWill it be through an aggregate exposed via flavor ? \nAlso, the hypervisor would be taking some action based on input specified in the aggregate which is assign 2 gpus. \nBut, from quota point of view, you could say - \nassign quota of 5 for 2gpu flavor.\nor assign quota of 10 for 1gpu flavor as an example.\n\nAlso, if gpu becomes a hardware capability eventually then it needs to be part of static resource and flavor.\nThen hypervisor no longer needs to be part of aggregate and hypervisor can take action about assigning gpu based on flavor.\n\nBut, I guess it is a different use case than quota per flavor. \nWhat do you guys think?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      calculations."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_3213245d","line":219,"in_reply_to":"3a50d1a3_9b71440f","updated":"2015-08-05 20:27:35.000000000","message":"Could you please explain an use case where one would require something different than decrement ?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"},{"line_number":223,"context_line":"   associated with the instance."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_7bda3819","line":220,"updated":"2015-07-31 10:06:08.000000000","message":"nit: where? ah you say next para... I\u0027d delete these two sentences or move them into point 10","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":219,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":220,"context_line":"   by 1. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":221,"context_line":"   during instance creation. This will help us during instance deletion and we"},{"line_number":222,"context_line":"   will be able to increment quota value of appropriate dynamic quota resource"},{"line_number":223,"context_line":"   associated with the instance."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_b71f266b","line":220,"in_reply_to":"3a50d1a3_7bda3819","updated":"2015-08-05 20:27:35.000000000","message":"Will do.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"941f414935da93682503999c158c6f7b154733e8","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    initialization. So, multiple api workers form the same resource"},{"line_number":233,"context_line":"    dictionary. With quota resources being created dynamically, we will have"},{"line_number":234,"context_line":"    to query the DB (dynamic_quota_resources table) before every quota"},{"line_number":235,"context_line":"    operation, to get the latest resource dictionary."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"12. A CountableResource for tracking the usage of dynamic quota resource"},{"line_number":238,"context_line":"    needs to be added. This will help to give a consistent view of the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_df6a04ee","line":235,"updated":"2015-08-05 23:31:49.000000000","message":"Or store the last modification time in some redis/memcache like storage (or even a local file with a timestamp in it), and query the last modification time from that storage, and only if the last modification time has changed do u fully query the db.\n\nThat\u0027s another way at least to avoid the constant DB traffic for things that likely don\u0027t change that often.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b5f4d3a9d9682925b465f2be4f6098cebe9df258","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    initialization. So, multiple api workers form the same resource"},{"line_number":233,"context_line":"    dictionary. With quota resources being created dynamically, we will have"},{"line_number":234,"context_line":"    to query the DB (dynamic_quota_resources table) before every quota"},{"line_number":235,"context_line":"    operation, to get the latest resource dictionary."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"12. A CountableResource for tracking the usage of dynamic quota resource"},{"line_number":238,"context_line":"    needs to be added. This will help to give a consistent view of the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_efcccebc","line":235,"in_reply_to":"1a4dcd0f_df6a04ee","updated":"2015-08-06 14:51:16.000000000","message":"Local file with a timestamp will not work as other api node will not be aware of it.\nYes, redis/memcache might work...but currently db is used for all such kind of reads. We can make the change if there is a lot of performance penalty.\nAlso, we can have db reads from slave db only.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    object for the resource but for now this should not block it from the"},{"line_number":242,"context_line":"    initial implementation to introduce this concept of dynamic quota"},{"line_number":243,"context_line":"    resources, as quota objects can be a possible enhancement to help"},{"line_number":244,"context_line":"    track usages better but is not a priliminary requirement as of today"},{"line_number":245,"context_line":"    for quotas to work."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_e9617ed4","line":244,"range":{"start_line":244,"start_character":37,"end_line":244,"end_character":48},"updated":"2015-07-31 22:57:18.000000000","message":"Misspelling","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    object for the resource but for now this should not block it from the"},{"line_number":242,"context_line":"    initial implementation to introduce this concept of dynamic quota"},{"line_number":243,"context_line":"    resources, as quota objects can be a possible enhancement to help"},{"line_number":244,"context_line":"    track usages better but is not a priliminary requirement as of today"},{"line_number":245,"context_line":"    for quotas to work."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_f2185c77","line":244,"in_reply_to":"3a50d1a3_e9617ed4","updated":"2015-08-05 20:27:35.000000000","message":"Will change. Thanks.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":258,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":259,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":260,"context_line":"      `flavor` varchar(255) NOT NULL,"},{"line_number":261,"context_line":"      `availability_zone` varchar(255) NOT NULL,"},{"line_number":262,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":263,"context_line":"      PRIMARY KEY (`id`))"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_3bbb5077","line":260,"updated":"2015-07-31 10:06:08.000000000","message":"This needs to be a foreign key to the instance_types table","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b5f4d3a9d9682925b465f2be4f6098cebe9df258","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":258,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":259,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":260,"context_line":"      `flavor` varchar(255) NOT NULL,"},{"line_number":261,"context_line":"      `availability_zone` varchar(255) NOT NULL,"},{"line_number":262,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":263,"context_line":"      PRIMARY KEY (`id`))"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_cf0c72ee","line":260,"in_reply_to":"3a50d1a3_3bbb5077","updated":"2015-08-06 14:51:16.000000000","message":"Then the question comes - how will availability zone be associated, since it is a metadata key in aggregates ?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"13c4ec6af03ae95535b73284acff460024e8a726","unresolved":false,"context_lines":[{"line_number":262,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":263,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* Create a new column called quota_resource_id in instances table."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"REST API impact"},{"line_number":268,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_5b33bc13","line":265,"updated":"2015-07-31 10:06:08.000000000","message":"This implies an instance can only consume a single dynamic resource","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":262,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":263,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* Create a new column called quota_resource_id in instances table."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"REST API impact"},{"line_number":268,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_9276b8a2","line":265,"in_reply_to":"3a50d1a3_5b33bc13","updated":"2015-08-05 20:27:35.000000000","message":"As above, could you please explain where there will be a use case of consuming more than one resource ?\nSince it will always be - \nper flavor\nper AZ\nper flavor and AZ.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":267,"context_line":"REST API impact"},{"line_number":268,"context_line":"---------------"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"None"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Security impact"},{"line_number":273,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_29c44690","line":270,"updated":"2015-07-31 22:57:18.000000000","message":"There is REST API impact if you\u0027re changing a request payload for the quota update API. This will need to be added with a microversion [1]\n\n[1] http://docs.openstack.org/developer/nova/api_microversion_dev.html","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":267,"context_line":"REST API impact"},{"line_number":268,"context_line":"---------------"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"None"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Security impact"},{"line_number":273,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_929d58be","line":270,"in_reply_to":"3a50d1a3_29c44690","updated":"2015-08-05 20:27:35.000000000","message":"Yes, Vilobh and I did talk about this. He will update the spec accordingly.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other end user impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"None"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Performance Impact"},{"line_number":288,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_a9d29632","line":285,"updated":"2015-07-31 22:57:18.000000000","message":"Is there end user impact? Will the user have to pass additional data about the dynamic resource when creating an instance? Or were you saying it will be derived from existing data the user already passes? (I assume if it\u0027s dynamic, it can\u0027t always be derived)\n\nAlso, I\u0027m not sure if it fits under end user vs deployer impact but, the impact on cloud admins having the ability to create resources and manage quota for them should be mentioned, IMO","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"efcaa97b40865f8ee54bbbf9bf59bd7004d600bc","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other end user impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"None"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Performance Impact"},{"line_number":288,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_da6532b5","line":285,"in_reply_to":"1a4dcd0f_9284785e","updated":"2015-08-05 23:53:32.000000000","message":"Okay, I see. I was a little confused by the idea of \"newly created resource\" always being represented by what the user is already passing during instance create.\n\nThinking about it more, I think cloud-admin fits under \"end user,\" it\u0027s just that it\u0027s an admin end user. You\u0027d just mention how this spec will change anything for cloud-admins. I agree, deployer means a person installing openstack, the configs, etc. If this spec won\u0027t change anything for a person deploying an openstack cluster, then there should be None for \"deployer impact,\" I think","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other end user impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"None"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Performance Impact"},{"line_number":288,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_9284785e","line":285,"in_reply_to":"3a50d1a3_a9d29632","updated":"2015-08-05 20:27:35.000000000","message":"No the resource will always be derived from flavor and AZ passed by the user.\nSo, user will not have to pass additional information.\n\nAlso, I am confused if quota operations run by cloud-admin fits under deployer impact, which I think is related to changes to be made during software deployment.\n\nAnd there is no separate section called Operators impact. \nShould I add one ?","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f5bc3c8d15bfaf3c3db4fce7b94f6c7932d41cad","unresolved":false,"context_lines":[{"line_number":325,"context_line":"   new column called \u0027quota_resource\u0027 needs to be added to instances table."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"3. QuotaEngine and DBQuotaDriver needs to be updated to account for dynamic"},{"line_number":328,"context_line":"   quota resources during quota calculations."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Dependencies"},{"line_number":331,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_29e76613","line":328,"updated":"2015-07-31 22:57:18.000000000","message":"Will there be any changes needed in novaclient to support dynamic quota resources?\n\nWhat about the changes needed to the Instance object? A lot of what you have in the Proposed Change section sounds like work items","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"94f8ae290129b20fadd684592503328218f9dd35","unresolved":false,"context_lines":[{"line_number":325,"context_line":"   new column called \u0027quota_resource\u0027 needs to be added to instances table."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"3. QuotaEngine and DBQuotaDriver needs to be updated to account for dynamic"},{"line_number":328,"context_line":"   quota resources during quota calculations."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Dependencies"},{"line_number":331,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a4dcd0f_52f11000","line":328,"in_reply_to":"3a50d1a3_29e76613","updated":"2015-08-05 20:27:35.000000000","message":"Yes, instance object needs to be updated. \nWill change. Thanks.","commit_id":"5645f2a93c13bd38a46631efda6df5906f9300dd"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_4c188275","line":12,"updated":"2015-08-06 09:50:05.000000000","message":"missing intro para as commented by melwitt on PS#9","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_61599b34","line":12,"in_reply_to":"1a4dcd0f_4c188275","updated":"2015-08-07 01:31:44.000000000","message":"Replied to melwitt, that introduction is given in problem description below. Does that work ?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":83,"context_line":"     wants to track the total number of instances Bob is spawning with SSD.tiny"},{"line_number":84,"context_line":"     and SSD.small flavors."},{"line_number":85,"context_line":"     Alice does not want Bob to create more than 2 instances of SSD.tiny and"},{"line_number":86,"context_line":"     SSD.small flavor each."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"     Currently, the assigned quota for Bob (based on cores, ram and disk) does"},{"line_number":89,"context_line":"     not reflect the flavor with which Bob is spawning instances."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_ac3ee688","line":86,"updated":"2015-08-06 09:50:05.000000000","message":"Why is it OK to have 2 ssd.tiny + 2 ssd.small but not OK to have 3 ssd.small? Surely it should be the total quantity of SSD consumed that matters, not the layout by which it\u0027s consumed?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":83,"context_line":"     wants to track the total number of instances Bob is spawning with SSD.tiny"},{"line_number":84,"context_line":"     and SSD.small flavors."},{"line_number":85,"context_line":"     Alice does not want Bob to create more than 2 instances of SSD.tiny and"},{"line_number":86,"context_line":"     SSD.small flavor each."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"     Currently, the assigned quota for Bob (based on cores, ram and disk) does"},{"line_number":89,"context_line":"     not reflect the flavor with which Bob is spawning instances."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_e114cbe9","line":86,"in_reply_to":"1a4dcd0f_ac3ee688","updated":"2015-08-07 01:31:44.000000000","message":"Yes, that is a great point.\n\nWe did give some thought internally.\nThere could be categorization based on extra specs in the flavor and not only on the flavor itself.\nIn that case, we could say that apply a quota of 4 instances for any flavor containing extra specs having \"ssd\": \"True\".\n\nBut the problem is extra specs values are all arbitrary key value pairs.\nThere is no specific reference in db which we can refer to for extra specs. \n\nSo, while deriving the resource name we would not know whether to look for \"ssd\": \"True\", \"ssd\": \"False\" or \"ssd\": \"xyz\" or \"abc\":\"def\". \nFlavor extra specs could have any of above keys. \n\nSo, unless there was a specific place in db where extra specs was stored, had a specific reference using uuid, then admin could specify that for this extra spec uuid1 apply a quota of x instances.\nand uuid1 in db would have \"ssd\": \"True\".\nAnd while adding extra specs \"ssd\":\"True\" for flavor, it would create an entry into db and associate a particular uuid.\n\n\nBut, without having a reference, storing extra specs in resource table below is difficult.\nSo, for now, it will have to be assigned per flavor. And admin can choose to distribute it accordingly.\n\nWill add a note related to this description in the spec.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":103,"context_line":"     While, Charles is allowed to boot in both az1 and az2."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"     Currently, based on assigned quota as explained above, Bob and Charles"},{"line_number":106,"context_line":"     will be able to boot all 20 instances in az1, az2 or spread it across"},{"line_number":107,"context_line":"     az1 and az2."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"     But Alice does not want Bob to be creating instances in az2."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_8ce68a13","line":106,"updated":"2015-08-06 09:50:05.000000000","message":"nit: \"will be able to boot instances in either or both of az1 and az2.\"","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":103,"context_line":"     While, Charles is allowed to boot in both az1 and az2."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"     Currently, based on assigned quota as explained above, Bob and Charles"},{"line_number":106,"context_line":"     will be able to boot all 20 instances in az1, az2 or spread it across"},{"line_number":107,"context_line":"     az1 and az2."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"     But Alice does not want Bob to be creating instances in az2."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_81d62726","line":106,"in_reply_to":"1a4dcd0f_8ce68a13","updated":"2015-08-07 01:31:44.000000000","message":"Vilobh took care of it in next patch set.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"     So, Alice creates a dynamic quota resource corresponding to az1 and az2."},{"line_number":111,"context_line":"     She assignes quota of 20 instances to Bob in az1 and 0 instances in az2."},{"line_number":112,"context_line":"     So, Bob will have to use up his 20 instances quota only in az1 and will"},{"line_number":113,"context_line":"     not be able to create any instance in az2."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"     For Charles, she will assign quota of 20 instances each for both az1"},{"line_number":116,"context_line":"     and az2."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_2cabb676","line":113,"updated":"2015-08-06 09:50:05.000000000","message":"OK, this binary scenario I can appreciate. Is there a case for a smaller-than-max yet nonzero quota? IE allowing Bob 10 instances. I\u0027d imagine in any case where you want to do that, you\u0027d actually want case C (flavor-and-AZ quota). So maybe quota is an overcomplicated means of specifying which AZs a user may boot in?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":110,"context_line":"     So, Alice creates a dynamic quota resource corresponding to az1 and az2."},{"line_number":111,"context_line":"     She assignes quota of 20 instances to Bob in az1 and 0 instances in az2."},{"line_number":112,"context_line":"     So, Bob will have to use up his 20 instances quota only in az1 and will"},{"line_number":113,"context_line":"     not be able to create any instance in az2."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"     For Charles, she will assign quota of 20 instances each for both az1"},{"line_number":116,"context_line":"     and az2."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_a1c00351","line":113,"in_reply_to":"1a4dcd0f_2cabb676","updated":"2015-08-07 01:31:44.000000000","message":"Its more like quota is a means of restricting how many instances a user may boot in a particular AZ.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":158,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":161,"context_line":"to allow creation of resources other than static resource like cores,ram, etc."},{"line_number":162,"context_line":"Also, admin needs an ability to update quota resource to be associated with a"},{"line_number":163,"context_line":"flavor, AZ or flavor and AZ."},{"line_number":164,"context_line":"When end-user is trying to create an instance, we need to be able to derive"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_ecc86e24","line":161,"updated":"2015-08-06 09:50:05.000000000","message":"nit: space after comma.\n\nAlso be aware that when this is published on the web, this whole paragraph will be flowed together. IE your early linebreak on L163 + L167 will be ignored. If you want a paragraph boundary you have to leave a whole blank line.\n\nI find rst.ninjs.org awfully helpful.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":158,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":161,"context_line":"to allow creation of resources other than static resource like cores,ram, etc."},{"line_number":162,"context_line":"Also, admin needs an ability to update quota resource to be associated with a"},{"line_number":163,"context_line":"flavor, AZ or flavor and AZ."},{"line_number":164,"context_line":"When end-user is trying to create an instance, we need to be able to derive"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_01d21728","line":161,"in_reply_to":"1a4dcd0f_ecc86e24","updated":"2015-08-07 01:31:44.000000000","message":"Thanks.\nVilobh took care of it in next patch set.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":160,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":161,"context_line":"to allow creation of resources other than static resource like cores,ram, etc."},{"line_number":162,"context_line":"Also, admin needs an ability to update quota resource to be associated with a"},{"line_number":163,"context_line":"flavor, AZ or flavor and AZ."},{"line_number":164,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":165,"context_line":"as to which dynamic quota resource should the quota be calculated against."},{"line_number":166,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_2c9176f1","line":163,"updated":"2015-08-06 09:50:05.000000000","message":"nit: a flavor, an AZ or both.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":160,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":161,"context_line":"to allow creation of resources other than static resource like cores,ram, etc."},{"line_number":162,"context_line":"Also, admin needs an ability to update quota resource to be associated with a"},{"line_number":163,"context_line":"flavor, AZ or flavor and AZ."},{"line_number":164,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":165,"context_line":"as to which dynamic quota resource should the quota be calculated against."},{"line_number":166,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_a1a7a3bb","line":163,"in_reply_to":"1a4dcd0f_2c9176f1","updated":"2015-08-07 01:31:44.000000000","message":"Thanks. Vilobh took care of it.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":" b. Cloud admin will be able to name the dynamic quota resource with any"},{"line_number":182,"context_line":"    arbitrary name he/she wants. We will make sure that dynamic quota resource"},{"line_number":183,"context_line":"    is not named as one of the existing static resources like cores, ram, disk."},{"line_number":184,"context_line":"    We will also validate if the type of value is integer and accept values"},{"line_number":185,"context_line":"    greater than -1. -1 would mean infinite quota."},{"line_number":186,"context_line":"    So, we will need to update the extension to accept key value pairs."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_4ca5e244","line":183,"updated":"2015-08-06 09:50:05.000000000","message":"What happens if a new static resource is added? Perhaps a better way would be to allow any resource name, but prefix with _ in the DB?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":280,"context_line":"+---------------------+-------+"},{"line_number":281,"context_line":"| Quota               | Limit |"},{"line_number":282,"context_line":"+---------------------+-------+"},{"line_number":283,"context_line":"| sd.tiny             | 5     |"},{"line_number":284,"context_line":"+---------------------+-------+"},{"line_number":285,"context_line":"| az1                 | 5     |"},{"line_number":286,"context_line":"+---------------------+-------+"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_8201733a","line":283,"updated":"2015-08-06 09:50:05.000000000","message":"nit: ssd","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":280,"context_line":"+---------------------+-------+"},{"line_number":281,"context_line":"| Quota               | Limit |"},{"line_number":282,"context_line":"+---------------------+-------+"},{"line_number":283,"context_line":"| sd.tiny             | 5     |"},{"line_number":284,"context_line":"+---------------------+-------+"},{"line_number":285,"context_line":"| az1                 | 5     |"},{"line_number":286,"context_line":"+---------------------+-------+"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_0199b77b","line":283,"in_reply_to":"1a4dcd0f_8201733a","updated":"2015-08-07 01:31:44.000000000","message":"Done","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":310,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":311,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":312,"context_line":"      calculations."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":315,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_5dc6ea9a","line":312,"updated":"2015-08-06 09:50:05.000000000","message":"I\u0027m not sure you fully got my point on PS#9. Skipping step 2 if step 1 matches means that if you match a flavor quota, the AZ quota isn\u0027t checked. So if a user has a quota of 2 ssd.tiny flavor and 1 AZ1 instance, they can boot 2 ssd.tiny instances in AZ1 which doesn\u0027t seem what you want. It\u0027s important that all 3 types of quota are always checked.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":310,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":311,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":312,"context_line":"      calculations."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":315,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_41349f48","line":312,"in_reply_to":"1a4dcd0f_5dc6ea9a","updated":"2015-08-07 01:31:44.000000000","message":"So, lets say for Bob we have - \nflavor  | AZ | Value |\n| ssd.tiny | * |  5  |\n| *  | az1 |  5  |\n| ssd.tiny | az1 | 1 |\n\n\nwhich means \nif Bob passes - \n1. ssd.tiny flavor and az1 availability zone, he will be allowed to boot only 1 instance.\n2. ssd.tiny flavor and no AZ, he will be allowed to boot 5 instances.\n3. tiny flavor and az1 availability zone, he will be allowed to boot 5 instances. \n\nAdmin needs to make sure, that when he is creating a quota resource for AZ1, and if he wants to restrict usage of a particular flavor to a particular user, he needs to have another resource which covers quota per (flavor and az).\n\nDoes that make sense ?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":315,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":316,"context_line":"   by 1."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":319,"context_line":"    during instance creation. This will help us during instance deletion and we"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_9d3eb289","line":316,"updated":"2015-08-06 09:50:05.000000000","message":"Can you address the comments Josh + I made on PS#9 please?","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":315,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":316,"context_line":"   by 1."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":319,"context_line":"    during instance creation. This will help us during instance deletion and we"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_e1992b7a","line":316,"in_reply_to":"1a4dcd0f_9d3eb289","updated":"2015-08-07 01:31:44.000000000","message":"Replied in ps#9.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"857b6e82a9b86f6e020d875ef505b1c951811ddc","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    initialization. So, multiple api workers form the same resource"},{"line_number":330,"context_line":"    dictionary. With quota resources being created dynamically, we will have"},{"line_number":331,"context_line":"    to query the DB (dynamic_quota_resources table) before every quota"},{"line_number":332,"context_line":"    operation, to get the latest resource dictionary."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Alternatives"},{"line_number":335,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_9d5552c3","line":332,"updated":"2015-08-06 09:50:05.000000000","message":"PS#9","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"6ca51de30c025463c231fa93c245c07e7ef8b5bf","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    initialization. So, multiple api workers form the same resource"},{"line_number":330,"context_line":"    dictionary. With quota resources being created dynamically, we will have"},{"line_number":331,"context_line":"    to query the DB (dynamic_quota_resources table) before every quota"},{"line_number":332,"context_line":"    operation, to get the latest resource dictionary."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Alternatives"},{"line_number":335,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a4dcd0f_a18ec32b","line":332,"in_reply_to":"1a4dcd0f_9d5552c3","updated":"2015-08-07 01:31:44.000000000","message":"Replied in ps#9.","commit_id":"9ac3099dfed0442d50cfeb3f9de5b6fdf0e03b65"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_dcf6458e","line":12,"updated":"2015-08-07 10:12:19.000000000","message":"-1: Please just follow the template. If you need some examples, read the other specs.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-quota-resource"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_a13f7a86","line":12,"in_reply_to":"1a4dcd0f_dcf6458e","updated":"2015-08-07 18:17:22.000000000","message":"Please see the next patch. Have added a brief summary.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"During creation or deletion of an instance, quota needs to be calculated"},{"line_number":17,"context_line":"and committed or rollbacked accordingly. Currently, quota calculations"},{"line_number":18,"context_line":"are based on 14 static resources hardcoded in the quota module. These"},{"line_number":19,"context_line":"static resources are cores, ram, disk, instances and so on."},{"line_number":20,"context_line":"There are multiple ways to slice the cloud - availability zones,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_904e6139","line":17,"range":{"start_line":17,"start_character":4,"end_line":17,"end_character":27},"updated":"2015-08-07 10:12:19.000000000","message":"nit: those words have transactional connotations, I\u0027d suggest \"claimed or released\"","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"During creation or deletion of an instance, quota needs to be calculated"},{"line_number":17,"context_line":"and committed or rollbacked accordingly. Currently, quota calculations"},{"line_number":18,"context_line":"are based on 14 static resources hardcoded in the quota module. These"},{"line_number":19,"context_line":"static resources are cores, ram, disk, instances and so on."},{"line_number":20,"context_line":"There are multiple ways to slice the cloud - availability zones,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_61717277","line":17,"in_reply_to":"1a4dcd0f_904e6139","updated":"2015-08-07 18:17:22.000000000","message":"Done","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"hardware type aggregate exposed via a flavor."},{"line_number":27,"context_line":"This spec plans to provide an option to create and manage the dynamic resource"},{"line_number":28,"context_line":"through instance lifecycle and also provide a way for quota management of"},{"line_number":29,"context_line":"these newly introduced dynamic resources."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Use Cases"},{"line_number":32,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_500219b5","line":29,"updated":"2015-08-07 10:12:19.000000000","message":"Break paragraphs please","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6d31f1997dcc64f9ee0181ac4348443391aad6c9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"hardware type aggregate exposed via a flavor."},{"line_number":27,"context_line":"This spec plans to provide an option to create and manage the dynamic resource"},{"line_number":28,"context_line":"through instance lifecycle and also provide a way for quota management of"},{"line_number":29,"context_line":"these newly introduced dynamic resources."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Use Cases"},{"line_number":32,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_613e522b","line":29,"in_reply_to":"1a4dcd0f_500219b5","updated":"2015-08-07 18:17:22.000000000","message":"restructed this, please check in next patch","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"     So, Alice creates a dynamic quota resource corresponding to az1 and az2."},{"line_number":110,"context_line":"     She assignes quota of 20 instances to Bob in az1 and 0 instances in az2."},{"line_number":111,"context_line":"     So, Bob will have to use up his 20 instances quota only in az1 and will"},{"line_number":112,"context_line":"     not be able to create any instance in az2."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"     For Charles, she will assign quota of 20 instances each for both az1"},{"line_number":115,"context_line":"     and az2."}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_f0e805b5","line":112,"updated":"2015-08-07 10:12:19.000000000","message":"-1: re: comments on PS#11, this returns to the point that instance count is uninteresting compared to the actual resource usage. It is the amount of cores, RAM, SSD etc in use which matters, not the simple count of instances.\n\nI don\u0027t think we need this case B, only A+C. This helps by simplifying your implementation.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"864a9d45d4a7e0884fd5c32b709c9f451f1baf48","unresolved":false,"context_lines":[{"line_number":109,"context_line":"     So, Alice creates a dynamic quota resource corresponding to az1 and az2."},{"line_number":110,"context_line":"     She assignes quota of 20 instances to Bob in az1 and 0 instances in az2."},{"line_number":111,"context_line":"     So, Bob will have to use up his 20 instances quota only in az1 and will"},{"line_number":112,"context_line":"     not be able to create any instance in az2."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"     For Charles, she will assign quota of 20 instances each for both az1"},{"line_number":115,"context_line":"     and az2."}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_b6ffc364","line":112,"in_reply_to":"1a4dcd0f_f0e805b5","updated":"2015-08-07 16:06:44.000000000","message":"There would be a use case where admin would want to assign only quota per AZ only irrespective of flavor. So, this would be useful in that case.\nAs I explained in my comment below, each of quota per flavor, quota per AZ, quota per (flavor and AZ) needs to be looked at exclusively and admin needs to decide how the quotas should be assigned.\nIf there are resources corresponding to both - \nquota per flavor and quota per (flavor and az), then his calculations will be flawed as we will be giving higher preference to quota per (flavor and az) and deducting quota only from that resource.\n\nWill explain this in more detail in next patch set.\nLet me know if it makes sense.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":" b. Cloud admin will be able to name the dynamic quota resource with any"},{"line_number":215,"context_line":"    arbitrary name he/she wants. We will make sure that dynamic quota resource"},{"line_number":216,"context_line":"    is not named as one of the existing static resources like cores, ram, disk."},{"line_number":217,"context_line":"    We will also validate if the type of value is integer and accept values"},{"line_number":218,"context_line":"    greater than -1. -1 would mean infinite quota."},{"line_number":219,"context_line":"    So, we will need to update the extension to accept key value pairs."}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_90fbc178","line":216,"updated":"2015-08-07 10:12:19.000000000","message":"-1: From PS#11: What happens if a new static resource is added? A better way would be to allow any resource name, but prefix with _ in the DB.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"d0f2abaa0bc76e48b35e0bdc5f9a9203171209d0","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":" b. Cloud admin will be able to name the dynamic quota resource with any"},{"line_number":215,"context_line":"    arbitrary name he/she wants. We will make sure that dynamic quota resource"},{"line_number":216,"context_line":"    is not named as one of the existing static resources like cores, ram, disk."},{"line_number":217,"context_line":"    We will also validate if the type of value is integer and accept values"},{"line_number":218,"context_line":"    greater than -1. -1 would mean infinite quota."},{"line_number":219,"context_line":"    So, we will need to update the extension to accept key value pairs."}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_d6392fa5","line":216,"in_reply_to":"1a4dcd0f_90fbc178","updated":"2015-08-07 16:02:13.000000000","message":"But, how about simply checking it at the time of creation and not allowing any of the static resource names ?","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"      calculations."},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":352,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":353,"context_line":"   by 1."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_1050110a","line":352,"updated":"2015-08-07 10:12:19.000000000","message":"-1: If we\u0027re going to extend quotas, I\u0027d prefer a solution which can do more than decrement. I\u0027d prefer not to implement a partial solution.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"d0f2abaa0bc76e48b35e0bdc5f9a9203171209d0","unresolved":false,"context_lines":[{"line_number":349,"context_line":"      calculations."},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":352,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":353,"context_line":"   by 1."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_983f5686","line":352,"in_reply_to":"1a4dcd0f_1050110a","updated":"2015-08-07 16:02:13.000000000","message":"I am still not able to understand, why we need to decrement by more than 1. From what I see, admin needs to track quota based on instances. For the rest, he already has existing static resources like cores, ram, disk. \n\nIt would be great if you could provide some use case.","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ed5f40113781dc131b645197b7a0d261d56b7b3c","unresolved":false,"context_lines":[{"line_number":386,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":387,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"* Create a new column called quota_resource_id in instances table."},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"REST API impact"},{"line_number":392,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_d058698c","line":389,"updated":"2015-08-07 10:12:19.000000000","message":"-1: If you boot a ssd.tiny.az1, does that not consume both your ssd.tiny.az1 and your ssd.tiny quota?","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"d0f2abaa0bc76e48b35e0bdc5f9a9203171209d0","unresolved":false,"context_lines":[{"line_number":386,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":387,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"* Create a new column called quota_resource_id in instances table."},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"REST API impact"},{"line_number":392,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_d6eb6f11","line":389,"in_reply_to":"1a4dcd0f_d058698c","updated":"2015-08-07 16:02:13.000000000","message":"So, we always want the input params passed by the user (flavor and availability zone) to identify exact 1 row in the resources table.\n\nSo, I believe the right way to go would be this - \n* If admin simply wants to assign quota per flavor and any az, he will just create a resource called ssd.tiny and NULL for az. \n* But, if admin realizes that he has a need to assign quota for ssd.tiny flavor in a particular availability zone az1, then admin will have to create two resources - \n  a. quota for ssd.tiny flavor and default az.\n  b. quota for ssd.tiny flavor and az1.\n  c. and quota for ssd.tiny flavor in any other azs available. \n* Other use case separate from above use cases is if an admin wants to restrict usage only by AZ and that the flavor does not matter. Then he needs to create a resource where flavor is NULL and AZ is the desired AZ. Later, he cannot have another resource which restricts flavor ssd.tiny in particular AZ. Else, he will have to understand that his calculations will be flawed in that case. \n\n* So, while building the cluster, admin needs to decide how he wants to make his calculations.\n  1. quota per flavor only and open to all AZs.\n  2. quota per flavor and AZ (in this case, he will have to skip (1) and create resource for flavor in each AZ)\n  3. quota for all flavors in a particular AZ. \n\nIn my example, I am setting all 3 kinds of quota for same tenant. I will update it to reflect each of this exclusive cases and explain the derivation of resources accordingly.\n\nDoes that make sense ?","commit_id":"a81d7774ea35769f83b6c584761f0cacd9ed6eba"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":20,"context_line":"by Flavor, Quota by AZ or both. This spec plans to solve this"},{"line_number":21,"context_line":"problem by introducing the concept of dynamic resources. A dynamic"},{"line_number":22,"context_line":"resource can be a combination of availability zone, flavor or"},{"line_number":23,"context_line":"hardware type aggregate exposed via a flavor which can help for"},{"line_number":24,"context_line":"effective quota management in these common deployment scenarios."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_5a5abd51","line":23,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027for\u0027 -\u003e \u0027to provide\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"115003e10ba463ab33b6f97f52edd8abef397cdd","unresolved":false,"context_lines":[{"line_number":34,"context_line":"aggregates exposed via flavors and special flavors. Quota for"},{"line_number":35,"context_line":"managing resources are associated based on the way the cloud is"},{"line_number":36,"context_line":"segregated. Since these are the common deployment patterns used"},{"line_number":37,"context_line":"there needs to be a provision to set and manage quota accoring to the"},{"line_number":38,"context_line":"segregation pattern used, which doesn\u0027t seem to be the case in the"},{"line_number":39,"context_line":"current state of art as there is no option available to set Quota"},{"line_number":40,"context_line":"by AZ, Quota by Flavor or Quota by X."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_aaae6f7f","line":37,"updated":"2015-08-07 19:28:58.000000000","message":"\u0027accoring\u0027 -\u003e \u0027according\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"1. Alice has assigned quota to different tenants based on standard static"},{"line_number":65,"context_line":"   quota resources like Cores, RAM, disk etc. But, in addition to static"},{"line_number":66,"context_line":"   quota resources, Alice also wants to track total number of instances being"},{"line_number":67,"context_line":"   created based on following use cases."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  a. Alice has special hardware containing SSDs and has created an aggregate"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_cb74c19d","line":66,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027to track total number\u0027 -\u003e \u0027to track the total number\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":66,"context_line":"   quota resources, Alice also wants to track total number of instances being"},{"line_number":67,"context_line":"   created based on following use cases."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  a. Alice has special hardware containing SSDs and has created an aggregate"},{"line_number":70,"context_line":"     containing all SSD machines. Alice has exposed SSD aggregate using special"},{"line_number":71,"context_line":"     flavors."},{"line_number":72,"context_line":"     For example -"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_eb773d9d","line":69,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027an aggregate\u0027 -\u003e \u0027a host aggregate\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":67,"context_line":"   created based on following use cases."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  a. Alice has special hardware containing SSDs and has created an aggregate"},{"line_number":70,"context_line":"     containing all SSD machines. Alice has exposed SSD aggregate using special"},{"line_number":71,"context_line":"     flavors."},{"line_number":72,"context_line":"     For example -"},{"line_number":73,"context_line":"     SSD Flavors:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_6b648de4","line":70,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027SSD aggregate\u0027 -\u003e \u0027the SSD host aggregate\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":81,"context_line":"     or ssd.small. Bob will also be able to use tiny and small flavors if he"},{"line_number":82,"context_line":"     wants to boot non-SSD instances."},{"line_number":83,"context_line":"     For both SSD and non-SSD instances, Bob\u0027s quota will be tracked on the"},{"line_number":84,"context_line":"     basis of cores, rams and disks."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"     he will be able to create -"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_eb9e5db7","line":84,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027rams\u0027 -\u003e \u0027RAM\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":94,"context_line":"     wants to track the total number of instances Bob is spawning with SSD.tiny"},{"line_number":95,"context_line":"     and SSD.small flavors."},{"line_number":96,"context_line":"     Alice does not want Bob to create more than 2 instances of SSD.tiny and"},{"line_number":97,"context_line":"     SSD.small flavor each."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"     Currently, the assigned quota for Bob (based on cores, ram and disk) does"},{"line_number":100,"context_line":"     not reflect the flavor with which Bob is spawning instances."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_ab7ff564","line":97,"updated":"2015-08-11 06:12:26.000000000","message":"global replace \u0027SSD.tiny\u0027 -\u003e \u0027ssd.tiny\u0027 and \u0027SSD.small\u0027 -\u003e \u0027ssd.small\u0027 as per flavors created above","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":100,"context_line":"     not reflect the flavor with which Bob is spawning instances."},{"line_number":101,"context_line":"     So, Alice creates a dynamic quota resource corresponding to SSD.tiny and"},{"line_number":102,"context_line":"     SSD.small flavor and assignes quota of 2 instances each to Bob for"},{"line_number":103,"context_line":"     SSD.tiny and SSD.small flavor."},{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_0bbf09fc","line":103,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027flavor\u0027 -\u003e \u0027flavors\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":111,"context_line":"     Both Bob and Charles are assigned quota based on cores, RAM and disk."},{"line_number":112,"context_line":"     Because of special access requirements, Bob is allowed to boot only"},{"line_number":113,"context_line":"     in az1 and not in az2."},{"line_number":114,"context_line":"     While, Charles is allowed to boot in both az1 and az2."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"     Currently, based on assigned quota as explained above, Bob and Charles"},{"line_number":117,"context_line":"     will be able to boot all 20 instances in either or both of az1 and az2."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_2bff65ab","line":114,"updated":"2015-08-11 06:12:26.000000000","message":"-\u0027While,\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":142,"context_line":"     else where."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"     But, Alice wants to restrict total number of SSD.tiny instances that Bob"},{"line_number":145,"context_line":"     creates in AZ1 to 5 only."},{"line_number":146,"context_line":"     So, Alice will create a dynamic quota resource called ssd.tiny_az1 and"},{"line_number":147,"context_line":"     assign quota to Bob for ssd.tiny_az1 to 5 instances."},{"line_number":148,"context_line":"     Hence if Bob uses ssd.tiny flavor in az1, he will be able to create only"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_ebd65d26","line":145,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027AZ1\u0027 -\u003e \u0027az1\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"115003e10ba463ab33b6f97f52edd8abef397cdd","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   This az, flavor combination for a respective dynamic resource can"},{"line_number":209,"context_line":"   be passed to the dynamic-resource extensions update method. Multiple"},{"line_number":210,"context_line":"   entried corresponding to each dynamic resource can be specified."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"2. In order to assign quota for dynamic quota resources, os-quota-sets wsgi"},{"line_number":213,"context_line":"extension needs to be modified to accept dynamic quota resource key and its"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_ea10f7ad","line":210,"updated":"2015-08-07 19:28:58.000000000","message":"\u0027entried\u0027 -\u003e \u0027entries\u0027 ?","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    \"ssd.tiny_az1\": \"1\" }}\u0027"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    This means that particular tenant is assigned quota of 5 instances"},{"line_number":242,"context_line":"    in az1, 5 instance using ssd.tiny flavor and 1 instance using ssd.tiny"},{"line_number":243,"context_line":"    flavor in az1 or booting an instance upto 12 cores."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"3. Currently, static quota resources are stored in quotas table as::"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_ab47f575","line":242,"updated":"2015-08-11 06:12:26.000000000","message":"\u00275 instance\u0027 -\u003e \u00275 instances\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    This means that particular tenant is assigned quota of 5 instances"},{"line_number":242,"context_line":"    in az1, 5 instance using ssd.tiny flavor and 1 instance using ssd.tiny"},{"line_number":243,"context_line":"    flavor in az1 or booting an instance upto 12 cores."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"3. Currently, static quota resources are stored in quotas table as::"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_6b5a4d52","line":243,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027upto\u0027 -\u003e \u0027up to\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   have to be added for allowing a cloud admin to update AZ and flavor keys"},{"line_number":321,"context_line":"   for the newly added dynamic quota resource."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"7. When user does a nova quota-show or uses the API, he/she will get"},{"line_number":324,"context_line":"   information on the dynamic quota resources for which his/her project has"},{"line_number":325,"context_line":"   been assigned quota for."},{"line_number":326,"context_line":"   For example,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_6b080d2e","line":323,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027When user\u0027 -\u003e \u0027When a user\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_86a55005","line":360,"updated":"2015-08-11 06:12:26.000000000","message":"What if quota per AZ is applied (and desired), but there is no default_scheduling_zone, and the user does not specify an AZ. This is the default cloud behaviour for some clouds. In this case, we need a new scheduler filter to decide which AZ to use based where the user has quota?","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"2c3af791abce35445682b80662709f2b722ef4c5","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_b97c26ec","line":360,"in_reply_to":"1a4dcd0f_19699abe","updated":"2015-08-11 07:33:39.000000000","message":"I see what you are saying. \nLet\u0027s say user has global quota of 30 instances.\n* quota of 5 in az1\n* quota of 10 in az2\n* quota of 0 in az3\nAnd if user does not pass any AZ, then his instance should be scheduled in az2 or az1, but not in az3. \n\nBut the problem is that quota calculation happens before h/w selection.\nIn your case, the selected AZ needs to be passed to the scheduler as well.\nBut, quota calculation and scheduling is not tied together. \nSo, quota calculation needs to be dictated by user input or a consistent input like default_scheduling_zone, if AZ is not passed. \n\nYour use case is a valid use case, but digresses a bit from the scope of this spec. If this spec is approved, an enhancement can be added to expand selection of az based on where quota is available and pass the information along to scheduler.","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"4b2cfeaf58c301fbe27fcf4a634607aea72b7883","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_19699abe","line":360,"in_reply_to":"1a4dcd0f_31e1149b","updated":"2015-08-11 07:18:49.000000000","message":"For our use case, we definitely don\u0027t want quota per flavor. We want to keep only the existing flavors. New AZs are constantly being added, and old AZs are removed or upgraded, so maintaining flavors-per-AZ would be very onerous. We have a small defined set of flavors and users know what to expect from them.\n\nWhat we do want is quota-per-AZ as users are in different institutions and different geographical locations.\n\nCurrently, with no default_scheduling_zone, a user will be scheduled to run in any AZ that has capacity as long as they have (global) quota. We want to keep the behaviour where a user doesn\u0027t specify an AZ, but we want it to schedule only to an AZ where they have (unused) quota. So to the user, there will be no change in the current behaviour.","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"9d98a2ddac7eda55c1a35c69699d811940e66c2d","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_0fe38c34","line":360,"in_reply_to":"1a4dcd0f_74122564","updated":"2015-08-11 08:08:57.000000000","message":"As I said earlier, if this initial spec is approved, then passing of information from quotaengine to the scheduler can be looked at.\nThis digresses from the current scope of the spec as it gets into selection of availability zone.","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"166f306e66b18774c417144e229728acc10cb7bd","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_31e1149b","line":360,"in_reply_to":"1a4dcd0f_86a55005","updated":"2015-08-11 06:51:09.000000000","message":"In that case, admin needs to assign quota per flavor only. \nAnd if admin introduces more AZs in his cloud.\nHe needs to adjust quota per flavor into - \nquota per flavor in new AZ and quota per flavor in default AZ.","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"40a78abf8a7d198dcbeb8b5e0f75f7dbc0bfb5b4","unresolved":false,"context_lines":[{"line_number":357,"context_line":"   3. If (1) and (2) fails, then admin did not intend to set quota per"},{"line_number":358,"context_line":"      flavor, quota per AZ or quota per (flavor and AZ)."},{"line_number":359,"context_line":"      So, we will not consider any dynamic quota resource during quota"},{"line_number":360,"context_line":"      calculations."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":363,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_74122564","line":360,"in_reply_to":"1a4dcd0f_b97c26ec","updated":"2015-08-11 08:02:42.000000000","message":"Your example describes our use-case exactly, and I understand this use-case is wanted by others as well.\n\nIt looks like this is the one use-case that currently works with the existing quota system that is not handled by the spec.\n\nIt could be implemented as a dynamic resource quota scheduler filter?","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":393,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":394,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":395,"context_line":"      `flavor` varchar(255) NOT NULL,"},{"line_number":396,"context_line":"      `availability_zone` varchar(255) NOT NULL,"},{"line_number":397,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":398,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_86b0f0de","line":396,"updated":"2015-08-11 06:12:26.000000000","message":"Both \u0027flavor\u0027 and \u0027availability_zone\u0027 _can_ be NULL according to the output above?","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"166f306e66b18774c417144e229728acc10cb7bd","unresolved":false,"context_lines":[{"line_number":393,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":394,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":395,"context_line":"      `flavor` varchar(255) NOT NULL,"},{"line_number":396,"context_line":"      `availability_zone` varchar(255) NOT NULL,"},{"line_number":397,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":398,"context_line":"      PRIMARY KEY (`id`))"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_ec29938a","line":396,"in_reply_to":"1a4dcd0f_86b0f0de","updated":"2015-08-11 06:51:09.000000000","message":"Thats right. Thanks for catching it.\nEither one can be null in a particular row. But, not both.\nWill update the schema to reflect this.","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"115003e10ba463ab33b6f97f52edd8abef397cdd","unresolved":false,"context_lines":[{"line_number":452,"context_line":"----------"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"1. A new extension will be added to create,update, delete and display"},{"line_number":455,"context_line":"   dynamic resource. A seperate table known as nova.dynamicresource"},{"line_number":456,"context_line":"   will be inroduced in Nova database to keep track of the"},{"line_number":457,"context_line":"   dynamic resources created."},{"line_number":458,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_cad41bbf","line":455,"updated":"2015-08-07 19:28:58.000000000","message":"\u0027seperate\u0027 -\u003e \u0027separate\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"115003e10ba463ab33b6f97f52edd8abef397cdd","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":"1. A new extension will be added to create,update, delete and display"},{"line_number":455,"context_line":"   dynamic resource. A seperate table known as nova.dynamicresource"},{"line_number":456,"context_line":"   will be inroduced in Nova database to keep track of the"},{"line_number":457,"context_line":"   dynamic resources created."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"2. os-quota-sets extension needs to be updated to allow create, update,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_0a99a31f","line":456,"updated":"2015-08-07 19:28:58.000000000","message":"\u0027inroduced\u0027 -\u003e \u0027introduced\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"115003e10ba463ab33b6f97f52edd8abef397cdd","unresolved":false,"context_lines":[{"line_number":454,"context_line":"1. A new extension will be added to create,update, delete and display"},{"line_number":455,"context_line":"   dynamic resource. A seperate table known as nova.dynamicresource"},{"line_number":456,"context_line":"   will be inroduced in Nova database to keep track of the"},{"line_number":457,"context_line":"   dynamic resources created."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"2. os-quota-sets extension needs to be updated to allow create, update,"},{"line_number":460,"context_line":"   deletion and display of dynamic quota resources. Nova.quotas table"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_2afb3f49","line":457,"updated":"2015-08-07 19:28:58.000000000","message":"I\u0027m confused, which table is going to be added here?\n\nThis mentions \u0027dynamicresource\u0027 but above this is mentioned \u0027dynamic_quota_resource\u0027, which one is going to be created?","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":461,"context_line":"   will maintain an entry for the hard-limit for each dynamic-resource"},{"line_number":462,"context_line":"   created as part of step #1. A row for each dynamic resource will be"},{"line_number":463,"context_line":"   added to nova.quotas and depending on the usage/consumption in the"},{"line_number":464,"context_line":"   nova.quota_usages. This row for the dynamic resourc in nova.quotas"},{"line_number":465,"context_line":"   will keep track of the hard_limit for this particular resource on"},{"line_number":466,"context_line":"   a per project basis."},{"line_number":467,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_86e790e3","line":464,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027resourc\u0027 -\u003e \u0027resource\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"bcba6537b5b79ea794b0dac6867189f3002be019","unresolved":false,"context_lines":[{"line_number":465,"context_line":"   will keep track of the hard_limit for this particular resource on"},{"line_number":466,"context_line":"   a per project basis."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"3. DB scripts needs to be added to create nova.dynamicresource table."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"4. QuotaEngine and DBQuotaDriver needs to be updated to account for dynamic"},{"line_number":471,"context_line":"   resources during quota calculations."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_e607747f","line":468,"updated":"2015-08-11 06:12:26.000000000","message":"\u0027needs\u0027 -\u003e \u0027need\u0027","commit_id":"b0162684c1aa6d2dabc28aacfb1af19e2a7b0ed9"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"e9fce98b6df5b5feb8113155c4546d72e4a9c0c4","unresolved":false,"context_lines":[{"line_number":492,"context_line":"   will keep track of the hard_limit for this particular resource on"},{"line_number":493,"context_line":"   a per project basis."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"3. DB scripts need to be added to create nova.dynamicresource table."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"4. QuotaEngine and DBQuotaDriver needs to be updated to account for dynamic"},{"line_number":498,"context_line":"   resources during quota calculations."}],"source_content_type":"text/x-rst","patch_set":15,"id":"1a4dcd0f_6f5810fb","line":495,"updated":"2015-08-11 08:11:17.000000000","message":"\u0027nova.dynamicresource\u0027 -\u003e \u0027the nova.dynamic_quota_resources\u0027","commit_id":"4772d20253266d7e96a3654ab21010f1c58e220d"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"813d94df1b381058dc3f9025cd8ee1fb5e5ce7da","unresolved":false,"context_lines":[{"line_number":492,"context_line":"   will keep track of the hard_limit for this particular resource on"},{"line_number":493,"context_line":"   a per project basis."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"3. DB scripts need to be added to create nova.dynamicresource table."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"4. QuotaEngine and DBQuotaDriver needs to be updated to account for dynamic"},{"line_number":498,"context_line":"   resources during quota calculations."}],"source_content_type":"text/x-rst","patch_set":15,"id":"1a4dcd0f_6f357044","line":495,"in_reply_to":"1a4dcd0f_6f5810fb","updated":"2015-08-11 08:19:54.000000000","message":"Done. Thanks for catching it.","commit_id":"4772d20253266d7e96a3654ab21010f1c58e220d"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"28d47c51290fcede6c709510e1b045cab3e2d0af","unresolved":false,"context_lines":[{"line_number":13,"context_line":"There are multiple ways to slice an Openstack cloud - availability"},{"line_number":14,"context_line":"zones, aggregates exposed via flavors and special flavors being the"},{"line_number":15,"context_line":"most common amongst all the available options. These options are used"},{"line_number":16,"context_line":"for better operability, managebility and providing specific"},{"line_number":17,"context_line":"features to enhance performance. But even though we have a way to"},{"line_number":18,"context_line":"segregate the cloud as per these options, at present, there is"},{"line_number":19,"context_line":"no option provided for an Openstack admin to set and manage Quota"}],"source_content_type":"text/x-rst","patch_set":16,"id":"da20952f_23b6ed8a","line":16,"updated":"2015-08-27 11:25:22.000000000","message":"s/managebility/manageability/","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"there needs to be a provision to set and manage quota according to the"},{"line_number":38,"context_line":"segregation pattern used, which doesn\u0027t seem to be the case in the"},{"line_number":39,"context_line":"current state of art as there is no option available to set Quota"},{"line_number":40,"context_line":"by AZ, Quota by Flavor or Quota by (Flavor and AZ)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Use Cases"},{"line_number":43,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_7a6a791c","line":40,"updated":"2015-08-17 13:53:34.000000000","message":"nit: no capitalisation needed","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":37,"context_line":"there needs to be a provision to set and manage quota according to the"},{"line_number":38,"context_line":"segregation pattern used, which doesn\u0027t seem to be the case in the"},{"line_number":39,"context_line":"current state of art as there is no option available to set Quota"},{"line_number":40,"context_line":"by AZ, Quota by Flavor or Quota by (Flavor and AZ)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Use Cases"},{"line_number":43,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_1f8087f6","line":40,"in_reply_to":"fa1b9901_7a6a791c","updated":"2015-08-19 18:24:12.000000000","message":"Will remove in next patch set.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e091f2a5d0e21402393018394490416f2aaf8b40","unresolved":false,"context_lines":[{"line_number":40,"context_line":"by AZ, Quota by Flavor or Quota by (Flavor and AZ)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Use Cases"},{"line_number":43,"context_line":"---------"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"**Actors**"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_9232680f","line":43,"updated":"2015-10-15 13:57:18.000000000","message":"Honestly, these feel overly complex, can we not simplify these?\n\nSomething like:\n* Admin wants a quota based on flavors and not RAM amounts, i.e. SSD vs spinning disk flavors with different quotas.\n* Admin has flavor2 available in both AZ-A and AZ-B, but wants to apply quotas separately for each AZ.\n* TODO - some mix of both","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   small: 2 cores, 2 GB RAM, 256 GB standard disk"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"1. Alice has assigned quota to different tenants based on standard static"},{"line_number":65,"context_line":"   quota resources like Cores, RAM, disk etc. But, in addition to static"},{"line_number":66,"context_line":"   quota resources, Alice also wants to track the total number of instances"},{"line_number":67,"context_line":"   being created based on following use cases."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_9a82edc7","line":65,"updated":"2015-08-17 13:53:34.000000000","message":"femtonit: s/Cores/cores/","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   small: 2 cores, 2 GB RAM, 256 GB standard disk"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"1. Alice has assigned quota to different tenants based on standard static"},{"line_number":65,"context_line":"   quota resources like Cores, RAM, disk etc. But, in addition to static"},{"line_number":66,"context_line":"   quota resources, Alice also wants to track the total number of instances"},{"line_number":67,"context_line":"   being created based on following use cases."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_ff7b5326","line":65,"in_reply_to":"fa1b9901_9a82edc7","updated":"2015-08-19 18:24:12.000000000","message":"Will take care in next patch set.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"     he will be able to create -"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"       * 10 instances of small or 20 instances of tiny or 10 instances of"},{"line_number":89,"context_line":"         tiny and 5 instances of small"},{"line_number":90,"context_line":"       * 10 instances of SSD.tiny and 5 instances of small"},{"line_number":91,"context_line":"       * 20 instances of SSD.tiny"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_5d13ef5c","line":88,"range":{"start_line":88,"start_character":9,"end_line":88,"end_character":30},"updated":"2015-08-17 13:53:34.000000000","message":"A small takes 256GB disk. 10*256GB \u003d 2.5TB which is \u003e bob\u0027s 1TB quota","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"     he will be able to create -"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"       * 10 instances of small or 20 instances of tiny or 10 instances of"},{"line_number":89,"context_line":"         tiny and 5 instances of small"},{"line_number":90,"context_line":"       * 10 instances of SSD.tiny and 5 instances of small"},{"line_number":91,"context_line":"       * 20 instances of SSD.tiny"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_bfeddbb8","line":88,"in_reply_to":"fa1b9901_5d13ef5c","updated":"2015-08-19 18:24:12.000000000","message":"ahh...thanks for catching it. Will update it in next patch set.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"     he will be able to create -"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"       * 10 instances of small or 20 instances of tiny or 10 instances of"},{"line_number":89,"context_line":"         tiny and 5 instances of small"},{"line_number":90,"context_line":"       * 10 instances of SSD.tiny and 5 instances of small"},{"line_number":91,"context_line":"       * 20 instances of SSD.tiny"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_da30650a","line":89,"range":{"start_line":88,"start_character":55,"end_line":89,"end_character":38},"updated":"2015-08-17 13:53:34.000000000","message":"better to replace the last with \"or some combination thereof\"","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":86,"context_line":"     he will be able to create -"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"       * 10 instances of small or 20 instances of tiny or 10 instances of"},{"line_number":89,"context_line":"         tiny and 5 instances of small"},{"line_number":90,"context_line":"       * 10 instances of SSD.tiny and 5 instances of small"},{"line_number":91,"context_line":"       * 20 instances of SSD.tiny"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_ffd033f8","line":89,"in_reply_to":"fa1b9901_da30650a","updated":"2015-08-19 18:24:12.000000000","message":"Will remove in next patch set.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"28d47c51290fcede6c709510e1b045cab3e2d0af","unresolved":false,"context_lines":[{"line_number":99,"context_line":"     Currently, the assigned quota for Bob (based on cores, ram and disk) does"},{"line_number":100,"context_line":"     not reflect the flavor with which Bob is spawning instances."},{"line_number":101,"context_line":"     So, Alice creates a dynamic quota resource corresponding to SSD.tiny and"},{"line_number":102,"context_line":"     SSD.small flavor and assignes quota of 2 instances each to Bob for"},{"line_number":103,"context_line":"     SSD.tiny and SSD.small flavors."},{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."}],"source_content_type":"text/x-rst","patch_set":16,"id":"da20952f_c355b11d","line":102,"updated":"2015-08-27 11:25:22.000000000","message":"s/assignes/assigns/","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7260,"name":"Joanna H. Huang","email":"joanna.huitzu.huang@gmail.com","username":"hhuang"},"change_message_id":"7282e9748d021d1ac25574efdc0dcf0f7894c927","unresolved":false,"context_lines":[{"line_number":102,"context_line":"     SSD.small flavor and assignes quota of 2 instances each to Bob for"},{"line_number":103,"context_line":"     SSD.tiny and SSD.small flavors."},{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"     This relates to quota per flavor."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_cc87f710","line":105,"updated":"2015-08-17 05:02:27.000000000","message":"Typos. In use case (a), all \u0027SSD.tiny\u0027 or \u0027SSD.small\u0027 should be changed to \u0027ssd.tiny\u0027 and \u0027ssd.small\u0027 respectively.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"     SSD.small flavor and assignes quota of 2 instances each to Bob for"},{"line_number":103,"context_line":"     SSD.tiny and SSD.small flavors."},{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"     This relates to quota per flavor."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_dde85f19","line":105,"in_reply_to":"1a4dcd0f_cc87f710","updated":"2015-08-17 13:53:34.000000000","message":"Please either linewrap properly or put linebreaks between paragraphs (throughout the spec). You can wrap a paragraph easily in Vim with \"gwap\" or \"g}\".","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":102,"context_line":"     SSD.small flavor and assignes quota of 2 instances each to Bob for"},{"line_number":103,"context_line":"     SSD.tiny and SSD.small flavors."},{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"     This relates to quota per flavor."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_df41afaa","line":105,"in_reply_to":"fa1b9901_dde85f19","updated":"2015-08-19 18:24:12.000000000","message":"Will look into it. Thanks for the feedback.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"32c70a1f265a172b935b9a7d77b8a7db3ff5dd80","unresolved":false,"context_lines":[{"line_number":104,"context_line":"     With this Bob will not be able to boot more than 2 instances of SSD.tiny"},{"line_number":105,"context_line":"     or SSD.small."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"     This relates to quota per flavor."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  b. Alice has a different use case than (a) where she wants to slice her cloud"},{"line_number":110,"context_line":"     into different availability zones az1 and az2 based on separate networks."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_702b6d95","line":107,"updated":"2015-08-21 21:23:41.000000000","message":"The solution we use at Rackspace, which just needs some manpower and discussion with the community to look at upstreaming, is the idea of a flavor class.  Essentially tiny/small/etc flavors in one class, and ssd.* in another, and then quotas can be assigned on a flavor class.  This works for this use case.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"32c70a1f265a172b935b9a7d77b8a7db3ff5dd80","unresolved":false,"context_lines":[{"line_number":111,"context_line":"     Both Bob and Charles are assigned quota based on cores, RAM and disk."},{"line_number":112,"context_line":"     Because of special access requirements, Bob is allowed to boot only"},{"line_number":113,"context_line":"     in az1 and not in az2."},{"line_number":114,"context_line":"     Charles is allowed to boot in both az1 and az2."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"     Currently, based on assigned quota as explained above, Bob and Charles"},{"line_number":117,"context_line":"     will be able to boot all 20 instances in either or both of az1 and az2."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_6b5e1e14","line":114,"updated":"2015-08-21 21:23:41.000000000","message":"It seems like what you want are quota targets.  So in addition to specifying a quota on resources you want to specify where that quota can be used.  I\u0027m making this distinction because implementation wise I think it would be nicer to specify a quota of \"cpus: 20\" and a target for it of \"az1\" rather than an \"az1_cpus\" quota","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"28d47c51290fcede6c709510e1b045cab3e2d0af","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"     But Alice does not want Bob to be creating instances in az2."},{"line_number":120,"context_line":"     So, Alice creates a dynamic quota resource corresponding to az1 and az2."},{"line_number":121,"context_line":"     She assignes quota of 20 instances to Bob in az1 and 0 instances in az2."},{"line_number":122,"context_line":"     So, Bob will have to use up his 20 instances quota only in az1 and will"},{"line_number":123,"context_line":"     not be able to create any instance in az2."},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"da20952f_43176151","line":121,"updated":"2015-08-27 11:25:22.000000000","message":"s/assignes/assigns/","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7260,"name":"Joanna H. Huang","email":"joanna.huitzu.huang@gmail.com","username":"hhuang"},"change_message_id":"7282e9748d021d1ac25574efdc0dcf0f7894c927","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_acb62bf7","line":134,"updated":"2015-08-17 05:02:27.000000000","message":"In the use cases of (a) and (c), it\u0027s fine to use the number of instance for \ndynamic resource quota because each dynamic resource entity is associated \nwith a flavour and it\u0027s easy for an admin to derive how many quotas he/she \nwould like to give to tenants based on the specs in each flavour (sizes for \nRAM, disk, number of cores, and so on.)\n\nBut in the use case (b), assigning the number of instance as dynamic quota \ndoesn\u0027t help much for an admin to manage dynamic quota resources in \nspecific AZ provided it applies to all flavours in the cloud. For instance, \n\n - there are only 40 cores in total in the cloud; 20 each in az1 and az2. \n - Bob is assigned dynamic quota of 20 instances in az1 and 0 in az2.\n - Bob creates 10 instances of small flavour (2 cores, 2 GB RAM, 256 GB \nstandard disk) in az1 that would use all the core resources in az1.\n - Bob hasn\u0027t yet used all of his dynamic quota in az1, but Charles is not able \nto create any more instance in az1 and ends up in only az2.\n\nIt would help if the dynamic quota can be associated to specific resource \ntype like cores, ram, disk, instance, and so on. The dynamic quota can be \nnamed as \u0027az1_cores\u0027, \u0027az2_cores\u0027, \u0027az1_ram\u0027, etc.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_dddcdf1a","line":134,"in_reply_to":"1a4dcd0f_acb62bf7","updated":"2015-08-17 13:53:34.000000000","message":"Yes, well said. I\u0027d propose that anyone who wants quota-per-az to use quota-per-flavor-and-az instead of adding \"az1_cores\" etc. This approach also removes a problem around line 370.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eb2754a6e2c306a929e36f85ca34f47c9adafb97","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_8c756999","line":134,"in_reply_to":"fa1b9901_7d69fd8a","updated":"2015-08-19 09:56:12.000000000","message":"OK having thought a bit more I really like your suggestion of quota-by-AZ-and-resource, this gets to the heart of what an admin is really trying to limit. If we extend it backwards to quota-by-user-resource (EG SSD), it makes quota-by-flavor{,-and-AZ} seem like an indirect way of getting to the same result.\n\nWe could ease quota administration by adding tenant groups, which still might be a good idea, but I think rewriting the spec towards your suggestion is priority one.\n\nMeghal, would this serve your users\u0027 needs?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_aa04b417","line":134,"in_reply_to":"fa1b9901_8c756999","updated":"2015-08-19 18:24:12.000000000","message":"Thanks Joanna and Alexis for your inputs.\nI understand your concerns where if an admin is worried about the resources in a particular AZ in the cloud, \nthen with current spec, he would have to create resources corresponding to\n (# of Flavors) * (# of AZ) \nand set dynamic quotas for each tenant based on those resources.\n\nI agree that associating individual static resource like core to AZ gets to the heart of quota assignment.\n\nBut, how will associating quota by (AZ and resource) solve the quota by flavor use case or even quota by (flavor and AZ) use case ?\nAlso, I understand that we are strictly looking in terms of hardware resources like core, ram, disk exposed by a particular hypervisor in the cloud.  But, there are use cases like in the case of baremetal (Ironic), where you want to track only instance usage based on flavors and values for core, RAM, disk does not matter.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"2b7cb7634a6a08b9ba337aadf005508e22e00378","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_ffc9a926","line":134,"in_reply_to":"fa1b9901_93447d1b","updated":"2015-08-21 13:59:59.000000000","message":"Right, forgot about the Ironic case. That\u0027s a pain in the butt. I\u0027ve asked alaski to weigh in, he might not be able to immediately.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"adb48c7b1a08c5b2f7d433a2e5c0ed647ce84e2c","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_93447d1b","line":134,"in_reply_to":"fa1b9901_aa04b417","updated":"2015-08-20 02:13:24.000000000","message":"Don\u0027t forget that \u0027instances\u0027 is already an existing static resource value along with cores and ram. So your use cases are just a specific case where resource\u003dinstances.\n\nhttps://github.com/openstack/nova/blob/36198e4c443059a6f7e8b36545cb5f9b796236fd/nova/quota.py#L1465\n\nI\u0027ve given an example below of how we can represent this in the DB while still satisfying your existing use cases.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7260,"name":"Joanna H. Huang","email":"joanna.huitzu.huang@gmail.com","username":"hhuang"},"change_message_id":"3d2d1121d59611436ef4612a6efe0fba0463d7f1","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"     This also implies that this quota per AZ resource will apply to all"},{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_7d69fd8a","line":134,"in_reply_to":"fa1b9901_dddcdf1a","updated":"2015-08-17 19:17:08.000000000","message":"I\u0027m not quite sure about your suggestion, Alexis. For those who want quota \nmanagement for AZ and don\u0027t really care about how resources being used in\neach flavour but the total number of used resources, their use case wouldn\u0027t \nbe taken into account if the dynamic quotas should be tied to a flavour.\n\nAnd it can easily make operators\u0027 work more onerous. For instance, the \nfollowing is the common list of flavours in a cloud:\n\n  m1.tiny    1 core, 512 GB RAM, 1 GB disk\n  m1.small   1 core, 2048 GB RAM, 20 GB disk\n  m1.medium  2 cores, 4096 GB RAM, 40 GB disk\n  m1.large   4 cores, 8192 GB RAM, 80 GB disk\n  m1.xlarge  8 cores, 16384 GB RAM, 160 GB disk\n\nEvery time when an admin adds a new AZ to the cloud and wants to create dynamic quotas to manage its resource usage for some tenants in the AZ, first of all, he/she will have to create 5 dynamic quota resources such as \u0027az1.m1.tiny\u0027. Next, the quota number for each of these 5 new dynamic quota resources will have to be created and set for each tenant admin would like to manage. That would be\n\n  (# of AZ) * (# of flavours) * (# of tenants) \u003d (# of dynamic quotas needed to be set)\n\nNot to mention that in real use cases, some clouds maintain a long list of global and private flavours for their large number of tenancy. \n\nEven though the admin manages to derive how many dynamic quota numbers should be set for each combination of AZ and flavours based on each flavour spec, the issue I mentioned earlier can still happen; users haven\u0027t yet reached the dynamic quota limit, but the resources in the AZ have been exhausted if users create instances with different flavours and the admin didn\u0027t set the quota numbers carefully or strictly.\n\nDynamic quotas proposed in this blueprint are still the limited amount of resources allowed to use. They should be associated with the actual type of resources in the cloud somehow.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"32c70a1f265a172b935b9a7d77b8a7db3ff5dd80","unresolved":false,"context_lines":[{"line_number":133,"context_line":"     flavors in the cloud."},{"line_number":134,"context_line":"     So, it relates to quota per (AZ and (all flavors in cloud))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  c. Alice has a third use case, where she wants to restrict quota for Bob"},{"line_number":137,"context_line":"     based on a particular flavor ssd.tiny in a particular availability zone"},{"line_number":138,"context_line":"     az1. There are two AZs in the cloud - az1 and default_az."},{"line_number":139,"context_line":"     ssd.tiny corresponds to 1 core, 1 GB RAM, 128 GB SSD disk."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_0b9a02c6","line":136,"updated":"2015-08-21 21:23:41.000000000","message":"By using a combination of quotas per flavor/flavor_class(possibly in the future) with a target I think this can be handled.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":168,"context_line":"   as they normally would. But, if Alice has assigned quota per flavor, or"},{"line_number":169,"context_line":"   quota per AZ or quota per (flavor and AZ); Alice will expect openstack code"},{"line_number":170,"context_line":"   to decrement the appropriate quota resource based on Bob\u0027s input of flavor"},{"line_number":171,"context_line":"   and AZ during instance creation."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Project Priority"},{"line_number":174,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_803efab6","line":171,"updated":"2015-08-17 13:53:34.000000000","message":"This para doesn\u0027t add anything to the usecase. By extension, the 1) 2) list isn\u0027t needed.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":168,"context_line":"   as they normally would. But, if Alice has assigned quota per flavor, or"},{"line_number":169,"context_line":"   quota per AZ or quota per (flavor and AZ); Alice will expect openstack code"},{"line_number":170,"context_line":"   to decrement the appropriate quota resource based on Bob\u0027s input of flavor"},{"line_number":171,"context_line":"   and AZ during instance creation."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Project Priority"},{"line_number":174,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_d118c377","line":171,"in_reply_to":"fa1b9901_803efab6","updated":"2015-08-19 18:24:12.000000000","message":"Are you suggesting to remove the para ?\nI feel it is helpful to explain what is expected.\nI can remove the (1), (2) notation.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"2b7cb7634a6a08b9ba337aadf005508e22e00378","unresolved":false,"context_lines":[{"line_number":168,"context_line":"   as they normally would. But, if Alice has assigned quota per flavor, or"},{"line_number":169,"context_line":"   quota per AZ or quota per (flavor and AZ); Alice will expect openstack code"},{"line_number":170,"context_line":"   to decrement the appropriate quota resource based on Bob\u0027s input of flavor"},{"line_number":171,"context_line":"   and AZ during instance creation."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Project Priority"},{"line_number":174,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_667f4915","line":171,"in_reply_to":"fa1b9901_d118c377","updated":"2015-08-21 13:59:59.000000000","message":"Yes, I\u0027d remove it. It\u0027s about what will happen, which is discussed in \"proposed change\". The usecase is about user inputs and expectations.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e091f2a5d0e21402393018394490416f2aaf8b40","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Proposed change"},{"line_number":180,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":183,"context_line":"to allow creation of resources other than static resource like cores, ram, etc."}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_9505727b","line":180,"updated":"2015-10-15 13:57:18.000000000","message":"So I think we need to implement simplify quotas before we can talk through the specifics here.\nhttps://review.openstack.org/#/c/182445\n\nThe current pattern for quota usage doesn\u0027t really work, sadly. It would be bad to extend it.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e091f2a5d0e21402393018394490416f2aaf8b40","unresolved":false,"context_lines":[{"line_number":182,"context_line":"In order to support dynamic quota resources, we need to modify quota extension"},{"line_number":183,"context_line":"to allow creation of resources other than static resource like cores, ram, etc."},{"line_number":184,"context_line":"Also, admin needs an ability to update quota resource to be associated with a"},{"line_number":185,"context_line":"flavor, an AZ or both."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":188,"context_line":"as to which dynamic quota resource should the quota be calculated against."}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_f554e621","line":185,"updated":"2015-10-15 13:57:18.000000000","message":"So I do think we need to consider groups of flavors, not specific flavors here. Now that does mean adding the flavor group concept, but that seems a much more manageable route (consider an SSD group, and spinny disk group, and an ironic/baremetal group).\n\nNow there can be just one flavor in that flavor group, so you still get the specific case you want here.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"flavor, an AZ or both."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":188,"context_line":"as to which dynamic quota resource should the quota be calculated against."},{"line_number":189,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"},{"line_number":190,"context_line":"instance is deleted."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_8113595c","line":188,"updated":"2015-08-17 13:53:34.000000000","message":"nit: \"derive which dynamic quota resource the quota should be calculate against.\"","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e091f2a5d0e21402393018394490416f2aaf8b40","unresolved":false,"context_lines":[{"line_number":185,"context_line":"flavor, an AZ or both."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":188,"context_line":"as to which dynamic quota resource should the quota be calculated against."},{"line_number":189,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"},{"line_number":190,"context_line":"instance is deleted."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_d856bfd1","line":188,"in_reply_to":"fa1b9901_512353a7","updated":"2015-10-15 13:57:18.000000000","message":"We need more detail on this topic here I feel.\n\nIs this a hierarchical style quota?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":185,"context_line":"flavor, an AZ or both."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"When end-user is trying to create an instance, we need to be able to derive"},{"line_number":188,"context_line":"as to which dynamic quota resource should the quota be calculated against."},{"line_number":189,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"},{"line_number":190,"context_line":"instance is deleted."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_512353a7","line":188,"in_reply_to":"fa1b9901_8113595c","updated":"2015-08-19 18:24:12.000000000","message":"Will remove it in next patch set.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e091f2a5d0e21402393018394490416f2aaf8b40","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Similarly quota for dynamic quota resource needs to be updated when an"},{"line_number":190,"context_line":"instance is deleted."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Steps below describe each of these changes in detail."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"1. A dynamic resource will be created at first. A new extension to create,"},{"line_number":195,"context_line":"   update, delete and show dynamic resource details will be added. Each"}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_7880cb46","line":192,"updated":"2015-10-15 13:57:18.000000000","message":"I think a quick high level description is best in here, the specifics can get covered in the sections below, like the CLI in other user impact, DB in the data section, REST API changes in the API section, etc.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"f394a0abd0a6fc5ba0801cc4cd852cbf03db6d5b","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   like :-"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_a25629d0","line":204,"updated":"2015-08-19 14:33:55.000000000","message":"This looks like we\u0027re pushing unnecessary complexity onto the user. What\u0027s the advantage of this over a call like:\n\n    nova quota-update —instances 5 —availability-zone az1 —flavor ssd.small","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"adb48c7b1a08c5b2f7d433a2e5c0ed647ce84e2c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   like :-"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_35fc79b7","line":204,"in_reply_to":"fa1b9901_11f95bc7","updated":"2015-08-20 02:13:24.000000000","message":"The actual quota resource we\u0027re talking about here is instances though, right? So a dynamic resource here is defined as a constraint on the number of instances that can be created for a particular flavor and/or AZ. The definition of a resource called ssd_az1 is artificial.\n\nI feel like the dynamic quota resource is an implementation detail. It\u0027s not specifically required by the use case described. The `nova quota-update` command I gave would satisfy the use case without requiring users to create a separate quota resource.\n\nSo my question is what is the requirement driving the need for a user to create and provide a name for a separate dynamic quota resource, when this doesn\u0027t provide any additional information for the purposes of the implementation?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   like :-"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_11f95bc7","line":204,"in_reply_to":"fa1b9901_a25629d0","updated":"2015-08-19 18:24:12.000000000","message":"nova quota-update works on assigning values to existing quota resources.\nSo, it is better if quota resource is created separately, so that the value can be assigned accordingly during quota-update.\n\nIt should just look like - \nnova quota-update --resource ssd_az1 5.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   dynamic-resource-name is a mandatory field and the admin will"},{"line_number":209,"context_line":"   have to specify it. Ideally it should be named as \u0027az-name_flavor-name\u0027,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_441d4f65","line":206,"updated":"2015-08-17 13:53:34.000000000","message":"So a resource can be uniquely identified one of three ways right now:\n\n  1) name\n  2) uuid\n  3) (flavor, AZ) pair (where one but not both may be None)\n\nCan we drop the UUID?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   dynamic-resource-name is a mandatory field and the admin will"},{"line_number":209,"context_line":"   have to specify it. Ideally it should be named as \u0027az-name_flavor-name\u0027,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_f19867c2","line":206,"in_reply_to":"fa1b9901_441d4f65","updated":"2015-08-19 18:24:12.000000000","message":"We have not specified uuid anywhere. \nThere is id in the table which will be used for references in instances table.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"2b7cb7634a6a08b9ba337aadf005508e22e00378","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   a. For create:"},{"line_number":204,"context_line":"   nova dynamic-resource-create \u003cdynamic-resource-name\u003e"},{"line_number":205,"context_line":"   --availability-zone \u003caz-name\u003e"},{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   dynamic-resource-name is a mandatory field and the admin will"},{"line_number":209,"context_line":"   have to specify it. Ideally it should be named as \u0027az-name_flavor-name\u0027,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_060a0d8a","line":206,"in_reply_to":"fa1b9901_f19867c2","updated":"2015-08-21 13:59:59.000000000","message":"see line 216","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   dynamic-resource-name is a mandatory field and the admin will"},{"line_number":209,"context_line":"   have to specify it. Ideally it should be named as \u0027az-name_flavor-name\u0027,"},{"line_number":210,"context_line":"   and will be included in the help for this CLI. If not the cloud"},{"line_number":211,"context_line":"   admin is free to provide any dynamic-resource-name but internally"},{"line_number":212,"context_line":"   it will be tracked by a dynamic-resource-uuid which will be generated"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_0474379a","line":209,"updated":"2015-08-17 13:53:34.000000000","message":"ultimately we have to allow free names I think. Flavors can\u0027t be renamed afaik but maybe AZs can? And we wouldn\u0027t want validated quota names getting out of sync with AZ names.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":206,"context_line":"   --flavor \u003cflavor-name\u003e"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   dynamic-resource-name is a mandatory field and the admin will"},{"line_number":209,"context_line":"   have to specify it. Ideally it should be named as \u0027az-name_flavor-name\u0027,"},{"line_number":210,"context_line":"   and will be included in the help for this CLI. If not the cloud"},{"line_number":211,"context_line":"   admin is free to provide any dynamic-resource-name but internally"},{"line_number":212,"context_line":"   it will be tracked by a dynamic-resource-uuid which will be generated"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_517113a7","line":209,"in_reply_to":"fa1b9901_0474379a","updated":"2015-08-19 18:24:12.000000000","message":"Makes sense.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e --cores 12"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":235,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":" b. Cloud admin will be able to name the dynamic quota resource with any"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_c10e31e5","line":234,"range":{"start_line":234,"start_character":4,"end_line":234,"end_character":6},"updated":"2015-08-17 13:53:34.000000000","message":"not sure what the -d means here? if it\u0027s an argument to `nova quota-update`, why is it in a sub-list?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e --cores 12"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":235,"context_line":"    \"cores\": \"12\" }}\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":" b. Cloud admin will be able to name the dynamic quota resource with any"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_11207b47","line":234,"in_reply_to":"fa1b9901_c10e31e5","updated":"2015-08-19 18:24:12.000000000","message":"It meant the data payload for rest api.\nI can remove it.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"0c48827a930d9764aa9a0af7a0606563787d8a0f","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e"},{"line_number":246,"context_line":"    --cores 12"},{"line_number":247,"context_line":"    --dynamic-resource ssd.tiny 5 ssd.tiny_az1 5"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_bf4773bb","line":247,"updated":"2015-08-14 07:56:28.000000000","message":"Would it make sense to create a parameter that could serve for both static and dynamic resources?\n\ne.g.\n\nnova quota-update --resource cores 12 --resource ssd.tiny 5 --resource az2 5\n\nwhile --cores, --instances, --ram, etc. would still be accepted for backwards compatibility.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e"},{"line_number":246,"context_line":"    --cores 12"},{"line_number":247,"context_line":"    --dynamic-resource ssd.tiny 5 ssd.tiny_az1 5"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_41c8e174","line":247,"in_reply_to":"1a4dcd0f_7f054212","updated":"2015-08-17 13:53:34.000000000","message":"yes this is a good idea, I\u0027d prefer the latest option wins though. So \"--cores 10 --resources cores 5\" means 5 cores, whereas \"--resources cores 5 --cores 10\" means 10 cores.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b7c0e363b7d3fecb52d502427e811e394307ba99","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e"},{"line_number":246,"context_line":"    --cores 12"},{"line_number":247,"context_line":"    --dynamic-resource ssd.tiny 5 ssd.tiny_az1 5"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_7f054212","line":247,"in_reply_to":"1a4dcd0f_bf4773bb","updated":"2015-08-14 22:59:08.000000000","message":"So, what you are saying is just allow resources key for passing random quota resource name and not validate against anything.\nSure, this would work.\nAnd if both --cores 10 and --resources cores 5 is passed, then we would accept cores 10 as it was passed explicitly.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e"},{"line_number":246,"context_line":"    --cores 12"},{"line_number":247,"context_line":"    --dynamic-resource ssd.tiny 5 ssd.tiny_az1 5"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_b1ef4fe8","line":247,"in_reply_to":"fa1b9901_41c8e174","updated":"2015-08-19 18:24:12.000000000","message":"Well how does code know which is passed earlier or later.\nWe need to decide on one convention as to explicit core parameter wins or the one passed with resource.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"2b7cb7634a6a08b9ba337aadf005508e22e00378","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    nova quota-update --tenant \u003ctenant-id\u003e"},{"line_number":246,"context_line":"    --cores 12"},{"line_number":247,"context_line":"    --dynamic-resource ssd.tiny 5 ssd.tiny_az1 5"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_662989e5","line":247,"in_reply_to":"fa1b9901_b1ef4fe8","updated":"2015-08-21 13:59:59.000000000","message":"Using the latest is a common convention in UNIX utilities, it shouldn\u0027t be hard. If you make the --cores and --resource handlers write to the same data structures and process options in order it will happen naturally.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * -d \u0027{\"quota_set\": {\"tenant_id\": \"7c0d996ce4e14d86aca38878eb765a68\","},{"line_number":250,"context_line":"    \"cores\": \"12\", \"ssd.tiny\": \"5\", \"az1\": \"5\","},{"line_number":251,"context_line":"    \"ssd.tiny_az1\": \"1\" }}\u0027"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    This means that particular tenant is assigned quota of 5 instances"},{"line_number":254,"context_line":"    in az1, 5 instances using ssd.tiny flavor and 1 instance using ssd.tiny"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_e19d755a","line":251,"updated":"2015-08-17 13:53:34.000000000","message":"might be better displayed as a preformatted block","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    and so admin would only be assigning either quota per flavor, quota"},{"line_number":259,"context_line":"    per AZ or quota per (flavor and AZ)."},{"line_number":260,"context_line":"    Examples below are just to show how data will be represented in DB"},{"line_number":261,"context_line":"    and APIs."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"3. Currently, static quota resources are stored in quotas table as::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_240a9bd3","line":261,"updated":"2015-08-17 13:53:34.000000000","message":"you said this @160","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    and so admin would only be assigning either quota per flavor, quota"},{"line_number":259,"context_line":"    per AZ or quota per (flavor and AZ)."},{"line_number":260,"context_line":"    Examples below are just to show how data will be represented in DB"},{"line_number":261,"context_line":"    and APIs."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"3. Currently, static quota resources are stored in quotas table as::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_f1a5c7a1","line":261,"in_reply_to":"fa1b9901_240a9bd3","updated":"2015-08-19 18:24:12.000000000","message":"Yes, but wanted to repeat this so that its clear when people read this section about assigning quota resources and not get confused. :)","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7260,"name":"Joanna H. Huang","email":"joanna.huitzu.huang@gmail.com","username":"hhuang"},"change_message_id":"7282e9748d021d1ac25574efdc0dcf0f7894c927","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"6. os-quota-sets extension will have to be modified or a new extension will"},{"line_number":339,"context_line":"   have to be added for allowing a cloud admin to update AZ and flavor keys"},{"line_number":340,"context_line":"   for the newly added dynamic quota resource."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"7. When a user does a nova quota-show or uses the API, he/she will get"},{"line_number":343,"context_line":"   information on the dynamic quota resources for which his/her project has"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_8c6c8f09","line":340,"updated":"2015-08-17 05:02:27.000000000","message":"It\u0027s been mentioned and explained in proposed change (2).","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"6. os-quota-sets extension will have to be modified or a new extension will"},{"line_number":339,"context_line":"   have to be added for allowing a cloud admin to update AZ and flavor keys"},{"line_number":340,"context_line":"   for the newly added dynamic quota resource."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"7. When a user does a nova quota-show or uses the API, he/she will get"},{"line_number":343,"context_line":"   information on the dynamic quota resources for which his/her project has"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_1195db3d","line":340,"in_reply_to":"1a4dcd0f_8c6c8f09","updated":"2015-08-19 18:24:12.000000000","message":"Thanks for catching it. Will remove.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":367,"context_line":"      if default_scheduling_zone is NULL, AZ will be NULL."},{"line_number":368,"context_line":"      This will cover (quota per flavor) and (quota per (flavor and AZ))"},{"line_number":369,"context_line":"      use cases."},{"line_number":370,"context_line":"   2. If above lookup fails, we will lookup dynamic quota based on"},{"line_number":371,"context_line":"      flavor\u003d\u003cNULL\u003e and AZ\u003d\u003cAZ passed by user\u003e"},{"line_number":372,"context_line":"      This is because admin might have wanted to set quota per AZ and so"},{"line_number":373,"context_line":"      it should apply to all flavors in the cloud."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_04dd1714","line":370,"updated":"2015-08-17 13:53:34.000000000","message":"Separating this from step 1 means that admins must be careful to set flavor-and-AZ rather than ever allowing flavor and AZ quotas to overlap, as only the flavor quota would be respected. There\u0027s a super simple solution here which is to not support AZ quotas, only flavor-and-AZ quota. This also helps @134.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7260,"name":"Joanna H. Huang","email":"joanna.huitzu.huang@gmail.com","username":"hhuang"},"change_message_id":"7282e9748d021d1ac25574efdc0dcf0f7894c927","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":390,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":391,"context_line":"   by 1."},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":394,"context_line":"    during instance creation. This will help us during instance deletion and we"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_c0849b5e","line":391,"updated":"2015-08-17 05:02:27.000000000","message":"Removing the quota reservation was raised in the Vancouver summit. \nReference: https://etherpad.openstack.org/p/YVR-nova-quotas-and-database. \nNeed to keep an eye on its discussion and possible future plans.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"9. Once dynamic quota resource name is obtained, it will be used while creating"},{"line_number":390,"context_line":"   quota reservations. Value of the dynamic quota resource will be decremented"},{"line_number":391,"context_line":"   by 1."},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"10. Also, we will store the resource-id of the dynamic quota resource"},{"line_number":394,"context_line":"    during instance creation. This will help us during instance deletion and we"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_f1cce76b","line":391,"in_reply_to":"1a4dcd0f_c0849b5e","updated":"2015-08-19 18:24:12.000000000","message":"Sure. Thanks for the info.\nFor now, we need to go with what already exist. Whenever the shift happens, dynamic quota resources will have to be taken into account as well.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    will be able to increment quota value of appropriate dynamic quota"},{"line_number":396,"context_line":"    resource associated with the instance."},{"line_number":397,"context_line":"    Instance object will also be modified to include resource-id field. For"},{"line_number":398,"context_line":"    tasks which will not involve dynamic resources this value will be set to"},{"line_number":399,"context_line":"    None by default. Whereas for tasks which involve dynamic resource,"},{"line_number":400,"context_line":"    appropriate resource-id will be populated."},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_c4b5df7e","line":398,"range":{"start_line":398,"start_character":4,"end_line":398,"end_character":9},"updated":"2015-08-17 13:53:34.000000000","message":"I guess you mean instances","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    will be able to increment quota value of appropriate dynamic quota"},{"line_number":396,"context_line":"    resource associated with the instance."},{"line_number":397,"context_line":"    Instance object will also be modified to include resource-id field. For"},{"line_number":398,"context_line":"    tasks which will not involve dynamic resources this value will be set to"},{"line_number":399,"context_line":"    None by default. Whereas for tasks which involve dynamic resource,"},{"line_number":400,"context_line":"    appropriate resource-id will be populated."},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_11cabb4e","line":398,"in_reply_to":"fa1b9901_c4b5df7e","updated":"2015-08-19 18:24:12.000000000","message":"Thats right. Thanks for catching it.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"f394a0abd0a6fc5ba0801cc4cd852cbf03db6d5b","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* Create a new table dynamic_quota_resources with following spec::"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_a22149fd","line":419,"updated":"2015-08-19 14:33:55.000000000","message":"I don\u0027t understand why we need a new table here with a dynamic `resource` field. Why not just add `flavor` and `availability_zone` fields to the existing quotas table and leave the resource as-is.\n\nThat would also satisfy the cores- or ram-per-AZ use case.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"adb48c7b1a08c5b2f7d433a2e5c0ed647ce84e2c","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* Create a new table dynamic_quota_resources with following spec::"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_35d479ea","line":419,"in_reply_to":"fa1b9901_053d91c3","updated":"2015-08-20 02:13:24.000000000","message":"My proposal is to leave the `resource` field to describe the actual resource and add `flavor` and `availability_zone` fields to add additional constraints on quota.\n\nWhen one (or both) of those fields is non-NULL, those specific additional constraints on flavor and/or AZ are applied. There would be a uniqueness constraint on resource/availability/flavor so all of these entries could exist for a single project.\n\nHere are the use cases:\n\n1. Instances per cloud:\n\n\tid: 3\n\tproject_id: 7c0d996ce4e14d86aca38878eb765a68\n\tresource: instances\n\tavailability_zone: NULL\n        flavor: NULL\n\thard_limit: 1\n\n2. Instances per flavor:\n\n\tid: 4\n\tproject_id: 7c0d996ce4e14d86aca38878eb765a68\n\tresource: instances\n\tavailability_zone: NULL\n        flavor: ssd.tiny\n\thard_limit: 1\n\n3. Instances per AZ:\n\n\tid: 5\n\tproject_id: 7c0d996ce4e14d86aca38878eb765a68\n\tresource: instances\n\tavailability_zone: az1\n        flavor: NULL\n\thard_limit: 2\n\n4. Instances per flavor per AZ:\n\n\tid: 6\n\tproject_id: 7c0d996ce4e14d86aca38878eb765a68\n\tresource: instances\n\tavailability_zone: az1\n        flavor: ssd.tiny\n\thard_limit: 4\n\n5. Cores per AZ:\n\n\tid: 7\n\tproject_id: 7c0d996ce4e14d86aca38878eb765a68\n\tresource: cores\n\tavailability_zone: az1\n        flavor: NULL\n\thard_limit: 2\n\n\n(1) is the currently supported use case.\n\n(2)-(4) are the use cases described in this spec.\n\nBut (3) is not useful to us because the number of cores used in the instances per AZ case varies depending on flavor. E.g., 5 instances of m1.tiny is very different from 5 instances of m1.xxlargehumongus. Without this we would be forced to set the quota for each flavor per AZ anyway to avoid core exhaustion.\n\n(5) is an additional use case which is much more useful for us than instances per AZ. RAM per AZ would be supported too.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"6cc615b273bebdc63dc0c6b26e089340208dbafb","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* Create a new table dynamic_quota_resources with following spec::"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a2ca52d_35d82c1d","line":419,"in_reply_to":"fa1b9901_35d479ea","updated":"2015-10-15 05:54:34.000000000","message":"I think this idea is so good.\n\nAnd I consider that adding `flavor` and `availability_zone` fields to the existing quotas table is better than adding new table.\nThe former would satisfy not only the a, b, and c use case written on this spec but also more use case (\u0027(5)\u0027 of the above comment),\nwhich are very valuable for us.\n\nTo help you to further your image on this use case,\nI try to describe its details.\n\n* prepared two availability_zone\n  E.g\n  - quality guaranteed :over commit off\n  - best effort        :over commit on\n* We need to restrict number of cores per each zone.\n* From the viewpoint of capacity planning, we need to be able to\n  calculate cores which may be used in the future for each\n  availability zone beforehand.\n\nI hope someone also think above use case is important.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* Create a new table dynamic_quota_resources with following spec::"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_053d91c3","line":419,"in_reply_to":"fa1b9901_a22149fd","updated":"2015-08-19 18:24:12.000000000","message":"As I mentioned above, how does it solve quota per flavor or quota per flavor in AZ use case ?\nBecause we will have to add different cores field (and all other static resource field) for each flavor for a particular tenant ?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"},{"line_number":423,"context_line":"      `availability_zone` varchar(255),"},{"line_number":424,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":425,"context_line":"      PRIMARY KEY (`id`))"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_371def66","line":422,"updated":"2015-08-17 13:53:34.000000000","message":"flavor needs to be a foreign key","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    CREATE TABLE `dynamic_quota_resource` ("},{"line_number":420,"context_line":"      `id` int(11) NOT NULL AUTO_INCREMENT,"},{"line_number":421,"context_line":"      `resource` varchar(255) NOT NULL,"},{"line_number":422,"context_line":"      `flavor` varchar(255),"},{"line_number":423,"context_line":"      `availability_zone` varchar(255),"},{"line_number":424,"context_line":"      `deleted` int(11) DEFAULT NULL,"},{"line_number":425,"context_line":"      PRIMARY KEY (`id`))"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_e52f3d86","line":422,"in_reply_to":"fa1b9901_371def66","updated":"2015-08-19 18:24:12.000000000","message":"Ahh yes, will update.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"0c48827a930d9764aa9a0af7a0606563787d8a0f","unresolved":false,"context_lines":[{"line_number":450,"context_line":"------------------"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"* DB query will have to made for every quota calculation to grab all dynamic"},{"line_number":453,"context_line":"  quota resources."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Other deployer impact"},{"line_number":456,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_bf1e93b9","line":453,"updated":"2015-08-14 07:56:28.000000000","message":"Could the existing quota_usages table be used to reduce the performance impact?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":450,"context_line":"------------------"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"* DB query will have to made for every quota calculation to grab all dynamic"},{"line_number":453,"context_line":"  quota resources."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Other deployer impact"},{"line_number":456,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_b76d7fce","line":453,"in_reply_to":"1a4dcd0f_1f6f5efd","updated":"2015-08-17 13:53:34.000000000","message":"I think Joshua suggested caching this, it seems like a good idea if it works in the distributed environment.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b7c0e363b7d3fecb52d502427e811e394307ba99","unresolved":false,"context_lines":[{"line_number":450,"context_line":"------------------"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"* DB query will have to made for every quota calculation to grab all dynamic"},{"line_number":453,"context_line":"  quota resources."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Other deployer impact"},{"line_number":456,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_1f6f5efd","line":453,"in_reply_to":"1a4dcd0f_bf1e93b9","updated":"2015-08-14 22:59:08.000000000","message":"Could you please elaborate ?\nBecause, before every quota calculation, we need to query quotas table to get all existing quota resources, so that appropriate calculation can be made.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":450,"context_line":"------------------"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"* DB query will have to made for every quota calculation to grab all dynamic"},{"line_number":453,"context_line":"  quota resources."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Other deployer impact"},{"line_number":456,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_f4229551","line":453,"in_reply_to":"fa1b9901_b76d7fce","updated":"2015-08-19 18:24:12.000000000","message":"Well, the question is when to update the cache and there are possibilities of data being stale.\nBecause write could happen through 1 api worker and other api worker is trying to read it. \nHow do we ensure that other api worker does not read stale data ?\n\nWe could update the cache when write happens but only the api worker doing the write will know about it.\n\nSo, having a shared state like memcache or zookeeper might help. \nBut that adds extra complexity for now. \n\nFor initial pass, I suggest going ahead with db calls.\nThere are so many db calls happening all along in openstack and I doubt this will add more impact. That said, I do not have exact numbers yet.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"2b7cb7634a6a08b9ba337aadf005508e22e00378","unresolved":false,"context_lines":[{"line_number":450,"context_line":"------------------"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"* DB query will have to made for every quota calculation to grab all dynamic"},{"line_number":453,"context_line":"  quota resources."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Other deployer impact"},{"line_number":456,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_264dd1c3","line":453,"in_reply_to":"fa1b9901_f4229551","updated":"2015-08-21 13:59:59.000000000","message":"Adding some of that to the spec would be useful to show you\u0027ve considered it. I\u0027m happy for the initial pass to be straight to DB but I would encourage testing, it\u0027s easy for \"just one more\" DB call to have a catastrophic impact if it ends up happening a lot.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":6851,"name":"Marcus Furlong","email":"furlongm@gmail.com","username":"furlongm"},"change_message_id":"0c48827a930d9764aa9a0af7a0606563787d8a0f","unresolved":false,"context_lines":[{"line_number":507,"context_line":"6. A column named \u0027resource-id\u0027 will be added in nova.instances to keep"},{"line_number":508,"context_line":"   track of the dynamic resource. This column will be set to None when"},{"line_number":509,"context_line":"   dynamic resource is not used otherwise will be populated with the"},{"line_number":510,"context_line":"   resource-id of the respective dynamic resource."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_e246c44e","line":510,"updated":"2015-08-14 07:56:28.000000000","message":"Could this be recorded in the quota_usages table or somewhere in the top-level nova database? dynamic_quota_resource_usages?\n\nI\u0027m curious what will happen with cellsv2 in liberty+ bringing in an extra cell-level database. How is usage calculated if a cell (and therefore the cell-level database) is not available? Same question for cellsv1.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":3031,"name":"Sam Morrison","email":"sorrison@gmail.com","username":"sorrison"},"change_message_id":"f152074aa8b3cff2f59f54a3f65bdc6fc2f3d50b","unresolved":false,"context_lines":[{"line_number":507,"context_line":"6. A column named \u0027resource-id\u0027 will be added in nova.instances to keep"},{"line_number":508,"context_line":"   track of the dynamic resource. This column will be set to None when"},{"line_number":509,"context_line":"   dynamic resource is not used otherwise will be populated with the"},{"line_number":510,"context_line":"   resource-id of the respective dynamic resource."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_c3dfc50a","line":510,"in_reply_to":"1a4dcd0f_5f33a613","updated":"2015-08-17 06:04:30.000000000","message":"Yeah you can ignore cells, it all happens at the api level.\n\nMaybe keeping track of resources should be stored in the separate table much like how the quota_usages table is set up. This would then require no changes to the instances table.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":507,"context_line":"6. A column named \u0027resource-id\u0027 will be added in nova.instances to keep"},{"line_number":508,"context_line":"   track of the dynamic resource. This column will be set to None when"},{"line_number":509,"context_line":"   dynamic resource is not used otherwise will be populated with the"},{"line_number":510,"context_line":"   resource-id of the respective dynamic resource."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa1b9901_7401a504","line":510,"in_reply_to":"1a4dcd0f_c3dfc50a","updated":"2015-08-19 18:24:12.000000000","message":"Hi Sam,\n\nThat alone will not help. \nIf we are tracking resource use in a separate table, there could be multiple resources in use for different instances for a single tenant. \nDuring deletion of instance, we need to know exactly which resource needs to be updated. \nSo, need to associate instance with the resource id.\n\nQuota usages will continue to show in_use resources (including static and dynamic) for particular project and tenant id.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"b7c0e363b7d3fecb52d502427e811e394307ba99","unresolved":false,"context_lines":[{"line_number":507,"context_line":"6. A column named \u0027resource-id\u0027 will be added in nova.instances to keep"},{"line_number":508,"context_line":"   track of the dynamic resource. This column will be set to None when"},{"line_number":509,"context_line":"   dynamic resource is not used otherwise will be populated with the"},{"line_number":510,"context_line":"   resource-id of the respective dynamic resource."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a4dcd0f_5f33a613","line":510,"in_reply_to":"1a4dcd0f_e246c44e","updated":"2015-08-14 22:59:08.000000000","message":"We need to map instance to a particular quota resource. \nSo, that we can increment quota for that resource during nova delete of that instance.\nHow will storing in quota_usages help ?\n\nI am not familiar with cells, but does quota calculation happen after request is sent to the cell or before ?\nI think quota calculations are made before request is sent to the cell, in which case it should not matter.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c4277848e7e4259f9813f8c35b815735b945b15f","unresolved":false,"context_lines":[{"line_number":523,"context_line":"* test creation, update, deletion and show, of dynamic quota"},{"line_number":524,"context_line":"  resources during os-quota-sets api call."},{"line_number":525,"context_line":"* increment/decrement dynamic quota resource value during"},{"line_number":526,"context_line":"  creation/deletion of instance using dynamic quota resource."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"Documentation Impact"},{"line_number":529,"context_line":"\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":16,"id":"fa1b9901_b7f25f05","line":526,"updated":"2015-08-17 13:53:34.000000000","message":"need to check resize as well, maybe migration?","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"},{"author":{"_account_id":7455,"name":"Meghal Gosalia","username":"meghal"},"change_message_id":"bae363818e6f1085ce7a67902d7e6c54be877d50","unresolved":false,"context_lines":[{"line_number":523,"context_line":"* test creation, update, deletion and show, of dynamic quota"},{"line_number":524,"context_line":"  resources during os-quota-sets api call."},{"line_number":525,"context_line":"* increment/decrement dynamic quota resource value during"},{"line_number":526,"context_line":"  creation/deletion of instance using dynamic quota resource."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"Documentation Impact"},{"line_number":529,"context_line":"\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":16,"id":"fa1b9901_34f1ed01","line":526,"in_reply_to":"fa1b9901_b7f25f05","updated":"2015-08-19 18:24:12.000000000","message":"Ahh yes. Will add that here.\nI also need to check as to how this change affects the resize or migration flow.","commit_id":"4cdc17da9b46529410b9d35462a85a91a89d1fbf"}]}
