)]}'
{"specs/keystone/backlog/unified-limits.rst":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":39,"context_line":"What is a limit?"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_249bc773","line":42,"updated":"2017-03-02 21:49:15.000000000","message":"Should service type also be included so that you can filter for all of a service\u0027s limits? It\u0027s implicit in the current scheme, but will be useful once you get to the \"store in keystone\" part.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This could be done with new administrative API calls to keystone to"},{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_e4d0cff8","line":85,"updated":"2017-03-02 21:49:15.000000000","message":"Is the default by project? Meaning that you set a default of 10G for memory and that means that each project can take up 10g, unless as specified below, it\u0027s overridden?","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7600a0731bba9a9a6261fe312d10fac91642ef03","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This could be done with new administrative API calls to keystone to"},{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_6a066987","line":85,"in_reply_to":"ba2be162_0a132d5c","updated":"2017-03-02 22:05:28.000000000","message":"You could only say this default is \u0027project\u0027 or \u0027user\u0027 and that would work.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2bcc87489635730bccdfb7e9609e5583c187b2d4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This could be done with new administrative API calls to keystone to"},{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_0a132d5c","line":85,"in_reply_to":"ba2be162_e4d0cff8","updated":"2017-03-02 21:56:07.000000000","message":"I wouldn\u0027t mind being explicit here. If you give keystone a resource limit, you must specify what you want that resource limit to be applied to.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_e4536f69","line":93,"updated":"2017-03-02 21:49:15.000000000","message":"(nit) an","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical quota would be enforced"},{"line_number":99,"context_line":"before the change is made."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_e43e0f27","line":97,"updated":"2017-03-02 21:49:15.000000000","message":"I\u0027m not sure I understand this sentence.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9377f1953308ad14cc9a6d929f28c6ffcd8f9625","unresolved":false,"context_lines":[{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical quota would be enforced"},{"line_number":99,"context_line":"before the change is made."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_6abe6966","line":97,"in_reply_to":"ba2be162_0a3fad24","updated":"2017-03-02 22:09:15.000000000","message":"Yeah - this is where I think having a dedicated API for services to make adjustments to limits in keystone makes sense. The user would tell the service to make the adjustment, the service determines usage and queries keystone for the current limit, service determines if the limit can be changed based on the utilization and either makes the change or rejects the request.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7600a0731bba9a9a6261fe312d10fac91642ef03","unresolved":false,"context_lines":[{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical quota would be enforced"},{"line_number":99,"context_line":"before the change is made."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_0a3fad24","line":97,"in_reply_to":"ba2be162_4a47e54a","updated":"2017-03-02 22:05:28.000000000","message":"Yeah, keystone wouldn\u0027t have enough information to make a change like that. This would apply to a flat structure as well.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2bcc87489635730bccdfb7e9609e5583c187b2d4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical quota would be enforced"},{"line_number":99,"context_line":"before the change is made."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_4a47e54a","line":97,"in_reply_to":"ba2be162_e43e0f27","updated":"2017-03-02 21:56:07.000000000","message":"I think I read this as, if I have a project that has a limit of 10 \"somethings\" and I want to adjust it to have a limit of 5 \"somethings\", but I have already deployed 7 \"somethings\", my limit update fails. The administrator would have to notify someone to clean things up or do it manually, before being able to adjust the limit. But to me, this seems like a case best addressed by the service, because it also needs to understand usage, which keystone might not know.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":103,"context_line":"   There are a bunch of ways that hierarchical quotas can be"},{"line_number":104,"context_line":"   calculated and enforced. For instance:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"   - can a child limit individually exceed it\u0027s parent - (general"},{"line_number":107,"context_line":"     consensus that this will NOT be allowed in OpenStack at all)"},{"line_number":108,"context_line":"   - can the sum of child limits (though not used resources) exceed"},{"line_number":109,"context_line":"     the parent? - AKA OVERBOOKING"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_447b5bf5","line":106,"updated":"2017-03-02 21:49:15.000000000","message":"(nit) missing ?","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a00fc2fe64ea50b80116469fdbad5e11c2990d2c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"   - can a child limit individually exceed it\u0027s parent - (general"},{"line_number":107,"context_line":"     consensus that this will NOT be allowed in OpenStack at all)"},{"line_number":108,"context_line":"   - can the sum of child limits (though not used resources) exceed"},{"line_number":109,"context_line":"     the parent? - AKA OVERBOOKING"},{"line_number":110,"context_line":"   - in an A -\u003e B -\u003e C relationship, if A has an explicit override"},{"line_number":111,"context_line":"     limit, is that inherited by B \u0026 C, or do they have default"},{"line_number":112,"context_line":"     limits? - AKA INHERITED LIMITS"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_c4fbcbbf","line":109,"updated":"2017-03-02 21:49:10.000000000","message":"I see two distinct cases here.\n\n1.) Allowing overbooking makes validation of the limits a little easier IMO because it\u0027s a little more lose and it might lead to less limit adjusting overall from an operator/deployer point of view. Consider the following structure:\n\n            A (100)\n            |\n        ---------\n        |       |\n        B (100) C (100)\n\nWhere project A has an overall limit of 100 and the combined limit of the children exceed that. The advantage I see of this is that both B and C can fluctuate without having to *pin* their quotas to exact values. Project B might have a usage spike to 80 \"somethings\" while C is only using 10 \"somethings\" and everything still works. Technically the overall quota is within the parent limit.\n\n2.) The opposite case would be to take a more strict stance on limit totals. Using the same structure with different limits:\n\n\n            A (100)\n            |\n        ---------\n        |       |\n        B (50)  C (50)\n\nWhere the limits of the children must *not* exceed the limit of the parent, but they also don\u0027t have to meet it, which would also allow for something like this:\n\n\n            A (100)\n            |\n        ---------\n        |       |\n        B (60)  C (20)\n\nAs administrator, I might be required to tinker with the limits of the children in order to achieve complete utilization within the parent. The validation process may be a bit more involved in keystone since we\u0027ll have to math everything properly so that we don\u0027t create quotas that don\u0027t make sense, but we\u0027ll have to have some of that anyway.\n\nJust wondering which one makes more sense at this point. I think I tend to lean towards the second option because it\u0027s a little more strict and we can always loosen it up later to make things easier for overbooking. Whereas if we come out of the gate with option 1 and not like it, then we might have a harder time wrangling that back in.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":125,"context_line":"your hierarchy. Keystone should be able to implement efficient HTTP"},{"line_number":126,"context_line":"caching for this information."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":129,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Service/Adminstrative users will have this read access for all users."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_04e403aa","line":128,"updated":"2017-03-02 21:49:15.000000000","message":"Is it useful for them to see the actual limits defined in keystone or the amount left as calculated by the service?","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c9df62b443c9be76eed08c3418f592e9906a058","unresolved":false,"context_lines":[{"line_number":126,"context_line":"caching for this information."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":129,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Service/Adminstrative users will have this read access for all users."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_e401af39","line":129,"updated":"2017-03-02 21:49:15.000000000","message":"Parent and siblings is where we start running into trouble. \"What is a user allowed to see in the hierarchy?\", will have to be answered.","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2bcc87489635730bccdfb7e9609e5583c187b2d4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"caching for this information."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":129,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Service/Adminstrative users will have this read access for all users."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba2be162_6ad2e95d","line":129,"in_reply_to":"ba2be162_e401af39","updated":"2017-03-02 21:56:07.000000000","message":"Yeah - this is only going to get more complicated with reseller cases (when we get to that).","commit_id":"1a26d6c92b92ae08335a252e298a2ae428e48a3d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":34,"context_line":"And this is only for a flat project structure. The moment a"},{"line_number":35,"context_line":"hierarchical project structure is introduced, all this has to be done"},{"line_number":36,"context_line":"potentially in the context not only of the current project, but taking"},{"line_number":37,"context_line":"into account limits and usage by ancestors, siblings, and children."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"What is a limit?"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_aabbe4e3","line":37,"updated":"2017-03-03 13:21:35.000000000","message":"The observation that this matches how RBAC works, roles are defined in keystone, enforced in each service/endpoint, might be worth adding. Might not too.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_cb361002","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":20},"updated":"2017-03-06 15:19:15.000000000","message":"This can be treated like scope of limit. For example, there are three possible values: project, user, and default.\nDefault can be useful to avoid limits settings in configuration.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df6b25dd00845271bd915b90847c33b6a4d3f63","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_ec4871ce","line":46,"range":{"start_line":46,"start_character":15,"end_line":46,"end_character":24},"updated":"2017-03-04 23:22:33.000000000","message":"I don\u0027t see a need for endpoint_id. I do see a need for region, though.\n\nIn other words, a limit of VCPU can be varied by user, project and region, but not by nova-api or nova-conductor...","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_0a7f9066","line":47,"range":{"start_line":47,"start_character":13,"end_line":47,"end_character":17},"updated":"2017-03-03 13:21:35.000000000","message":"Class? just to match placement terms","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df6b25dd00845271bd915b90847c33b6a4d3f63","unresolved":false,"context_lines":[{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_6c0ba17d","line":47,"range":{"start_line":47,"start_character":13,"end_line":47,"end_character":17},"in_reply_to":"ba2be162_0a7f9066","updated":"2017-03-04 23:22:33.000000000","message":"Yeah, we\u0027re definitely going to need either a translation map or alignment between the existing quota resource classes and the resource classes in the placement API -- but to date, that\u0027s only Nova resources.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df6b25dd00845271bd915b90847c33b6a4d3f63","unresolved":false,"context_lines":[{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_4c7fbddf","line":48,"updated":"2017-03-04 23:22:33.000000000","message":"This is metadata about a limit, not an attribute of a limit itself. Just sayin\u0027 :)","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_0eccb6b9","line":48,"in_reply_to":"ba2be162_4c7fbddf","updated":"2017-03-06 15:19:15.000000000","message":"+1","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_2e6b3ab8","line":49,"updated":"2017-03-06 15:19:15.000000000","message":"Theoretically, it\u0027s possible situation when you need to define min allowed number. Range maybe?","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":73,"context_line":"authoritative source of project_id and user_id information. It is the"},{"line_number":74,"context_line":"authoritative source of any hierarchical relationship between"},{"line_number":75,"context_line":"projects. It is an authority about API endpoints and regions in a"},{"line_number":76,"context_line":"system."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"So all that is required is to teach keystone, in a generic way, about"},{"line_number":79,"context_line":"what resource types and default limits each endpoint has, and what"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_0a123009","line":76,"updated":"2017-03-03 13:21:35.000000000","message":"There is a real operator use case of wanting a view of limits across the whole system for a given project (or project and user).\n\nHorizon has had to work around the API limitations of that, openstack client is looking at a similar thing.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"},{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_4e878eb4","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":32},"updated":"2017-03-06 15:19:15.000000000","message":"Just want to mention here that in cinder there is concept of dynamic resources depending on DB state. I mean there are limits per volume type which can be added in any time.\nIt looks like \u003cvolume_types\u003e_gigabytes and limit enforcement is done appropriately.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c134d41acab1ced36b0249538d54430c43d1dbcc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"},{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a1ff146_77f2f370","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":32},"in_reply_to":"ba2be162_4e878eb4","updated":"2017-03-16 16:00:14.000000000","message":"I\u0027m trying to understand what that means... does it mean there is no limit, then without any changes made to code in the environment a new limit spawns forth for a type? And if so, what is it\u0027s default value?","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical limits would be enforced"},{"line_number":99,"context_line":"before the change is made. We want to guarantee that the hierarchical"},{"line_number":100,"context_line":"limits structure is consistent at all times."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Common behavior between projects"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_0ae070f9","line":100,"range":{"start_line":99,"start_character":27,"end_line":100,"end_character":44},"updated":"2017-03-03 13:21:35.000000000","message":"This is more a usability thing, to make sure operators (and users) don\u0027t get confused.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":108,"context_line":"and constraints about what project hierarchies can modify."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Along with this work we are probably going to need a quota check"},{"line_number":111,"context_line":"library, that may have multiple back ends, that allows you to enforce"},{"line_number":112,"context_line":"a consistent behavior across your cloud."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"At a high level, this would allow for:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_0a9cf05b","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":41},"updated":"2017-03-03 13:21:35.000000000","message":"I was thinking of:\n\n* service provides a callback to could each type of registered resource_class\n* keystone provides a way to look up the limits for a given context\n* server passes a structure for the proposed additional resource quota a request wants to consume, which defaults to no additional resources","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_6a9d6c65","line":117,"range":{"start_line":116,"start_character":0,"end_line":117,"end_character":56},"updated":"2017-03-03 13:21:35.000000000","message":"Surely this is just inside keystone, and not required in each service?","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5e9692a4d77e27bd7fdd4578da359aef8b7ba5ac","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_d7287888","line":117,"in_reply_to":"ba2be162_08c4ca3d","updated":"2017-03-06 11:43:16.000000000","message":"Ok, check_limit_update is *not* checking usage violations, it\u0027s checking limit algorithm violations.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0f6b2afbe11f7ffb52b6ed0acd00683d33713c26","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_e638a9a2","line":117,"in_reply_to":"ba2be162_6a9d6c65","updated":"2017-03-03 17:39:55.000000000","message":"Validate or violate? Also, I would think this is something that has to be in each service because it requires the service to calculate usage.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f3a387c682a595249b360f550003aa03e91c63b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_08c4ca3d","line":117,"in_reply_to":"ba2be162_ad37504b","updated":"2017-03-05 15:29:22.000000000","message":"Sure, I understand the violation in terms of limits. I was referring to the usage violations.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2fc62460b572ae27518203c9f8c6b3d1db697d1b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_052485ad","line":117,"in_reply_to":"ba2be162_d7287888","updated":"2017-03-06 19:23:50.000000000","message":"Ok, that makes more sense. In that case, that seems to be something we could do within keystone. Since I was thinking about usage, I was thinking the service would be a better place for that since usage calculation would be a thing to consider.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"fe84dc925a1a4d4366540f275b2c472e9ea0062a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_ad37504b","line":117,"in_reply_to":"ba2be162_dc4ef839","updated":"2017-03-05 12:20:20.000000000","message":"The validation isn\u0027t against quota, it\u0027s against the rules of the limit system.\n\nIf you have A(100) -\u003e B(50) -\u003e C(30) -\u003e D(10), you can\u0027t drop B to \u003c 30, and if you could, all the algorithms to calculate overlimit are going to need to handle the data structure having these inconsistencies, and be really full of bugs.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df6b25dd00845271bd915b90847c33b6a4d3f63","unresolved":false,"context_lines":[{"line_number":114,"context_line":"At a high level, this would allow for:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"- check_limit_update(current_project_limit_hierarchy,"},{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_dc4ef839","line":117,"in_reply_to":"ba2be162_e638a9a2","updated":"2017-03-04 23:22:33.000000000","message":"Not necessarily. I would think it would be perfectly fine for an administrator to reduce a tenant\u0027s quota, regardless of whether the resulting limit would be less than the current usage. The end result is the tenant would be over quota, which would mean the tenant wouldn\u0027t be able to launch anything new, but wouldn\u0027t prevent the quota limit from being reduced.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":117,"context_line":"  proposed_change) - ensures it does not validate policy"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"- check_over_quota(current_project_limit_hierarchy,"},{"line_number":120,"context_line":"  current_quota_usage_hierarchy, proposed_change) - ensures it does"},{"line_number":121,"context_line":"  not validate quota rules."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_aa2cc402","line":120,"updated":"2017-03-03 13:21:35.000000000","message":"I had assumed:\n  \n  def instance_count(context, scope\u003dNone):\n      # scope is [{\"project_id\": A}, {\"project_id\":B}]\n      # or [{\"project_id\":A, \"user_id\":X}]\n      ...\n\n\n  quota_lib.register_resource_type([\"vcpu\",\"ram\"], instance_count)\n\nAnd in API code:\n\n    check_over_quota(context, delta\u003d{\"vcpu: 1, ... })\n    instance \u003d create_instance_so_its_in_the_count()\n    try:\n        check_over_quota(context, delta\u003d{\"vcpu: 1, ... })\n    except OverQuota:\n        instance.delete()\n        raise\n\nNote the need to check the quota twice to avoid races when doing this optimistic concurrency idea. I think you mentioned that earlier actually.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df6b25dd00845271bd915b90847c33b6a4d3f63","unresolved":false,"context_lines":[{"line_number":131,"context_line":"caching for this information."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":134,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Service/Administrative users will have this read access for all users."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_1c55f0c4","line":134,"updated":"2017-03-04 23:22:33.000000000","message":"I disagree here. Regular users should only know their own limits (user and project). Only project administrators should be able to see child project limits and limits of users in those child projects.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c134d41acab1ced36b0249538d54430c43d1dbcc","unresolved":false,"context_lines":[{"line_number":131,"context_line":"caching for this information."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":134,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Service/Administrative users will have this read access for all users."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_834cfe77","line":134,"in_reply_to":"ba2be162_05800546","updated":"2017-03-16 16:00:14.000000000","message":"@jay, I disagree. If part of OpenStack is being self service, a user in a project should always have enough information to figure out why the project is over a limit. It does mean that going to hierarchy models includes some level of information sharing in a hierarchy. \n\nIf a deployment doesn\u0027t want that, it\u0027s really easy to top root projects with dedicated limits, which means they act flat and only have visibility to their own limits. Basically it becomes a trade off of the flexibility of hierarchy for pushing self service down, vs. the isolation of making everyone have a dedicated pool.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2fc62460b572ae27518203c9f8c6b3d1db697d1b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"caching for this information."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Regular users should be able to see their current project limits, as"},{"line_number":134,"context_line":"well as all child limits, and potentially ancestors (??)."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Service/Administrative users will have this read access for all users."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_05800546","line":134,"in_reply_to":"ba2be162_1c55f0c4","updated":"2017-03-06 19:23:50.000000000","message":"This is eventually going to be harder and harder to think about with reseller use cases [0]. Depending on the model we go with, I\u0027d be in favor of only letting users see exactly what they need to and open it up later iff we think it\u0027s appropriate (this would also be an interesting question for operators to weigh in on once this is out in the wild).\n\n[0] http://specs.openstack.org/openstack/keystone-specs/specs/keystone/mitaka/reseller.html","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":156,"context_line":"  - plumb unified limits support to one or more service projects (Nova"},{"line_number":157,"context_line":"    stepping up). Start using by default, including API cutover (lots"},{"line_number":158,"context_line":"    of bugs are going to fall out of this, we should consider it a"},{"line_number":159,"context_line":"    whole cycle)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"- Revelstoke"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_e924bc60","line":159,"updated":"2017-03-06 15:19:15.000000000","message":"I like this plan. Should service i.e. nova provide some inner API (not RPC) so os-quotas can get usages to make limits enforcement? Or possibly, os-quotas can provide some requirements for getting usages, like:\nos_quotas.register_get_usages_function(...).","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2fc62460b572ae27518203c9f8c6b3d1db697d1b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"  - plumb unified limits support to one or more service projects (Nova"},{"line_number":157,"context_line":"    stepping up). Start using by default, including API cutover (lots"},{"line_number":158,"context_line":"    of bugs are going to fall out of this, we should consider it a"},{"line_number":159,"context_line":"    whole cycle)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"- Revelstoke"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_a52ad92d","line":159,"in_reply_to":"ba2be162_e924bc60","updated":"2017-03-06 19:23:50.000000000","message":"Based on the comments from Jay and Sean earlier, there might not be  much of a need for quota *usage* when setting limits. It sounds like the validation of the limit is subject to the algorithm rules (especially considering HMT), which is something we should be able to accomplish in keystone since we *should* know all the pieces of information required to make that decision.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9d2e181e47ba35bce50198c9dc01c7a1cbc6bc32","unresolved":false,"context_lines":[{"line_number":161,"context_line":"- Revelstoke"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  - Convert rest of service projects to new limits model."},{"line_number":164,"context_line":"  - implement overbooking algorithm in os-quotas lib as experimental."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_6a756cf8","line":164,"updated":"2017-03-03 13:21:35.000000000","message":"Oh, so no overbooking to start with. I assume that means we implement the way where there is only ever *one count* thats needed when checking resources.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"9123881e23254977c62a121954c2fa6ca50ddb45","unresolved":false,"context_lines":[{"line_number":161,"context_line":"- Revelstoke"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  - Convert rest of service projects to new limits model."},{"line_number":164,"context_line":"  - implement overbooking algorithm in os-quotas lib as experimental."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_8572910f","line":164,"in_reply_to":"ba2be162_6a756cf8","updated":"2017-03-03 13:50:37.000000000","message":"Even without overbooking, I don\u0027t think that is true.","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"cdce1162bee40c653420e1b5686bdd5f8c96ca03","unresolved":false,"context_lines":[{"line_number":161,"context_line":"- Revelstoke"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  - Convert rest of service projects to new limits model."},{"line_number":164,"context_line":"  - implement overbooking algorithm in os-quotas lib as experimental."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_e9dbdc4c","line":164,"in_reply_to":"ba2be162_8572910f","updated":"2017-03-06 15:19:15.000000000","message":"Long way to overbooking )","commit_id":"22b93b620ee93e0b11cd4a344e16470206ed7749"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4a6f54884b6cc2f1b5e4503dac62f491ae299a4c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Users in projects can fix this for themselves by bringing down the"},{"line_number":131,"context_line":"project usage to where there is now headroom. If they don\u0027t, at some"},{"line_number":132,"context_line":"point the administrators can more aggressively delete things"},{"line_number":133,"context_line":"themselves."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Common behavior between projects"},{"line_number":136,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a1ced50_266518e1","line":133,"updated":"2017-03-16 16:27:45.000000000","message":"This feels like the right thing to do. Decoupling the limit from the quota has some nice flexibility here. In this case, since it lives in keystone, having keystone supply that information to the project when it needs to makes sense (we have a similar model for supplying authorization information to projects).","commit_id":"f09fe3331a961096cd46708c21cdfa9bb9120dc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4a6f54884b6cc2f1b5e4503dac62f491ae299a4c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"existing hierarchy is valid, as well as a resource allocation does not"},{"line_number":146,"context_line":"exceed quota. While valid limit checking will be in keystone only, and"},{"line_number":147,"context_line":"quota checking in projects only, having the same algorithms in common"},{"line_number":148,"context_line":"code will ensure that limit changes for `Garbutt Model` are consistent"},{"line_number":149,"context_line":"with quota changes for `Garbutt Model`."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The exact interfaces will need to be hammered out as this gets"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a1ced50_66bb900f","line":148,"updated":"2017-03-16 16:27:45.000000000","message":"This limit check will be enforced through the project via a library, right? Similar to how projects employ oslo.policy as the policy decision/enforcement point.","commit_id":"f09fe3331a961096cd46708c21cdfa9bb9120dc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4a6f54884b6cc2f1b5e4503dac62f491ae299a4c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"This information will be fetched whenever a quota calculation is"},{"line_number":174,"context_line":"needed. The service enforcing quotas should always assume it\u0027s calling"},{"line_number":175,"context_line":"keystone to fetch the limit every time, even if this just turns into a"},{"line_number":176,"context_line":"fast 304 HTTP NOT MODIFIED from keyston."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Concrete path forward"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a1ced50_c625245d","line":176,"updated":"2017-03-16 16:27:45.000000000","message":"keystone*\n\nAgain, this is super similar to the authorization model we have today where the token is validated against keystone (but services have the ability to cache token responses using keystonemiddleware).","commit_id":"f09fe3331a961096cd46708c21cdfa9bb9120dc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"71e4d4b8ffc32abf2a05622b8c3877b4326cc0dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":3,"context_line":" License."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_2d04e3be","line":1,"updated":"2017-03-17 21:02:20.000000000","message":"I wonder if we should propose this to `ongoing` instead of `backlog`, especially if we are going to follow up this spec with more detailed specs the define the limits API, the os-quota library, etc... (some of which might land in different releases).","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":18,"context_line":"- provides a REST API for changing those, and implements a CLI to do"},{"line_number":19,"context_line":"  the same."},{"line_number":20,"context_line":"- Ensure that projects / users limits stored are for valid projects /"},{"line_number":21,"context_line":"  users (often not actually done)"},{"line_number":22,"context_line":"- Clean up orphaned data for projects / users that are deleted (often"},{"line_number":23,"context_line":"  not actually done)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_a41718a4","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":33},"updated":"2017-03-30 16:19:48.000000000","message":"nit: we should provide a reference to https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/validate-project-with-keystone.html for further reading into this issue. That could be added in a follow up change though.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  the same."},{"line_number":20,"context_line":"- Ensure that projects / users limits stored are for valid projects /"},{"line_number":21,"context_line":"  users (often not actually done)"},{"line_number":22,"context_line":"- Clean up orphaned data for projects / users that are deleted (often"},{"line_number":23,"context_line":"  not actually done)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"That\u0027s just on the definition of limits side. Once limits are"},{"line_number":26,"context_line":"defined."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_a465d847","line":23,"range":{"start_line":22,"start_character":63,"end_line":23,"end_character":20},"updated":"2017-03-30 16:19:48.000000000","message":"nit: similar, reference long-standing bug https://bugs.launchpad.net/keystone/+bug/967832","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":28,"context_line":"- Count resources that are allocated."},{"line_number":29,"context_line":"- Enforce that allocated resources don\u0027t exceed limits in the system."},{"line_number":30,"context_line":"- Ensure that when allocating a collection of resources, requests that"},{"line_number":31,"context_line":"  fail half way through due to going over limit, rollback, and do not"},{"line_number":32,"context_line":"  leave garbage laying around."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"And this is only for a flat project structure. The moment a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_64bb5072","line":31,"range":{"start_line":31,"start_character":42,"end_line":31,"end_character":58},"updated":"2017-03-30 16:19:48.000000000","message":"suggest: \"requests that fail half way through due to going over limit are rolled back and do not leave garbage lying around.\"","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ac6a9caf3a1f3549f8b9617ad76a55d3acf0f487","unresolved":false,"context_lines":[{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_8c8230ff","line":45,"updated":"2017-03-18 11:17:58.000000000","message":"I do actually wonder if we want to actually completely dismiss user limits as a thing. In most cases user limits are really used to create 2 level hierachical limits in our current model. Life is much easier if it\u0027s just projects.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":136,"name":"Tim Bell","email":"tim.bell@cern.ch","username":"tim-bell"},"change_message_id":"48ea91c25e5a638466b25f2987948b3e9ae32b74","unresolved":false,"context_lines":[{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_e7c73f43","line":45,"in_reply_to":"1a1ced50_8c8230ff","updated":"2017-03-18 15:20:16.000000000","message":"The CERN use case for user_id quota would go away if we had nested quota. The only impact I would see is if there was no user_id field, we could not migrate the user quota automatically so we\u0027d need to allow a period of deprecation (however, people have been warned in the past)","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_42378e4e","line":45,"in_reply_to":"1a1ced50_e7c73f43","updated":"2017-03-28 14:26:43.000000000","message":"Glance has a configuration option, owner_is_tenant, which in the non-default setting (False) makes the user who created an image its owner.  (I don\u0027t know the history behind why we have this feature.)  I have an operators\u0027 survey in progress (ends 31 March) to get a sense of whether anyone uses the non-default setting and if so, what their use case is.  It\u0027s been our most popular survey so far (don\u0027t get excited, it\u0027s only 12 responses), and so far no one deploys with owner_is_tenant\u003dFalse (mostly because most of the other services don\u0027t provide that level of isolation).  One respondent did say, however, that he\u0027s currently building a dev cloud and is thinking of using the non-default setting because they\u0027ll have a small number of projects but a large number of users, and owner_is_tenant\u003dFalse would give them a way for each user to keep their images isolated.  So in a cloud set up that way, it could be useful to have user limits (though as you point out, you could get around this by putting each user in their own project and making the current project the parent).\n\nI just want to point this out as something to think about while deciding whether we should completely dismiss user limits as a thing.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":136,"name":"Tim Bell","email":"tim.bell@cern.ch","username":"tim-bell"},"change_message_id":"3af858044e9c2b78a593fc53745bbbc94bc9178b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"A limit is the following information:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_a4fc1fb5","line":45,"in_reply_to":"ffe62b97_42378e4e","updated":"2017-03-28 15:59:29.000000000","message":"Just for the record, at CERN, we have moved away from depending on user_id, so no longer need it. Nested projects is a much more clean way of doing it for the future.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":11819,"name":"Chaoyi Huang","email":"joehuang@huawei.com","username":"joehuang"},"change_message_id":"ec41d83d2e1b7834a079d1de62d4b9c1b7e4c79a","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_ead37a36","line":46,"range":{"start_line":46,"start_character":37,"end_line":46,"end_character":43},"updated":"2017-03-20 00:35:08.000000000","message":"In multi-region deployments, keystone may deployed in two ways:\n\n1. centralized: then all quota enforcement should be done in the centralized keystone, all these interaction is cross region traffic, and degrade local region API reaction speed.\n\n2. each region deployed with distributed keystone, the token validation will be done in local region. Then if we want to process quota control locally, the write operation is required to be done in local keystone database. To deploy a multi-master database cluster to support multi-write will be a great challenge as regions number growing up. \n\nSo far I think to put quota control in KeyStone may work for single region, but in multi-region deployments, this may be a challenge, does this proposal want to support multi-region scenario?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"71e4d4b8ffc32abf2a05622b8c3877b4326cc0dc","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_edce4b82","line":46,"updated":"2017-03-17 21:02:20.000000000","message":"is this suppose to be endpoint_id or service_id/type? I would think enforcing quota on nova would include creating a limit for the compute service, not each endpoint (unless I\u0027m misunderstanding something).","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":11819,"name":"Chaoyi Huang","email":"joehuang@huawei.com","username":"joehuang"},"change_message_id":"2fecb20763efddc44b3d0e4388cbb6fffa9f511a","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_c569edfa","line":46,"in_reply_to":"1a1ced50_23df216a","updated":"2017-03-22 02:41:50.000000000","message":"If only limits, it sounds better. From the spec here, no usage data will be stored in KeyStone, does it mean that the usage has to be retrieved from multi-region services and calculated by the openstackclient or other API consumer?\n\nAnother question is about quota re-balance among multi-region services. When RegionOne Nova calculate whether the project has left quota or not, how does RegionOne Nova know how much quota was occupied in other regions for example RegionTwo Nova?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"dc659eba60a95f0dacacc8db943c8e15394b2bfa","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_16b9532e","line":46,"in_reply_to":"1a1ced50_c569edfa","updated":"2017-03-22 19:55:34.000000000","message":"It does not, quotas are dedicated per region today. The quota calculation can only be evaluated by the service that actually owns the resources in question.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3816764fa2f3e45ac3c570acd4ac49c92ff1b060","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_23df216a","line":46,"in_reply_to":"1a1ced50_ead37a36","updated":"2017-03-21 22:08:45.000000000","message":"keystone will not be enforcing quota for services. It would be up to them to enforce. keystone is just holding the data that shows the theoretical limits. The service is still responsible for taking that and using usage data to check if an operation is allowed.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ac6a9caf3a1f3549f8b9617ad76a55d3acf0f487","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- project_id"},{"line_number":45,"context_line":"- user_id (optional)"},{"line_number":46,"context_line":"- endpoint_id (api server / possibly region)"},{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_2c74dc33","line":46,"in_reply_to":"1a1ced50_edce4b82","updated":"2017-03-18 11:17:58.000000000","message":"In rethinking this I think this is probably actually: service type \u0026 region, so.\n\n(project_foo, compute, region1, vcpus, 10)","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":136,"name":"Tim Bell","email":"tim.bell@cern.ch","username":"tim-bell"},"change_message_id":"f0cf4e0b7445f007962a0503d2657dd78a4db16b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"},{"line_number":53,"context_line":"about the notion of hierarchical quotas, because if data is stored in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_038d4f31","line":50,"updated":"2017-03-17 10:58:47.000000000","message":"There are some cases where we have a quota on a cinder volume type (e.g. you can have 10 slow volumes and 5 fast ones). I think this is implemented using the volume type as a prefix but it may be better to have a 2nd column. per-Flavor quotas could also potentially use this in future.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"},{"line_number":53,"context_line":"about the notion of hierarchical quotas, because if data is stored in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_c73ee2b7","line":50,"in_reply_to":"1a1ced50_038d4f31","updated":"2017-03-17 11:46:39.000000000","message":"I think that rolls into the resource type, but we could call that out here.\n\nIn a similar way Nova is looking at baremetal servers vs VM servers having different quota. I think per flavor can be done in a similar way.\n\nHmm, maybe a sub resource type makes some sense here after all, that would be messy. Tempting to leave that for the future though, while we get the basics established.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":136,"name":"Tim Bell","email":"tim.bell@cern.ch","username":"tim-bell"},"change_message_id":"47301a676206d3d53468de52406d24a12b482211","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"},{"line_number":53,"context_line":"about the notion of hierarchical quotas, because if data is stored in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_f1929d56","line":50,"in_reply_to":"1a1ced50_c73ee2b7","updated":"2017-03-18 08:38:40.000000000","message":"I was thinking that since the client code will have to change anyway, it gives an opportunity to clean up the current rather messy approach where subresource type quotas were sort of patched in.\n\nHowever, feel free to chose what you prefer","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"30e4f6e538207c259a2d5595f5a684e0efed2494","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"},{"line_number":53,"context_line":"about the notion of hierarchical quotas, because if data is stored in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_0732eaa7","line":50,"in_reply_to":"1a1ced50_f1929d56","updated":"2017-03-27 15:17:42.000000000","message":"Volume type quotas are a concern for me, but if I understand John\u0027s thinking right, we should be able to still accommodate that.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"69f683ec83eebacc0142ea8631aa88e0b4897991","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- a resource type (e.g. ram_mb, vcpus, security-groups)"},{"line_number":48,"context_line":"- a default max allowed number of those resources"},{"line_number":49,"context_line":"- the project/user specific max allowed number of those resources"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"This information has to be accurate and consistent in order for any"},{"line_number":52,"context_line":"quota calculations to be valid. This is even more true if we talk"},{"line_number":53,"context_line":"about the notion of hierarchical quotas, because if data is stored in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_c8748301","line":50,"in_reply_to":"ffe62b97_0732eaa7","updated":"2017-03-30 09:26:30.000000000","message":"We have a use case in Neutron that we never managed to solve with our quota engine. It\u0027s not a super high priority but it\u0027s something that might be worth thinking about.\n\nRight now operators can create subnetpools, which usually belong to IP address constrained networks so they are a valuable resource. They can then share these so regular users can create a subnet and just say they want a subnet from the shared subnetpool.\n\nThe issue we have is that the only quota we can use to limit tenants from consuming every IP from the subnetpool is the \u0027subnets\u0027 limit, which controls how many subnets they can create. It doesn\u0027t really work well because normally subnets basically cost nothing when tenants are creating private networks. The only time they become \u0027expensive\u0027 is when they consume a subnet from a public subnetpool.\n\nSo we essentially need a way to limit tenants use of specific subnetpools. We could conceivably hack the resource-type to be something like the subnetpool UUID, but that is going to be pretty hideous when people look at this API.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":54,"context_line":"limits that violates some basic constraint of the system (for"},{"line_number":55,"context_line":"instance, project A has child project B, and child B vcpu quota is \u003e A"},{"line_number":56,"context_line":"vcpu quota), then all the logic to sensibly calculate usage and quotas"},{"line_number":57,"context_line":"at the service will be buggy and hugely more complex."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Where should this be?"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_c79342a2","line":57,"range":{"start_line":57,"start_character":45,"end_line":57,"end_character":52},"updated":"2017-03-17 11:46:39.000000000","message":"To be honest, I think its more confusing to debug problems. But I guess you cover that here.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":67,"context_line":"accepted unvalidated over the API, and may or may not be valid"},{"line_number":68,"context_line":"projects or users. This gets so wildly complicated for the"},{"line_number":69,"context_line":"hierarchical case, the Nova team has been really reluctant to bite off"},{"line_number":70,"context_line":"that logic."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"An alternative approach is to move this into keystone. Keystone is the"},{"line_number":73,"context_line":"authoritative source of project_id and user_id information. It is the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_a720064b","line":70,"updated":"2017-03-17 11:46:39.000000000","message":"Honestly, for me, it was more worried we get the existing quota code working and simplified first (that work is open in one of my tabs right now). But thats probably out of scope for here, but wanted to be clear on what my personal close to -2 ness was coming from.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":67,"context_line":"accepted unvalidated over the API, and may or may not be valid"},{"line_number":68,"context_line":"projects or users. This gets so wildly complicated for the"},{"line_number":69,"context_line":"hierarchical case, the Nova team has been really reluctant to bite off"},{"line_number":70,"context_line":"that logic."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"An alternative approach is to move this into keystone. Keystone is the"},{"line_number":73,"context_line":"authoritative source of project_id and user_id information. It is the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_df5e6911","line":70,"in_reply_to":"1a1ced50_a720064b","updated":"2017-03-30 16:19:48.000000000","message":"I think that\u0027s what Sean is saying here. I was going to comment on the \"bite off that logic\" wording. I think what this means to say is Nova has been reluctant to implement hierarchical quotas support on top of the existing complicated quota system we have today, so we have deferred making hierarchical quotas a priority until we fix some of the existing issues, e.g.:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/pike/approved/validate-project-with-keystone.html\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cells-count-resources-to-check-quota-in-api.html\n\nI would reword this a bit to avoid confusion and also provide those references for context, but that can be done in a follow up change.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"736ea3754055888435055c8030860ae9798697b3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"An alternative approach is to move this into keystone. Keystone is the"},{"line_number":73,"context_line":"authoritative source of project_id and user_id information. It is the"},{"line_number":74,"context_line":"authoritative source of any hierarchical relationship between"},{"line_number":75,"context_line":"projects. It is an authority about API endpoints and regions in a"},{"line_number":76,"context_line":"system."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"So all that is required is to teach keystone, in a generic way, about"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_b9a801db","line":75,"updated":"2017-03-27 18:23:01.000000000","message":"nit: API endpoints, services, and regions in a system.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This could be done with new administrative API calls to keystone to"},{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_3f49d531","line":85,"updated":"2017-03-30 16:19:48.000000000","message":"Personally I can always benefit from an example, so \"A facility to CRUD a resource type, and default limit, and associated service. For example, compute service instances resource with a default limit of 10.\"","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"71e4d4b8ffc32abf2a05622b8c3877b4326cc0dc","unresolved":false,"context_lines":[{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"},{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_0df6478f","line":86,"updated":"2017-03-17 21:02:20.000000000","message":"s/endpoint/service/ ?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"},{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_7d535718","line":86,"in_reply_to":"1a1ced50_0df6478f","updated":"2017-03-28 14:26:43.000000000","message":"Agree with Lance, I think you want service and region instead of endpoint here.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"736ea3754055888435055c8030860ae9798697b3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"set these."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"},{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_ff31c60c","line":86,"in_reply_to":"1a1ced50_0df6478f","updated":"2017-03-27 18:23:01.000000000","message":"The addition of this API and the direction of the current proposal is going to make interacting with this API a requirement for operators/deployers (just like creating services or registering an endpoint) when standing up a new cloud/service. \n\nHow much of that detail do we want to include here if any?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":86,"context_line":"  associated endpoint."},{"line_number":87,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":88,"context_line":"  resource type. This would be strongly validated on existing"},{"line_number":89,"context_line":"  endpoint, project/user, preregistered resource type, and limit being"},{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_fdcd2785","line":89,"range":{"start_line":89,"start_character":2,"end_line":89,"end_character":10},"updated":"2017-03-28 14:26:43.000000000","message":"I think this is another place where s/service, region/endpoint/","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_bfd16532","line":93,"range":{"start_line":93,"start_character":25,"end_line":93,"end_character":32},"updated":"2017-03-30 16:19:48.000000000","message":"I\u0027m sure we could bikeshed on upgrade automation for this all day, and maybe some of that has already happened in earlier revisions of this spec, so I won\u0027t try to ask about it, but I\u0027m obviously thinking about it.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"ed2084c5f9c87401b7e57317dfea41708aa46a2a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_7839cea3","line":93,"range":{"start_line":93,"start_character":41,"end_line":93,"end_character":44},"updated":"2017-03-21 17:39:51.000000000","message":"an?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  an integer."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"It is assumed that resource type default definition would happen"},{"line_number":93,"context_line":"during service install / upgrade through and administrative command in"},{"line_number":94,"context_line":"a similar way to how services and endpoints are defined before"},{"line_number":95,"context_line":"services get used."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_9f6341b2","line":93,"range":{"start_line":93,"start_character":41,"end_line":93,"end_character":44},"in_reply_to":"1a1ced50_7839cea3","updated":"2017-03-30 16:19:48.000000000","message":"Yes.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":97,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":98,"context_line":"override, the rules for the hierarchical limits would be enforced"},{"line_number":99,"context_line":"before the change is made. We want to guarantee that the hierarchical"},{"line_number":100,"context_line":"limits structure is consistent at all times."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Limits vs. Quotas"},{"line_number":103,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_c7c7c243","line":100,"updated":"2017-03-17 11:46:39.000000000","message":"I think the key value here is to help operators and users better understand why they see quota issues.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":103,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_87eceac8","line":106,"updated":"2017-03-17 11:46:39.000000000","message":"Compare this to setting roles and policy?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"71e4d4b8ffc32abf2a05622b8c3877b4326cc0dc","unresolved":false,"context_lines":[{"line_number":103,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_cd46ef22","line":106,"in_reply_to":"1a1ced50_87eceac8","updated":"2017-03-17 21:02:20.000000000","message":"Exactly - that pattern pops up a lot through this document.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"},{"line_number":110,"context_line":"the user has allocated. Is this a legal limit."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Quotas in projects check for enforcement against Limits at the time"},{"line_number":113,"context_line":"that a resource allocation is requested. This will be checked against"},{"line_number":114,"context_line":"the current Limits. It means that the following is a possible and"},{"line_number":115,"context_line":"legal flow."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_ea3483df","line":115,"range":{"start_line":108,"start_character":0,"end_line":115,"end_character":11},"updated":"2017-03-17 11:46:39.000000000","message":"Nit: somehow I found this bit a touch hard to read. ln 110 in particular. I am afraid my written english skills don\u0027t allow we to suggest anything better. More a heads up for ideas, incase its not just me that took a while to parse this bit. Only notices as the rest of it is basically beautiful.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"},{"line_number":110,"context_line":"the user has allocated. Is this a legal limit."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Quotas in projects check for enforcement against Limits at the time"},{"line_number":113,"context_line":"that a resource allocation is requested. This will be checked against"},{"line_number":114,"context_line":"the current Limits. It means that the following is a possible and"},{"line_number":115,"context_line":"legal flow."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_e8a8c320","line":115,"range":{"start_line":108,"start_character":0,"end_line":115,"end_character":11},"in_reply_to":"1a1ced50_ea3483df","updated":"2017-03-28 14:26:43.000000000","message":"Maybe something like this:\n\nKeystone maintains Limits.  Keystone\u0027s responsibility is limited to ensuring that any changes to Limits are consistent with related Limits currently stored in Keystone.\n\nIndividual services maintain Quotas. Services check for enforcement against the current Limits at the time a resource allocation is requested by a particular user.  A Quota reflects the actual allocation of units of a particular resource to a consumer.\n\nGiven the above, the following is a possible and legal flow.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"e5325becb250761c683bc9403bf55cd97131a297","unresolved":false,"context_lines":[{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"},{"line_number":110,"context_line":"the user has allocated. Is this a legal limit."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Quotas in projects check for enforcement against Limits at the time"},{"line_number":113,"context_line":"that a resource allocation is requested. This will be checked against"},{"line_number":114,"context_line":"the current Limits. It means that the following is a possible and"},{"line_number":115,"context_line":"legal flow."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_e5307aeb","line":115,"range":{"start_line":108,"start_character":0,"end_line":115,"end_character":11},"in_reply_to":"ffe62b97_3f93155f","updated":"2017-03-30 16:25:59.000000000","message":"ack","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":105,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":106,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Limits in Keystone will mean that changes to Limits will be checked"},{"line_number":109,"context_line":"only against other Limits, regardless of the amount of the resource"},{"line_number":110,"context_line":"the user has allocated. Is this a legal limit."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Quotas in projects check for enforcement against Limits at the time"},{"line_number":113,"context_line":"that a resource allocation is requested. This will be checked against"},{"line_number":114,"context_line":"the current Limits. It means that the following is a possible and"},{"line_number":115,"context_line":"legal flow."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_3f93155f","line":115,"range":{"start_line":108,"start_character":0,"end_line":115,"end_character":11},"in_reply_to":"ffe62b97_e8a8c320","updated":"2017-03-30 16:19:48.000000000","message":"I like Brian\u0027s suggestion.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"ed2084c5f9c87401b7e57317dfea41708aa46a2a","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"},{"line_number":119,"context_line":"* User Jane allocations 18 CPUs in project Baobab"},{"line_number":120,"context_line":"* Administrator Kelly sets Project Baobab CPU limit to 10"},{"line_number":121,"context_line":"* Use Jane can no longer allocate instance resources in project"},{"line_number":122,"context_line":"  Baobab, until she (or others in the project) have deleted at least 9"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_58ffb2a9","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":23},"updated":"2017-03-21 17:39:51.000000000","message":"s/allocations/allocated ?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* User Jane is in project Baobab"},{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"},{"line_number":119,"context_line":"* User Jane allocations 18 CPUs in project Baobab"},{"line_number":120,"context_line":"* Administrator Kelly sets Project Baobab CPU limit to 10"},{"line_number":121,"context_line":"* Use Jane can no longer allocate instance resources in project"},{"line_number":122,"context_line":"  Baobab, until she (or others in the project) have deleted at least 9"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_ff75ad33","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":23},"in_reply_to":"1a1ced50_58ffb2a9","updated":"2017-03-30 16:19:48.000000000","message":"Yes.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"ed2084c5f9c87401b7e57317dfea41708aa46a2a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"* Project Baobab has a default CPU limit of 20"},{"line_number":119,"context_line":"* User Jane allocations 18 CPUs in project Baobab"},{"line_number":120,"context_line":"* Administrator Kelly sets Project Baobab CPU limit to 10"},{"line_number":121,"context_line":"* Use Jane can no longer allocate instance resources in project"},{"line_number":122,"context_line":"  Baobab, until she (or others in the project) have deleted at least 9"},{"line_number":123,"context_line":"  CPUs to get under the new limit"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_980ccaee","line":121,"range":{"start_line":121,"start_character":2,"end_line":121,"end_character":5},"updated":"2017-03-21 17:39:51.000000000","message":"s/Use/User","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Users in projects can fix this for themselves by bringing down the"},{"line_number":131,"context_line":"project usage to where there is now headroom. If they don\u0027t, at some"},{"line_number":132,"context_line":"point the administrators can more aggressively delete things"},{"line_number":133,"context_line":"themselves."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Common behavior between projects"},{"line_number":136,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_07755af8","line":133,"updated":"2017-03-17 11:46:39.000000000","message":"+1 all this.\n\nIs it worth noting many projects current require admins to pass --force to do this today, because the project currently check current resource usage when changing the limits.\n\nWe have a loss of functionality here in the API, but a GUI or CLI can still do that check using both keystone and service APIs, to warn operators about what they are doing.\n\nThats probably too much detail, maybe leave that nonsense out of here. But I am curious what you think.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"4e39b032fb782abedd90f4580f1385c341745f13","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Users in projects can fix this for themselves by bringing down the"},{"line_number":131,"context_line":"project usage to where there is now headroom. If they don\u0027t, at some"},{"line_number":132,"context_line":"point the administrators can more aggressively delete things"},{"line_number":133,"context_line":"themselves."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Common behavior between projects"},{"line_number":136,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_0ac2bf33","line":133,"in_reply_to":"1a1ced50_07755af8","updated":"2017-03-17 11:59:30.000000000","message":"Right, but I think it\u0027s actually the wrong model. Limits are about defining the future state you want to happen, quotas are the current reality. It is the Systems vs. Culture bit that the Zingermanns folks talk about. And I think that it\u0027s ok that this is another instant of being eventually consistent.\n\nThinking of it another way, the adminstrator gets to declare whenever they need to, what the limits are for their systems. And they will converge to that over time.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Users in projects can fix this for themselves by bringing down the"},{"line_number":131,"context_line":"project usage to where there is now headroom. If they don\u0027t, at some"},{"line_number":132,"context_line":"point the administrators can more aggressively delete things"},{"line_number":133,"context_line":"themselves."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Common behavior between projects"},{"line_number":136,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_ff1fedb4","line":133,"in_reply_to":"1a1ced50_0ac2bf33","updated":"2017-03-30 16:19:48.000000000","message":"Is it still worth mentioning the current model just for awareness? I was going to ask what happens today if I have projects with 18 CPU allocated and I change the limit to 10, if I\u0027m allowed to change the limit or if it fails because there are usages over that limit of 10 I\u0027m trying to get to - it sounds like it would fail according to what John is saying.\n\nI\u0027m fine with the future direction, but I like to have context in my head of what we have today. Unless you want to avoid even bringing it up because someone will say \u0027that\u0027s a change in behavior and we can\u0027t ever change the API\u0027, and you want to avoid that conversation or issue, at least in the spec?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":146,"context_line":"exceed quota. While valid limit checking will be in keystone only, and"},{"line_number":147,"context_line":"quota checking in projects only, having the same algorithms in common"},{"line_number":148,"context_line":"code will ensure that limit changes for `Garbutt Model` are consistent"},{"line_number":149,"context_line":"with quota changes for `Garbutt Model`."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The exact interfaces will need to be hammered out as this gets"},{"line_number":152,"context_line":"implemented."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_074c7ac6","line":149,"range":{"start_line":149,"start_character":24,"end_line":149,"end_character":31},"updated":"2017-03-17 11:46:39.000000000","message":"Thats funny. I am sure I stole it from someone.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"4e39b032fb782abedd90f4580f1385c341745f13","unresolved":false,"context_lines":[{"line_number":146,"context_line":"exceed quota. While valid limit checking will be in keystone only, and"},{"line_number":147,"context_line":"quota checking in projects only, having the same algorithms in common"},{"line_number":148,"context_line":"code will ensure that limit changes for `Garbutt Model` are consistent"},{"line_number":149,"context_line":"with quota changes for `Garbutt Model`."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The exact interfaces will need to be hammered out as this gets"},{"line_number":152,"context_line":"implemented."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_eadba319","line":149,"range":{"start_line":149,"start_character":24,"end_line":149,"end_character":31},"in_reply_to":"1a1ced50_074c7ac6","updated":"2017-03-17 11:59:30.000000000","message":"Yeh, I wanted mostly to get into the idea of these things will have names, not attributes, because the algorithms are complex enough that they need names.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with quota changes for `Garbutt Model`."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The exact interfaces will need to be hammered out as this gets"},{"line_number":152,"context_line":"implemented."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Access to limits"},{"line_number":155,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_47367204","line":152,"updated":"2017-03-17 11:46:39.000000000","message":"I seems clear the services need to be told what resource limits are in place for a given resource\u0027s scope (project_id and user_id).\n\nBut mentioning that probably sends us down the rabbit hole you are correctly trying to avoid here.\n\nI say that because I started that sentence with for a given user token, but then realised thats not the correct question here. Doh!","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Limit information should be accessed over a REST API call. This is"},{"line_number":158,"context_line":"potentially *extremely* cachable information. Only explicit updates to"},{"line_number":159,"context_line":"Limits, made via Keystone API, will invalidate this"},{"line_number":160,"context_line":"information. Keystone should be able to implement efficient HTTP"},{"line_number":161,"context_line":"caching for this information."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Users in a project will have visibility to all the project limits, as"},{"line_number":164,"context_line":"well as limits in child projects. Depending on the Quota model used,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_ea728949","line":161,"range":{"start_line":160,"start_character":13,"end_line":161,"end_character":29},"updated":"2017-03-30 16:19:48.000000000","message":"It might be worth noting that we should require etags or generation IDs with resource updates in this API, like we have for resource providers in the Placement API. We don\u0027t want concurrent limits updates trampling on each other.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Users in a project will have visibility to all the project limits, as"},{"line_number":164,"context_line":"well as limits in child projects. Depending on the Quota model used,"},{"line_number":165,"context_line":"they may also have visibility to higher levels of the hierarchy"},{"line_number":166,"context_line":"(especially if their allocations only makes sense in the context of"},{"line_number":167,"context_line":"higher levels of allocations). There should be a principle of self"},{"line_number":168,"context_line":"service here, that users in a project which is over quota should"},{"line_number":169,"context_line":"always be able to figure out why that project is."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_23d12c24","line":166,"range":{"start_line":166,"start_character":38,"end_line":166,"end_character":43},"updated":"2017-03-28 14:26:43.000000000","message":"s/makes/make/","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":173,"context_line":"This information will be fetched whenever a quota calculation is"},{"line_number":174,"context_line":"needed. The service enforcing quotas should always assume it\u0027s calling"},{"line_number":175,"context_line":"keystone to fetch the limit every time, even if this just turns into a"},{"line_number":176,"context_line":"fast 304 HTTP NOT MODIFIED from keystone."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Items beyond scope"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_cadb451f","line":176,"updated":"2017-03-30 16:19:48.000000000","message":"Cool, I guess this ties in the etags concept I mentioned above.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ff23e5e9d72a82934762bc849dfd3745d4ccb60","unresolved":false,"context_lines":[{"line_number":188,"context_line":"While this is a very interesting question, and clearly a future need"},{"line_number":189,"context_line":"around fairness and cluster health, when we talk about limits in the"},{"line_number":190,"context_line":"context of this work we\u0027re only talking about fixed, integer amounts,"},{"line_number":191,"context_line":"of resources."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Concrete path forward"},{"line_number":194,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_87178a50","line":191,"updated":"2017-03-17 11:46:39.000000000","message":"+1 good clarification.\n\nThere are separate (all be it related) concerns.\n\nScheduling vs placement anyone? (ducks).","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f5bc551b9dbc0a75ae1a89c4ccd76ead252b5342","unresolved":false,"context_lines":[{"line_number":201,"context_line":"  - Define keystone get / set limit interfaces (separate spec)"},{"line_number":202,"context_line":"  - Create os-quotas lib with flat and strict account hierarchical"},{"line_number":203,"context_line":"    limits"},{"line_number":204,"context_line":"  - Implement Keystone get / set limit interfaces"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"- Queens"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_439b1065","line":204,"updated":"2017-03-28 14:26:43.000000000","message":"The only thing I see missing here is an explicit decision that Limits will be applied per-project, not per-user.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":206,"context_line":"- Queens"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  - plumb unified limits support to one or more service projects (Nova"},{"line_number":209,"context_line":"    stepping up). Start using by default, including API cutover (lots"},{"line_number":210,"context_line":"    of bugs are going to fall out of this, we should consider it a"},{"line_number":211,"context_line":"    whole cycle)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_0a200df7","line":209,"range":{"start_line":209,"start_character":18,"end_line":209,"end_character":41},"updated":"2017-03-30 16:19:48.000000000","message":"You want to start using this by default in the same release that we add the support, knowing we\u0027re going to introduce a bunch of bugs? Why wouldn\u0027t we phase it in like we did with cells v2 and placement, i.e. those were optional in newton but we had a voting CI job that turned them on and used them, and then in ocata we made those required. I would think we\u0027d do something similar for this - add the support to nova in queens, disable by default, test it in a single job, and then make it required in R. Maybe I\u0027m misunderstanding. I know people want to be aggressive. But doesn\u0027t that also effectively mean we break out n-1 upgrade (or CD support) model by making this the default in queens?","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":222,"context_line":"- Existing Proposed Keystone Spec - https://review.openstack.org/#/c/363765/."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"  This is a lower level specification (with POC code) that includes"},{"line_number":225,"context_line":"  putting the limits information in the Token. Overuse of token is"},{"line_number":226,"context_line":"  quite concerning to a lot of folks, and probably not the path"},{"line_number":227,"context_line":"  forward. This was presented at the Atlanta PTG, and is the spiritual"},{"line_number":228,"context_line":"  basis for the above agreement."},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_eadf29d4","line":226,"range":{"start_line":225,"start_character":47,"end_line":226,"end_character":36},"updated":"2017-03-30 16:19:48.000000000","message":"I would benefit from a short summary of the concerns, but that probably doesn\u0027t fit here, maybe it\u0027s just something for a keystone doc or spec at some point. I\u0027m assuming size, staleness, security, etc are concerns.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"71e4d4b8ffc32abf2a05622b8c3877b4326cc0dc","unresolved":false,"context_lines":[{"line_number":225,"context_line":"  putting the limits information in the Token. Overuse of token is"},{"line_number":226,"context_line":"  quite concerning to a lot of folks, and probably not the path"},{"line_number":227,"context_line":"  forward. This was presented at the Atlanta PTG, and is the spiritual"},{"line_number":228,"context_line":"  basis for the above agreement."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"- Proposed Nova Quotas Spec - https://review.openstack.org/#/c/429678."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a1ced50_0d000734","line":228,"updated":"2017-03-17 21:02:20.000000000","message":"I took a stab at documenting this in a mailing list thread [0]. I\u0027d be happy to continue that discussion there, just advertising it here so that others feel compelled to join in the discussion.\n\n\n[0] http://lists.openstack.org/pipermail/openstack-dev/2017-March/113257.html","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05e6e868c397c927000bf9a8facf39128ad1196","unresolved":false,"context_lines":[{"line_number":230,"context_line":"- Proposed Nova Quotas Spec - https://review.openstack.org/#/c/429678."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"  This is an overview spec that includes a mix of the rationale for"},{"line_number":233,"context_line":"  putting limits in keystone. The use of quota classes. Some examples"},{"line_number":234,"context_line":"  on overbooking."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"- Mailing list thread -"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_8ab65d8a","line":233,"range":{"start_line":233,"start_character":30,"end_line":233,"end_character":55},"updated":"2017-03-30 16:19:48.000000000","message":"Huh? I think we want to kill quota classes:\n\nhttps://review.openstack.org/#/c/411035/\n\nWe said at the PTG we\u0027d abandon that spec because of the idea to put the limits (including defaults, which is the only quota class we support), into Keystone, which is this spec.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"e5325becb250761c683bc9403bf55cd97131a297","unresolved":false,"context_lines":[{"line_number":230,"context_line":"- Proposed Nova Quotas Spec - https://review.openstack.org/#/c/429678."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"  This is an overview spec that includes a mix of the rationale for"},{"line_number":233,"context_line":"  putting limits in keystone. The use of quota classes. Some examples"},{"line_number":234,"context_line":"  on overbooking."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"- Mailing list thread -"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffe62b97_25aae2d1","line":233,"range":{"start_line":233,"start_character":30,"end_line":233,"end_character":55},"in_reply_to":"ffe62b97_8ab65d8a","updated":"2017-03-30 16:25:59.000000000","message":"yeh, this is just referencing things that exist.","commit_id":"87a351af7bd6658d31d38ba5641098af86477424"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The current approach to limits puts all this data at the service level"},{"line_number":69,"context_line":"(i.e. in nova in the API database). The endpoint is known, because"},{"line_number":70,"context_line":"it\u0027s the API server in question. The resource types are enforced"},{"line_number":71,"context_line":"because they are in code. The max allowed is in config. The per"},{"line_number":72,"context_line":"project allowed are in the database, and project_id/user_id are"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_b01766ee","line":69,"range":{"start_line":69,"start_character":40,"end_line":69,"end_character":48},"updated":"2017-03-30 20:06:04.000000000","message":"s/endpoint/service type/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"The current approach to limits puts all this data at the service level"},{"line_number":69,"context_line":"(i.e. in nova in the API database). The endpoint is known, because"},{"line_number":70,"context_line":"it\u0027s the API server in question. The resource types are enforced"},{"line_number":71,"context_line":"because they are in code. The max allowed is in config. The per"},{"line_number":72,"context_line":"project allowed are in the database, and project_id/user_id are"},{"line_number":73,"context_line":"accepted unvalidated over the API, and may or may not be valid"},{"line_number":74,"context_line":"projects or users. This gets so wildly complicated for the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_f0e28e01","line":71,"updated":"2017-03-30 20:06:04.000000000","message":"s/max allowed is/default limits are/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"project allowed are in the database, and project_id/user_id are"},{"line_number":73,"context_line":"accepted unvalidated over the API, and may or may not be valid"},{"line_number":74,"context_line":"projects or users. This gets so wildly complicated for the"},{"line_number":75,"context_line":"hierarchical case. The net effect is that many times, like the Nova"},{"line_number":76,"context_line":"team, have postponed tackling the problem. [#f3]_"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"An alternative approach is to move this into keystone. Keystone is the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_50b5baed","line":75,"range":{"start_line":75,"start_character":47,"end_line":75,"end_character":52},"updated":"2017-03-30 20:06:04.000000000","message":"s/times/teams/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"An alternative approach is to move this into keystone. Keystone is the"},{"line_number":79,"context_line":"authoritative source of project_id and user_id information. It is the"},{"line_number":80,"context_line":"authoritative source of any hierarchical relationship between"},{"line_number":81,"context_line":"projects. It is an authority about API services, api endpoints, and"},{"line_number":82,"context_line":"regions in a system."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"So all that is required is to teach keystone, in a generic way, about"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_90a0e2a7","line":81,"range":{"start_line":81,"start_character":34,"end_line":81,"end_character":62},"updated":"2017-03-30 20:06:04.000000000","message":"s/API services, api endpoints,/service types/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"regions in a system."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"So all that is required is to teach keystone, in a generic way, about"},{"line_number":85,"context_line":"what resource types and default limits each service has (possibly"},{"line_number":86,"context_line":"distinct per region), and what project specific overrides might exist."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This could be done with new administrative API calls to keystone to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_30afd695","line":85,"range":{"start_line":85,"start_character":44,"end_line":85,"end_character":51},"updated":"2017-03-30 20:06:04.000000000","message":"s/service/service type/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":89,"context_line":"set these."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- a facility to CRUD a resource type, and default limit, and"},{"line_number":92,"context_line":"  associated service and region. This creates a strong definition of"},{"line_number":93,"context_line":"  all the allowed limits in a cloud, so that limit overrides can be"},{"line_number":94,"context_line":"  strictly validated (no ability to set the limit on ``disc`` when it"},{"line_number":95,"context_line":"  should have been ``disk``)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_d09d4a67","line":92,"range":{"start_line":92,"start_character":13,"end_line":92,"end_character":20},"updated":"2017-03-30 20:06:04.000000000","message":"/service/service type/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"  associated service and region. This creates a strong definition of"},{"line_number":93,"context_line":"  all the allowed limits in a cloud, so that limit overrides can be"},{"line_number":94,"context_line":"  strictly validated (no ability to set the limit on ``disc`` when it"},{"line_number":95,"context_line":"  should have been ``disk``)"},{"line_number":96,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":97,"context_line":"  resource type. This would be strongly validated on existing service,"},{"line_number":98,"context_line":"  region, project/user, preregistered resource type, and limit being"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_90890228","line":95,"updated":"2017-03-30 20:06:04.000000000","message":"++","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"  strictly validated (no ability to set the limit on ``disc`` when it"},{"line_number":95,"context_line":"  should have been ``disk``)"},{"line_number":96,"context_line":"- a facility to CRUD the limit override for a project / user for a"},{"line_number":97,"context_line":"  resource type. This would be strongly validated on existing service,"},{"line_number":98,"context_line":"  region, project/user, preregistered resource type, and limit being"},{"line_number":99,"context_line":"  an integer."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_3088f61d","line":97,"range":{"start_line":97,"start_character":62,"end_line":97,"end_character":69},"updated":"2017-03-30 20:06:04.000000000","message":"/service/service type/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":106,"context_line":"In the hierarchical case, when creating/updating/deleting a project"},{"line_number":107,"context_line":"override, the rules for the hierarchical limits would be enforced"},{"line_number":108,"context_line":"before the change is made. We want to guarantee that the hierarchical"},{"line_number":109,"context_line":"limits structure is consistent at all times."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Limits vs. Quotas"},{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_f09e0e53","line":109,"updated":"2017-03-30 20:06:04.000000000","message":"++","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":115,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Keystone maintains Limits. Keystone\u0027s responsibility is limited to"},{"line_number":118,"context_line":"ensuring that any changes to Limits are consistent with related Limits"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_f0684e22","line":115,"range":{"start_line":115,"start_character":36,"end_line":115,"end_character":42},"updated":"2017-03-30 20:06:04.000000000","message":"Honestly, a quota is just another term for a limit. Instead of \"Limit vs. Quotas\", I think this section should instead clarify that the scope of responsibility *with respect to limits on resource types* between Keystone and the service that actually doles out some resources is that Keystone is responsible for ensuring consistency of limit amounts among related projects and the resource-providing service\u0027s responsibility is to *enforce* that limit.\n\nI\u0027d actually love to get rid of the dual-use of \"limit\" and \"quota\" entirely and simply use \"limit\" which is obvious and doesn\u0027t require any further definition.\n\nFocus the language here on the \"definition of the limit\" vs the \"enforcement of the limit\".","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"It is important to make a distinction between Limits (what a user is"},{"line_number":115,"context_line":"supposed to be allowed to have) vs. Quotas (enforcing those limits)."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Keystone maintains Limits. Keystone\u0027s responsibility is limited to"},{"line_number":118,"context_line":"ensuring that any changes to Limits are consistent with related Limits"},{"line_number":119,"context_line":"currently stored in Keystone."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_70e1ded0","line":117,"range":{"start_line":117,"start_character":56,"end_line":117,"end_character":63},"updated":"2017-03-30 20:06:04.000000000","message":"I\u0027d just say \"Keystone\u0027s responsibility is to ensure that...\".","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":118,"context_line":"ensuring that any changes to Limits are consistent with related Limits"},{"line_number":119,"context_line":"currently stored in Keystone."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Individual services maintain Quotas. Services check for enforcement"},{"line_number":122,"context_line":"against the current Limits at the time a resource allocation is"},{"line_number":123,"context_line":"requested by a particular user. A Quota reflects the actual"},{"line_number":124,"context_line":"allocation of units of a particular resource to a consumer."},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_50d01aca","line":122,"range":{"start_line":121,"start_character":0,"end_line":122,"end_character":26},"updated":"2017-03-30 20:06:04.000000000","message":"recommend removing the word Quota and simplifying the above to just \"Individual services enforce the limits provided to them by Keystone.\"","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f32f534249a33044dca681bf4cd6b5f61bf135a9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"currently stored in Keystone."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Individual services maintain Quotas. Services check for enforcement"},{"line_number":122,"context_line":"against the current Limits at the time a resource allocation is"},{"line_number":123,"context_line":"requested by a particular user. A Quota reflects the actual"},{"line_number":124,"context_line":"allocation of units of a particular resource to a consumer."},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_a6eeeb85","line":122,"in_reply_to":"dfeb2761_50d01aca","updated":"2017-03-31 16:18:10.000000000","message":"The comments made in this section lead me to think Quotas is just another term for \"allocation\". As you said, the concept/goal of a Limit is relatively easy to understand when isolated by itself.","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Individual services maintain Quotas. Services check for enforcement"},{"line_number":122,"context_line":"against the current Limits at the time a resource allocation is"},{"line_number":123,"context_line":"requested by a particular user. A Quota reflects the actual"},{"line_number":124,"context_line":"allocation of units of a particular resource to a consumer."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Given the above, the following is a possible and legal flow."},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_70679e27","line":124,"range":{"start_line":123,"start_character":32,"end_line":124,"end_character":19},"updated":"2017-03-30 20:06:04.000000000","message":"A Quota doesn\u0027t reflect actual allocation of units. A Quota is, by definition, simply another term for a limit.\n\nI think it\u0027s clearer to say \"Each individual service understands the usage (allocation) of resources. When a user requests to consume a set of resources, each service determines whether the existing usage of resources plus the requested amount of resources would exceed those limits.\"","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"* Administrator Kelly sets Project Baobab CPU limit to 10"},{"line_number":132,"context_line":"* User Jane can no longer allocate instance resources in project"},{"line_number":133,"context_line":"  Baobab, until she (or others in the project) have deleted at least 9"},{"line_number":134,"context_line":"  CPUs to get under the new limit"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"This is the behavior that most administrators want, as it lets them"},{"line_number":137,"context_line":"set the policy of what the future should be when convenient, and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_70355ef7","line":134,"updated":"2017-03-30 20:06:04.000000000","message":"++\n\nby the way, see how the above doesn\u0027t even mention the term \"quota\" and is actually very readable and understandable? :)","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"set the policy of what the future should be when convenient, and"},{"line_number":138,"context_line":"prevent those projects from creating any more resources that would"},{"line_number":139,"context_line":"exceed the limits in question. Note, today some projects prevent"},{"line_number":140,"context_line":"limits to be set lower than existing allocations. That API behavior"},{"line_number":141,"context_line":"will not be honored in this new system. [#f4]_"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Users in projects can fix this for themselves by bringing down the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_9019028a","line":140,"range":{"start_line":140,"start_character":7,"end_line":140,"end_character":18},"updated":"2017-03-30 20:06:04.000000000","message":"s/to be set/from being set/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"When we get to an N level project hierarchy, this is going to get"},{"line_number":152,"context_line":"complicated. Doing back of the envelop modeling for different quota"},{"line_number":153,"context_line":"models [#f5]_ shows that there are a lot of different ways this can be"},{"line_number":154,"context_line":"modeled."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_5b083b27","line":152,"range":{"start_line":152,"start_character":31,"end_line":152,"end_character":38},"updated":"2017-03-30 20:06:04.000000000","message":"s/envelop/envelope/","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":168,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Limit information should be accessed over a REST API call. This is"},{"line_number":171,"context_line":"potentially *extremely* cachable information. Only explicit updates to"},{"line_number":172,"context_line":"Limits, made via Keystone API, will invalidate this"},{"line_number":173,"context_line":"information. Keystone should be able to implement efficient HTTP"},{"line_number":174,"context_line":"caching for this information."}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_5b215b9f","line":171,"range":{"start_line":171,"start_character":24,"end_line":171,"end_character":32},"updated":"2017-03-30 20:06:04.000000000","message":"s/cachable/cacheable","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":171,"context_line":"potentially *extremely* cachable information. Only explicit updates to"},{"line_number":172,"context_line":"Limits, made via Keystone API, will invalidate this"},{"line_number":173,"context_line":"information. Keystone should be able to implement efficient HTTP"},{"line_number":174,"context_line":"caching for this information."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Users in a project will have visibility to all the project limits, as"},{"line_number":177,"context_line":"well as limits in child projects. Depending on the Quota model used,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_1b3bd3d1","line":174,"updated":"2017-03-30 20:06:04.000000000","message":"++","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":174,"context_line":"caching for this information."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Users in a project will have visibility to all the project limits, as"},{"line_number":177,"context_line":"well as limits in child projects. Depending on the Quota model used,"},{"line_number":178,"context_line":"they may also have visibility to higher levels of the hierarchy"},{"line_number":179,"context_line":"(especially if their allocations only make sense in the context of"},{"line_number":180,"context_line":"higher levels of allocations). There should be a principle of self"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_9b4c8377","line":177,"range":{"start_line":177,"start_character":51,"end_line":177,"end_character":56},"updated":"2017-03-30 20:06:04.000000000","message":"recommend s/Quota/Limit/g","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"Users in a project will have visibility to all the project limits, as"},{"line_number":177,"context_line":"well as limits in child projects. Depending on the Quota model used,"},{"line_number":178,"context_line":"they may also have visibility to higher levels of the hierarchy"},{"line_number":179,"context_line":"(especially if their allocations only make sense in the context of"},{"line_number":180,"context_line":"higher levels of allocations). There should be a principle of self"},{"line_number":181,"context_line":"service here, that users in a project which is over quota should"},{"line_number":182,"context_line":"always be able to figure out why that project is."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_7b7adf88","line":180,"range":{"start_line":179,"start_character":1,"end_line":180,"end_character":28},"updated":"2017-03-30 20:06:04.000000000","message":"might be worth adding an example for this.","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d5ade65eee4f0136ae3d914f5f3346da2ffde7e9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"  - Get general agreement on Keystone ownership of limits"},{"line_number":214,"context_line":"  - Define keystone get / set limit interfaces (separate spec)"},{"line_number":215,"context_line":"  - Create os-quotas lib with flat and strict account hierarchical"},{"line_number":216,"context_line":"    limits"},{"line_number":217,"context_line":"  - Implement Keystone get / set limit interfaces"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"- Queens"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_dbb7ab3a","line":216,"updated":"2017-03-30 20:06:04.000000000","message":"I\u0027m still unclear what the os-quotas library would actually contain, but I\u0027ll wait to see some example code there...","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ed206979cdfb7faa647666cff71766c8ad88816","unresolved":false,"context_lines":[{"line_number":276,"context_line":"         (https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cells-count-resources-to-check-quota-in-api.html)"},{"line_number":277,"context_line":"         are addressed. This would help remove much of the complexity."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":".. [#f4] Know projects that check new limits don\u0027t exceed allocations: Nova"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":".. [#f5] Early modeling of Quota algorithms here -"},{"line_number":282,"context_line":"         https://review.openstack.org/#/c/441203 - viewing the HTML"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfeb2761_503a5ae7","line":279,"range":{"start_line":279,"start_character":9,"end_line":279,"end_character":13},"updated":"2017-03-30 20:00:55.000000000","message":"Known","commit_id":"71643463b027d64b36beaf42689311f9d6d80fcb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"62a88193cea6a5d72cb6c97eda48b703a4d9fc24","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":3,"context_line":" License."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfeb2761_46803f8c","line":2,"updated":"2017-03-31 17:01:22.000000000","message":"Do we want this proposed to backlog? I\u0027d think this is better suited in On-Going, especially if we target a subset of this work to land in Pike.","commit_id":"b55585376dea1fd28670187a3b950224cf8543e7"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"391c29f7bdf4d33a79af7e6c11c2afe7adee8c8b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"limits that violates some basic constraint of the system (for"},{"line_number":62,"context_line":"instance, project A has child project B, and child B vcpu quota is \u003e A"},{"line_number":63,"context_line":"vcpu quota), then all the logic to sensibly calculate usage and quotas"},{"line_number":64,"context_line":"at the service will be buggy and hugely more complex."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Where should this be?"},{"line_number":67,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfeb2761_4f1c8211","line":64,"updated":"2017-04-04 09:37:04.000000000","message":"Real use cases of Cinder and Manila:\n\nIt is very valueable to have quota per storage-backend in addition to general project quota. In case of Cinder it is \"volume type quota per project\". In case of manila it is similar just not implemented yet, but planned for Pike.\n\nSpec: https://review.openstack.org/#/c/447021/\n\nBuilt spec: http://docs-draft.openstack.org/21/447021/10/check/gate-manila-specs-docs-ubuntu-xenial/c666861//doc/build/html/specs/pike/support-quotas-per-share-type.html","commit_id":"b55585376dea1fd28670187a3b950224cf8543e7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"62a88193cea6a5d72cb6c97eda48b703a4d9fc24","unresolved":false,"context_lines":[{"line_number":109,"context_line":"before the change is made. We want to guarantee that the hierarchical"},{"line_number":110,"context_line":"limits structure is consistent at all times."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Limits vs. Usage Enforcement"},{"line_number":113,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When we talk about a Quota system, we\u0027re really talking about two"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfeb2761_862407c8","line":112,"updated":"2017-03-31 17:01:22.000000000","message":"Isn\u0027t this just \"allocation\"?","commit_id":"b55585376dea1fd28670187a3b950224cf8543e7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"62a88193cea6a5d72cb6c97eda48b703a4d9fc24","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When we talk about a Quota system, we\u0027re really talking about two"},{"line_number":116,"context_line":"systems. A system for setting and maintaining limits, the theoretical"},{"line_number":117,"context_line":"maximum usage, and a system for enforcing that usage does not exceed"},{"line_number":118,"context_line":"limits. While they are coupled, they are distinct."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"In this proposal, Keystone maintains limits. Keystone\u0027s responsibility"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfeb2761_c92100a2","line":117,"updated":"2017-03-31 17:01:22.000000000","message":"s/for enforcing/responsible for resource allocation/","commit_id":"b55585376dea1fd28670187a3b950224cf8543e7"}]}
