)]}'
{"specs/stein/approved/unified-limits-stein.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8232f2440b996a99012bfdfead760ecf8227e96f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":44,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":45,"context_line":"* User tries to understand why they got an Over Quota error"},{"line_number":46,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_16343148","line":46,"updated":"2018-09-19 17:58:43.000000000","message":"Isn\u0027t \"Can have some amount of hierarchy\" a driving use case here as well?","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a6f6b20f6b00546a2231b79a5e837bf46ee4fd47","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":44,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":45,"context_line":"* User tries to understand why they got an Over Quota error"},{"line_number":46,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9cdfd70a","line":46,"in_reply_to":"3f79a3b5_16343148","updated":"2018-09-21 13:43:14.000000000","message":"ah, that is what I meant by line 44, but its not very clear I guess.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61a9867378fa6217dadef6ad210f55846435bad5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":44,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":45,"context_line":"* User tries to understand why they got an Over Quota error"},{"line_number":46,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b8597829","line":46,"in_reply_to":"3f79a3b5_9cdfd70a","updated":"2018-09-21 16:53:39.000000000","message":"Yeah I guess I missed the \"non-flat\" bit. Still, including something with \"hierarch...\" would probably be good.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e72977919a35db833f2c6c2a28a0b6de74a82f80","unresolved":false,"context_lines":[{"line_number":71,"context_line":"these limits:"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* metadata_items"},{"line_number":74,"context_line":"* injected_files"},{"line_number":75,"context_line":"* injected_file_content_bytes"},{"line_number":76,"context_line":"* injected_file_path_bytes"},{"line_number":77,"context_line":"* key_pairs"},{"line_number":78,"context_line":"* server_groups"},{"line_number":79,"context_line":"* server_group_members"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_44ddafdb","line":76,"range":{"start_line":74,"start_character":2,"end_line":76,"end_character":26},"updated":"2018-09-25 13:51:25.000000000","message":"already deprecated at 2.57","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":71,"context_line":"these limits:"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* metadata_items"},{"line_number":74,"context_line":"* injected_files"},{"line_number":75,"context_line":"* injected_file_content_bytes"},{"line_number":76,"context_line":"* injected_file_path_bytes"},{"line_number":77,"context_line":"* key_pairs"},{"line_number":78,"context_line":"* server_groups"},{"line_number":79,"context_line":"* server_group_members"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_3ca9ea23","line":76,"range":{"start_line":74,"start_character":2,"end_line":76,"end_character":26},"in_reply_to":"3f79a3b5_44ddafdb","updated":"2018-10-29 16:07:51.000000000","message":"ah, OK.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e72977919a35db833f2c6c2a28a0b6de74a82f80","unresolved":false,"context_lines":[{"line_number":78,"context_line":"* server_groups"},{"line_number":79,"context_line":"* server_group_members"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The scope of the count for each of these rate limits remains unchanged, i.e."},{"line_number":82,"context_line":"key_pairs is still counted per user and server_group_members is still counted"},{"line_number":83,"context_line":"per server_group. However, there will be a single global configuration setting"},{"line_number":84,"context_line":"for each limit. Current quota APIs always show a usage of 0 when you report"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_24a75353","line":81,"range":{"start_line":81,"start_character":41,"end_line":81,"end_character":52},"updated":"2018-09-25 13:51:25.000000000","message":"What is \u0027rate limits\u0027 pointed to? Nova already removed the stuff related rate limits.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":78,"context_line":"* server_groups"},{"line_number":79,"context_line":"* server_group_members"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The scope of the count for each of these rate limits remains unchanged, i.e."},{"line_number":82,"context_line":"key_pairs is still counted per user and server_group_members is still counted"},{"line_number":83,"context_line":"per server_group. However, there will be a single global configuration setting"},{"line_number":84,"context_line":"for each limit. Current quota APIs always show a usage of 0 when you report"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9c483e8a","line":81,"range":{"start_line":81,"start_character":41,"end_line":81,"end_character":52},"in_reply_to":"3f79a3b5_24a75353","updated":"2018-10-29 16:07:51.000000000","message":"All the above a really rate limits rather than quotas of resource. I say that because they are really just stopping the number of things in the DB, rather than real resource usage.\n\nI should really call that something different... its way too confusing as it is, given the history you point out.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e72977919a35db833f2c6c2a28a0b6de74a82f80","unresolved":false,"context_lines":[{"line_number":91,"context_line":"* ram"},{"line_number":92,"context_line":"* instances"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"It is worth nothing we are currently missing limits for Custom resource class"},{"line_number":95,"context_line":"usage (for Ironic instances) and for Disk resource class usage."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Enforce unified limits"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_e42cfbb3","line":94,"range":{"start_line":94,"start_character":12,"end_line":94,"end_character":19},"updated":"2018-09-25 13:51:25.000000000","message":"s/nothing/note/?","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":91,"context_line":"* ram"},{"line_number":92,"context_line":"* instances"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"It is worth nothing we are currently missing limits for Custom resource class"},{"line_number":95,"context_line":"usage (for Ironic instances) and for Disk resource class usage."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Enforce unified limits"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_bc4bba83","line":94,"range":{"start_line":94,"start_character":12,"end_line":94,"end_character":19},"in_reply_to":"3f79a3b5_e42cfbb3","updated":"2018-10-29 16:07:51.000000000","message":"oops, yes.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8232f2440b996a99012bfdfead760ecf8227e96f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"present for oslo_limit::"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  nova-manage limits_register \\"},{"line_number":168,"context_line":"    --resource:VCPU 20 --resource:MEMORY_MB 51200 --instances 10"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Replace Legacy Quota APIs"},{"line_number":171,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b6277d12","line":168,"updated":"2018-09-19 17:58:43.000000000","message":"This is the thing that migrates existing limits over to keystone, right?\n\nDoes it delete them from nova once keystone claims to have them? Probably should, right?\n\nAlso probably good to be able to migrate a specific tenant instead of just \"all or nothing\".","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":165,"context_line":"present for oslo_limit::"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  nova-manage limits_register \\"},{"line_number":168,"context_line":"    --resource:VCPU 20 --resource:MEMORY_MB 51200 --instances 10"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Replace Legacy Quota APIs"},{"line_number":171,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9c16fe57","line":168,"in_reply_to":"3f79a3b5_42f60760","updated":"2018-10-29 16:07:51.000000000","message":"So the per region is already covered, because keystone stores the limits per Nova endpoint.\n\nSo here the nova.conf contains the appropriate keystone region, so you need to run this per nova endpoint.\n\n...This is so complicated I should mention it though!!!","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":9373,"name":"Vlad Gusev","email":"vlad.esten@gmail.com","username":"s10"},"change_message_id":"0ca35510d0769463974aefb53ec62a0e05e009c3","unresolved":false,"context_lines":[{"line_number":165,"context_line":"present for oslo_limit::"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  nova-manage limits_register \\"},{"line_number":168,"context_line":"    --resource:VCPU 20 --resource:MEMORY_MB 51200 --instances 10"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Replace Legacy Quota APIs"},{"line_number":171,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_42f60760","line":168,"in_reply_to":"3f79a3b5_9c16f7a6","updated":"2018-09-25 08:20:30.000000000","message":"I think that here should be mentioned an optional region argument. In some for multi-region clouds, operators use single keystone for all regions. They shouldn\u0027t lose the ability to set different limits in different regions.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a6f6b20f6b00546a2231b79a5e837bf46ee4fd47","unresolved":false,"context_lines":[{"line_number":165,"context_line":"present for oslo_limit::"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  nova-manage limits_register \\"},{"line_number":168,"context_line":"    --resource:VCPU 20 --resource:MEMORY_MB 51200 --instances 10"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Replace Legacy Quota APIs"},{"line_number":171,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9c16f7a6","line":168,"in_reply_to":"3f79a3b5_b6277d12","updated":"2018-09-21 13:43:14.000000000","message":"No, that is nova-manage quota_migrate I describe below.\n\nI should probably drop this tool as it is distracting, its a wrapper about keystone client to push info into the keystone API about Nova specific keys, for the given endpoint.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"e6e7f3f499c153ea6c2f3ad9cf9cd8cc6f736965","unresolved":false,"context_lines":[{"line_number":177,"context_line":"* /os-quota-sets"},{"line_number":178,"context_line":"* /os-quota-class-sets"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"When `use_unified_limits\u003dTrue` a best effort will be made to keep the older"},{"line_number":181,"context_line":"microversions working by proxing the APIs to Keystone. Where possible,"},{"line_number":182,"context_line":"existing tooling to set quotas should continue to operate."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_743704b1","line":180,"updated":"2018-09-27 11:05:16.000000000","message":"Does the older microversion behaviors remain the same if unified limits config is not enabled, which is, still using the old code to store quotas in DB","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":177,"context_line":"* /os-quota-sets"},{"line_number":178,"context_line":"* /os-quota-class-sets"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"When `use_unified_limits\u003dTrue` a best effort will be made to keep the older"},{"line_number":181,"context_line":"microversions working by proxing the APIs to Keystone. Where possible,"},{"line_number":182,"context_line":"existing tooling to set quotas should continue to operate."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_220a241d","line":180,"in_reply_to":"3f79a3b5_743704b1","updated":"2018-10-29 16:07:51.000000000","message":"Yes, it should stay the same. I can add that clarification in.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"e6e7f3f499c153ea6c2f3ad9cf9cd8cc6f736965","unresolved":false,"context_lines":[{"line_number":187,"context_line":"`use_unified_limits\u003dTrue` rather than cause confusion by ignoring the request."},{"line_number":188,"context_line":"We should confirm this will not break Horizon."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The new API will be:"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"/limits[?project_id\u003d\u003cproject_id\u003e]"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_74286484","line":190,"updated":"2018-09-27 11:05:16.000000000","message":"If unified limits is not enabled in config, any request to this new API will be ignored or perhaps returned with a http 405, right?","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":187,"context_line":"`use_unified_limits\u003dTrue` rather than cause confusion by ignoring the request."},{"line_number":188,"context_line":"We should confirm this will not break Horizon."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The new API will be:"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"/limits[?project_id\u003d\u003cproject_id\u003e]"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_421ac06a","line":190,"in_reply_to":"3f79a3b5_74286484","updated":"2018-10-29 16:07:51.000000000","message":"We shouldn\u0027t use 405 (that means POST isn\u0027t allowed but GET would work) so I think it would be 400, but you are correct, we should add that detail.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8232f2440b996a99012bfdfead760ecf8227e96f","unresolved":false,"context_lines":[{"line_number":226,"context_line":"In Stein the upgrade status check will having a WARNING when a user has not"},{"line_number":227,"context_line":"migrated their unified limits to Keystone. It is expected to move to an ERROR"},{"line_number":228,"context_line":"once the legacy quota code has been removed, which is expected one cycle after"},{"line_number":229,"context_line":"unified limits is the default."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following tool will be added to move quotas for cores, memory and servers"},{"line_number":232,"context_line":"from Nova into Keystone\u0027s unified limits::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b66c5d36","line":229,"updated":"2018-09-19 17:58:43.000000000","message":"Matt should look at this. I know we discussed this, but I think some tooling places a lot of weight on a warning result, so it might be wrong for us to warn about a stein thing during an upgrade from rocky, since they can\u0027t do anything in rocky yet (i.e. before the upgrade).","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"231963fca675e38b05d20d14eb8154350f9d6113","unresolved":false,"context_lines":[{"line_number":226,"context_line":"In Stein the upgrade status check will having a WARNING when a user has not"},{"line_number":227,"context_line":"migrated their unified limits to Keystone. It is expected to move to an ERROR"},{"line_number":228,"context_line":"once the legacy quota code has been removed, which is expected one cycle after"},{"line_number":229,"context_line":"unified limits is the default."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following tool will be added to move quotas for cores, memory and servers"},{"line_number":232,"context_line":"from Nova into Keystone\u0027s unified limits::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_a24cf474","line":229,"in_reply_to":"3f79a3b5_b66c5d36","updated":"2018-10-29 16:07:51.000000000","message":"hmm, interesting, I should find out more about that.","commit_id":"4f577449fed4431ede9cf7a9af23a10ba4426083"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"83883690052b0e4aee336244895b83ee39f7525a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"`use_unified_limits\u003dTrue` rather than cause confusion by ignoring the request."},{"line_number":201,"context_line":"We should confirm this will not break Horizon."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The new API will be:"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"/limits[?project_id\u003d\u003cproject_id\u003e]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"{"},{"line_number":208,"context_line":"    \"limits\": ["}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_23f8d47c","line":205,"range":{"start_line":203,"start_character":0,"end_line":205,"end_character":33},"updated":"2018-10-30 15:05:47.000000000","message":"This is a new *compute API*, right? Because on line 315 below, you write:\n\n\"TODO: should Keystone really call Nova to check usage and display the usage info in a unified way. Should it just be custom tooling via CLI tools, etc?\"\n\nUnder no circumstances do I believe that Keystone should be calling to Nova (or Placement) to get usage information.","commit_id":"3c8529ab44369aeac5689189df44431e4389f0eb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"83883690052b0e4aee336244895b83ee39f7525a","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"/limits[?project_id\u003d\u003cproject_id\u003e]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"{"},{"line_number":208,"context_line":"    \"limits\": ["},{"line_number":209,"context_line":"        {"},{"line_number":210,"context_line":"            \"resource_name\": \"resource:CPU\","},{"line_number":211,"context_line":"            \"project_id\": \"3a705b9f56bb439381b43c4fe59dccce\","},{"line_number":212,"context_line":"            \"resource_limit\": 5,"},{"line_number":213,"context_line":"            \"project_usage\": 10,"},{"line_number":214,"context_line":"        }"},{"line_number":215,"context_line":"    ]"},{"line_number":216,"context_line":"}"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Note, only limits registered in keystone are shown. If a resource is not"},{"line_number":219,"context_line":"limited, it is not shown."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_03f9184e","line":216,"range":{"start_line":207,"start_character":0,"end_line":216,"end_character":1},"updated":"2018-10-30 15:05:47.000000000","message":"I\u0027m actually a little reticent to mix limits and usage information in a single /limits API resource endpoint.\n\nI personally believe that Horizon/UI toolkits and higher-level orchestration services are the more appropriate place to merge/munge the data from multiple API responses, instead of combined API resource responses as the above proposal shows. (It mixes limits and usage information in a single GET /limits API endpoint response)\n\nThe placement API already contains an API for /usages that can be filtered by project (and optionally, the user).\n\nWhat the placement API cannot return is any of the following:\n\n* A count of instances (with something called \"consumer types\" it might be possible to do this in the future, though)\n* A time-range-filtered response as the GET /os-simple-tenant-usage compute API currently returns. It\u0027s unclear that Placement would ever actually have the information available to it to calculate this kind of filter)","commit_id":"3c8529ab44369aeac5689189df44431e4389f0eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9f6fc57bbabd9818bc4c2d61282e841b4681f9b3","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"/limits[?project_id\u003d\u003cproject_id\u003e]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"{"},{"line_number":208,"context_line":"    \"limits\": ["},{"line_number":209,"context_line":"        {"},{"line_number":210,"context_line":"            \"resource_name\": \"resource:CPU\","},{"line_number":211,"context_line":"            \"project_id\": \"3a705b9f56bb439381b43c4fe59dccce\","},{"line_number":212,"context_line":"            \"resource_limit\": 5,"},{"line_number":213,"context_line":"            \"project_usage\": 10,"},{"line_number":214,"context_line":"        }"},{"line_number":215,"context_line":"    ]"},{"line_number":216,"context_line":"}"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Note, only limits registered in keystone are shown. If a resource is not"},{"line_number":219,"context_line":"limited, it is not shown."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_648d4b35","line":216,"range":{"start_line":207,"start_character":0,"end_line":216,"end_character":1},"in_reply_to":"3f79a3b5_03f9184e","updated":"2018-11-01 09:40:21.000000000","message":"I hate the idea of a proxy API too. But this is where I remember the discussion at the PTG landing, so its what I put in here as a starting point.\n\nThe alternative I suggested is having a standard usage API that some higher level entity can query, but that didn\u0027t seem to go down well.\n\nNow, we could try to assume placement knows about all usage tracked in unified limits, but the discussion with Cinder seemed to suggest that isn\u0027t happening any time soon.\n\nWhat would you prefer, dropping this API for now, and see how we tie this all together later? I am quite a fan of that approach myself.","commit_id":"3c8529ab44369aeac5689189df44431e4389f0eb"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"There will just be three initially supported limits registered with Keystone:"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"* `resource:VCPU` (previously called cores)"},{"line_number":70,"context_line":"* `resource:MEMORY_MB` (previously called memory)"},{"line_number":71,"context_line":"* `servers` (previously called instances)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"To allow the new system to co-exist with the older quota system, we add"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_47969a4e","line":70,"range":{"start_line":70,"start_character":42,"end_line":70,"end_character":48},"updated":"2019-04-30 23:46:57.000000000","message":"ram","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  and limiting the user\u0027s access from the parent project."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Note when we query the Unified Limits API, we don\u0027t know where the limits are"},{"line_number":101,"context_line":"define, either a registered limit or a per project Limit. As such we need the"},{"line_number":102,"context_line":"operator to migrate all limits to keystone before we start using Keystone to"},{"line_number":103,"context_line":"enforce limits."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_27992678","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":6},"updated":"2019-04-30 23:46:57.000000000","message":"defined","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Note when we query the Unified Limits API, we don\u0027t know where the limits are"},{"line_number":101,"context_line":"define, either a registered limit or a per project Limit. As such we need the"},{"line_number":102,"context_line":"operator to migrate all limits to keystone before we start using Keystone to"},{"line_number":103,"context_line":"enforce limits."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Once the above migration has happened, and the operator requests that unified"},{"line_number":106,"context_line":"limits are enforced, the following needs to be happen:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_07aae26f","line":103,"updated":"2019-04-30 23:46:57.000000000","message":"Why not? The API shows that registered limits and project limits have to be queried separately, implying that we would know whether it\u0027s a registered limit or a project limit:\n\nhttps://developer.openstack.org/api-ref/identity/v3/index.html?expanded\u003d#show-registered-limit-details\nhttps://developer.openstack.org/api-ref/identity/v3/index.html?expanded\u003d#show-registered-limit-details\n\nOr did you mean something else?","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Note when we query the Unified Limits API, we don\u0027t know where the limits are"},{"line_number":101,"context_line":"define, either a registered limit or a per project Limit. As such we need the"},{"line_number":102,"context_line":"operator to migrate all limits to keystone before we start using Keystone to"},{"line_number":103,"context_line":"enforce limits."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Once the above migration has happened, and the operator requests that unified"},{"line_number":106,"context_line":"limits are enforced, the following needs to be happen:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_7fb47ed1","line":103,"in_reply_to":"ffb9cba7_07aae26f","updated":"2019-05-01 21:05:23.000000000","message":"hmm, good point...\n\nI was thinking about us always just making the single API call to get a the list of limits for a specific token.\n\n... but you are correct, we could use the admin API to double check things.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6d0a9ec4e6ef08f47e8253fec69b8bf4fccdc34d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Note when we query the Unified Limits API, we don\u0027t know where the limits are"},{"line_number":101,"context_line":"define, either a registered limit or a per project Limit. As such we need the"},{"line_number":102,"context_line":"operator to migrate all limits to keystone before we start using Keystone to"},{"line_number":103,"context_line":"enforce limits."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Once the above migration has happened, and the operator requests that unified"},{"line_number":106,"context_line":"limits are enforced, the following needs to be happen:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_fa15dce5","line":103,"in_reply_to":"ffb9cba7_7fb47ed1","updated":"2019-05-01 21:37:49.000000000","message":"Related to my other comment later in the file, I understand now that the API call to /limits will return a registered limit if a project override doesn\u0027t exist. So I agree, we may as well treat it so that the operator must migrate everything first before turning on unified limits.\n\nAnother thought, we could detect migration doneness by checking that all legacy nova limits are gone from the database (assuming that the nova-manage migration will delete legacy limits after confirming they\u0027ve been moved to keystone).","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"* key_pairs (counted per user)"},{"line_number":212,"context_line":"* server_groups (counted per project, previously also counted per user)"},{"line_number":213,"context_line":"* server_group_members (counted per server group)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"The two above sets of limits don\u0027t really correspond to consuming resources,"},{"line_number":216,"context_line":"like those tracked by Placement. They are really only there as a protection"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_8732525d","line":213,"range":{"start_line":213,"start_character":24,"end_line":213,"end_character":48},"updated":"2019-04-30 23:46:57.000000000","message":"These are counted per user (all members of server group filtered on user)","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"* key_pairs (counted per user)"},{"line_number":212,"context_line":"* server_groups (counted per project, previously also counted per user)"},{"line_number":213,"context_line":"* server_group_members (counted per server group)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"The two above sets of limits don\u0027t really correspond to consuming resources,"},{"line_number":216,"context_line":"like those tracked by Placement. They are really only there as a protection"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_1fcd4265","line":213,"range":{"start_line":213,"start_character":24,"end_line":213,"end_character":48},"in_reply_to":"ffb9cba7_8732525d","updated":"2019-05-01 21:05:23.000000000","message":"ah, ooops, thanks.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"It is proposed that the new code only allows the limit to be changed via"},{"line_number":224,"context_line":"configuration. It will use the same configuration setting the legacy quota"},{"line_number":225,"context_line":"system uses for the default if no API call has been made to change the limit."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Specifically this means:"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_e71a2eca","line":225,"updated":"2019-04-30 23:46:57.000000000","message":"I wouldn\u0027t have expected we\u0027d want to do this. Shouldn\u0027t the limits be changed only via the unified limits API? That is, operators should call the keystone API to create new limits or change limits. And if anything, deprecate the configuration file setting of any quota limits.\n\n(later)\n\nOr is this just saying use the config option values as a default if an operator has never added any quota limits to the keystone limits API?","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"It is proposed that the new code only allows the limit to be changed via"},{"line_number":224,"context_line":"configuration. It will use the same configuration setting the legacy quota"},{"line_number":225,"context_line":"system uses for the default if no API call has been made to change the limit."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Specifically this means:"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_5fce5a2d","line":225,"in_reply_to":"ffb9cba7_e71a2eca","updated":"2019-05-01 21:05:23.000000000","message":"Sorry, bad wording. The idea is these don\u0027t get migrated to keystone, and we drop the Nova API support to change the config.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"While this is kept for VCPUs, memory and instance counts via unified limits,"},{"line_number":235,"context_line":"it will not be respected for any of the limits described above."},{"line_number":236,"context_line":"Any problems should be mitigated via appropriate API rate limiting, using HA"},{"line_number":237,"context_line":"proxy or similar tools."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"In summary the impact on the configuration options is:"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_2771260d","line":237,"updated":"2019-04-30 23:46:57.000000000","message":"Sorry, I don\u0027t quite understand why recheck_quota wouldn\u0027t work for cores, ram, and instance counts via unified limits? Is it because oslo.limit will take care of that for us via verify()?","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":234,"context_line":"While this is kept for VCPUs, memory and instance counts via unified limits,"},{"line_number":235,"context_line":"it will not be respected for any of the limits described above."},{"line_number":236,"context_line":"Any problems should be mitigated via appropriate API rate limiting, using HA"},{"line_number":237,"context_line":"proxy or similar tools."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"In summary the impact on the configuration options is:"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_9fbff25f","line":237,"in_reply_to":"ffb9cba7_2771260d","updated":"2019-05-01 21:05:23.000000000","message":"Sorry, I mean just for this small subset of deprecated items.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"33c807a31669bcdf91bcb1cec0f705bfab28161a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"Security impact"},{"line_number":359,"context_line":"---------------"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"The removal of quota rechecks for some limits slightly reduces the protection"},{"line_number":362,"context_line":"provided, but really it encourages the proper implementation of API"},{"line_number":363,"context_line":"rate limiting as a replacement protection."},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Notifications impact"},{"line_number":366,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_70d4741e","line":363,"range":{"start_line":361,"start_character":0,"end_line":363,"end_character":42},"updated":"2018-11-09 17:01:57.000000000","message":"I\u0027m pretty sure that this has been answered elsewhere, but I\u0027ve been out of the loop for a while and I think there\u0027s value in calling it out here.\n\nBased on reading the proposed code, this new approach will have races such that it is possible to (probably only sightly) exceed limits via multiple parallel requests, since there\u0027s no reservation system and a noticeable gap (seconds are conceivable) between time-of-check and time-of-use. Is this correct?","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":358,"context_line":"Security impact"},{"line_number":359,"context_line":"---------------"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"The removal of quota rechecks for some limits slightly reduces the protection"},{"line_number":362,"context_line":"provided, but really it encourages the proper implementation of API"},{"line_number":363,"context_line":"rate limiting as a replacement protection."},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Notifications impact"},{"line_number":366,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_9f32920f","line":363,"range":{"start_line":361,"start_character":0,"end_line":363,"end_character":42},"in_reply_to":"3f79a3b5_70d4741e","updated":"2019-05-01 21:05:23.000000000","message":"It has the same issues as our existing code. Granted the old code appeared less racey, on first inspection.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cccc2e96c51552b9ad07e3e03ffd8c1581c0efa2","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"When getting tenant limits from keystone, we always get a result once the"},{"line_number":402,"context_line":"service endpoint default is added, we don\u0027t know if the per tenant setting"},{"line_number":403,"context_line":"has been migrated from Nova into Keystone."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"With fast forward upgrades, all services are down, so need to changes in"},{"line_number":406,"context_line":"keystone-manage to update the keystone DB, as the API is not available."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_278da6d2","line":403,"updated":"2019-04-30 23:46:57.000000000","message":"I don\u0027t quite understand this. Is this implying that if there\u0027s a registered limit for a resource in keystone, then a query for a per project limit for the resource would return the registered limit if a per project limit has not been created?","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"df8339c3d838e22f9a44957fb191516895016920","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"When getting tenant limits from keystone, we always get a result once the"},{"line_number":402,"context_line":"service endpoint default is added, we don\u0027t know if the per tenant setting"},{"line_number":403,"context_line":"has been migrated from Nova into Keystone."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"With fast forward upgrades, all services are down, so need to changes in"},{"line_number":406,"context_line":"keystone-manage to update the keystone DB, as the API is not available."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_bf20b6ad","line":403,"in_reply_to":"ffb9cba7_278da6d2","updated":"2019-05-01 21:05:23.000000000","message":"Yes, I believe that is the case. You just get the \"active\" list of limits.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6d0a9ec4e6ef08f47e8253fec69b8bf4fccdc34d","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"When getting tenant limits from keystone, we always get a result once the"},{"line_number":402,"context_line":"service endpoint default is added, we don\u0027t know if the per tenant setting"},{"line_number":403,"context_line":"has been migrated from Nova into Keystone."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"With fast forward upgrades, all services are down, so need to changes in"},{"line_number":406,"context_line":"keystone-manage to update the keystone DB, as the API is not available."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffb9cba7_ba6684c0","line":403,"in_reply_to":"ffb9cba7_bf20b6ad","updated":"2019-05-01 21:37:49.000000000","message":"I confirmed today with Lance that indeed, this is how the API works (and I think makes sense). If there\u0027s a registered limit for a resource in keystone (aka default limit) then a query for a per project limit for the resource returns the registered limit if there\u0027s no override available.","commit_id":"9f508adf196f6c2254b332a9b66aec9e9a7af286"}],"specs/train/approved/unified-limits-nova.rst":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from setting quotas via Nova to setting quotas via Keystone."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"All per user quota support is dropped, in favor of hierarchical"},{"line_number":21,"context_line":"enforcement that will be supported by unified limits."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Only server count limits and limits on Resource Class resources requested in"},{"line_number":24,"context_line":"the flavor will be supported with unified limits. All other existing quotas"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_0c881b1d","line":21,"updated":"2019-05-22 19:57:13.000000000","message":"++","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Use Cases"},{"line_number":53,"context_line":"---------"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"We will focus on per unified limits on:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* total number of servers"},{"line_number":58,"context_line":"* amounts of each Resource Class requested in the flavor"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_4c937350","line":55,"range":{"start_line":55,"start_character":17,"end_line":55,"end_character":20},"updated":"2019-05-22 19:57:13.000000000","message":"?","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"We will focus on per unified limits on:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* total number of servers"},{"line_number":58,"context_line":"* amounts of each Resource Class requested in the flavor"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":61,"context_line":"not be supported when you use unified limits."}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_acfa2f72","line":58,"updated":"2019-05-22 19:57:13.000000000","message":"Note that this would include both: (1) resource classes that are baked into the flavor like cores and ram (disk would be a new one that we don\u0027t currently support today) and (2) resource classes that are included in flavor extra_specs.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"We will focus on per unified limits on:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* total number of servers"},{"line_number":58,"context_line":"* amounts of each Resource Class requested in the flavor"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":61,"context_line":"not be supported when you use unified limits."}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_e08a1468","line":58,"in_reply_to":"bfb3d3c7_acfa2f72","updated":"2019-05-28 20:15:12.000000000","message":"Yes, that is my intent there.\n\nIdeally any that are *implied* by the flavor too, but first things first.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"We will support the following limits:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* `server_count`"},{"line_number":89,"context_line":"* `resource:\u003cRESOURCE_CLASS\u003e`"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"To allow the new system to co-exist with the older quota system, we add"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_2f907143","line":88,"updated":"2019-05-22 19:57:13.000000000","message":"Note that until consumer types are available in placement, we must obtain server count from the API database in nova.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"We will support the following limits:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* `server_count`"},{"line_number":89,"context_line":"* `resource:\u003cRESOURCE_CLASS\u003e`"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"To allow the new system to co-exist with the older quota system, we add"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_e0ef741b","line":88,"in_reply_to":"bfb3d3c7_2f907143","updated":"2019-05-28 20:15:12.000000000","message":"Yeah, I went for that here:\nhttps://review.opendev.org/#/c/615180","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"bb42ff1c681dc0815a1d0f7468a7f02209825534","unresolved":false,"context_lines":[{"line_number":104,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"},{"line_number":105,"context_line":"http://specs.openstack.org/openstack/nova-specs/specs/train/approved/count-quota-usage-from-placement.html"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"To what out what resources a server will claim, we we reuse this code to"},{"line_number":108,"context_line":"extract the resources from any given flavor:"},{"line_number":109,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_27cef1b3","line":107,"range":{"start_line":107,"start_character":3,"end_line":107,"end_character":7},"updated":"2019-05-29 15:54:02.000000000","message":"*figure?","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"To what out what resources a server will claim, we we reuse this code to"},{"line_number":108,"context_line":"extract the resources from any given flavor:"},{"line_number":109,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"For server build, we use the above function to get the Resource Class"},{"line_number":112,"context_line":"resource amounts for the requested flavor. This will then be checked using"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_0c39fb3f","line":109,"updated":"2019-05-22 19:57:13.000000000","message":"Nice find.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"To what out what resources a server will claim, we we reuse this code to"},{"line_number":108,"context_line":"extract the resources from any given flavor:"},{"line_number":109,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"For server build, we use the above function to get the Resource Class"},{"line_number":112,"context_line":"resource amounts for the requested flavor. This will then be checked using"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_60db847b","line":109,"in_reply_to":"bfb3d3c7_0c39fb3f","updated":"2019-05-28 20:15:12.000000000","message":"It totally changed my plans :)","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":119,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":120,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":121,"context_line":"That is, we will still respected the config: `quota.recheck_quota`"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":124,"context_line":"claim resources for both the new flavor and old flavor at the same time."}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_cc3a0333","line":121,"range":{"start_line":121,"start_character":23,"end_line":121,"end_character":32},"updated":"2019-05-22 19:57:13.000000000","message":"respect","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"That is, we will still respected the config: `quota.recheck_quota`"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":124,"context_line":"claim resources for both the new flavor and old flavor at the same time."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"For further details on the semantic changes relating to counting with"},{"line_number":127,"context_line":"placement see:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_8c4babae","line":124,"updated":"2019-05-22 19:57:13.000000000","message":"Hm, while this makes sense considering the behavior of counting quota usage from placement (doubling of allocations during a move), note that we are _not_ actually checking old flavor + new flavor against the quota limit during the initial check. The recheck however would catch it because it does a \"zero\" delta check and usage [after claiming resources in placement] will reflect old flavor + new flavor.\n\nAlso note that we ideally _don\u0027t_ want to be quota checking or counting old flavor + new flavor during an unconfirmed resize, but we currently have no way of excluding migration-only placement allocations. That possibility comes later if/when consumer types is added to placement: https://review.opendev.org/654799\n\nAll of that aside, I\u0027m now wondering if I should be changing the math for how we do the initial quota check for resize in the count quota usage from placement patch series.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":121,"context_line":"That is, we will still respected the config: `quota.recheck_quota`"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":124,"context_line":"claim resources for both the new flavor and old flavor at the same time."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"For further details on the semantic changes relating to counting with"},{"line_number":127,"context_line":"placement see:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_e0d8d47b","line":124,"in_reply_to":"bfb3d3c7_8c4babae","updated":"2019-05-28 20:15:12.000000000","message":"So I change that in the POC, for just the new flow:\nhttps://review.opendev.org/#/c/615180\n\nWe could call that a bug in the proposed new flow... but it\u0027s too tricky to fix that with the current separation of concerns.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"http://specs.openstack.org/openstack/nova-specs/specs/train/approved/count-quota-usage-from-placement.html"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Note baremetal instances no longer claim any VCPU or MEMORY_MB resources."},{"line_number":131,"context_line":"With this method, they baremetal instances can be limited using custom"},{"line_number":132,"context_line":"resource class resources they request in the flavor."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Should we choose to allow additional custom additional inventory from"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_ec9fc700","line":131,"range":{"start_line":131,"start_character":18,"end_line":131,"end_character":22},"updated":"2019-05-22 19:57:13.000000000","message":"the","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"Nova currently supports \"per user\" limits, these will not be supported when"},{"line_number":151,"context_line":"you move to unified limits. Instead it is hoped we will eventually support"},{"line_number":152,"context_line":"limit enforcement models other than \"flat\", such as two level project"},{"line_number":153,"context_line":"hierarchy based limits."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":156,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_6f4bc958","line":153,"updated":"2019-05-22 19:57:13.000000000","message":"As far as I understand it, we should get two-level hierarchy for free, assuming oslo.limit already has support. That is, we pass a counting method to oslo.limit which takes a project, and if oslo.limit is configured for two-level hierarchy mode, it will obtain the list of projects that need counting from keystone and then call our counting method once per project and do the appropriate math with the results and then enforce.\n\nBut as I typed all that, I\u0027m thinking there\u0027s probably no support for that yet in oslo.limit, so your statement here is accurate.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"bb42ff1c681dc0815a1d0f7468a7f02209825534","unresolved":false,"context_lines":[{"line_number":150,"context_line":"Nova currently supports \"per user\" limits, these will not be supported when"},{"line_number":151,"context_line":"you move to unified limits. Instead it is hoped we will eventually support"},{"line_number":152,"context_line":"limit enforcement models other than \"flat\", such as two level project"},{"line_number":153,"context_line":"hierarchy based limits."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":156,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_47d6852a","line":153,"in_reply_to":"bfb3d3c7_20ba6c09","updated":"2019-05-29 15:54:02.000000000","message":"There\u0027s no support for anything in oslo.limit yet, but that fits my understanding of the intended behavior.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"Nova currently supports \"per user\" limits, these will not be supported when"},{"line_number":151,"context_line":"you move to unified limits. Instead it is hoped we will eventually support"},{"line_number":152,"context_line":"limit enforcement models other than \"flat\", such as two level project"},{"line_number":153,"context_line":"hierarchy based limits."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":156,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_20ba6c09","line":153,"in_reply_to":"bfb3d3c7_6f4bc958","updated":"2019-05-28 20:15:12.000000000","message":"Yeah, +1. I am trying to write the oslo.limit callback so that would work:\nhttps://github.com/JohnGarbutt/oslo.limit/commit/a5b908046fd904c25b6cd15c65266c747774b5ab","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"* injected_file_path_bytes"},{"line_number":170,"context_line":"* key_pairs (counted per user)"},{"line_number":171,"context_line":"* server_groups (counted per project)"},{"line_number":172,"context_line":"* server_group_members (counted per server group)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Using a global configuration option only means:"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_6fb9892c","line":172,"range":{"start_line":172,"start_character":32,"end_line":172,"end_character":48},"updated":"2019-05-22 19:57:13.000000000","message":"per server group, per user :)","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"15c370e7b5760633d9a85060125843a7ece1fcc2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"* injected_file_path_bytes"},{"line_number":170,"context_line":"* key_pairs (counted per user)"},{"line_number":171,"context_line":"* server_groups (counted per project)"},{"line_number":172,"context_line":"* server_group_members (counted per server group)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Using a global configuration option only means:"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9fb8cfa7_a13edf26","line":172,"range":{"start_line":172,"start_character":32,"end_line":172,"end_character":48},"in_reply_to":"bfb3d3c7_204fcc34","updated":"2019-06-04 22:56:42.000000000","message":"Ohhh, right, I see now. My bad.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"* injected_file_path_bytes"},{"line_number":170,"context_line":"* key_pairs (counted per user)"},{"line_number":171,"context_line":"* server_groups (counted per project)"},{"line_number":172,"context_line":"* server_group_members (counted per server group)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Using a global configuration option only means:"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_204fcc34","line":172,"range":{"start_line":172,"start_character":32,"end_line":172,"end_character":48},"in_reply_to":"bfb3d3c7_6fb9892c","updated":"2019-05-28 20:15:12.000000000","message":"So I am changing that here. I should make it clear that is a change.\n\nAs on operator, I want members of a server group, not per user. Seems like a bug in the current system frankly.\n\nIf you let people add users, suddenly they are allowed bigger server groups than you expect, causing all sorts of bigger packing issues than you expected.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"In summary the impact on the configuration options is:"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* `quota.recheck_quota` will have an updating description, noting what"},{"line_number":191,"context_line":"  functionality is lost when `quota.enforce_unified_limits \u003d True`."},{"line_number":192,"context_line":"* `quota.floating_ips`, `quota.fixed_ips`, `quota.security_groups`,"},{"line_number":193,"context_line":"  `security_group_rules`: remain deprecated, and will be ignored when"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_af98e1bf","line":190,"range":{"start_line":190,"start_character":37,"end_line":190,"end_character":45},"updated":"2019-05-22 19:57:13.000000000","message":"updated","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":205,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":206,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_2f6151aa","line":206,"updated":"2019-05-22 19:57:13.000000000","message":"Hm, I don\u0027t quite agree with this proposal because I think it\u0027s common for users to want to see limits and usage rolled up together and today our /limits API does that and will easily be adapted to call keystone for limits. This is transparent to the REST API related code because it calls nova.quota.* APIs and I expect those are the ones that will change to call keystone if \u0027quota.enforce_unified_limits \u003d True\u0027. So the /limits API will reflect the results correctly and transparently. The /limits API similarly calls nova.quota.* APIs for resource counts, which also works seamlessly whether \u0027quota.count_usage_from_placement\u0027 is True or not.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"15c370e7b5760633d9a85060125843a7ece1fcc2","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":205,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":206,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9fb8cfa7_a1a25f99","line":206,"in_reply_to":"bfb3d3c7_20726c4a","updated":"2019-06-04 22:56:42.000000000","message":"The sentence on L208 says that the APIs will be removed (which I assume means return 404) in a new microversion as part of this spec, which to me means they will not work as they do today with the new microversion.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":205,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":206,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_20726c4a","line":206,"in_reply_to":"bfb3d3c7_2f6151aa","updated":"2019-05-28 20:15:12.000000000","message":"To be clear, the APIs all still work as they do today, it would just be a hint to users (like with the neutron proxy APIs), that this is no longer the best way to do it.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcb046f1541afa52c06482f363f071ef2f8fbd0e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"* /limits"},{"line_number":212,"context_line":"* /os-quota-sets"},{"line_number":213,"context_line":"* /os-quota-class-sets"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_8f171dee","line":211,"updated":"2019-05-22 19:57:13.000000000","message":"I\u0027d prefer not to get rid of the /limits API because I think seeing usage and limits side-by-side is a common use case not fulfilled by anything else.\n\nif this is simultaneously proposing to add a command (or modify the existing one) in OSC to support showing limits and usage together, I could possibly see it being OK. But I don\u0027t think we should remove it in a new microversion until an alternative is made available.\n\nAlso note, an OSC rollup command will not solve the problem of being able to get a rollup summary via the REST API if not using a CLI. That means horizon will have to do separate queries to keystone and placement.\n\nAnother note, until we have consumer types in placement, we can\u0027t count instances from placement. So I think it\u0027s too early on to remove /limits in a microversion.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"872d0a904a3babcec840d19c7ab986dac62bab4d","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"* /limits"},{"line_number":212,"context_line":"* /os-quota-sets"},{"line_number":213,"context_line":"* /os-quota-class-sets"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfb3d3c7_e0345495","line":211,"in_reply_to":"bfb3d3c7_8f171dee","updated":"2019-05-28 20:15:12.000000000","message":"The instance count thing is a worry. The user can just list instances and get their current count.\n\nThe real reason I really want to kill it is because its miss-leading in the non-flat case. It says you can build things, but the parent limit applies, and you can\u0027t.\n\nI kinda see this as something keystone might want to be responsible for the API, so it deals with all those differences. But I think they felt strongly about pushing that issue to the client for now, while we work it out.\n\n... but honestly, I am fine with not removing it yet, until we have the full story worked out.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"15c370e7b5760633d9a85060125843a7ece1fcc2","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Nova\u0027s existing quota APIs will all be deprecated and removed in a"},{"line_number":209,"context_line":"new micro-version (i.e. still available to users of older micro-versions):"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"* /limits"},{"line_number":212,"context_line":"* /os-quota-sets"},{"line_number":213,"context_line":"* /os-quota-class-sets"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9fb8cfa7_a1d01ff9","line":211,"in_reply_to":"bfb3d3c7_e0345495","updated":"2019-06-04 22:56:42.000000000","message":"OK, if it will be misleading, I understand now why you would like to remove it.\n\nBut I don\u0027t yet understand what this looks like when we call keystone for the limits in a two-level hierarchy context -- what will it return to us for a limit? I would have thought what it returns would reflect what would be enforced if the user were to ask for resources, and thus not be misleading. This may just be me not fully understanding behavior in a two-level hierarchy.","commit_id":"1d654ba40b513501474f9953cf45676b818899ec"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":95,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":96,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":97,"context_line":"queued for delete data migration has been completed. We assume `nova status`"},{"line_number":98,"context_line":"will ensure this has been completed before running the Train release."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"To allow the new system to co-exist with the older quota system, we add"},{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_21798ffb","line":98,"updated":"2019-06-04 23:38:04.000000000","message":"And also the user_id data migration, which was added in Stein.\n\nNote that \u0027nova-status upgrade check\u0027 will not guarantee that the migration has been completed -- only a blocker migration can do that, and from what we discussed on the counting quotas from placement patch series, Train is too aggressive for adding a blocker migration. \u0027nova-status upgrade check\u0027 can at best advise an operator to complete certain actions before carrying out an upgrade to Train. We\u0027ll want to consult with mriedem on whether the upgrade check should be a warning or a failure for the queued_for_delete and user_id data migrations.\n\nWhat will we do if the data migration hasn\u0027t been completed? Same as we\u0027re doing in the counting quota usage from placement series? Falling back to old system \u0027if not queued_for_delete_user_id_populated\u0027?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a22597e33c7bc7f1bca7c6064daaa66cc0484e75","unresolved":false,"context_lines":[{"line_number":95,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":96,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":97,"context_line":"queued for delete data migration has been completed. We assume `nova status`"},{"line_number":98,"context_line":"will ensure this has been completed before running the Train release."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"To allow the new system to co-exist with the older quota system, we add"},{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_bb283a86","line":98,"in_reply_to":"9fb8cfa7_129852be","updated":"2019-06-05 15:18:12.000000000","message":"I\u0027m pretty sure he meant anytime in Train was considered too aggressive for a blocker migration (where a Train \u0027nova-manage api_db sync\u0027 will raise/fail until operator completes particular Stein data migration). But we should double check with mriedem to make sure.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":96,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":97,"context_line":"queued for delete data migration has been completed. We assume `nova status`"},{"line_number":98,"context_line":"will ensure this has been completed before running the Train release."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"To allow the new system to co-exist with the older quota system, we add"},{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_129852be","line":98,"in_reply_to":"9fb8cfa7_21798ffb","updated":"2019-06-05 09:39:24.000000000","message":"I thought it was beginning of train that was too aggressive, but I am OK with that.\n\nMy current patch just throws an exception if there exisits any non-migrated thing.\n\nI think that is OK, given you need to do a bunch of keystone migrations to use this stuff anyways. We could maybe do the check in that tooling too, i.e. fail to migrate if the above data migration is not complete? Probably over thinking it there.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":102,"context_line":"when the operator has migrated to unified limits:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":107,"context_line":"specification."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_21f0af67","line":104,"updated":"2019-06-04 23:38:04.000000000","message":"We\u0027ll also need to ensure that if CONF.quota.enforce_unified_limits\u003dTrue then CONF.quota.count_usage_from_placement\u003dTrue too. Maybe add a note that we will do some kind of config option validation and fail service start (or something?) if there\u0027s a mismatch?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1fc85bf501a003dedf018e535f648b41bb055454","unresolved":false,"context_lines":[{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":102,"context_line":"when the operator has migrated to unified limits:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":107,"context_line":"specification."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_f428ea34","line":104,"in_reply_to":"9fb8cfa7_18f94c4c","updated":"2019-06-06 17:03:02.000000000","message":"I mean this really:\nhttps://review.opendev.org/#/c/615180/9/nova/limits/keystone.py\n\nBasically the current quota code uses the NoOp driver, and it\u0027s a parallel implementation that only knows how to count in placement.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":102,"context_line":"when the operator has migrated to unified limits:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":107,"context_line":"specification."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_52cc8abb","line":104,"in_reply_to":"9fb8cfa7_21f0af67","updated":"2019-06-05 09:39:24.000000000","message":"I think we just ignore the count_usage_from_placement config, as by definition we always use placement with the unified limits code.\n\nI think the best approach is to keep this as totally separate quota code.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a22597e33c7bc7f1bca7c6064daaa66cc0484e75","unresolved":false,"context_lines":[{"line_number":101,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":102,"context_line":"when the operator has migrated to unified limits:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":107,"context_line":"specification."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_18f94c4c","line":104,"in_reply_to":"9fb8cfa7_52cc8abb","updated":"2019-06-05 15:18:12.000000000","message":"OK, so you mean we\u0027ll do something like this to guard counting quota usage from placement:\n\n if CONF.quota.count_usage_from_placement OR CONF.quota.enforce_unified_limits:","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"089b08c798cc56e1dacf1a605bd699883ce39b6b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":128,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":129,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":130,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":133,"context_line":"claim resources for both the new flavor and old flavor at the same time."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_963a09e5","line":130,"updated":"2019-06-04 13:36:49.000000000","message":"zeno\u0027s paradox?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":128,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":129,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":130,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":133,"context_line":"claim resources for both the new flavor and old flavor at the same time."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_b26386b1","line":130,"in_reply_to":"9fb8cfa7_21950fe5","updated":"2019-06-05 09:39:24.000000000","message":"Actually, we end up having to optionally call oslo.limit in the second place to do the re-check... been working through that in the WIP patch.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":128,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":129,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":130,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":133,"context_line":"claim resources for both the new flavor and old flavor at the same time."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_21950fe5","line":130,"in_reply_to":"9fb8cfa7_963a09e5","updated":"2019-06-04 23:38:04.000000000","message":"I googled and still not sure what you mean by that. :P But this is just saying that \u0027recheck\u0027 is optional in oslo.limit so we\u0027ll continue to recheck or not based on what the operator has configured in nova.conf. We\u0027ll just be telling oslo.limit whether to recheck or not since we\u0027ll no longer have our own quota enforce code.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9cf5769deb97ea57dec34cc94c90b92985753fc0","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":128,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":129,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":130,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":133,"context_line":"claim resources for both the new flavor and old flavor at the same time."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_92be8263","line":130,"in_reply_to":"9fb8cfa7_b26386b1","updated":"2019-06-05 09:58:16.000000000","message":"Ah, you mean the tortoise and the hair thing... Well, we wait for the hair to overtake, so its fine... (hides).","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":223,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"The one exception is server count that needs to be checked via the Nova"},{"line_number":226,"context_line":"server list API. When placement until placement implement consumer records"},{"line_number":227,"context_line":"or similar, then all usage could be queried via Placement."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_c173d3e6","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":11},"updated":"2019-06-04 23:38:04.000000000","message":"Did you mean the limits API? Because otherwise, getting the server count via \u0027server list\u0027 would involve the caller having to parse the response and count the number of servers, unless I\u0027m missing something.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a22597e33c7bc7f1bca7c6064daaa66cc0484e75","unresolved":false,"context_lines":[{"line_number":223,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"The one exception is server count that needs to be checked via the Nova"},{"line_number":226,"context_line":"server list API. When placement until placement implement consumer records"},{"line_number":227,"context_line":"or similar, then all usage could be queried via Placement."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_58ad842f","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":11},"in_reply_to":"9fb8cfa7_32f476cf","updated":"2019-06-05 15:18:12.000000000","message":"Yeah... just thinking that UX will not be well liked by operators.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1fc85bf501a003dedf018e535f648b41bb055454","unresolved":false,"context_lines":[{"line_number":223,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"The one exception is server count that needs to be checked via the Nova"},{"line_number":226,"context_line":"server list API. When placement until placement implement consumer records"},{"line_number":227,"context_line":"or similar, then all usage could be queried via Placement."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_54d77624","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":11},"in_reply_to":"9fb8cfa7_58ad842f","updated":"2019-06-06 17:03:02.000000000","message":"Agreed, it is horrible.\n\nI think we need some API to aggregate this stuff between all the difference services. Starting with some client side libs to work out what we would do in the service. But thats all after we get this merged in Nova (and I plan to do something similar in Glance).","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"The one exception is server count that needs to be checked via the Nova"},{"line_number":226,"context_line":"server list API. When placement until placement implement consumer records"},{"line_number":227,"context_line":"or similar, then all usage could be queried via Placement."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_32f476cf","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":11},"in_reply_to":"9fb8cfa7_c173d3e6","updated":"2019-06-05 09:39:24.000000000","message":"I my head they use the SDK then do len(instances), but yeah that is the best we have right now.\n\nI am basically trying to say, don\u0027t use the Proxy APIs, unless you have to.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":255,"context_line":"* Long term we expect to deprecate all these APIs, but there is currently no"},{"line_number":256,"context_line":"  consensus around the long term user and operator experience around query"},{"line_number":257,"context_line":"  current limit usage, as such this proposal does not yet deprecate these APIs"},{"line_number":258,"context_line":"  by adding a new microversion where they are no longer available."},{"line_number":259,"context_line":"* When hierarchical limits are added, the per project usage information"},{"line_number":260,"context_line":"  does not mention anything about parent limits. As such quota APIs may claim"},{"line_number":261,"context_line":"  resources are available, but you will be unable to build any new resources."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_34046b15","line":258,"updated":"2019-06-04 23:38:04.000000000","message":"I had been thinking we would deprecate /os-quota-sets and /os-quota-class-sets because all they do is let people modify the in-database quota limits. But, I can\u0027t help but think that would seem kind of wrong if unified limits in nova are optional and opt-in. And would be more appropriate when we get to the point where quota.enforce_unified_limits is the default. Am I thinking about that right?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":255,"context_line":"* Long term we expect to deprecate all these APIs, but there is currently no"},{"line_number":256,"context_line":"  consensus around the long term user and operator experience around query"},{"line_number":257,"context_line":"  current limit usage, as such this proposal does not yet deprecate these APIs"},{"line_number":258,"context_line":"  by adding a new microversion where they are no longer available."},{"line_number":259,"context_line":"* When hierarchical limits are added, the per project usage information"},{"line_number":260,"context_line":"  does not mention anything about parent limits. As such quota APIs may claim"},{"line_number":261,"context_line":"  resources are available, but you will be unable to build any new resources."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_722bce2f","line":258,"in_reply_to":"9fb8cfa7_34046b15","updated":"2019-06-05 09:39:24.000000000","message":"I was thinking the same thing, sort it out when we make it the default.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":256,"context_line":"  consensus around the long term user and operator experience around query"},{"line_number":257,"context_line":"  current limit usage, as such this proposal does not yet deprecate these APIs"},{"line_number":258,"context_line":"  by adding a new microversion where they are no longer available."},{"line_number":259,"context_line":"* When hierarchical limits are added, the per project usage information"},{"line_number":260,"context_line":"  does not mention anything about parent limits. As such quota APIs may claim"},{"line_number":261,"context_line":"  resources are available, but you will be unable to build any new resources."},{"line_number":262,"context_line":"  It is not clear what action the user can make to be able to build those new"},{"line_number":263,"context_line":"  resources. Operators can avoid this confusion by not over allocating quota."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_a15fbf3f","line":260,"range":{"start_line":259,"start_character":42,"end_line":260,"end_character":47},"updated":"2019-06-04 23:38:04.000000000","message":"This might answer my earlier question about why/how the GET /limits view could be misleading. The limits should be OK but the usage wouldn\u0027t be correct, because only oslo.limit will be doing all the math needed for the usage. So the problem would be it would show hierarchical limits but not hierarchical usage. Hmm.\n\nBut I guess, at present, we it\u0027s not yet possible to do the two-level hierarchy in oslo.limit, but when it becomes possible, that\u0027s when we should consider deprecating the /limits API.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":256,"context_line":"  consensus around the long term user and operator experience around query"},{"line_number":257,"context_line":"  current limit usage, as such this proposal does not yet deprecate these APIs"},{"line_number":258,"context_line":"  by adding a new microversion where they are no longer available."},{"line_number":259,"context_line":"* When hierarchical limits are added, the per project usage information"},{"line_number":260,"context_line":"  does not mention anything about parent limits. As such quota APIs may claim"},{"line_number":261,"context_line":"  resources are available, but you will be unable to build any new resources."},{"line_number":262,"context_line":"  It is not clear what action the user can make to be able to build those new"},{"line_number":263,"context_line":"  resources. Operators can avoid this confusion by not over allocating quota."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_321d560f","line":260,"range":{"start_line":259,"start_character":42,"end_line":260,"end_character":47},"in_reply_to":"9fb8cfa7_a15fbf3f","updated":"2019-06-05 09:39:24.000000000","message":"Ah... I had not thought of making olso.limit tell us the usage, that seems a very good way to do it.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"68e532c414f3aa2236a794d6b5339c0449ee4999","unresolved":false,"context_lines":[{"line_number":262,"context_line":"  It is not clear what action the user can make to be able to build those new"},{"line_number":263,"context_line":"  resources. Operators can avoid this confusion by not over allocating quota."},{"line_number":264,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":265,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":266,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"},{"line_number":267,"context_line":"  addition if we were not planning on deprecating the API in favor of calling"},{"line_number":268,"context_line":"  Keystone and Placement instead."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Migration to Unified Limits"},{"line_number":271,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_d4562f07","line":268,"range":{"start_line":265,"start_character":60,"end_line":268,"end_character":33},"updated":"2019-06-04 23:38:04.000000000","message":"As mentioned earlier, in theory I would be +1 for deprecating /os-quota-sets and /os-quota-class-sets APIs to return 404 in a new microversion, but I worry that doesn\u0027t correlate with unified limits usage being optional and opt-in. That is, a user in the position of running Train with defaults gets rejected in the new microversion to update quota limits and at the same time cannot use unified limits because they didn\u0027t opt-in.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":262,"context_line":"  It is not clear what action the user can make to be able to build those new"},{"line_number":263,"context_line":"  resources. Operators can avoid this confusion by not over allocating quota."},{"line_number":264,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":265,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":266,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"},{"line_number":267,"context_line":"  addition if we were not planning on deprecating the API in favor of calling"},{"line_number":268,"context_line":"  Keystone and Placement instead."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Migration to Unified Limits"},{"line_number":271,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_72e0aefb","line":268,"range":{"start_line":265,"start_character":60,"end_line":268,"end_character":33},"in_reply_to":"9fb8cfa7_d4562f07","updated":"2019-06-05 09:39:24.000000000","message":"Yeah, I think we deprecate it once we make unified limits the default.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Note the setting of project limits and registered limits in keystone will"},{"line_number":289,"context_line":"happen via files that are generated and passed to keystone-manage. This"},{"line_number":290,"context_line":"allows skip level upgrades where no API are available during the migration"},{"line_number":291,"context_line":"of limits from Nova to Keystone."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_b4c29b84","line":290,"range":{"start_line":290,"start_character":7,"end_line":290,"end_character":17},"updated":"2019-06-05 00:00:14.000000000","message":"Heh, we don\u0027t ever want to say \"skip level\" anymore. :) It\u0027s \"fast-forward upgrades\" to ensure ppl don\u0027t get confused that they cannot actually \"skip\" any release\u0027s code/db sync/data migration.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Note the setting of project limits and registered limits in keystone will"},{"line_number":289,"context_line":"happen via files that are generated and passed to keystone-manage. This"},{"line_number":290,"context_line":"allows skip level upgrades where no API are available during the migration"},{"line_number":291,"context_line":"of limits from Nova to Keystone."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_32e23603","line":290,"range":{"start_line":290,"start_character":7,"end_line":290,"end_character":17},"in_reply_to":"9fb8cfa7_b4c29b84","updated":"2019-06-05 09:39:24.000000000","message":"ah, oops :)","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":294,"context_line":"read from the Nova DB and configuration to register the current endpoint"},{"line_number":295,"context_line":"defaults with keystone.::"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"  nova-manage limits get_registered_limits --endpoint \u003cendpoint-uuid\u003e"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"The following tool will generate the unified limits override (if any)"},{"line_number":300,"context_line":"that needs to be added into Keystone for each project::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_343c6b92","line":297,"range":{"start_line":297,"start_character":21,"end_line":297,"end_character":42},"updated":"2019-06-05 00:00:14.000000000","message":"Maybe better named as generate_registered_limits as the output will be some formatted thing representing the limits for keystone-manage to consume, right?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":294,"context_line":"read from the Nova DB and configuration to register the current endpoint"},{"line_number":295,"context_line":"defaults with keystone.::"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"  nova-manage limits get_registered_limits --endpoint \u003cendpoint-uuid\u003e"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"The following tool will generate the unified limits override (if any)"},{"line_number":300,"context_line":"that needs to be added into Keystone for each project::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_f2eb3ed9","line":297,"range":{"start_line":297,"start_character":21,"end_line":297,"end_character":42},"in_reply_to":"9fb8cfa7_343c6b92","updated":"2019-06-05 09:39:24.000000000","message":"good call.","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":299,"context_line":"The following tool will generate the unified limits override (if any)"},{"line_number":300,"context_line":"that needs to be added into Keystone for each project::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  nova-manage limits get_project_limits [--project_id \u003cproject_id\u003e]"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Once the operator sets `quota.enforce_unified_limits \u003d True`, the Nova DB is"},{"line_number":305,"context_line":"ignored, and limits are accessed from Keystone only."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_944af724","line":302,"range":{"start_line":302,"start_character":21,"end_line":302,"end_character":39},"updated":"2019-06-05 00:00:14.000000000","message":"Maybe generate_project_limits?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":299,"context_line":"The following tool will generate the unified limits override (if any)"},{"line_number":300,"context_line":"that needs to be added into Keystone for each project::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  nova-manage limits get_project_limits [--project_id \u003cproject_id\u003e]"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Once the operator sets `quota.enforce_unified_limits \u003d True`, the Nova DB is"},{"line_number":305,"context_line":"ignored, and limits are accessed from Keystone only."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_b2bf06cf","line":302,"range":{"start_line":302,"start_character":21,"end_line":302,"end_character":39},"in_reply_to":"9fb8cfa7_944af724","updated":"2019-06-05 09:39:24.000000000","message":"+1","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":351,"context_line":"Data model impact"},{"line_number":352,"context_line":"-----------------"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"See upgrades, no changes in stein due to having old and new quota systems"},{"line_number":355,"context_line":"side by side."},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_1405a7c2","line":354,"range":{"start_line":354,"start_character":28,"end_line":354,"end_character":33},"updated":"2019-06-05 00:00:14.000000000","message":"Train","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":358,"context_line":"---------------"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"At noted above, the existing quota APIs will be deprecated by being removed"},{"line_number":361,"context_line":"in a microversion."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"When `quota.enforce_unified_limits \u003d True` and an older microversion is"},{"line_number":364,"context_line":"used (by Horizon, or existing operational tooling), Nova will proxy the request"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_d40e2fe4","line":361,"updated":"2019-06-05 00:00:14.000000000","message":"This is no longer true, right?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":358,"context_line":"---------------"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"At noted above, the existing quota APIs will be deprecated by being removed"},{"line_number":361,"context_line":"in a microversion."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"When `quota.enforce_unified_limits \u003d True` and an older microversion is"},{"line_number":364,"context_line":"used (by Horizon, or existing operational tooling), Nova will proxy the request"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_32cb1673","line":361,"in_reply_to":"9fb8cfa7_d40e2fe4","updated":"2019-06-05 09:39:24.000000000","message":"oops","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"089b08c798cc56e1dacf1a605bd699883ce39b6b","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"Other contributors:"},{"line_number":428,"context_line":"  alex_xu"},{"line_number":429,"context_line":"  melwit"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Work Items"},{"line_number":432,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_3119e778","line":429,"range":{"start_line":429,"start_character":2,"end_line":429,"end_character":8},"updated":"2019-06-04 13:36:49.000000000","message":"two t?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"Other contributors:"},{"line_number":428,"context_line":"  alex_xu"},{"line_number":429,"context_line":"  melwit"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Work Items"},{"line_number":432,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_92a1a2ac","line":429,"range":{"start_line":429,"start_character":2,"end_line":429,"end_character":8},"in_reply_to":"9fb8cfa7_3119e778","updated":"2019-06-05 09:39:24.000000000","message":"oops","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d28f645fa5247bce8a2c5d341fc81020327bacb4","unresolved":false,"context_lines":[{"line_number":431,"context_line":"Work Items"},{"line_number":432,"context_line":"----------"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"* Add calls to os_limits that can be enabled, guarded by config to enable it"},{"line_number":435,"context_line":"* Move quota APIs to proxy to Keystone when unified limit quotas enabled"},{"line_number":436,"context_line":"* Migrate default and tenant limits from Nova into Keystone"},{"line_number":437,"context_line":"* Upgrade checks to ensure above tooling is used"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_142e0743","line":434,"range":{"start_line":434,"start_character":15,"end_line":434,"end_character":24},"updated":"2019-06-05 00:00:14.000000000","message":"What\u0027s os_limits?","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"637f0e05c0689e4e23a2e5a5d5162ddfe2c3ace1","unresolved":false,"context_lines":[{"line_number":431,"context_line":"Work Items"},{"line_number":432,"context_line":"----------"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"* Add calls to os_limits that can be enabled, guarded by config to enable it"},{"line_number":435,"context_line":"* Move quota APIs to proxy to Keystone when unified limit quotas enabled"},{"line_number":436,"context_line":"* Migrate default and tenant limits from Nova into Keystone"},{"line_number":437,"context_line":"* Upgrade checks to ensure above tooling is used"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9fb8cfa7_52ab2a88","line":434,"range":{"start_line":434,"start_character":15,"end_line":434,"end_character":24},"in_reply_to":"9fb8cfa7_142e0743","updated":"2019-06-05 09:39:24.000000000","message":"I have no idea","commit_id":"bda93e9a38964e83e84ffdae7a1ec84cfe41138f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This spec proposes having unified limits in parallel with the existing"},{"line_number":17,"context_line":"quota system for at least one cycle, to allow for operators to transition"},{"line_number":18,"context_line":"from setting quotas via Nova to setting quotas via Keystone."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"All per user quota support is dropped, in favor of hierarchical"},{"line_number":21,"context_line":"enforcement that will be supported by unified limits."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_3fcd9f30","line":18,"range":{"start_line":18,"start_character":40,"end_line":18,"end_character":46},"updated":"2019-06-12 16:47:47.000000000","message":"nit: limit*\n\nKeystone doesn\u0027t have the concept of a \"quota\" per se. We have limits on resources and leave the usage and claim calculation to the service.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This spec proposes having unified limits in parallel with the existing"},{"line_number":17,"context_line":"quota system for at least one cycle, to allow for operators to transition"},{"line_number":18,"context_line":"from setting quotas via Nova to setting quotas via Keystone."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"All per user quota support is dropped, in favor of hierarchical"},{"line_number":21,"context_line":"enforcement that will be supported by unified limits."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_404982b4","line":18,"range":{"start_line":18,"start_character":40,"end_line":18,"end_character":46},"in_reply_to":"9fb8cfa7_3fcd9f30","updated":"2019-06-13 13:48:06.000000000","message":"True..., bad wording.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Nova, there are still some major usability issues for operators with"},{"line_number":35,"context_line":"the current system:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Consistent support for limit/quota hierarchy across OpenStack"},{"line_number":38,"context_line":"* Requiring operators to set limits individually in each service"},{"line_number":39,"context_line":"  (i.e. Cinder, Nova, Neutron, etc)"},{"line_number":40,"context_line":"* Nova\u0027s existing quotas don\u0027t work well with Ironic"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_5f7f33aa","line":37,"range":{"start_line":37,"start_character":2,"end_line":37,"end_character":12},"updated":"2019-06-12 16:47:47.000000000","message":"Inconsistent*?\n\nThese are a list of short-comings with the previous approach, right?","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Nova, there are still some major usability issues for operators with"},{"line_number":35,"context_line":"the current system:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Consistent support for limit/quota hierarchy across OpenStack"},{"line_number":38,"context_line":"* Requiring operators to set limits individually in each service"},{"line_number":39,"context_line":"  (i.e. Cinder, Nova, Neutron, etc)"},{"line_number":40,"context_line":"* Nova\u0027s existing quotas don\u0027t work well with Ironic"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_80d8daee","line":37,"range":{"start_line":37,"start_character":2,"end_line":37,"end_character":12},"in_reply_to":"9fb8cfa7_5f7f33aa","updated":"2019-06-13 13:48:06.000000000","message":"Yeah, oops. For some reason I wrote this line as a requirement not a problem (facepalm).","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":134,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":135,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":136,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"It is a similar story with resize. Except in this case, we check that we can"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_c2102c51","line":135,"range":{"start_line":135,"start_character":20,"end_line":135,"end_character":74},"updated":"2019-06-12 16:47:47.000000000","message":"Does this mean you\u0027ll need oslo.limit to do the recheck right away? Or are you planning on writing the recheck into nova and pulling it into oslo.limit later?","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":134,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":135,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":136,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"It is a similar story with resize. Except in this case, we check that we can"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_8b10fb4f","line":135,"range":{"start_line":135,"start_character":20,"end_line":135,"end_character":74},"in_reply_to":"9fb8cfa7_c2102c51","updated":"2019-06-13 13:48:06.000000000","message":"The recheck is actually in a difference process (nova-conductor vs nova-api), so it is the second one.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Nova currently supports \"per user\" limits, these will not be supported when"},{"line_number":168,"context_line":"you move to unified limits. Instead it is hoped we will eventually support"},{"line_number":169,"context_line":"limit enforcement models other than \"flat\", such as two level project"},{"line_number":170,"context_line":"hierarchy based limits. It is expected that the majority of the implementation"},{"line_number":171,"context_line":"effort to support two level hierarchy is within `oslo.limit`."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":174,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_e80c2f95","line":171,"range":{"start_line":169,"start_character":43,"end_line":171,"end_character":61},"updated":"2019-06-12 16:47:47.000000000","message":"This is already supported in keystone.\n\nThe way we were thinking about doing this was to have oslo.limit query keystone for the limit model [0][1][2]. Then they would query for the limits associated to a particular project. If the enforcement model is hierarchical, oslo.limit asks for the project hierarchy with all limits.\n\nAt that point, it\u0027s a matter of having oslo.limit iterate the list of projects and calculate usage. If oslo.limit has a calculate_usage_for_projects() callback from the service, that could be used.\n\n[0] https://developer.openstack.org/api-ref/identity/v3/index.html#get-enforcement-model\n[1] http://specs.openstack.org/openstack/keystone-specs/specs/keystone/stein/domain-level-limit.html\n[2] http://specs.openstack.org/openstack/keystone-specs/specs/keystone/rocky/strict-two-level-enforcement-model.html","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Nova currently supports \"per user\" limits, these will not be supported when"},{"line_number":168,"context_line":"you move to unified limits. Instead it is hoped we will eventually support"},{"line_number":169,"context_line":"limit enforcement models other than \"flat\", such as two level project"},{"line_number":170,"context_line":"hierarchy based limits. It is expected that the majority of the implementation"},{"line_number":171,"context_line":"effort to support two level hierarchy is within `oslo.limit`."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":174,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_2b1b0f73","line":171,"range":{"start_line":169,"start_character":43,"end_line":171,"end_character":61},"in_reply_to":"9fb8cfa7_e80c2f95","updated":"2019-06-13 13:48:06.000000000","message":"Agreed.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":205,"context_line":"which further demonstrates how these are different to the resource limits"},{"line_number":206,"context_line":"unified limits has been designed for."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Currently we also honor `quota.recheck_quota`. When using unified limits,"},{"line_number":209,"context_line":"we will no longer do rechecking for any of these uncountable limits."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"In summary the impact on the configuration options is:"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_e85aef80","line":209,"range":{"start_line":208,"start_character":0,"end_line":209,"end_character":68},"updated":"2019-06-12 16:47:47.000000000","message":"This might be because I\u0027m not entirely familiar with the background, but is there a reason why moving to unified limits wouldn\u0027t maintain this behavior?","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":205,"context_line":"which further demonstrates how these are different to the resource limits"},{"line_number":206,"context_line":"unified limits has been designed for."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Currently we also honor `quota.recheck_quota`. When using unified limits,"},{"line_number":209,"context_line":"we will no longer do rechecking for any of these uncountable limits."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"In summary the impact on the configuration options is:"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_ab6e1fc6","line":209,"range":{"start_line":208,"start_character":0,"end_line":209,"end_character":68},"in_reply_to":"9fb8cfa7_e85aef80","updated":"2019-06-13 13:48:06.000000000","message":"The idea is just to try and make them as simple as possible to maintain, and note move this subset of limits to keystone, as no operators are known to need to change these values on a per project basis.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":229,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":232,"context_line":"Placement. When placement until placement implement consumer records"},{"line_number":233,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":234,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":235,"context_line":"of servers returned."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_08d3c3d6","line":232,"range":{"start_line":232,"start_character":11,"end_line":232,"end_character":51},"updated":"2019-06-12 16:47:47.000000000","message":"nit:\n\nWhen placement implements*\n\nor\n\nUntil placement implements*","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":229,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":232,"context_line":"Placement. When placement until placement implement consumer records"},{"line_number":233,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":234,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":235,"context_line":"of servers returned."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_2b622fd9","line":232,"range":{"start_line":232,"start_character":11,"end_line":232,"end_character":51},"in_reply_to":"9fb8cfa7_08d3c3d6","updated":"2019-06-13 13:48:06.000000000","message":"oops, yes.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":309,"context_line":"allows fast-forward upgrades where no API are available during the migration"},{"line_number":310,"context_line":"of limits from Nova to Keystone."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"},{"line_number":313,"context_line":"read from the Nova DB and configuration to register the current endpoint"},{"line_number":314,"context_line":"defaults with keystone.::"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_53a72cbe","line":312,"range":{"start_line":312,"start_character":69,"end_line":312,"end_character":72},"updated":"2019-06-12 16:47:47.000000000","message":"It here is the nova-manage command, right? Not the keystone-manage command?\n\nIIRC, we were going to have nova-manage dump output to a file. Then keystone will write a `keystone-manage import_limits nova-limits.json` that places the limits in keystone\u0027s database directly.\n\nIs that still the plan?","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":309,"context_line":"allows fast-forward upgrades where no API are available during the migration"},{"line_number":310,"context_line":"of limits from Nova to Keystone."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"},{"line_number":313,"context_line":"read from the Nova DB and configuration to register the current endpoint"},{"line_number":314,"context_line":"defaults with keystone.::"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_4bb2034b","line":312,"range":{"start_line":312,"start_character":69,"end_line":312,"end_character":72},"in_reply_to":"9fb8cfa7_53a72cbe","updated":"2019-06-13 13:48:06.000000000","message":"Sorry, what you say is the plan, this older wording is very missleading, will fix it.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a179d9823732607df8c3443367ecf5050f63b63","unresolved":false,"context_lines":[{"line_number":327,"context_line":"DB entries relating to the quota overrides. The tool only works when"},{"line_number":328,"context_line":"`quota.enforce_unified_limits \u003d True`::"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"  nova-manage limits remove_db_quota_entries [--project_id project_id]"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"Note the last two tools allow operators to iterate per project, to limit the"},{"line_number":333,"context_line":"load on the running system. If these tools are used on a running system, it is"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_7376f040","line":330,"range":{"start_line":330,"start_character":45,"end_line":330,"end_character":70},"updated":"2019-06-12 16:47:47.000000000","message":"I hate to be that guy... but what happens if we\u0027re dealing with a project that\u0027s been deleted in keystone? Is it possible for nova to have quotas for non-existent projects? In that case, would:\n\n\n* operator generates limits for a non-existent project\n* operator attempts to import limits in keystone\n* keystone fails because the project doesn\u0027t exist\n* operator prunes quota and limits for the project in nova\n* retry steps 1 and 2","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca57eacbbcc523e6e3fcb2ff2e8e5f52bd661a72","unresolved":false,"context_lines":[{"line_number":327,"context_line":"DB entries relating to the quota overrides. The tool only works when"},{"line_number":328,"context_line":"`quota.enforce_unified_limits \u003d True`::"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"  nova-manage limits remove_db_quota_entries [--project_id project_id]"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"Note the last two tools allow operators to iterate per project, to limit the"},{"line_number":333,"context_line":"load on the running system. If these tools are used on a running system, it is"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9fb8cfa7_2b90ef94","line":330,"range":{"start_line":330,"start_character":45,"end_line":330,"end_character":70},"in_reply_to":"9fb8cfa7_7376f040","updated":"2019-06-13 13:48:06.000000000","message":"Yeah, good point, that is totally a thing.\n\nMaybe we reverse that, get list of project from keystone, iterate through, and see what is left at the end.","commit_id":"ef28ae67f3813d2f0ec981309f01b143ab4046cb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":107,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":108,"context_line":"when the operator has migrated to unified limits:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_d3c3d756","line":110,"range":{"start_line":110,"start_character":1,"end_line":110,"end_character":40},"updated":"2019-07-03 01:39:21.000000000","message":"i assume this is read by the nova api?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":107,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":108,"context_line":"when the operator has migrated to unified limits:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_e8bffda7","line":110,"range":{"start_line":110,"start_character":1,"end_line":110,"end_character":40},"in_reply_to":"9fb8cfa7_d3c3d756","updated":"2019-07-03 14:33:18.000000000","message":"Sort of, this is what is used today anywhere we check quotas, usually this is in the nova-api process, although not always (once in nova-conductor).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_b39bc371","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":40},"updated":"2019-07-03 01:39:21.000000000","message":"i guess we will deprecate this when we enable unified limits by default and remove both this and hte new option above when that is the only thing we support.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_4832c960","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":40},"in_reply_to":"9fb8cfa7_b39bc371","updated":"2019-07-03 14:33:18.000000000","message":"Yes, it has no meaning in the new quota code, it would get deprecated when we deprecate the old quota code (in a release or so in the future).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"This work will re-use a lot of the new logic to query placement for resource"},{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_13788f29","line":118,"range":{"start_line":118,"start_character":16,"end_line":118,"end_character":31},"updated":"2019-07-03 01:39:21.000000000","message":"no cores maps to both VCPUs + PCPUs\n\nfor the transition we shoudl double the quota and give you \"cores\" quato fo both as we dont know if you were using cpu pinning or not.\n\nthis is an implementation detail so its not something i will -1 over but if you respin the patch it would be good to update this.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"This work will re-use a lot of the new logic to query placement for resource"},{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_53860716","line":118,"range":{"start_line":118,"start_character":60,"end_line":118,"end_character":69},"updated":"2019-07-03 01:39:21.000000000","message":"this may become harder to tack when we support hugepages in placment depending on how we model that but this makes sense for now.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"This work will re-use a lot of the new logic to query placement for resource"},{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_8828c1ee","line":118,"range":{"start_line":118,"start_character":60,"end_line":118,"end_character":69},"in_reply_to":"9fb8cfa7_53860716","updated":"2019-07-03 14:33:18.000000000","message":"In some ways it is simpler, we quota on what is claimed in placement, whatever that happens to be.\n\nACK on both quota resources for PCPU, we could transition that way.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"},{"line_number":122,"context_line":"http://specs.openstack.org/openstack/nova-specs/specs/train/approved/count-quota-usage-from-placement.html"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"To find out what out what resources a server will claim, we we reuse this"},{"line_number":125,"context_line":"code to extract the resources from any given flavor:"},{"line_number":126,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_d3de77d9","line":124,"range":{"start_line":124,"start_character":17,"end_line":124,"end_character":25},"updated":"2019-07-03 00:32:12.000000000","message":"nix","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":132,"context_line":"counting all the current resource usage using a callback we provide that makes"},{"line_number":133,"context_line":"use of placement to count the current resource usage."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Once resources are claimed in placement, we optionally recheck the limits"},{"line_number":136,"context_line":"to see if we were racing with other server builds to consume the last bits"},{"line_number":137,"context_line":"of available quota. The only change is using oslo.limit to do the recheck."},{"line_number":138,"context_line":"That is, we will still respect the config: `quota.recheck_quota`"},{"line_number":139,"context_line":"Note: we do the first check of limits in nova-api, and the recheck in"},{"line_number":140,"context_line":"nova-conductor after resource allocation in placement succeeds."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_f3c85b57","line":137,"range":{"start_line":135,"start_character":39,"end_line":137,"end_character":20},"updated":"2019-07-03 01:39:21.000000000","message":"so we should be checking before and after.\nbefore we first call /allocation_candiates to see if we have enough quota left to fulfil the request and after we claim an allocation candidate to ensure we did not race with a concurrent spawn.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":143,"context_line":"claim resources for both the new flavor and old flavor at the same time."},{"line_number":144,"context_line":"Note that this is quite different to the current quota system, even when"},{"line_number":145,"context_line":"counting usage via placement."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"For further details on the semantic changes relating to counting with"},{"line_number":148,"context_line":"placement see:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_93979fec","line":145,"range":{"start_line":144,"start_character":63,"end_line":145,"end_character":28},"updated":"2019-07-03 00:32:12.000000000","message":"Note: today with counting usage via placement, we compare the upsize delta against the limit and we count old + new flavor for usage. We will be able to do better in the future once consumer types are available in placement:\n\nhttps://docs.openstack.org/placement/latest/specs/train/approved/2005473-support-consumer-types.html","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"It is a similar story with resize. Except in this case, we check that we can"},{"line_number":143,"context_line":"claim resources for both the new flavor and old flavor at the same time."},{"line_number":144,"context_line":"Note that this is quite different to the current quota system, even when"},{"line_number":145,"context_line":"counting usage via placement."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"For further details on the semantic changes relating to counting with"},{"line_number":148,"context_line":"placement see:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_c84559b6","line":145,"range":{"start_line":144,"start_character":63,"end_line":145,"end_character":28},"in_reply_to":"9fb8cfa7_93979fec","updated":"2019-07-03 14:33:18.000000000","message":"+1","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":152,"context_line":"With this method, baremetal instances can be limited using custom"},{"line_number":153,"context_line":"resource class resources they request in the flavor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Should we choose to allow additional custom additional inventory from"},{"line_number":156,"context_line":"from hypervisor based compute nodes, such as `{\u0027CUSTOM_GPU_V100\u0027:1}`"},{"line_number":157,"context_line":"we will be also be able to apply quotas on these resources."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_8608bf91","line":155,"range":{"start_line":155,"start_character":65,"end_line":155,"end_character":69},"updated":"2019-07-03 01:39:21.000000000","message":"delete the repeated from","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":152,"context_line":"With this method, baremetal instances can be limited using custom"},{"line_number":153,"context_line":"resource class resources they request in the flavor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Should we choose to allow additional custom additional inventory from"},{"line_number":156,"context_line":"from hypervisor based compute nodes, such as `{\u0027CUSTOM_GPU_V100\u0027:1}`"},{"line_number":157,"context_line":"we will be also be able to apply quotas on these resources."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_53a12746","line":155,"range":{"start_line":155,"start_character":44,"end_line":155,"end_character":54},"updated":"2019-07-03 00:32:12.000000000","message":"nix?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":152,"context_line":"With this method, baremetal instances can be limited using custom"},{"line_number":153,"context_line":"resource class resources they request in the flavor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Should we choose to allow additional custom additional inventory from"},{"line_number":156,"context_line":"from hypervisor based compute nodes, such as `{\u0027CUSTOM_GPU_V100\u0027:1}`"},{"line_number":157,"context_line":"we will be also be able to apply quotas on these resources."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_66034b78","line":155,"range":{"start_line":155,"start_character":44,"end_line":155,"end_character":54},"in_reply_to":"9fb8cfa7_53a12746","updated":"2019-07-03 01:39:21.000000000","message":"yes and inventory should be plural?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":181,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":182,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* fixed_ips"},{"line_number":185,"context_line":"* floating_ip"},{"line_number":186,"context_line":"* security_group_rules"},{"line_number":187,"context_line":"* networks"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_73030b78","line":185,"range":{"start_line":184,"start_character":2,"end_line":185,"end_character":13},"updated":"2019-07-03 01:39:21.000000000","message":"for v1 this makes sense.\n\nfor routed network or for neutorn subnet pools we talked about have a shareing resouce provider or IP at the ptg so we might have a generic limit of ip after those are counted in placmenet but fixed ip vs floaing ip may not be needed.\n\nif in the future we support resouce class + a triat we could many support both but i dont think this is need for v1 so it makes sense to make them out of scope.\n\nan ip espcially a public ipv4 adress is a countable thing.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":181,"context_line":"There are limits that are specific to nova-network. These are all ready"},{"line_number":182,"context_line":"deprecated. There are no plans to support these with unified limits turned on:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* fixed_ips"},{"line_number":185,"context_line":"* floating_ip"},{"line_number":186,"context_line":"* security_group_rules"},{"line_number":187,"context_line":"* networks"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_68854dcf","line":185,"range":{"start_line":184,"start_character":2,"end_line":185,"end_character":13},"in_reply_to":"9fb8cfa7_73030b78","updated":"2019-07-03 14:33:18.000000000","message":"I should be clear, these are Nova limits no entires in the nova-network database, it has nothing to do with neutron, that is different.\n\nWhatever a port starts need in placement, we could start checking and quotering, but yeah, for v1 I want to keep it simple and focus on what in the flavor.\n\ni.e. I agree with you, I think :)","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Currently we honor `quota.recheck_quota` for all of these quotas. This adds"},{"line_number":225,"context_line":"significant code complexity, however most users never hit these limits and"},{"line_number":226,"context_line":"they are all very soft limits. As such, when we transition to a single global"},{"line_number":227,"context_line":"configuration value for all of these, we also will stop doing any rechecks."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"In summary the impact on the configuration options is:"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_93331f14","line":227,"updated":"2019-07-03 00:32:12.000000000","message":"I hesitate a bit about this based on an old bug someone filed demonstrating how excessively they were able to exceed the keypairs quota limit by making parallel requests:\n\nhttps://bugs.launchpad.net/nova/+bug/1301532\n\nBut perhaps no one is so concerned about it these days?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Currently we honor `quota.recheck_quota` for all of these quotas. This adds"},{"line_number":225,"context_line":"significant code complexity, however most users never hit these limits and"},{"line_number":226,"context_line":"they are all very soft limits. As such, when we transition to a single global"},{"line_number":227,"context_line":"configuration value for all of these, we also will stop doing any rechecks."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"In summary the impact on the configuration options is:"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_a6f06393","line":227,"in_reply_to":"9fb8cfa7_93331f14","updated":"2019-07-03 01:39:21.000000000","message":"well keyparis are cheap and likely should never had a quota.\n\nbut if we wanted to track things like quotas on key pairs we could technicaly create an RP per poject and have a invtory of custom_keypair and have placmenet do the accounting but i honestly dont think we shoudl really care about quotas on that spefic resouce. i know we said we were not going to do that but if we need to that is one way to do it.\n\nlooking at the config items below on line 230-240 i dont think there really is an concern with any of those.\nbut i dont know. i would personally prefer to remove thos quotas entirely but thats just me.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Currently we honor `quota.recheck_quota` for all of these quotas. This adds"},{"line_number":225,"context_line":"significant code complexity, however most users never hit these limits and"},{"line_number":226,"context_line":"they are all very soft limits. As such, when we transition to a single global"},{"line_number":227,"context_line":"configuration value for all of these, we also will stop doing any rechecks."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"In summary the impact on the configuration options is:"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_e8f7fd58","line":227,"in_reply_to":"9fb8cfa7_a6f06393","updated":"2019-07-03 14:33:18.000000000","message":"We should still be careful... but I don\u0027t care too much, because you can only do that trick once for each project you have access to (or for each user in the keypair case).\n\nI cared more about things that have a \"real\" cost, like CPUs, hence I propose we keep it for instances.\n\nIts a cost vs code complexity thing for me (obviously).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2f056181714f23b4832f98a84ba659f83ba29f84","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Currently we honor `quota.recheck_quota` for all of these quotas. This adds"},{"line_number":225,"context_line":"significant code complexity, however most users never hit these limits and"},{"line_number":226,"context_line":"they are all very soft limits. As such, when we transition to a single global"},{"line_number":227,"context_line":"configuration value for all of these, we also will stop doing any rechecks."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"In summary the impact on the configuration options is:"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_9ad9fd23","line":227,"in_reply_to":"9fb8cfa7_e8f7fd58","updated":"2019-07-03 20:45:51.000000000","message":"OK, I am cool with that. Just wanted to mention just in case.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_e6389bd5","line":269,"updated":"2019-07-03 00:32:12.000000000","message":"Hm, realizing this is a tough one, \"requests to change any other quotas will be silently ignored\" -- bad user experience. But what is our alternative? Since enforce_unified_limits is configurable, if we wanted to have the /os-quota*-sets APIs reject in cases where it would be a silent no-op, we\u0027d be making API behavior depend on a config option, which is a no-no.\n\nI dunno... feel like I\u0027m wondering now if it _would_ be better to deprecate the /os-quota*-sets APIs in a new microversion even though enforce_unified_limits is opt-in. But actually that doesn\u0027t work because there\u0027s no way for e.g. horizon to discover whether the nova it\u0027s talking to is configured to enforce_unified_limits or not. So it wouldn\u0027t know which API (nova vs keystone) to use to update limits. That\u0027s a nonstarter.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_6816ad58","line":269,"in_reply_to":"9fb8cfa7_260b137e","updated":"2019-07-03 14:33:18.000000000","message":"So... I think ignoring isn\u0027t too bad, as we return what we \"changed\" so the UI would show we ignored your change... Did I convince you yet? I am not sure I convinced myself yet.\n\nWhen I deprecated the old API (my preference, I think...) I added a new API that tells you if we are using unified limits or not. Its a dumb API, but I don\u0027t see how else API users can find out.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2f056181714f23b4832f98a84ba659f83ba29f84","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_daf8d57d","line":269,"in_reply_to":"9fb8cfa7_6816ad58","updated":"2019-07-03 20:45:51.000000000","message":"Yeah, I\u0027m torn about this point. I pinged alex_xu asking him to come look at this, I\u0027d like to see what he has to say. I think we could use some thoughts from the API gang here.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_260b137e","line":269,"in_reply_to":"9fb8cfa7_e6389bd5","updated":"2019-07-03 01:39:21.000000000","message":"well the other proablem is even if we have a new micorverion were we reject with an error we technicaly should still allow you to set it via the old microverion without an error so we could retun a 404 or perferably a 410 Gone based on the config but that would break tool too.\n\njust ignoring the request on the other hand kind of side steps the issue but i wonder what we would expect if\nset a quota to 10 from a default of 100 and then did a get\nwould it be 10 or 100 for the legacy quotas that are not one of cpu ram and instance.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_06a92fdc","line":281,"range":{"start_line":281,"start_character":11,"end_line":281,"end_character":15},"updated":"2019-07-03 00:32:12.000000000","message":"use?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_932552b1","line":281,"range":{"start_line":281,"start_character":11,"end_line":281,"end_character":15},"in_reply_to":"9fb8cfa7_06a92fdc","updated":"2019-07-03 14:33:18.000000000","message":"+1 oops","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":285,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":286,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_66810b4e","line":283,"updated":"2019-07-03 00:32:12.000000000","message":"I\u0027m wondering what will the change be over in horizon and the clients be at this point. Because they can\u0027t know for sure whether nova is configured to enforce_unified_limits or not.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"16c60fa9ee861157e063ccee255be1abdcac8e3c","unresolved":false,"context_lines":[{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":285,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":286,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_92f9884e","line":283,"in_reply_to":"7faddb67_dacf7555","updated":"2019-07-10 12:56:33.000000000","message":"Yeah, +1 all that. I had forgotten about the discovery angle, so I should add that so I don\u0027t forget again.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2f056181714f23b4832f98a84ba659f83ba29f84","unresolved":false,"context_lines":[{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":285,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":286,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_dacf7555","line":283,"in_reply_to":"9fb8cfa7_136722ed","updated":"2019-07-03 20:45:51.000000000","message":"OK, so on this bullet point we can assume we will deprecate and point everyone to the keystone APIs _after_ we have a plan for how horizon and the clients should handle it. Was just concerned about potentially leaving horizon and clients in a bind telling them to talk to keystone when there\u0027s not a way for them to know whether they should talk to keystone (underlying enforce_unified_limits config).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":285,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":286,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_a61e23b9","line":283,"in_reply_to":"9fb8cfa7_66810b4e","updated":"2019-07-03 01:39:21.000000000","message":"ideally we whoudl have a way to discover this from the api but that brings us back to config values should not change api behavior. so im not sure.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the user of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead."},{"line_number":284,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":285,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":286,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_136722ed","line":283,"in_reply_to":"9fb8cfa7_a61e23b9","updated":"2019-07-03 14:33:18.000000000","message":"Yeah, I did have an API for that in a previous version.\n\nBut I think for this release, we don\u0027t make them change anything, until we decide what we really want (but needs fixing before we can deprecate the old code).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":302,"context_line":"  We could extext the API to include a boolean to say if the limit has been"},{"line_number":303,"context_line":"  exceeded in the parent project, and as such the user is unable to consume"},{"line_number":304,"context_line":"  more resources even though their own usage is not over their own limits."},{"line_number":305,"context_line":"  We could consider extending the API to include the usage of the full tree"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Migration to Unified Limits"},{"line_number":308,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_a6bce306","line":305,"updated":"2019-07-03 00:32:12.000000000","message":"I wondered similar, if it would be worth extending the /limits API to have the hierarchy and various resource class limits from keystone if configured, as a stop gap until a unified API solution is thought through... but again that introduces API inconsistency based on configuration setting.\n\nThe more I think about it, the more I think we have to give up the idea of a unified API for looking at limits and usage side-by-side. Because there\u0027s no place it could live, it seems. Can\u0027t live in keystone, and that\u0027s the only close-ish place that makes sense. Maybe it will have to be a client thing, horizon and OSC only.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2f056181714f23b4832f98a84ba659f83ba29f84","unresolved":false,"context_lines":[{"line_number":302,"context_line":"  We could extext the API to include a boolean to say if the limit has been"},{"line_number":303,"context_line":"  exceeded in the parent project, and as such the user is unable to consume"},{"line_number":304,"context_line":"  more resources even though their own usage is not over their own limits."},{"line_number":305,"context_line":"  We could consider extending the API to include the usage of the full tree"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Migration to Unified Limits"},{"line_number":308,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_9af25d9a","line":305,"in_reply_to":"9fb8cfa7_7380de47","updated":"2019-07-03 20:45:51.000000000","message":"Ack on all of this.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":302,"context_line":"  We could extext the API to include a boolean to say if the limit has been"},{"line_number":303,"context_line":"  exceeded in the parent project, and as such the user is unable to consume"},{"line_number":304,"context_line":"  more resources even though their own usage is not over their own limits."},{"line_number":305,"context_line":"  We could consider extending the API to include the usage of the full tree"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Migration to Unified Limits"},{"line_number":308,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_7380de47","line":305,"in_reply_to":"9fb8cfa7_86975fec","updated":"2019-07-03 14:33:18.000000000","message":"I hadn\u0027t thought about sean\u0027s idea before... and interesting hybrid... but the current concensus with keystone is to leave this as an SDK issue (for the moment). What breaks is with project B, you can\u0027t get the usage of your parent A from Nova to work out why you have an issue... so it probably has be some sort of keystone proxy, but they don\u0027t want to build that right now (which makes sense).","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":302,"context_line":"  We could extext the API to include a boolean to say if the limit has been"},{"line_number":303,"context_line":"  exceeded in the parent project, and as such the user is unable to consume"},{"line_number":304,"context_line":"  more resources even though their own usage is not over their own limits."},{"line_number":305,"context_line":"  We could consider extending the API to include the usage of the full tree"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Migration to Unified Limits"},{"line_number":308,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_86975fec","line":305,"in_reply_to":"9fb8cfa7_a6bce306","updated":"2019-07-03 01:39:21.000000000","message":"ya i was thinking of something similar. maybe we could use the hypermidia part of Rest and have a new microverion that when used will retrun a link to keystone limits endpoint if keysone is used and itself if nova limits are used.\n\nkind of like the links section\n\n\"links\": [\n                {\n                    \"href\": \"http://openstack.example.com/v2.1/\",\n                    \"rel\": \"self\"\n                }\n            ],\n\nwe could retrun a link to the api endpoint that shoudl be used used for quota?\n\n\nso for the nova limits we would get abck\n\n\n{\n   \"links\": [\n                {\n                    \"href\": \"http://openstack.example.com/v2.1/limits/\",\n                    \"rel\": \"self\"\n                }\n               {\n                    \"href\": \"http://openstack.example.com/v2.1/limits\",\n                    \"rel\": \"limits_endpoint\"\n                }\n\n            ],\n\n    \"limits\": {\n        \"absolute\": {\n            \"maxImageMeta\": 128,\n            \"maxPersonality\": 5,\n            \"maxPersonalitySize\": 10240,\n            \"maxSecurityGroupRules\": 20,\n            \"maxSecurityGroups\": 10,\n            \"maxServerMeta\": 128,\n            \"maxTotalCores\": 20,\n            \"maxTotalFloatingIps\": 10,\n            \"maxTotalInstances\": 10,\n            \"maxTotalKeypairs\": 100,\n            \"maxTotalRAMSize\": 51200,\n            \"maxServerGroups\": 10,\n            \"maxServerGroupMembers\": 10,\n            \"totalCoresUsed\": 0,\n            \"totalInstancesUsed\": 0,\n            \"totalRAMUsed\": 0,\n            \"totalSecurityGroupsUsed\": 0,\n            \"totalFloatingIpsUsed\": 0,\n            \"totalServerGroupsUsed\": 0\n        },\n        \"rate\": []\n    }\n}\n\nand for keystone unifed limts we would get back\n\n{\n   \"links\": [\n                {\n                    \"href\": \"http://openstack.example.com/v2.1/limits/\",\n                    \"rel\": \"self\"\n                }\n               {\n                    \"href\": \"http://openstack.example.com/keystone/limits/\",\n                    \"rel\": \"limits_endpoint\"\n                }\n \n            ],\n\n    \"limits\": {\n        \"absolute\": {\n            \"maxTotalCores\": 20,\n            \"maxTotalInstances\": 10,\n            \"maxTotalRAMSize\": 51200,\n        },\n        \"rate\": []\n    }\n}","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6d21bf84c17c52308a19d0ea7ed593148c81ea59","unresolved":false,"context_lines":[{"line_number":304,"context_line":"  more resources even though their own usage is not over their own limits."},{"line_number":305,"context_line":"  We could consider extending the API to include the usage of the full tree"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Migration to Unified Limits"},{"line_number":308,"context_line":"---------------------------"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"The migration of all users to unified limits is happening in three phases:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_c68c77d9","line":307,"updated":"2019-07-03 01:39:21.000000000","message":"its late so ill stop reviewing here and review the  rest tomorrow but over all im in favor of the proposal and i hope we can make progress on this in Train.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":355,"context_line":"recommended that operators don\u0027t change quotas via the API during the"},{"line_number":356,"context_line":"transition."},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"The nova status command will warm users that have failed to remove all the"},{"line_number":359,"context_line":"quota information from the DB. This will become an error in the release when"},{"line_number":360,"context_line":"`quota.enforce_unified_limits` defaults to `True`."},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_263eb38b","line":358,"range":{"start_line":358,"start_character":29,"end_line":358,"end_character":33},"updated":"2019-07-03 00:32:12.000000000","message":"warn","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4767e1d8c7bfba3a9c70cccd6419f52882294919","unresolved":false,"context_lines":[{"line_number":370,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":371,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":372,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":373,"context_line":"* `quota.driver` is no longer relevant. The ability to stop enforcing quotas"},{"line_number":374,"context_line":"  (currently done by choosing the no-op driver) will be replaced by leaving"},{"line_number":375,"context_line":"  the option to have `quota.enforce_unified_limits \u003d False`"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"The setting `quota.recheck_quota` will be kept, and will be used in the same"},{"line_number":378,"context_line":"way with unified limits to avoid races when multiple instances are built at"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_8662ffac","line":375,"range":{"start_line":373,"start_character":0,"end_line":375,"end_character":59},"updated":"2019-07-03 00:32:12.000000000","message":"I don\u0027t understand this bit. If enforce_unified_limits is False, then the operator is using the legacy quota system and will still need access to the no-op quota driver to stop enforcing quotas, no?","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2f056181714f23b4832f98a84ba659f83ba29f84","unresolved":false,"context_lines":[{"line_number":370,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":371,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":372,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":373,"context_line":"* `quota.driver` is no longer relevant. The ability to stop enforcing quotas"},{"line_number":374,"context_line":"  (currently done by choosing the no-op driver) will be replaced by leaving"},{"line_number":375,"context_line":"  the option to have `quota.enforce_unified_limits \u003d False`"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"The setting `quota.recheck_quota` will be kept, and will be used in the same"},{"line_number":378,"context_line":"way with unified limits to avoid races when multiple instances are built at"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_5a2aa5e7","line":375,"range":{"start_line":373,"start_character":0,"end_line":375,"end_character":59},"in_reply_to":"9fb8cfa7_33c0267d","updated":"2019-07-03 20:45:51.000000000","message":"Ack, thanks.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7674f0b66e200bb75f5ccb302daf9e41a5d3043","unresolved":false,"context_lines":[{"line_number":370,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":371,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":372,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":373,"context_line":"* `quota.driver` is no longer relevant. The ability to stop enforcing quotas"},{"line_number":374,"context_line":"  (currently done by choosing the no-op driver) will be replaced by leaving"},{"line_number":375,"context_line":"  the option to have `quota.enforce_unified_limits \u003d False`"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"The setting `quota.recheck_quota` will be kept, and will be used in the same"},{"line_number":378,"context_line":"way with unified limits to avoid races when multiple instances are built at"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fb8cfa7_33c0267d","line":375,"range":{"start_line":373,"start_character":0,"end_line":375,"end_character":59},"in_reply_to":"9fb8cfa7_8662ffac","updated":"2019-07-03 14:33:18.000000000","message":"Hmm... I broke this sentence somehwere.\n\nI was trying to say, if enforce_unified_limits\u003dTrue, then we do not actually make use of quota.driver, we override it to be the noop driver.\n\nYou are correct, when False we respect the config as we do today.","commit_id":"98a5a193c6ea179db4e926b41d4ff0d9f1220042"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"of the limits via a single configuration option that applies to all"},{"line_number":195,"context_line":"projects in the system."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"The following limits will be changed to only be set via a single configuration"},{"line_number":198,"context_line":"option that applies equally to all projects:"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* server metadata"},{"line_number":201,"context_line":"* injected_files"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_3ce99bb6","line":198,"range":{"start_line":197,"start_character":0,"end_line":198,"end_character":44},"updated":"2019-07-25 23:41:15.000000000","message":"If I understand correctly, there will be no registered limits for all the below limits in oslo.limits and nova is responsible to count the quota checks for them as it is doing currently?  Only change for them is that user will not be able to update and get them via API?","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ac138447b066854598739a06fa28fb60b05b1fc","unresolved":false,"context_lines":[{"line_number":194,"context_line":"of the limits via a single configuration option that applies to all"},{"line_number":195,"context_line":"projects in the system."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"The following limits will be changed to only be set via a single configuration"},{"line_number":198,"context_line":"option that applies equally to all projects:"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* server metadata"},{"line_number":201,"context_line":"* injected_files"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_183c8e90","line":198,"range":{"start_line":197,"start_character":0,"end_line":198,"end_character":44},"in_reply_to":"3fa7e38b_7d383bd2","updated":"2019-10-29 17:16:29.000000000","message":"ok got it.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":194,"context_line":"of the limits via a single configuration option that applies to all"},{"line_number":195,"context_line":"projects in the system."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"The following limits will be changed to only be set via a single configuration"},{"line_number":198,"context_line":"option that applies equally to all projects:"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* server metadata"},{"line_number":201,"context_line":"* injected_files"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_7d383bd2","line":198,"range":{"start_line":197,"start_character":0,"end_line":198,"end_character":44},"in_reply_to":"7faddb67_3ce99bb6","updated":"2019-10-25 16:03:13.000000000","message":"Yes\n\nBut... oslo.limits tries to count things in a given project (or groups of projects), but these are all counting things in a single API request, so its not really in scope for oslo.limits.\n\nThey are not really quotas, they are more like the limit we have that returns a max of 2000 instance rows in one set of results, but on the input. (i.e. they are here purely to protect the database, not real resource usage).","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":201,"context_line":"* injected_files"},{"line_number":202,"context_line":"* injected_file_content_bytes"},{"line_number":203,"context_line":"* injected_file_path_bytes"},{"line_number":204,"context_line":"* key_pairs (counted per user)"},{"line_number":205,"context_line":"* server_groups (counted per project)"},{"line_number":206,"context_line":"* server_group_members (counted per server group)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_3a275e15","line":204,"range":{"start_line":204,"start_character":12,"end_line":204,"end_character":30},"updated":"2019-07-25 23:41:15.000000000","message":"is this mean nova will still count keys_pairs per user not project ?","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ac138447b066854598739a06fa28fb60b05b1fc","unresolved":false,"context_lines":[{"line_number":201,"context_line":"* injected_files"},{"line_number":202,"context_line":"* injected_file_content_bytes"},{"line_number":203,"context_line":"* injected_file_path_bytes"},{"line_number":204,"context_line":"* key_pairs (counted per user)"},{"line_number":205,"context_line":"* server_groups (counted per project)"},{"line_number":206,"context_line":"* server_group_members (counted per server group)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_d8491632","line":204,"range":{"start_line":204,"start_character":12,"end_line":204,"end_character":30},"in_reply_to":"3fa7e38b_3d2e438c","updated":"2019-10-29 17:16:29.000000000","message":"so in this case, the single configuration will apply to all users.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79cc293b35b31d75b45c27e0706e77a31d35c4de","unresolved":false,"context_lines":[{"line_number":201,"context_line":"* injected_files"},{"line_number":202,"context_line":"* injected_file_content_bytes"},{"line_number":203,"context_line":"* injected_file_path_bytes"},{"line_number":204,"context_line":"* key_pairs (counted per user)"},{"line_number":205,"context_line":"* server_groups (counted per project)"},{"line_number":206,"context_line":"* server_group_members (counted per server group)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_8a1d8163","line":204,"range":{"start_line":204,"start_character":12,"end_line":204,"end_character":30},"in_reply_to":"3fa7e38b_d8491632","updated":"2019-10-29 19:37:07.000000000","message":"Yes.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":201,"context_line":"* injected_files"},{"line_number":202,"context_line":"* injected_file_content_bytes"},{"line_number":203,"context_line":"* injected_file_path_bytes"},{"line_number":204,"context_line":"* key_pairs (counted per user)"},{"line_number":205,"context_line":"* server_groups (counted per project)"},{"line_number":206,"context_line":"* server_group_members (counted per server group)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_3d2e438c","line":204,"range":{"start_line":204,"start_character":12,"end_line":204,"end_character":30},"in_reply_to":"7faddb67_3a275e15","updated":"2019-10-25 16:03:13.000000000","message":"This isn\u0027t a change, key pairs are owned by users, not projects.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":233,"context_line":"* `quota.floating_ips`, `quota.fixed_ips`, `quota.security_groups`,"},{"line_number":234,"context_line":"  `security_group_rules`: remain deprecated, and will be ignored when"},{"line_number":235,"context_line":"  `quota.enforce_unified_limits \u003d True`."},{"line_number":236,"context_line":"* `quota.metadata_items`, `quota.injected_files`,"},{"line_number":237,"context_line":"  `quota.injected_file_content_bytes`, `quota.injected_file_path_length`,"},{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`:  these will all be"},{"line_number":239,"context_line":"  kept, but the description will be updated to note if"},{"line_number":240,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_9a5e9274","line":238,"range":{"start_line":236,"start_character":2,"end_line":238,"end_character":55},"updated":"2019-07-25 23:41:15.000000000","message":"qupta.key_pairs also in this list","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":233,"context_line":"* `quota.floating_ips`, `quota.fixed_ips`, `quota.security_groups`,"},{"line_number":234,"context_line":"  `security_group_rules`: remain deprecated, and will be ignored when"},{"line_number":235,"context_line":"  `quota.enforce_unified_limits \u003d True`."},{"line_number":236,"context_line":"* `quota.metadata_items`, `quota.injected_files`,"},{"line_number":237,"context_line":"  `quota.injected_file_content_bytes`, `quota.injected_file_path_length`,"},{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`:  these will all be"},{"line_number":239,"context_line":"  kept, but the description will be updated to note if"},{"line_number":240,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_1dbb470f","line":238,"range":{"start_line":236,"start_character":2,"end_line":238,"end_character":55},"in_reply_to":"7faddb67_9a5e9274","updated":"2019-10-25 16:03:13.000000000","message":"oops, yes.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":237,"context_line":"  `quota.injected_file_content_bytes`, `quota.injected_file_path_length`,"},{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`:  these will all be"},{"line_number":239,"context_line":"  kept, but the description will be updated to note if"},{"line_number":240,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"Deprecate Nova\u0027s Quota APIs"},{"line_number":243,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_fc9c635c","line":240,"range":{"start_line":240,"start_character":40,"end_line":240,"end_character":76},"updated":"2019-07-25 23:41:15.000000000","message":"are we going to change the response in this case ? or silently ignored without user notification.\n\nI think siletly ignore is better and not to change the response based on config. Documenting the behaviour in api-ref should be enough for user notification.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ac138447b066854598739a06fa28fb60b05b1fc","unresolved":false,"context_lines":[{"line_number":237,"context_line":"  `quota.injected_file_content_bytes`, `quota.injected_file_path_length`,"},{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`:  these will all be"},{"line_number":239,"context_line":"  kept, but the description will be updated to note if"},{"line_number":240,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"Deprecate Nova\u0027s Quota APIs"},{"line_number":243,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_33fbab7b","line":240,"range":{"start_line":240,"start_character":40,"end_line":240,"end_character":76},"in_reply_to":"3fa7e38b_7d703b73","updated":"2019-10-29 17:16:29.000000000","message":"got it. make sense.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":237,"context_line":"  `quota.injected_file_content_bytes`, `quota.injected_file_path_length`,"},{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`:  these will all be"},{"line_number":239,"context_line":"  kept, but the description will be updated to note if"},{"line_number":240,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"Deprecate Nova\u0027s Quota APIs"},{"line_number":243,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_7d703b73","line":240,"range":{"start_line":240,"start_character":40,"end_line":240,"end_character":76},"in_reply_to":"7faddb67_fc9c635c","updated":"2019-10-25 16:03:13.000000000","message":"Sorry, I am not sure I undertand you here.\n\nMy take is: DB is no longer updated or read by any other part of the code (except the migration tools). For me it makes little sense for the API to read the DB anymore. If we do read it, we return a value to user can\u0027t update, isn\u0027t used by the code, and is missleading to the operator (i.e. we now apply a totally different limit, i.e. what is in the configuration). In addition, I believe the default behaviour is that the API returns the default configuration value, where operators have not set that value.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":249,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":250,"context_line":"Placement. When placement implements consumer records,"},{"line_number":251,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_fa2d46a8","line":253,"range":{"start_line":252,"start_character":19,"end_line":253,"end_character":20},"updated":"2019-07-25 23:41:15.000000000","message":"+1. or it should be easily done on SDK or client side. we can add \u0027--count\u0027 arg in \u0027openstack server list\u0027 CLI which can just return len(response[\u0027servers\u0027]).","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":249,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":250,"context_line":"Placement. When placement implements consumer records,"},{"line_number":251,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_1dfee7ae","line":253,"range":{"start_line":252,"start_character":19,"end_line":253,"end_character":20},"in_reply_to":"7faddb67_fa2d46a8","updated":"2019-10-25 16:03:13.000000000","message":"+1, just the scope already is a bit big :)","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b64b27bca5a833aeaf0e24a977612d671c5d5c3","unresolved":false,"context_lines":[{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":257,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":258,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"This includes the follow API resources:"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* /limits"},{"line_number":263,"context_line":"* /os-quota-sets"},{"line_number":264,"context_line":"* /os-quota-class-sets"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"},{"line_number":273,"context_line":"based limits, e.g. for keypairs you always see the config based value, no"},{"line_number":274,"context_line":"update via the API will ever be reflected back when"},{"line_number":275,"context_line":"`quota.enforce_unified_limits \u003d True`"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"There are some trade-offs with this approach:"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the use of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead. API based discovery of when Nova is enforcing"},{"line_number":284,"context_line":"  the limits set in Keystone is left for a future spec."},{"line_number":285,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":286,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":287,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_9c4e8fbf","line":284,"range":{"start_line":255,"start_character":0,"end_line":284,"end_character":55},"updated":"2019-07-25 23:41:15.000000000","message":"Few questions for more clarification on changes in API in each phase.\n\n1. overall proposal is to proxy the APIs and then deprecate without microversion?\n\n2. when you say proxy APIs to keystone and placements, how about\n GET quotas for all those limits which are not going to be in new\n quota system @L200 (servers_groups etc). will existing GET \n/os-quota-sets/{tenant_id} and GET /os-quota-sets/{tenant_id}/detail\n APIs keep working from nova code for them as it is ?\n   - This will not require microversion bump because of no change in\n behaviour or interface.\n\n3. Once the use of unified limits is the default, you mentioned\n that \"we will deprecate the quotas APIs in favour of\n keystone and placement APIs\". I hope, APIs will be deprecated without\n microverison bump and just mark deprecated in api-ref only? \n But can we remove them in this phase? remove means keep url but return\n 410(like we did for certificate, cloudpipe APIs). Because this is the\n phase where all operators are moved to new unified limits and we do not\n need to keep old APIs and system? In your alternate section, I understand\n that the operator requested for current tooling working only till the\n transition period? \n I mean keep proxy APIs only till transition period?","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79cc293b35b31d75b45c27e0706e77a31d35c4de","unresolved":false,"context_lines":[{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":257,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":258,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"This includes the follow API resources:"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* /limits"},{"line_number":263,"context_line":"* /os-quota-sets"},{"line_number":264,"context_line":"* /os-quota-class-sets"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"},{"line_number":273,"context_line":"based limits, e.g. for keypairs you always see the config based value, no"},{"line_number":274,"context_line":"update via the API will ever be reflected back when"},{"line_number":275,"context_line":"`quota.enforce_unified_limits \u003d True`"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"There are some trade-offs with this approach:"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the use of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead. API based discovery of when Nova is enforcing"},{"line_number":284,"context_line":"  the limits set in Keystone is left for a future spec."},{"line_number":285,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":286,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":287,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_4a3b09d0","line":284,"range":{"start_line":255,"start_character":0,"end_line":284,"end_character":55},"in_reply_to":"3fa7e38b_0ee3e806","updated":"2019-10-29 19:37:07.000000000","message":"+1 lets add that.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b2a54720d750fa4fb8882505f15422c2706f14c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":257,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":258,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"This includes the follow API resources:"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* /limits"},{"line_number":263,"context_line":"* /os-quota-sets"},{"line_number":264,"context_line":"* /os-quota-class-sets"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"},{"line_number":273,"context_line":"based limits, e.g. for keypairs you always see the config based value, no"},{"line_number":274,"context_line":"update via the API will ever be reflected back when"},{"line_number":275,"context_line":"`quota.enforce_unified_limits \u003d True`"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"There are some trade-offs with this approach:"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the use of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead. API based discovery of when Nova is enforcing"},{"line_number":284,"context_line":"  the limits set in Keystone is left for a future spec."},{"line_number":285,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":286,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":287,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_0ee3e806","line":284,"range":{"start_line":255,"start_character":0,"end_line":284,"end_character":55},"in_reply_to":"3fa7e38b_38e70ae6","updated":"2019-10-29 17:38:29.000000000","message":"\u0027- at some cycle in future - remove the APIs.\u0027\n\nRemoving API means returning the 410 and keep the API url. same as we did for cloudpipe, nova-cert, and now nova-net APIs","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ac138447b066854598739a06fa28fb60b05b1fc","unresolved":false,"context_lines":[{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":257,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":258,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"This includes the follow API resources:"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* /limits"},{"line_number":263,"context_line":"* /os-quota-sets"},{"line_number":264,"context_line":"* /os-quota-class-sets"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"},{"line_number":273,"context_line":"based limits, e.g. for keypairs you always see the config based value, no"},{"line_number":274,"context_line":"update via the API will ever be reflected back when"},{"line_number":275,"context_line":"`quota.enforce_unified_limits \u003d True`"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"There are some trade-offs with this approach:"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the use of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead. API based discovery of when Nova is enforcing"},{"line_number":284,"context_line":"  the limits set in Keystone is left for a future spec."},{"line_number":285,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":286,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":287,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_38e70ae6","line":284,"range":{"start_line":255,"start_character":0,"end_line":284,"end_character":55},"in_reply_to":"3fa7e38b_7dc83b54","updated":"2019-10-29 17:16:29.000000000","message":"I agree with the approach. writing down the notes from the hangout call.\n- proxying API is not changing the API so no microversion required that time. \n- Ussuri cycle \n  - proxy the API if `quota.enforce_unified_limits \u003d True` and updates to quota will be ignored. non-unified limits (L197) will operate on configured values only. -L266, 277\n- next cycle (V) - unifed limits is the default. deprecate the APIs and return 404 saying to start using the new unified limits system. This will happen with microversion. older microversion will keep proxying the APIs\n- at some cycle in future - remove the APIs.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a716b6cfd0f925022abdb55d6201ce463b5240f4","unresolved":false,"context_lines":[{"line_number":252,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":253,"context_line":"of servers returned."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":256,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":257,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":258,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"This includes the follow API resources:"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* /limits"},{"line_number":263,"context_line":"* /os-quota-sets"},{"line_number":264,"context_line":"* /os-quota-class-sets"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":267,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":268,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":269,"context_line":"Horizon to function as normal during the transition."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"When you list limits for quotas that are not supported in the new system, they"},{"line_number":272,"context_line":"will instead show the configuration based limit that replaces the DB and API"},{"line_number":273,"context_line":"based limits, e.g. for keypairs you always see the config based value, no"},{"line_number":274,"context_line":"update via the API will ever be reflected back when"},{"line_number":275,"context_line":"`quota.enforce_unified_limits \u003d True`"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"There are some trade-offs with this approach:"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Proxy APIs suck, but horizon must keep working as such all current operator"},{"line_number":280,"context_line":"  tooling around these existing APIs."},{"line_number":281,"context_line":"* Once the use of unifed limits is the default, we should deprecate the"},{"line_number":282,"context_line":"  `/os-quota-sets` and `/os-quota-class-sets` and tell users to talk to"},{"line_number":283,"context_line":"  the Keystone API instead. API based discovery of when Nova is enforcing"},{"line_number":284,"context_line":"  the limits set in Keystone is left for a future spec."},{"line_number":285,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":286,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":287,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_7dc83b54","line":284,"range":{"start_line":255,"start_character":0,"end_line":284,"end_character":55},"in_reply_to":"7faddb67_9c4e8fbf","updated":"2019-10-25 16:03:13.000000000","message":"Overall I see this like 2.36, i.e. the nova-network deprecation. The APIs still keep working, but will 404 when you access a new microversion, to message that we want to remove them evertually. At a later time, we do the 410 GONE trick, if we think we can really remove them (i.e. once horizon and openstack cli no longer depends on those APIs).\n\nFundamentally Keystone API can\u0027t tell you about usage, that is a service API issue. In theory placement will give you all you need to know (for Nova), so we may start exposing the placement API to end users, for that purpose.\n\nIn all likelihood, we will find a new API that all services that adopt unified limits will need to add in their API, so the openstack client can easily talk to all services, but there is zero consenus on that at this point.\n\n1) answered above, hopefully.\n\n2) that is the plan, we keep it all working in proxy mode, ideally with no microversion bump. I may need to express that more clearly in the spec somehow\n\n3) I don\u0027t think we can do 410, the first phase is to copy 2.36 and do the proxy APIs just return 404 in a newer microversion.\n\nHopefully that helps? I am up for having a google hangout to go through the details with a few of us.","commit_id":"0dd28516da05ea01f6dce2ae4c037bdefc8f8ca5"}],"specs/ussuri/approved/unified-limits-nova.rst":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ac138447b066854598739a06fa28fb60b05b1fc","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"   * - Release Name"},{"line_number":522,"context_line":"     - Description"},{"line_number":523,"context_line":"   * - Train"},{"line_number":524,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3fa7e38b_93505f34","line":523,"range":{"start_line":523,"start_character":7,"end_line":523,"end_character":12},"updated":"2019-10-29 17:16:29.000000000","message":"Ussuri","commit_id":"66d97522e5df07d82b38c576c4a065a24cc34781"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"13c3dfcca170e72208e9a50f120f7456ee57a357","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"   * - Release Name"},{"line_number":522,"context_line":"     - Description"},{"line_number":523,"context_line":"   * - Train"},{"line_number":524,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3fa7e38b_2a2ecd8b","line":523,"range":{"start_line":523,"start_character":7,"end_line":523,"end_character":12},"in_reply_to":"3fa7e38b_93505f34","updated":"2019-10-29 19:37:39.000000000","message":"heh, good spot, thanks.","commit_id":"66d97522e5df07d82b38c576c4a065a24cc34781"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Note, this includes things like DISK_GB which is not supported today,"},{"line_number":62,"context_line":"along with things like custom resource class resources that are requested"},{"line_number":63,"context_line":"in extra specs (as used by Ironic flavors)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":66,"context_line":"not be supported when you use unified limits."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e6fb2545","line":63,"range":{"start_line":63,"start_character":15,"end_line":63,"end_character":23},"updated":"2020-02-10 14:18:05.000000000","message":"or others...","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":62,"context_line":"along with things like custom resource class resources that are requested"},{"line_number":63,"context_line":"in extra specs (as used by Ironic flavors)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":66,"context_line":"not be supported when you use unified limits."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The key use cases driving this work are:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8d66debb","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":68},"updated":"2020-01-27 10:49:28.000000000","message":"It would be helpful to enumerate these quota types here. They\u0027re listed later but for someone not as familiar with keystone (like me), every little extra detail helps","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"along with things like custom resource class resources that are requested"},{"line_number":63,"context_line":"in extra specs (as used by Ironic flavors)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":66,"context_line":"not be supported when you use unified limits."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The key use cases driving this work are:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_a8a0688f","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":68},"in_reply_to":"3fa7e38b_8d66debb","updated":"2020-01-27 12:34:49.000000000","message":"I would rather not repeat this detail here, as it seems like a distraction to me, but I could.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":62,"context_line":"along with things like custom resource class resources that are requested"},{"line_number":63,"context_line":"in extra specs (as used by Ironic flavors)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"All other quota types currently supported (including per user quota) will"},{"line_number":66,"context_line":"not be supported when you use unified limits."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The key use cases driving this work are:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_66c73513","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":68},"in_reply_to":"3fa7e38b_a8a0688f","updated":"2020-02-10 14:18:05.000000000","message":"Well,just provide an internal link then ;)","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* API User tries to understand why they got an Over Quota error"},{"line_number":71,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":72,"context_line":"* Operator sets a default limit for a given endpoint via Keystone, note there"},{"line_number":73,"context_line":"  can be different limits for each Region, even with a shared Keystone."},{"line_number":74,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":75,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":76,"context_line":"  i.e. the feature formally known as hierarchical quotas"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4d0226bc","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":71},"updated":"2020-01-27 10:49:28.000000000","message":"This reads strangely","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* API User tries to understand why they got an Over Quota error"},{"line_number":71,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":72,"context_line":"* Operator sets a default limit for a given endpoint via Keystone, note there"},{"line_number":73,"context_line":"  can be different limits for each Region, even with a shared Keystone."},{"line_number":74,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":75,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":76,"context_line":"  i.e. the feature formally known as hierarchical quotas"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_a8b948c5","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":71},"in_reply_to":"3fa7e38b_4d0226bc","updated":"2020-01-27 12:34:49.000000000","message":"What would make it better? A full stop after the first Keystone?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* API User tries to understand why they got an Over Quota error"},{"line_number":71,"context_line":"* Operator migrates to unified limits from existing limits"},{"line_number":72,"context_line":"* Operator sets a default limit for a given endpoint via Keystone, note there"},{"line_number":73,"context_line":"  can be different limits for each Region, even with a shared Keystone."},{"line_number":74,"context_line":"* Operator sets specific limits for a given project via Keystone"},{"line_number":75,"context_line":"* Operator defines limits of a set of projects via non-flat enforcement"},{"line_number":76,"context_line":"  i.e. the feature formally known as hierarchical quotas"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e6d245cf","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":71},"in_reply_to":"3fa7e38b_a8b948c5","updated":"2020-02-10 14:18:05.000000000","message":"Not sure I see a problem here.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"We will support the following limits:"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"* `server_count`"},{"line_number":95,"context_line":"* `resource:\u003cRESOURCE_CLASS\u003e`"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"All the resource class usage will be counted using placement, but"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8d149eeb","line":94,"range":{"start_line":94,"start_character":2,"end_line":94,"end_character":16},"updated":"2020-01-27 10:49:28.000000000","message":"``literal`` (double backticks)","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":95,"context_line":"* `resource:\u003cRESOURCE_CLASS\u003e`"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":98,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":99,"context_line":"queued for delete data migration has been completed. Due to no user"},{"line_number":100,"context_line":"based quotas, we don\u0027t need the user_id migration. If the operators"},{"line_number":101,"context_line":"tries to use unified limits before completing the migration, the code"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e680059f","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":48},"updated":"2020-02-10 14:18:05.000000000","message":"++","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":98,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":99,"context_line":"queued for delete data migration has been completed. Due to no user"},{"line_number":100,"context_line":"based quotas, we don\u0027t need the user_id migration. If the operators"},{"line_number":101,"context_line":"tries to use unified limits before completing the migration, the code"},{"line_number":102,"context_line":"will block all new usage until the migration is completed. It is"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8de9fee4","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":52},"updated":"2020-01-27 10:49:28.000000000","message":"What\u0027s this referring to? A link to the migration code itself is fine","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":97,"context_line":"All the resource class usage will be counted using placement, but"},{"line_number":98,"context_line":"server count will make use of instance mappings. This only works if the"},{"line_number":99,"context_line":"queued for delete data migration has been completed. Due to no user"},{"line_number":100,"context_line":"based quotas, we don\u0027t need the user_id migration. If the operators"},{"line_number":101,"context_line":"tries to use unified limits before completing the migration, the code"},{"line_number":102,"context_line":"will block all new usage until the migration is completed. It is"},{"line_number":103,"context_line":"expected a blocking migration will be added before we turn on unified"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_ade4fa0b","line":100,"range":{"start_line":100,"start_character":32,"end_line":100,"end_character":39},"updated":"2020-01-27 10:49:28.000000000","message":"``literal``","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":101,"context_line":"tries to use unified limits before completing the migration, the code"},{"line_number":102,"context_line":"will block all new usage until the migration is completed. It is"},{"line_number":103,"context_line":"expected a blocking migration will be added before we turn on unified"},{"line_number":104,"context_line":"limits by default."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"To allow the new system to co-exist with the older quota system, we add"},{"line_number":107,"context_line":"the following configuration to allow operators to opt-into the new system"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e6a9e524","line":104,"updated":"2020-02-10 14:18:05.000000000","message":"A link to the `Upgrade`_ section could help.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"To allow the new system to co-exist with the older quota system, we add"},{"line_number":107,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":108,"context_line":"when the operator has migrated to unified limits:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_0664411f","line":108,"updated":"2020-02-10 14:18:05.000000000","message":"I suspect a default value of False of course ;-)","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":107,"context_line":"the following configuration to allow operators to opt-into the new system"},{"line_number":108,"context_line":"when the operator has migrated to unified limits:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_0daf4e9d","line":110,"updated":"2020-01-27 10:49:28.000000000","message":"literal here too. Alternatively, consider indenting this and using \u0027::\u0027 above (so it\u0027s a code block)","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8dc25e53","line":112,"range":{"start_line":112,"start_character":54,"end_line":112,"end_character":67},"updated":"2020-01-27 10:49:28.000000000","message":"Can you link here, e.g.\n\n  `later section \u003cname of section you\u0027re referring to\u003e`__","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `quota.enforce_unified_limits \u003d False`"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_adbddad1","line":113,"range":{"start_line":113,"start_character":48,"end_line":113,"end_character":67},"updated":"2020-01-27 10:49:28.000000000","message":"will have a hard dependency on","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4d9ea669","line":114,"range":{"start_line":114,"start_character":28,"end_line":114,"end_character":29},"updated":"2020-01-27 10:49:28.000000000","message":";","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2bef3cdf51d4cb510e93bd67d9d594b2ff55e23","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_21b395ee","line":115,"range":{"start_line":115,"start_character":1,"end_line":115,"end_character":39},"updated":"2020-01-20 06:58:12.000000000","message":"I remember the False value for this option is for edge usecase, I guess that Dan or Redhat people need, is that usecase already abandoned?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_f09bdb60","line":115,"range":{"start_line":115,"start_character":1,"end_line":115,"end_character":39},"in_reply_to":"3fa7e38b_21b395ee","updated":"2020-01-22 11:28:57.000000000","message":"My understanding is that it was to support a smooth upgrade, we needed to have this data migration before it would work, and until that worked we had to fall back to the old way of doing things:\nhttps://specs.openstack.org/openstack/nova-specs/specs/stein/approved/count-quota-usage-from-placement.html#upgrade-impact","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"650ca2a832f1db18152251cbecdbd3a97800fc32","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_c648228b","line":115,"range":{"start_line":115,"start_character":1,"end_line":115,"end_character":39},"in_reply_to":"3fa7e38b_cd913655","updated":"2020-01-28 13:15:50.000000000","message":"I\u0027m thinking of this https://review.opendev.org/#/c/638073/21/nova/conf/workarounds.py@253\n\nBut looks like it already removed...","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For further details on the transition, please see the later section in this"},{"line_number":113,"context_line":"specification. Note the new unified limits code will hard depend on"},{"line_number":114,"context_line":"counting usage via placement, as such it will ignore the value of"},{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_cd913655","line":115,"range":{"start_line":115,"start_character":1,"end_line":115,"end_character":39},"in_reply_to":"3fa7e38b_f09bdb60","updated":"2020-01-27 10:49:28.000000000","message":"``literal``","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":115,"context_line":"`CONF.quota.count_usage_from_placement`."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Looking at the existing quotas, `instances` becomes `server_count`,"},{"line_number":118,"context_line":"`cores` becomes `resource:VCPU` and `ram` becomes `resource:MEMORY_MB`."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"This work will re-use a lot of the new logic to query placement for resource"},{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4d878613","line":118,"updated":"2020-01-27 10:49:28.000000000","message":"A table of old vs. new somewhere in this document would be very helpful and could be used in docs later","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2bef3cdf51d4cb510e93bd67d9d594b2ff55e23","unresolved":false,"context_lines":[{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"},{"line_number":122,"context_line":"http://specs.openstack.org/openstack/nova-specs/specs/train/approved/count-quota-usage-from-placement.html"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"To find out what resources a server will claim, we we reuse this"},{"line_number":125,"context_line":"code to extract the resources from any given flavor:"},{"line_number":126,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_c1408107","line":124,"range":{"start_line":124,"start_character":48,"end_line":124,"end_character":53},"updated":"2020-01-20 06:58:12.000000000","message":"double \u0027we\u0027","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"usage, and use the instance mapping table to count servers added in this spec:"},{"line_number":122,"context_line":"http://specs.openstack.org/openstack/nova-specs/specs/train/approved/count-quota-usage-from-placement.html"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"To find out what resources a server will claim, we we reuse this"},{"line_number":125,"context_line":"code to extract the resources from any given flavor:"},{"line_number":126,"context_line":"https://github.com/openstack/nova/blob/2e85453879533af0b4d0e1178797d26f026a9423/nova/scheduler/utils.py#L387"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_90a4e7a5","line":124,"range":{"start_line":124,"start_character":48,"end_line":124,"end_character":53},"in_reply_to":"3fa7e38b_c1408107","updated":"2020-01-22 11:28:57.000000000","message":"oops, could fix in a follow up.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":184,"context_line":"* fixed_ips"},{"line_number":185,"context_line":"* floating_ip"},{"line_number":186,"context_line":"* security_group_rules"},{"line_number":187,"context_line":"* networks"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"The remaining limits are all mainly used to protect the database from rogue"},{"line_number":190,"context_line":"users using up all available space in the database and/or miss-use the API as"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_ed9af25d","line":187,"updated":"2020-01-27 10:49:28.000000000","message":"All of these could be ``literal`` s","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":187,"context_line":"* networks"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"The remaining limits are all mainly used to protect the database from rogue"},{"line_number":190,"context_line":"users using up all available space in the database and/or miss-use the API as"},{"line_number":191,"context_line":"some sort of storage system. As such, it is not expected that operators need"},{"line_number":192,"context_line":"per project overrides for any of these limits. As such, we propose to drop"},{"line_number":193,"context_line":"support for changing the limits via the API, and instead only allow changing"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_0d92ee4a","line":190,"range":{"start_line":190,"start_character":58,"end_line":190,"end_character":66},"updated":"2020-01-27 10:49:28.000000000","message":"misuse","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":238,"context_line":"  `quota.server_groups`, `quota.server_groups_members`,"},{"line_number":239,"context_line":"  `quota.key_pairs`:  these will all be"},{"line_number":240,"context_line":"  kept, but the description will be updated to note if"},{"line_number":241,"context_line":"  `quota.enforce_unified_limits \u003d True` all updates via the API are ignored."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Deprecate Nova\u0027s Quota APIs"},{"line_number":244,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4db546cf","line":241,"updated":"2020-01-27 10:49:28.000000000","message":"As above, a table with the old quota and the new representation of it (i.e. \"keystone quota X\", \"config option Y\" or \"removed\") would be awesome","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f6d3825d3f45ed60deaef655f144145ddc54bdbe","unresolved":false,"context_lines":[{"line_number":244,"context_line":"---------------------------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":247,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_c231b10c","line":248,"range":{"start_line":247,"start_character":41,"end_line":248,"end_character":64},"updated":"2019-11-27 20:40:02.000000000","message":"I would be interested in knowing the background of this statement and whether it\u0027s been resolved yet.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bd70521ba64d5718b67cd520469e591b8b3c4e0a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"---------------------------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":247,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_d6fe2903","line":248,"range":{"start_line":247,"start_character":41,"end_line":248,"end_character":64},"in_reply_to":"3fa7e38b_c231b10c","updated":"2019-12-02 14:40:43.000000000","message":"The background is that placement API is usually/currently admin only. But ideally it would be good to have end user\u0027s query that directly for unified limits. Although there are ways around that (proxy, etc).\n\nI haven\u0027t push this conversation very hard yet, as it doesn\u0027t feel like a blocker right now, as I think the Nova API gives you all the info you need right now.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2bef3cdf51d4cb510e93bd67d9d594b2ff55e23","unresolved":false,"context_lines":[{"line_number":244,"context_line":"---------------------------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":247,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e1549dc8","line":248,"range":{"start_line":247,"start_character":41,"end_line":248,"end_character":64},"in_reply_to":"3fa7e38b_d6fe2903","updated":"2020-01-20 06:58:12.000000000","message":"The placement API already supports policy configuration, so it should be ok? we only need expose /usages API to the end user. \n\nFor UX, that isn\u0027t good, the user needs two separated calls to query the limit and the usage. The only expectation is the vendor build limit/usage info on their own panel.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":244,"context_line":"---------------------------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"To query and set limits, Keystones APIs should be used. To query a user\u0027s"},{"line_number":247,"context_line":"usage, the Placement API should be used, assuming placement is happy"},{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_70de0b11","line":248,"range":{"start_line":247,"start_character":41,"end_line":248,"end_character":64},"in_reply_to":"3fa7e38b_e1549dc8","updated":"2020-01-22 11:28:57.000000000","message":"To be clear, the existing API will work for now, until we have a better approach.\n\nThe data is now split between two services, so unless we do a proxy API, making the user make mutliple calls is the preffered approach.\n\nCurrently you have to call every single project (Cinder, Neutron, Nova) to understand your limits. Eventually that will now be a single call to keystone. You can then compare that against polling the current usage of each project more frequently. So in realtity its like 5 API calls becoing 6 API calls.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"},{"line_number":252,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":253,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":254,"context_line":"of servers returned."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_edc3d237","line":251,"range":{"start_line":251,"start_character":38,"end_line":251,"end_character":53},"updated":"2020-01-27 10:49:28.000000000","message":"I don\u0027t know what this means :)","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":248,"context_line":"changing the default policy to allow users to query their usage."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"The one exception is server count can\u0027t currently be checked via"},{"line_number":251,"context_line":"Placement. When placement implements consumer records,"},{"line_number":252,"context_line":"or similar, then all usage could be queried via Placement. To avoid"},{"line_number":253,"context_line":"using a proxy API, users can do a server list API and count the number"},{"line_number":254,"context_line":"of servers returned."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_684cb09c","line":251,"range":{"start_line":251,"start_character":38,"end_line":251,"end_character":53},"in_reply_to":"3fa7e38b_edc3d237","updated":"2020-01-27 12:34:49.000000000","message":"I can try find a link, there was an in progress spec somewhere. Basically linking various usage records to a single consumer (i.e. instance uuid), so we can list instance uuids.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":256,"context_line":"When `quota.enforce_unified_limits \u003d True` a best effort will be made to keep"},{"line_number":257,"context_line":"the older micro-versions working by proxing API calls to Keystone and"},{"line_number":258,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":259,"context_line":"`quota.enforce_unified_limits \u003d True`."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"This includes the follow API resources:"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_a6744dce","line":259,"updated":"2020-02-10 14:18:05.000000000","message":"++","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2bef3cdf51d4cb510e93bd67d9d594b2ff55e23","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_419fb163","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"updated":"2020-01-20 06:58:12.000000000","message":"why we didn\u0027t proxy the update?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_5002ef73","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"in_reply_to":"3fa7e38b_419fb163","updated":"2020-01-22 11:28:57.000000000","message":"Because these quotas are no longer enforced, it seems more correct to always reply with \"unlimited\" as that is actually what the system will do. If we were to udpate the database, but the code ignore it, I think we would be breaking the API contract more, leading to a lot of confusion.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8dd33e02","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"in_reply_to":"3fa7e38b_5002ef73","updated":"2020-01-27 10:49:28.000000000","message":"FWIW, we explicitly fail if you attempt to set the networks quota now. Any reason we couldn\u0027t do this for the other quota types?\n\nhttps://github.com/openstack/nova/commit/6fe31d97542467656cdecd90c2e0a9057a4f7480#diff-3be7bba431b21b03c699a6f0a9f33a3fR201","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3592d1cd948c940f831ef4563b77d1421b69cef3","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_34d91c80","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"in_reply_to":"3fa7e38b_86546a57","updated":"2020-02-13 21:59:23.000000000","message":"I agree that we should not break these API now. at least for migration period. we can do later by deprecating, 404 or 410.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_e86e60fc","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"in_reply_to":"3fa7e38b_8dd33e02","updated":"2020-01-27 12:34:49.000000000","message":"It would break horizon, as it will set all of these via the existing APIs. The operators were unhappy with that approach, as it would also break their existing tooling.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"650ca2a832f1db18152251cbecdbd3a97800fc32","unresolved":false,"context_lines":[{"line_number":265,"context_line":"* /os-quota-class-sets"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Existing tooling to set quotas should continue to operate, as long as it only"},{"line_number":268,"context_line":"changes quotas relating to instances, cores and ram. Requests to change any"},{"line_number":269,"context_line":"other quotas will be silently ignored. As one example, this should allow"},{"line_number":270,"context_line":"Horizon to function as normal during the transition."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"When you list limits for quotas that are not supported in the new system, they"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_86546a57","line":269,"range":{"start_line":268,"start_character":53,"end_line":269,"end_character":38},"in_reply_to":"3fa7e38b_e86e60fc","updated":"2020-01-28 13:15:50.000000000","message":"Can we assume the operator\u0027s tool or script can handle 400 correctly?, like this https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/quota_sets.py#L63","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":290,"context_line":"  by nova-network proxy APIs, i.e. the APIs return 404 in new microversions"},{"line_number":291,"context_line":"  but continue to work in older microversions. Its possible in the more"},{"line_number":292,"context_line":"  distant future the APIs could be removed by returning 410 error."},{"line_number":293,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":294,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":295,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"},{"line_number":296,"context_line":"  addition if we were not planning on deprecating the API in favor of calling"},{"line_number":297,"context_line":"  Keystone instead."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8dec9ebc","line":294,"range":{"start_line":293,"start_character":0,"end_line":294,"end_character":59},"updated":"2020-01-27 10:49:28.000000000","message":"Yes, but we do allow breaking changes for deprecated functionality. See the use of HTTP 410 (Gone) for removed APIs. This is similarly removed functionality and I see no reason to not hard fail rather than pretend the API is doing something it\u0027s not doing. This leads to situations like the above:\n\n1. Set \u0027injected_file_content_bytes\u0027 to N,\n2. Attempt to inject a file of N*2 bytes\n3. Attempt succeeds. Confusion.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":290,"context_line":"  by nova-network proxy APIs, i.e. the APIs return 404 in new microversions"},{"line_number":291,"context_line":"  but continue to work in older microversions. Its possible in the more"},{"line_number":292,"context_line":"  distant future the APIs could be removed by returning 410 error."},{"line_number":293,"context_line":"* Rejecting updates to quotas that we were previously able to set would be a"},{"line_number":294,"context_line":"  breaking change in behaviour, and require a microversion. Adding a new API"},{"line_number":295,"context_line":"  microversion that returns BadRequest for unsupported quotas would be a nice"},{"line_number":296,"context_line":"  addition if we were not planning on deprecating the API in favor of calling"},{"line_number":297,"context_line":"  Keystone instead."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_6831100a","line":294,"range":{"start_line":293,"start_character":0,"end_line":294,"end_character":59},"in_reply_to":"3fa7e38b_8dec9ebc","updated":"2020-01-27 12:34:49.000000000","message":"Operators at several summit sessions (myself included) pushed back on the idea of breaking all existing scripts to stop this confusion.\n\nNote, that there is a step 1b here: API returns updated values, showing that the API request didn\u0027t do anything.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":297,"context_line":"  Keystone instead."},{"line_number":298,"context_line":"* Ideally we would also deprecate `/limits` in favor of a cross project"},{"line_number":299,"context_line":"  agreed direction that is aware of both flat and hierarchical limit"},{"line_number":300,"context_line":"  enforcement. Howerver we do not yet have consenus on what direction"},{"line_number":301,"context_line":"  we take. For this spec, we leave `/limits` in its current form, even"},{"line_number":302,"context_line":"  though it does not report on all the types of resource usage we now"},{"line_number":303,"context_line":"  support have limits on, and even though it lists limits that can"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_ade71ad7","line":300,"range":{"start_line":300,"start_character":15,"end_line":300,"end_character":23},"updated":"2020-01-27 10:49:28.000000000","message":"However,","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":297,"context_line":"  Keystone instead."},{"line_number":298,"context_line":"* Ideally we would also deprecate `/limits` in favor of a cross project"},{"line_number":299,"context_line":"  agreed direction that is aware of both flat and hierarchical limit"},{"line_number":300,"context_line":"  enforcement. Howerver we do not yet have consenus on what direction"},{"line_number":301,"context_line":"  we take. For this spec, we leave `/limits` in its current form, even"},{"line_number":302,"context_line":"  though it does not report on all the types of resource usage we now"},{"line_number":303,"context_line":"  support have limits on, and even though it lists limits that can"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4d28e6ec","line":300,"range":{"start_line":300,"start_character":43,"end_line":300,"end_character":51},"updated":"2020-01-27 10:49:28.000000000","message":"consensus","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":301,"context_line":"  we take. For this spec, we leave `/limits` in its current form, even"},{"line_number":302,"context_line":"  though it does not report on all the types of resource usage we now"},{"line_number":303,"context_line":"  support have limits on, and even though it lists limits that can"},{"line_number":304,"context_line":"  now only be changed via the configuration file."},{"line_number":305,"context_line":"* When hierarchical limits are added, the per project usage information"},{"line_number":306,"context_line":"  in `/limits` does not mention anything about parent limits."},{"line_number":307,"context_line":"  As such quota APIs may claim resources are available, but you will be"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_462c79b1","line":304,"updated":"2020-02-10 14:18:05.000000000","message":"*me* nods","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"},{"line_number":340,"context_line":"read from the Nova DB and configuration and generate a file. That file can be"},{"line_number":341,"context_line":"by used with keystone-manage to register the current endpoint defaults in"},{"line_number":342,"context_line":"keystone.::"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"  nova-manage limits generate_registered_limits --endpoint \u003cendpoint-uuid\u003e"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_6d14c29f","line":341,"range":{"start_line":341,"start_character":13,"end_line":341,"end_character":28},"updated":"2020-01-27 10:49:28.000000000","message":"could you give an example (for use in documentation later)?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"There will be a new tool to setup the registered limits in keystone. It will"},{"line_number":340,"context_line":"read from the Nova DB and configuration and generate a file. That file can be"},{"line_number":341,"context_line":"by used with keystone-manage to register the current endpoint defaults in"},{"line_number":342,"context_line":"keystone.::"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"  nova-manage limits generate_registered_limits --endpoint \u003cendpoint-uuid\u003e"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_283798ff","line":341,"range":{"start_line":341,"start_character":13,"end_line":341,"end_character":28},"in_reply_to":"3fa7e38b_6d14c29f","updated":"2020-01-27 12:34:49.000000000","message":"its not yet been implemented, so I didn\u0027t want to add a bad example here.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":341,"context_line":"by used with keystone-manage to register the current endpoint defaults in"},{"line_number":342,"context_line":"keystone.::"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"  nova-manage limits generate_registered_limits --endpoint \u003cendpoint-uuid\u003e"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"The following tool will generate the unified limits overrides (if any)"},{"line_number":347,"context_line":"that needs to be added into Keystone for each project. Again this too"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_ed36724f","line":344,"updated":"2020-01-27 10:49:28.000000000","message":"Any reason we want this to be in \u0027nova-manage\u0027 rather than \u0027nova-status\u0027. Is this something someone will want to run on an e.g. brand new V deployment? If so, could you add that here?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":341,"context_line":"by used with keystone-manage to register the current endpoint defaults in"},{"line_number":342,"context_line":"keystone.::"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"  nova-manage limits generate_registered_limits --endpoint \u003cendpoint-uuid\u003e"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"The following tool will generate the unified limits overrides (if any)"},{"line_number":347,"context_line":"that needs to be added into Keystone for each project. Again this too"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_c80a8425","line":344,"in_reply_to":"3fa7e38b_ed36724f","updated":"2020-01-27 12:34:49.000000000","message":"This tool is about reading out stale data stored in the DB. In a brand new deployement, this should be setup by the same code that registered the nova endpoints in keystone.\n\nIt seemed to fit nova-manage as its related to cleaning up the DB, similar to offline data migrations, but due to the requirements of skip-level stuff and this been cross service (nova-\u003e keystone), we can\u0027t use APIs, hence the nova-manage and keystone manage things.\n\nAs I see it, nova status only returs ok/warn/error, so it probably needs to be updated to warn if the stale quota data hasn\u0027t been deleted in the DB, in the relase before we move to turn this quota method on by default.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":376,"context_line":"This transition leaves several configuration options redundant, in particular"},{"line_number":377,"context_line":"the following will all be deprecated once unified limits is on by default:"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":380,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":381,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":382,"context_line":"* `quota.driver` is ignored and hard coded to the no-op driver when"},{"line_number":383,"context_line":"  `quota.enforce_unified_limits \u003d True`."},{"line_number":384,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_ad15da96","line":381,"range":{"start_line":379,"start_character":0,"end_line":381,"end_character":45},"updated":"2020-01-27 10:49:28.000000000","message":"We can\u0027t remove this because it\u0027s still used while ``quota.enforce_unified_limits \u003d True``, yes?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1bf188ad57979ba75eabb281cab5e7629c3bb073","unresolved":false,"context_lines":[{"line_number":376,"context_line":"This transition leaves several configuration options redundant, in particular"},{"line_number":377,"context_line":"the following will all be deprecated once unified limits is on by default:"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":380,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":381,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":382,"context_line":"* `quota.driver` is ignored and hard coded to the no-op driver when"},{"line_number":383,"context_line":"  `quota.enforce_unified_limits \u003d True`."},{"line_number":384,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_4e853d52","line":381,"range":{"start_line":379,"start_character":0,"end_line":381,"end_character":45},"in_reply_to":"3fa7e38b_6e3d99ba","updated":"2020-01-27 12:44:33.000000000","message":"Oops, I meant we can\u0027t remove because it\u0027s still used while quota.enforce_unified_limits\u003d**False**`` (i.e. we\u0027re using the legacy behavior). Per my reading of this, this was all opt-in _for now_","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":376,"context_line":"This transition leaves several configuration options redundant, in particular"},{"line_number":377,"context_line":"the following will all be deprecated once unified limits is on by default:"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"* `quota.instances`, `quota.cores`, `quota.ram`: deprecate all these as the"},{"line_number":380,"context_line":"  limit now comes from keystone for unified limits, which will default to"},{"line_number":381,"context_line":"  unlimited if there is no limit in keystone."},{"line_number":382,"context_line":"* `quota.driver` is ignored and hard coded to the no-op driver when"},{"line_number":383,"context_line":"  `quota.enforce_unified_limits \u003d True`."},{"line_number":384,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_6e3d99ba","line":381,"range":{"start_line":379,"start_character":0,"end_line":381,"end_character":45},"in_reply_to":"3fa7e38b_ad15da96","updated":"2020-01-27 12:34:49.000000000","message":"No, these are not used at all when you use unified limits. The quota is checked using oslo.limit, and that code knows how to get this info from keystone.\n\nLets cantch up... there is clearly something missing leading you here?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2bef3cdf51d4cb510e93bd67d9d594b2ff55e23","unresolved":false,"context_lines":[{"line_number":404,"context_line":"Data model impact"},{"line_number":405,"context_line":"-----------------"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"See upgrades, no changes in Train due to having old and new quota systems"},{"line_number":408,"context_line":"side by side. Once we remove the old quota system, we could drop all the"},{"line_number":409,"context_line":"quota related DB tables."},{"line_number":410,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_6172ed4c","line":407,"range":{"start_line":407,"start_character":27,"end_line":407,"end_character":34},"updated":"2020-01-20 06:58:12.000000000","message":"In Ussuri I guess.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":404,"context_line":"Data model impact"},{"line_number":405,"context_line":"-----------------"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"See upgrades, no changes in Train due to having old and new quota systems"},{"line_number":408,"context_line":"side by side. Once we remove the old quota system, we could drop all the"},{"line_number":409,"context_line":"quota related DB tables."},{"line_number":410,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_10f8f77b","line":407,"range":{"start_line":407,"start_character":27,"end_line":407,"end_character":34},"in_reply_to":"3fa7e38b_6172ed4c","updated":"2020-01-22 11:28:57.000000000","message":"Oops, yes, can I fix that in a follow up patch.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"382a42409a34c2cf538de0ad88cc1dc81309e435","unresolved":false,"context_lines":[{"line_number":411,"context_line":"REST API impact"},{"line_number":412,"context_line":"---------------"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"When `quota.enforce_unified_limits \u003d True` Nova will proxy the requests"},{"line_number":415,"context_line":"to Keystone\u0027s unified limits API, where possible. The aim will be to keep"},{"line_number":416,"context_line":"horizon functioning correctly during the transition."},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_82f368e8","line":414,"range":{"start_line":414,"start_character":5,"end_line":414,"end_character":42},"updated":"2020-01-20 09:41:17.000000000","message":"When we set this as True, I guess we should check the keystone version, ensure the limit are supported, since unified limit doesn\u0027t introduce at the beginning of keystone v3 API https://docs.openstack.org/api-ref/identity/v3/index.html#what-s-new-in-version-3-10-queens\n\nOr we assume nova always the same version with keystone?\n\nAlso see there are few changes in unified limit API in the recent release, probably those will be handled inside oslo.limit API, and some of the handling are done in quota proxy API.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"439bcc5aa63c7bf51e789dd86f91d73ea196ea0b","unresolved":false,"context_lines":[{"line_number":411,"context_line":"REST API impact"},{"line_number":412,"context_line":"---------------"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"When `quota.enforce_unified_limits \u003d True` Nova will proxy the requests"},{"line_number":415,"context_line":"to Keystone\u0027s unified limits API, where possible. The aim will be to keep"},{"line_number":416,"context_line":"horizon functioning correctly during the transition."},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_8e61f5d6","line":414,"range":{"start_line":414,"start_character":5,"end_line":414,"end_character":42},"in_reply_to":"3fa7e38b_0d7c2ee8","updated":"2020-01-27 12:34:49.000000000","message":"I don\u0027t know how we implement that when none of the APIs are available.\n\nTo be clear, its not a problem for this release, its an issue when we come to make this the default behaviour.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"519c8a94a5ce2f82190f37fa4699524028f42a45","unresolved":false,"context_lines":[{"line_number":411,"context_line":"REST API impact"},{"line_number":412,"context_line":"---------------"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"When `quota.enforce_unified_limits \u003d True` Nova will proxy the requests"},{"line_number":415,"context_line":"to Keystone\u0027s unified limits API, where possible. The aim will be to keep"},{"line_number":416,"context_line":"horizon functioning correctly during the transition."},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_0d7c2ee8","line":414,"range":{"start_line":414,"start_character":5,"end_line":414,"end_character":42},"in_reply_to":"3fa7e38b_102d57fb","updated":"2020-01-27 10:49:28.000000000","message":"This should probably a nova-status check","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e5058e4b29070a27943fd5fcbff0300a4c7741a4","unresolved":false,"context_lines":[{"line_number":411,"context_line":"REST API impact"},{"line_number":412,"context_line":"---------------"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"When `quota.enforce_unified_limits \u003d True` Nova will proxy the requests"},{"line_number":415,"context_line":"to Keystone\u0027s unified limits API, where possible. The aim will be to keep"},{"line_number":416,"context_line":"horizon functioning correctly during the transition."},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_102d57fb","line":414,"range":{"start_line":414,"start_character":5,"end_line":414,"end_character":42},"in_reply_to":"3fa7e38b_82f368e8","updated":"2020-01-22 11:28:57.000000000","message":"Good point. oslo.limit should check keystone is new enough (it doesn\u0027t right now).\n\nThe recent changes are easy to work around in oslo.limit, as I understand it (basically added the option of additional enforcement models).\n\nMind you we only support N-1 releases of most projects, so I don\u0027t see it as a blocker, more a very worthy robustness check.\n\nCan we add this in a follow up patch?","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9323e35b1d159b01e81dde0dd43359b70226f737","unresolved":false,"context_lines":[{"line_number":464,"context_line":"API via Keystone. User should start querying usage from Placement."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The transition between the existing quota system and unified limits is"},{"line_number":467,"context_line":"detailed in the proposed solution section."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"Implementation"},{"line_number":470,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa7e38b_c61f096f","line":467,"updated":"2020-02-10 14:18:05.000000000","message":"that\u0027s probably here that you should summarize the upgrade changes.","commit_id":"91bf2d3d32b3e53be439f9fb56fc8ff1bc7f338c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"47c471d7a6b01f4dfa619842cf2ff5a45ecbd41b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"of servers returned."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"When ``quota.enforce_unified_limits \u003d True`` a best effort will be made to"},{"line_number":291,"context_line":"keep the older micro-versions working by proxing API calls to Keystone and"},{"line_number":292,"context_line":"Placement as needed. No quota related DB tables will be accessed when"},{"line_number":293,"context_line":"``quota.enforce_unified_limits \u003d True``."},{"line_number":294,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa7e38b_e360b036","line":291,"range":{"start_line":291,"start_character":41,"end_line":291,"end_character":48},"updated":"2020-02-13 19:23:26.000000000","message":"proxying","commit_id":"f03efd11a5cda7a288517e1be25310a4fefcb584"}]}
