)]}'
{"specs/keystone/pike/limits-api.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aba347abb40f6da5b5cb2e39def3187a9437aeca","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"An interface to create, read, update, delete limit definitions."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Registered Limits"},{"line_number":32,"context_line":"-----------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Create"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_ae798bc8","line":31,"updated":"2017-04-11 13:56:20.000000000","message":"Maybe this was covered in the previous spec, but what\u0027s the difference between a Registered Limit and a Project Limit? Does that question need to be framed here?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"An interface to create, read, update, delete limit definitions."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Registered Limits"},{"line_number":32,"context_line":"-----------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Create"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_15793e2e","line":31,"in_reply_to":"bff0334d_82e336a4","updated":"2017-10-23 06:33:46.000000000","message":"I\u0027ll write Sean\u0027s words and explain more here.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"cdd583d434f7fca6b7456f2990c622ee95f46549","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"An interface to create, read, update, delete limit definitions."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Registered Limits"},{"line_number":32,"context_line":"-----------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Create"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_82e336a4","line":31,"in_reply_to":"bff0334d_ae798bc8","updated":"2017-04-11 15:35:16.000000000","message":"Right, registered limits are the defaults. You can\u0027t set a limit on something that\u0027s not a registered limit.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"387c07ffab23c6d0d9a3b78ae1074b4fb915d7f2","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":".. code-block:: javascript"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"     ["},{"line_number":49,"context_line":"         {"},{"line_number":50,"context_line":"                \"service-type\": \"compute\","},{"line_number":51,"context_line":"                \"region\": \"region1\","}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_9a42730e","line":48,"updated":"2017-04-11 20:32:58.000000000","message":"note, these really aren\u0027t json objects, will need a top level key as well like {\"limits:\" [ ...]}","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"     ["},{"line_number":49,"context_line":"         {"},{"line_number":50,"context_line":"                \"service-type\": \"compute\","},{"line_number":51,"context_line":"                \"region\": \"region1\","},{"line_number":52,"context_line":"                \"resource_name\": \"cores\","},{"line_number":53,"context_line":"                \"project_default\": 10"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_f4343595","line":50,"updated":"2017-05-22 21:38:10.000000000","message":"Is there a reason for the inconsistent use of - vs _ ?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"     ["},{"line_number":49,"context_line":"         {"},{"line_number":50,"context_line":"                \"service-type\": \"compute\","},{"line_number":51,"context_line":"                \"region\": \"region1\","},{"line_number":52,"context_line":"                \"resource_name\": \"cores\","},{"line_number":53,"context_line":"                \"project_default\": 10"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_3a8be21f","line":50,"in_reply_to":"ff0f0b1f_f4343595","updated":"2017-10-23 06:33:46.000000000","message":"Yeah, should use _ here to keep consistency","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                \"service-type\": \"compute\","},{"line_number":51,"context_line":"                \"region\": \"region1\","},{"line_number":52,"context_line":"                \"resource_name\": \"cores\","},{"line_number":53,"context_line":"                \"project_default\": 10"},{"line_number":54,"context_line":"         }"},{"line_number":55,"context_line":"     ]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_540081ab","line":53,"updated":"2017-05-22 21:38:10.000000000","message":"project_default is a confusing name, to me it indicates a project-specific limit when this is a generic default for all projects. Maybe \"default_limit\"?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                \"service-type\": \"compute\","},{"line_number":51,"context_line":"                \"region\": \"region1\","},{"line_number":52,"context_line":"                \"resource_name\": \"cores\","},{"line_number":53,"context_line":"                \"project_default\": 10"},{"line_number":54,"context_line":"         }"},{"line_number":55,"context_line":"     ]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_fab2eae5","line":53,"in_reply_to":"ff0f0b1f_540081ab","updated":"2017-10-23 06:33:46.000000000","message":"Done","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aba347abb40f6da5b5cb2e39def3187a9437aeca","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_ae106b58","line":127,"updated":"2017-04-11 13:56:20.000000000","message":"What\u0027s the rationale for not tracking limits by IDs?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d651697c1afa5a794e13d3011ffae06b37d0fa2c","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_4b2ff23e","line":127,"in_reply_to":"3f4b6375_5a721e13","updated":"2017-10-23 07:02:25.000000000","message":"I\u0027m not sure that was the agreement. As I said in my last comment all our API resources use self referential links and those depend on resources having an ID. I guess the question is how useful we think those are and how much we care about consistency.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"cdd583d434f7fca6b7456f2990c622ee95f46549","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_e2b9e278","line":127,"in_reply_to":"bff0334d_ae106b58","updated":"2017-04-11 15:35:16.000000000","message":"It seems like an unuseful intermediary. We have unique constraints already on \"service-type\", \"region\", \"resource_name\" as a tuple, creating an externalized key just cuz seems not really helpful.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_f932f30f","line":127,"in_reply_to":"bff0334d_e2b9e278","updated":"2017-05-22 21:38:10.000000000","message":"I think for consistency with other keystone resources there should be an ID. Even resources like domains, which are uniquely identifiable by name, or roles, which have zero attributes besides the role name, have IDs. It also just makes delete and update more straightforward and I think would make the database joins simpler.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_5a721e13","line":127,"in_reply_to":"df140735_43bd6a00","updated":"2017-10-23 06:33:46.000000000","message":"Seem that we meet an agreement here. No ID, just rely on \"service_type\", \"region\" and \"resource_name\".","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d7875373a0e90e6d34960166964499ed2f0179a6","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_43bd6a00","line":127,"in_reply_to":"ff0f0b1f_6ba8bbda","updated":"2017-06-01 21:28:17.000000000","message":"Actually - all our API resources use self referential links which are dependent on having id attributes http://git.openstack.org/cgit/openstack/keystone/tree/keystone/common/controller.py#n385","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"98cd36da1d8f862045ec42d87192aae466458be8","unresolved":false,"context_lines":[{"line_number":124,"context_line":".. note::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":127,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":128,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":129,"context_line":"   \"project_default\" which means drop by absense (this feels a little"},{"line_number":130,"context_line":"   too clever)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_6ba8bbda","line":127,"in_reply_to":"ff0f0b1f_f932f30f","updated":"2017-05-26 01:13:32.000000000","message":"After playing with this a bit I\u0027m changing my mind on this, there\u0027s really no need to glob IDs onto these resources.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aba347abb40f6da5b5cb2e39def3187a9437aeca","unresolved":false,"context_lines":[{"line_number":152,"context_line":"~~~~~~~~~~~~~"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Overriding project limits"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"::"},{"line_number":158,"context_line":"   PUT /limits/{project_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_312b9a83","line":155,"updated":"2017-04-11 13:56:20.000000000","message":"nit: Overriding a Registered Limit with a Project Limit ?\n\nBy overriding the registered limit, the project assumes a new limit value that is specific to that project.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":152,"context_line":"~~~~~~~~~~~~~"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Overriding project limits"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"::"},{"line_number":158,"context_line":"   PUT /limits/{project_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_3af1a26c","line":155,"in_reply_to":"bff0334d_312b9a83","updated":"2017-10-23 06:33:46.000000000","message":"Done","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aba347abb40f6da5b5cb2e39def3187a9437aeca","unresolved":false,"context_lines":[{"line_number":169,"context_line":"   ]"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Response: we return the entire limits structure for the relevant"},{"line_number":172,"context_line":"project, including defaults without overrides."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Read"},{"line_number":175,"context_line":"~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_1153f618","line":172,"updated":"2017-04-11 13:56:20.000000000","message":"Oh - interesting. So, if a project only has one override, all the registered limits (i.e. the defaults) are going to be returned in the response?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":169,"context_line":"   ]"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Response: we return the entire limits structure for the relevant"},{"line_number":172,"context_line":"project, including defaults without overrides."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Read"},{"line_number":175,"context_line":"~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_1a99461e","line":172,"in_reply_to":"bff0334d_1153f618","updated":"2017-10-23 06:33:46.000000000","message":"I think YES, to keep consistence with other services, like Nova, Cinder: we should return the default value if no overrides.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Response: we return the entire limits structure for the relevant"},{"line_number":172,"context_line":"project, including defaults without overrides."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Read"},{"line_number":175,"context_line":"~~~~"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_318d1fd3","line":173,"updated":"2017-05-22 21:38:10.000000000","message":"What about error responses? Like when the override limit is greater than parent project\u0027s limit","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Response: we return the entire limits structure for the relevant"},{"line_number":172,"context_line":"project, including defaults without overrides."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Read"},{"line_number":175,"context_line":"~~~~"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_9aad3633","line":173,"in_reply_to":"ff0f0b1f_318d1fd3","updated":"2017-10-23 06:33:46.000000000","message":"Done, it should be 403 IMO.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"   It feels like it would be good to signal both the current limit as"},{"line_number":181,"context_line":"   well as what the default is, though given the bulk get maybe we"},{"line_number":182,"context_line":"   don\u0027t need that?"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"::"},{"line_number":185,"context_line":"   GET /limits/{project_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_11657b1e","line":182,"updated":"2017-05-22 21:38:10.000000000","message":"I\u0027m trying to think of a reason we\u0027d need to see the default when it\u0027s been overridden and coming up short.\n\nHowever, some of these models have the notion of a local limit or effective limit, would those numbers need to appear in this response or would they need to be calculated dynamically?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2c55bc509939a0beb3aa0fc5d7c6d065ab8604ee","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"   It feels like it would be good to signal both the current limit as"},{"line_number":181,"context_line":"   well as what the default is, though given the bulk get maybe we"},{"line_number":182,"context_line":"   don\u0027t need that?"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"::"},{"line_number":185,"context_line":"   GET /limits/{project_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff82abbf_6a9e9908","line":182,"in_reply_to":"3f4b6375_7a5a7a4f","updated":"2017-11-20 19:59:16.000000000","message":"Might be good to get Sean\u0027s follow up here. I just don\u0027t want to lose the purpose of this question because we don\u0027t have all the context.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"   It feels like it would be good to signal both the current limit as"},{"line_number":181,"context_line":"   well as what the default is, though given the bulk get maybe we"},{"line_number":182,"context_line":"   don\u0027t need that?"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"::"},{"line_number":185,"context_line":"   GET /limits/{project_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_7a5a7a4f","line":182,"in_reply_to":"ff0f0b1f_11657b1e","updated":"2017-10-23 06:33:46.000000000","message":"Can\u0027t say more. I\u0027ll leave the question here.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":225,"context_line":"               \"project_id\": {project_id},"},{"line_number":226,"context_line":"               \"parent_id\": {parent_project_id},"},{"line_number":227,"context_line":"               \"limits\": ["},{"line_number":228,"context_line":"                    ... full limit structure as above"},{"line_number":229,"context_line":"               ]"},{"line_number":230,"context_line":"         },"},{"line_number":231,"context_line":"   ]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_0a4f806b","line":228,"updated":"2017-05-22 21:38:10.000000000","message":"I might need to see an example of how this would be used, but I\u0027m not sure this is general enough to be useful for even the basic strict hierarchical model, since it doesn\u0027t account for siblings using quota.\n\nThinking out loud, the two questions (that are really the same question) that a GET like this needs to answer are \n\n1) As the nova service, I need to be able to calculate whether a resource request for a given project would bring the user over quota\n2) As a user, I need to know why my resource request failed with reason \"over quota\"\n\nSo this GET should provide\n\n- the project_id and its resource limit\n- the hierarchical model being used\n- all of the projects that come into play for this particular model, which may be this project\u0027s parent, siblings, children, and maybe other ancestors, and the resource limits associated with them\n\nWhat if, instead of having a special query flag to show the hierarchy, we use the regular GET /limits/projectid and include a tag to indicate the hierarchical model, then the user can use the existing /projects API to find the projects in the hierarchy. This would be a lot of API calls but, as was stated in the original unified limits spec, it would be cacheable.\n\nAnother possibility, what if this type of query took into account the hierarchical model being used, and did a calculation on the backend, and just returned the effective limit of the given project, with no information about the hierarchy? The nova service itself still needs to know the hierarchy in order to calculate usage but is there a reason it needs to know anything other than the effective limit on a given project?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d651697c1afa5a794e13d3011ffae06b37d0fa2c","unresolved":false,"context_lines":[{"line_number":225,"context_line":"               \"project_id\": {project_id},"},{"line_number":226,"context_line":"               \"parent_id\": {parent_project_id},"},{"line_number":227,"context_line":"               \"limits\": ["},{"line_number":228,"context_line":"                    ... full limit structure as above"},{"line_number":229,"context_line":"               ]"},{"line_number":230,"context_line":"         },"},{"line_number":231,"context_line":"   ]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_ab90a64f","line":228,"in_reply_to":"3f4b6375_10c245ea","updated":"2017-10-23 07:02:25.000000000","message":"The problem is we\u0027d like to support different types of quota models and this API has to be generic enough to support them, without knowing yet what they are.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6ef067174ed929d8e68741738df7dc3a284a15a0","unresolved":false,"context_lines":[{"line_number":225,"context_line":"               \"project_id\": {project_id},"},{"line_number":226,"context_line":"               \"parent_id\": {parent_project_id},"},{"line_number":227,"context_line":"               \"limits\": ["},{"line_number":228,"context_line":"                    ... full limit structure as above"},{"line_number":229,"context_line":"               ]"},{"line_number":230,"context_line":"         },"},{"line_number":231,"context_line":"   ]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_8b228aff","line":228,"in_reply_to":"3f4b6375_ab90a64f","updated":"2017-10-23 07:12:49.000000000","message":"Oh, I must missed something. So if we\u0027d like to support different types of quota model, we surely should make the API be generic enough.\nI\u0027ll try to answer your questions and update the spec later.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":225,"context_line":"               \"project_id\": {project_id},"},{"line_number":226,"context_line":"               \"parent_id\": {parent_project_id},"},{"line_number":227,"context_line":"               \"limits\": ["},{"line_number":228,"context_line":"                    ... full limit structure as above"},{"line_number":229,"context_line":"               ]"},{"line_number":230,"context_line":"         },"},{"line_number":231,"context_line":"   ]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_10c245ea","line":228,"in_reply_to":"7f287b81_f7010708","updated":"2017-10-23 06:33:46.000000000","message":"Read Tim\u0027s Blog, the CERN model is like \"Strict Hierarchy Default Closed\" in some area IMO. I really like it. I\u0027ll update the spec later.\n\nAbout Colleen\u0027s long and useful question, I think they could/should be answered after we decide the quota model. Otherwise, I don\u0027t know how to start my response, since everything is on assuming.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":136,"name":"Tim Bell","email":"tim.bell@cern.ch","username":"tim-bell"},"change_message_id":"c4e9a7b2360fb9aa078ac82f3717432c96a12aa3","unresolved":false,"context_lines":[{"line_number":225,"context_line":"               \"project_id\": {project_id},"},{"line_number":226,"context_line":"               \"parent_id\": {parent_project_id},"},{"line_number":227,"context_line":"               \"limits\": ["},{"line_number":228,"context_line":"                    ... full limit structure as above"},{"line_number":229,"context_line":"               ]"},{"line_number":230,"context_line":"         },"},{"line_number":231,"context_line":"   ]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f287b81_f7010708","line":228,"in_reply_to":"ff0f0b1f_0a4f806b","updated":"2017-09-05 07:53:05.000000000","message":"I sketched out a CERN ruleset for the nested quotas at http://openstack-in-production.blogspot.ch/2017/07/nested-quota-models.html.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aba347abb40f6da5b5cb2e39def3187a9437aeca","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"This will show what is believed to be needed to compute usage"},{"line_number":234,"context_line":"violations in service projects."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Alternatives"},{"line_number":238,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bff0334d_31ecba28","line":235,"updated":"2017-04-11 13:56:20.000000000","message":"I assume the creation and update of some limits is going to include some validation with respect to the rest of the tree. Is that where the model work is going to come in, or are there general validation rules we can follow without having to dive into all the model stuff in this spec?","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"57d3abe5b6f66e87dfd3b02c18640821ebff3cfc","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"This will show what is believed to be needed to compute usage"},{"line_number":234,"context_line":"violations in service projects."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Alternatives"},{"line_number":238,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_d0702ddf","line":235,"in_reply_to":"bff0334d_31ecba28","updated":"2017-10-23 06:33:46.000000000","message":"You are right. Will think more here for the validation.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3661149776f3444a007f2dfa4d374160182920a5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"been put into why the proposed solution is an appropriate one."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Security Impact"},{"line_number":245,"context_line":"---------------"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Describe any potential security impact on the system.  Some of the items to"},{"line_number":248,"context_line":"consider include:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff0f0b1f_4c8d8dd1","line":245,"updated":"2017-05-22 21:38:10.000000000","message":"Registered limits are public information, but what about project limits? Should a user be able to get limit information for a parent, sibling, or child project? This might be necessary information in order to answer the \"what do I put in the ticket\" question, but it\u0027s also really private information. With the (current) default policy a user with a member role on a project can\u0027t GET its parent or child project.","commit_id":"c820a1359f72c3af6e9fea6b5dbe1cf6d04d86c8"}],"specs/keystone/queens/limits-api.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"limits definitions will often be created in bulk, this supports"},{"line_number":44,"context_line":"sending a number of limit definitions at once. This is an admin only"},{"line_number":45,"context_line":"action."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"::"},{"line_number":48,"context_line":"   POST /registered-limits"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":".. code-block:: javascript"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_c5ed5626","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":26},"updated":"2017-11-20 20:33:56.000000000","message":"I don\u0027t think this is rendering properly. We\u0027re missing a newline in between :: and the POST.\n\nhttp://logs.openstack.org/09/455709/5/check/build-openstack-sphinx-docs/02539d3/html/specs/keystone/queens/limits-api.html","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":43,"context_line":"limits definitions will often be created in bulk, this supports"},{"line_number":44,"context_line":"sending a number of limit definitions at once. This is an admin only"},{"line_number":45,"context_line":"action."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"::"},{"line_number":48,"context_line":"   POST /registered-limits"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":".. code-block:: javascript"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_610e8d33","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":26},"in_reply_to":"ff82abbf_c5ed5626","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Success: 200."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Defining limits that already exist: 409"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Read"},{"line_number":76,"context_line":"~~~~"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_45c2a687","line":73,"updated":"2017-11-20 20:33:56.000000000","message":"nit: We could structure the format of these in the same way we structure APIs in our formal documention: \n\nhttps://developer.openstack.org/api-ref/identity/v3/#projects\n\nThe project tag specification is a good example of this. When it came time to propose the documentation, is was essentially a copy/paste from the specification.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Success: 200."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Defining limits that already exist: 409"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Read"},{"line_number":76,"context_line":"~~~~"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_01b9c12c","line":73,"in_reply_to":"ff82abbf_45c2a687","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"~~~~"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Registered limits can be read by anyone."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"::"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_45706673","line":79,"range":{"start_line":79,"start_character":33,"end_line":79,"end_character":39},"updated":"2017-11-20 20:33:56.000000000","message":"Anyone with a valid token or completely unprotected?","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":76,"context_line":"~~~~"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Registered limits can be read by anyone."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"::"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_64f53b83","line":79,"range":{"start_line":79,"start_character":33,"end_line":79,"end_character":39},"in_reply_to":"ff82abbf_45706673","updated":"2017-11-23 02:57:05.000000000","message":"I think it can be non-admin but at least it should be a keystone user.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2c55bc509939a0beb3aa0fc5d7c6d065ab8604ee","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Success: 200."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"The override limit is greater than parent project\u0027s limit: 403"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":".. note::"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_2adad1e8","line":229,"range":{"start_line":229,"start_character":59,"end_line":229,"end_character":62},"updated":"2017-11-20 19:59:16.000000000","message":"I interpret a 403 here as I don\u0027t have the role necessary to update the limit. A 400 Bad Request with a specific message about validating inputs would be more descriptive to the user. Unless we thinks that\u0027s giving away too much information.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"06303cc6f964505ce416f5cea297e286ef3b3465","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Success: 200."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"The override limit is greater than parent project\u0027s limit: 403"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":".. note::"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_4286dcdd","line":229,"range":{"start_line":229,"start_character":59,"end_line":229,"end_character":62},"in_reply_to":"ff82abbf_2adad1e8","updated":"2017-11-22 16:30:20.000000000","message":"This is kind of an interesting question. How much information about a parent project should a user be allowed to know? How much information is necessary in order to correct an error? Protecting a parent project is kind of in conflict with providing a positive user experience.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Success: 200."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"The override limit is greater than parent project\u0027s limit: 403"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":".. note::"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_fc70eda7","line":229,"range":{"start_line":229,"start_character":59,"end_line":229,"end_character":62},"in_reply_to":"ff82abbf_4286dcdd","updated":"2017-11-23 02:57:05.000000000","message":"Yeah, it\u0027s similar to the security concern which Colleen mentioned previous. I\u0027ll leave my thought in the security impact section.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":375,"context_line":"Alternatives"},{"line_number":376,"context_line":"------------"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"What other ways could we do this thing? Why aren\u0027t we using those? This doesn\u0027t"},{"line_number":379,"context_line":"have to be a full literature review, but it should demonstrate that thought has"},{"line_number":380,"context_line":"been put into why the proposed solution is an appropriate one."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Security Impact"},{"line_number":383,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_85042e7d","line":380,"range":{"start_line":378,"start_character":0,"end_line":380,"end_character":62},"updated":"2017-11-20 20:33:56.000000000","message":"One alternative that\u0027s already been taken by at least one project is to attempt to implement hierarchical quotas in the service itself. Since understanding the hierarchy can be confusing, not duplicating that logic is what lead us to this approach, which keeps the limit closely associated to the hierarchy.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":375,"context_line":"Alternatives"},{"line_number":376,"context_line":"------------"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"What other ways could we do this thing? Why aren\u0027t we using those? This doesn\u0027t"},{"line_number":379,"context_line":"have to be a full literature review, but it should demonstrate that thought has"},{"line_number":380,"context_line":"been put into why the proposed solution is an appropriate one."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Security Impact"},{"line_number":383,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_88872d62","line":380,"range":{"start_line":378,"start_character":0,"end_line":380,"end_character":62},"in_reply_to":"ff82abbf_85042e7d","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":382,"context_line":"Security Impact"},{"line_number":383,"context_line":"---------------"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Describe any potential security impact on the system.  Some of the items to"},{"line_number":386,"context_line":"consider include:"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"* Does this change touch sensitive data such as tokens, keys, or user data?"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"* Does this change alter the API in a way that may impact security, such as"},{"line_number":391,"context_line":"  a new way to access sensitive information or a new way to login?"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"* Does this change involve cryptography or hashing?"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"* Does this change require the use of sudo or any elevated privileges?"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Does this change involve using or parsing user-provided data? This could"},{"line_number":398,"context_line":"  be directly at the API level or indirectly such as changes to a cache layer."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"* Can this change enable a resource exhaustion attack, such as allowing a"},{"line_number":401,"context_line":"  single API interaction to consume significant server resources? Some examples"},{"line_number":402,"context_line":"  of this include launching subprocesses for each connection, or entity"},{"line_number":403,"context_line":"  expansion attacks in XML."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"For more detailed guidance, please see the OpenStack Security Guidelines as"},{"line_number":406,"context_line":"a reference (https://wiki.openstack.org/wiki/Security/Guidelines).  These"},{"line_number":407,"context_line":"guidelines are a work in progress and are designed to help you identify"},{"line_number":408,"context_line":"security best practices.  For further information, feel free to reach out"},{"line_number":409,"context_line":"to the OpenStack Security Group at openstack-security@lists.openstack.org."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"TODO: leave Collen\u0027s comment here so that we can have more discussion:"},{"line_number":412,"context_line":"Collen: Registered limits are public information, but what about project"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_45f62692","line":409,"range":{"start_line":385,"start_character":0,"end_line":409,"end_character":74},"updated":"2017-11-20 20:33:56.000000000","message":"Remove this?","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":382,"context_line":"Security Impact"},{"line_number":383,"context_line":"---------------"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Describe any potential security impact on the system.  Some of the items to"},{"line_number":386,"context_line":"consider include:"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"* Does this change touch sensitive data such as tokens, keys, or user data?"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"* Does this change alter the API in a way that may impact security, such as"},{"line_number":391,"context_line":"  a new way to access sensitive information or a new way to login?"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"* Does this change involve cryptography or hashing?"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"* Does this change require the use of sudo or any elevated privileges?"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Does this change involve using or parsing user-provided data? This could"},{"line_number":398,"context_line":"  be directly at the API level or indirectly such as changes to a cache layer."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"* Can this change enable a resource exhaustion attack, such as allowing a"},{"line_number":401,"context_line":"  single API interaction to consume significant server resources? Some examples"},{"line_number":402,"context_line":"  of this include launching subprocesses for each connection, or entity"},{"line_number":403,"context_line":"  expansion attacks in XML."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"For more detailed guidance, please see the OpenStack Security Guidelines as"},{"line_number":406,"context_line":"a reference (https://wiki.openstack.org/wiki/Security/Guidelines).  These"},{"line_number":407,"context_line":"guidelines are a work in progress and are designed to help you identify"},{"line_number":408,"context_line":"security best practices.  For further information, feel free to reach out"},{"line_number":409,"context_line":"to the OpenStack Security Group at openstack-security@lists.openstack.org."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"TODO: leave Collen\u0027s comment here so that we can have more discussion:"},{"line_number":412,"context_line":"Collen: Registered limits are public information, but what about project"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_a181f54c","line":409,"range":{"start_line":385,"start_character":0,"end_line":409,"end_character":74},"in_reply_to":"ff82abbf_45f62692","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":408,"context_line":"security best practices.  For further information, feel free to reach out"},{"line_number":409,"context_line":"to the OpenStack Security Group at openstack-security@lists.openstack.org."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"TODO: leave Collen\u0027s comment here so that we can have more discussion:"},{"line_number":412,"context_line":"Collen: Registered limits are public information, but what about project"},{"line_number":413,"context_line":"limits? Should a user be able to get limit information for a parent, sibling,"},{"line_number":414,"context_line":"or child project? This might be necessary information in order to answer the"},{"line_number":415,"context_line":"\"what do I put in the ticket\" question, but it\u0027s also really private"},{"line_number":416,"context_line":"information. With the (current) default policy a user with a member role on a"},{"line_number":417,"context_line":"project can\u0027t GET its parent or child project."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"Notifications Impact"},{"line_number":420,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_c52f96f4","line":417,"range":{"start_line":411,"start_character":0,"end_line":417,"end_character":46},"updated":"2017-11-20 20:33:56.000000000","message":"Let\u0027s format this into a note or a warning so that other reviewers can easily see it and weigh in on it.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":408,"context_line":"security best practices.  For further information, feel free to reach out"},{"line_number":409,"context_line":"to the OpenStack Security Group at openstack-security@lists.openstack.org."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"TODO: leave Collen\u0027s comment here so that we can have more discussion:"},{"line_number":412,"context_line":"Collen: Registered limits are public information, but what about project"},{"line_number":413,"context_line":"limits? Should a user be able to get limit information for a parent, sibling,"},{"line_number":414,"context_line":"or child project? This might be necessary information in order to answer the"},{"line_number":415,"context_line":"\"what do I put in the ticket\" question, but it\u0027s also really private"},{"line_number":416,"context_line":"information. With the (current) default policy a user with a member role on a"},{"line_number":417,"context_line":"project can\u0027t GET its parent or child project."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"Notifications Impact"},{"line_number":420,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_81f3910a","line":417,"range":{"start_line":411,"start_character":0,"end_line":417,"end_character":46},"in_reply_to":"ff82abbf_c52f96f4","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":419,"context_line":"Notifications Impact"},{"line_number":420,"context_line":"--------------------"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":423,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Other End User Impact"},{"line_number":426,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_e5473abc","line":423,"range":{"start_line":422,"start_character":0,"end_line":423,"end_character":64},"updated":"2017-11-20 20:33:56.000000000","message":"Registered Limits and Project Limits should be subject to the same notifications as other things in keystone.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":419,"context_line":"Notifications Impact"},{"line_number":420,"context_line":"--------------------"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":423,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Other End User Impact"},{"line_number":426,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_e13a9d96","line":423,"range":{"start_line":422,"start_character":0,"end_line":423,"end_character":64},"in_reply_to":"ff82abbf_e5473abc","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":425,"context_line":"Other End User Impact"},{"line_number":426,"context_line":"---------------------"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":429,"context_line":"feature?"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"* Does this change have an impact on python-keystoneclient? What does the user"},{"line_number":432,"context_line":"  interface there look like?"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Performance Impact"},{"line_number":435,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_25276215","line":432,"range":{"start_line":428,"start_character":0,"end_line":432,"end_character":28},"updated":"2017-11-20 20:33:56.000000000","message":"This could be removed.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":425,"context_line":"Other End User Impact"},{"line_number":426,"context_line":"---------------------"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":429,"context_line":"feature?"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"* Does this change have an impact on python-keystoneclient? What does the user"},{"line_number":432,"context_line":"  interface there look like?"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Performance Impact"},{"line_number":435,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_a1cfb5ae","line":432,"range":{"start_line":428,"start_character":0,"end_line":432,"end_character":28},"in_reply_to":"ff82abbf_25276215","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":434,"context_line":"Performance Impact"},{"line_number":435,"context_line":"------------------"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"Describe any potential performance impact on the system, for example"},{"line_number":438,"context_line":"how often will new code be called, and is there a major change to the calling"},{"line_number":439,"context_line":"pattern of existing code."},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"Examples of things to consider here include:"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"* A small change in a utility function or a commonly used decorator can have a"},{"line_number":444,"context_line":"  large impacts on performance."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* Calls which result in a database queries can have a profound impact on"},{"line_number":447,"context_line":"  performance when called in critical sections of the code."},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"* Will the change include any locking, and if so what considerations are there"},{"line_number":450,"context_line":"  on holding the lock?"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Other Deployer Impact"},{"line_number":453,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_c53556f9","line":450,"range":{"start_line":437,"start_character":0,"end_line":450,"end_character":22},"updated":"2017-11-20 20:33:56.000000000","message":"This is where the discussion kinda stalled out in Boston. Depending on the hierarchy and how complex it is, there could be significant performance concerns. Jay Pipes had a bunch of context here.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":434,"context_line":"Performance Impact"},{"line_number":435,"context_line":"------------------"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"Describe any potential performance impact on the system, for example"},{"line_number":438,"context_line":"how often will new code be called, and is there a major change to the calling"},{"line_number":439,"context_line":"pattern of existing code."},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"Examples of things to consider here include:"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"* A small change in a utility function or a commonly used decorator can have a"},{"line_number":444,"context_line":"  large impacts on performance."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* Calls which result in a database queries can have a profound impact on"},{"line_number":447,"context_line":"  performance when called in critical sections of the code."},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"* Will the change include any locking, and if so what considerations are there"},{"line_number":450,"context_line":"  on holding the lock?"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Other Deployer Impact"},{"line_number":453,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_d9f5fb84","line":450,"range":{"start_line":437,"start_character":0,"end_line":450,"end_character":22},"in_reply_to":"ff82abbf_c53556f9","updated":"2017-11-23 02:57:05.000000000","message":"Is there any address I have  visit to get more information?","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":452,"context_line":"Other Deployer Impact"},{"line_number":453,"context_line":"---------------------"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Discuss things that will affect how you deploy and configure OpenStack"},{"line_number":456,"context_line":"that have not already been mentioned, such as:"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"* What config options are being added? Should they be more generic than"},{"line_number":459,"context_line":"  proposed (for example a flag that other hypervisor drivers might want to"},{"line_number":460,"context_line":"  implement as well)? Are the default values ones which will work well in"},{"line_number":461,"context_line":"  real deployments?"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"* Is this a change that takes immediate effect after its merged, or is it"},{"line_number":464,"context_line":"  something that has to be explicitly enabled?"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"* If this change is a new binary, how would it be deployed?"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"* Please state anything that those doing continuous deployment, or those"},{"line_number":469,"context_line":"  upgrading from the previous release, need to be aware of. Also describe"},{"line_number":470,"context_line":"  any plans to deprecate configuration values or features.  For example, if we"},{"line_number":471,"context_line":"  change the directory name that instances are stored in, how do we handle"},{"line_number":472,"context_line":"  instance directories created before the change landed?  Do we move them?  Do"},{"line_number":473,"context_line":"  we have a special case in the code? Do we assume that the operator will"},{"line_number":474,"context_line":"  recreate all the instances in their cloud?"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"Developer Impact"},{"line_number":477,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_c5cb161c","line":474,"range":{"start_line":455,"start_character":0,"end_line":474,"end_character":44},"updated":"2017-11-20 20:33:56.000000000","message":"Deployments looking to have registered limits and project limits in keystone will have to set that up at installation time. This creates an extra step for operators, similar to how they register services in the service catalog.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":452,"context_line":"Other Deployer Impact"},{"line_number":453,"context_line":"---------------------"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Discuss things that will affect how you deploy and configure OpenStack"},{"line_number":456,"context_line":"that have not already been mentioned, such as:"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"* What config options are being added? Should they be more generic than"},{"line_number":459,"context_line":"  proposed (for example a flag that other hypervisor drivers might want to"},{"line_number":460,"context_line":"  implement as well)? Are the default values ones which will work well in"},{"line_number":461,"context_line":"  real deployments?"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"* Is this a change that takes immediate effect after its merged, or is it"},{"line_number":464,"context_line":"  something that has to be explicitly enabled?"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"* If this change is a new binary, how would it be deployed?"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"* Please state anything that those doing continuous deployment, or those"},{"line_number":469,"context_line":"  upgrading from the previous release, need to be aware of. Also describe"},{"line_number":470,"context_line":"  any plans to deprecate configuration values or features.  For example, if we"},{"line_number":471,"context_line":"  change the directory name that instances are stored in, how do we handle"},{"line_number":472,"context_line":"  instance directories created before the change landed?  Do we move them?  Do"},{"line_number":473,"context_line":"  we have a special case in the code? Do we assume that the operator will"},{"line_number":474,"context_line":"  recreate all the instances in their cloud?"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"Developer Impact"},{"line_number":477,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_b93fd723","line":474,"range":{"start_line":455,"start_character":0,"end_line":474,"end_character":44},"in_reply_to":"ff82abbf_c5cb161c","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"Developer Impact"},{"line_number":477,"context_line":"----------------"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"Discuss things that will affect other developers working on OpenStack,"},{"line_number":480,"context_line":"such as:"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"* If the blueprint proposes a change to the driver API, discussion of how"},{"line_number":483,"context_line":"  other backends would implement the feature is required."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_659eca08","line":483,"range":{"start_line":479,"start_character":0,"end_line":483,"end_character":57},"updated":"2017-11-20 20:33:56.000000000","message":"Developers from other projects are going to have to be educated on:\n\n  - what the difference between a registered limits and project limit is\n  - what information is relayed in the limit\n  - how to enforce things depending on the model\n  - if there is a library to do this for them\n\nThere are a lot of things we\u0027ll have to make sure we communicate to developers looking to implement hierarchical quotas. Keystone\u0027s really just the information point here. We need to be available on the other side to help them consume that information.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":476,"context_line":"Developer Impact"},{"line_number":477,"context_line":"----------------"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"Discuss things that will affect other developers working on OpenStack,"},{"line_number":480,"context_line":"such as:"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"* If the blueprint proposes a change to the driver API, discussion of how"},{"line_number":483,"context_line":"  other backends would implement the feature is required."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_1fb6e3da","line":483,"range":{"start_line":479,"start_character":0,"end_line":483,"end_character":57},"in_reply_to":"ff82abbf_659eca08","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":489,"context_line":"Assignee(s)"},{"line_number":490,"context_line":"-----------"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"Who is leading the writing of the code? Or is this a blueprint where you\u0027re"},{"line_number":493,"context_line":"throwing it out there to see who picks it up?"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"If more than one person is working on the implementation, please designate the"},{"line_number":496,"context_line":"primary author and contact."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Primary assignee:"},{"line_number":499,"context_line":"  \u003claunchpad-id or None\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_85a3ce4f","line":496,"range":{"start_line":492,"start_character":0,"end_line":496,"end_character":27},"updated":"2017-11-20 20:33:56.000000000","message":"This could be removed.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":489,"context_line":"Assignee(s)"},{"line_number":490,"context_line":"-----------"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"Who is leading the writing of the code? Or is this a blueprint where you\u0027re"},{"line_number":493,"context_line":"throwing it out there to see who picks it up?"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"If more than one person is working on the implementation, please designate the"},{"line_number":496,"context_line":"primary author and contact."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Primary assignee:"},{"line_number":499,"context_line":"  \u003claunchpad-id or None\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_815ab1f0","line":496,"range":{"start_line":492,"start_character":0,"end_line":496,"end_character":27},"in_reply_to":"ff82abbf_85a3ce4f","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":496,"context_line":"primary author and contact."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Primary assignee:"},{"line_number":499,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"Other contributors:"},{"line_number":502,"context_line":"  \u003claunchpad-id or None\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_2588c2c4","line":499,"range":{"start_line":499,"start_character":2,"end_line":499,"end_character":24},"updated":"2017-11-20 20:33:56.000000000","message":"We\u0027ll have to update this before we can commit it to the release.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":496,"context_line":"primary author and contact."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Primary assignee:"},{"line_number":499,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"Other contributors:"},{"line_number":502,"context_line":"  \u003claunchpad-id or None\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_e1637db0","line":499,"range":{"start_line":499,"start_character":2,"end_line":499,"end_character":24},"in_reply_to":"ff82abbf_2588c2c4","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":504,"context_line":"Work Items"},{"line_number":505,"context_line":"----------"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"Work items or tasks -- break the feature up into the things that need to be"},{"line_number":508,"context_line":"done to implement it. Those parts might end up being done by different people,"},{"line_number":509,"context_line":"but we\u0027re mostly trying to understand the timeline for implementation."},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_a5629215","line":509,"range":{"start_line":507,"start_character":0,"end_line":509,"end_character":70},"updated":"2017-11-20 20:33:56.000000000","message":"I\u0027ve broken the work into a list of smaller tasks in a trello card [0]. Feel free to reference that here, copy/paste the list, or leave feedback on it.\n\n[0] https://trello.com/c/OMtxcBeh/16-unified-limits","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":504,"context_line":"Work Items"},{"line_number":505,"context_line":"----------"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"Work items or tasks -- break the feature up into the things that need to be"},{"line_number":508,"context_line":"done to implement it. Those parts might end up being done by different people,"},{"line_number":509,"context_line":"but we\u0027re mostly trying to understand the timeline for implementation."},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_bfcc976a","line":509,"range":{"start_line":507,"start_character":0,"end_line":509,"end_character":70},"in_reply_to":"ff82abbf_a5629215","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"* Include specific references to specs and/or blueprints in keystone, or in"},{"line_number":516,"context_line":"  other projects, that this one either depends on or is related to."},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"* If this requires functionality of another project that is not currently used"},{"line_number":519,"context_line":"  by Keystone (such as the glance v2 API when we previously only required v1),"},{"line_number":520,"context_line":"  document that fact."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"* Does this feature require any new library dependencies or code otherwise not"},{"line_number":523,"context_line":"  included in OpenStack? Or does it depend on a specific version of library?"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_057d7eb0","line":523,"range":{"start_line":515,"start_character":0,"end_line":523,"end_character":76},"updated":"2017-11-20 20:33:56.000000000","message":"This boilerplate code could be removed.","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":512,"context_line":"Dependencies"},{"line_number":513,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"* Include specific references to specs and/or blueprints in keystone, or in"},{"line_number":516,"context_line":"  other projects, that this one either depends on or is related to."},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"* If this requires functionality of another project that is not currently used"},{"line_number":519,"context_line":"  by Keystone (such as the glance v2 API when we previously only required v1),"},{"line_number":520,"context_line":"  document that fact."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"* Does this feature require any new library dependencies or code otherwise not"},{"line_number":523,"context_line":"  included in OpenStack? Or does it depend on a specific version of library?"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_a15d75ea","line":523,"range":{"start_line":515,"start_character":0,"end_line":523,"end_character":76},"in_reply_to":"ff82abbf_057d7eb0","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08c4c63d926f004d8af9f58e030f9d4e00b1074d","unresolved":false,"context_lines":[{"line_number":534,"context_line":"References"},{"line_number":535,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"Please add any useful references here. You are not required to have any"},{"line_number":538,"context_line":"reference. Moreover, this specification should still make sense when your"},{"line_number":539,"context_line":"references are unavailable. Examples of what you could include are:"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"* Links to mailing list or IRC discussions"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"* Links to notes from a summit session"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"* Links to relevant research, if appropriate"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"* Related specifications as appropriate (e.g.  if it\u0027s an EC2 thing, link the"},{"line_number":548,"context_line":"  EC2 docs)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"* Anything else you feel it is worthwhile to refer to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_e5589a57","line":550,"range":{"start_line":537,"start_character":1,"end_line":550,"end_character":53},"updated":"2017-11-20 20:33:56.000000000","message":"We can remove boilerplate code, but we could leave a link to the general unified limit document. \n\nhttp://specs.openstack.org/openstack/keystone-specs/specs/keystone/ongoing/unified-limits.html","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ae7f7e0c4705983491c6aedc00f207beb0c79f91","unresolved":false,"context_lines":[{"line_number":534,"context_line":"References"},{"line_number":535,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"Please add any useful references here. You are not required to have any"},{"line_number":538,"context_line":"reference. Moreover, this specification should still make sense when your"},{"line_number":539,"context_line":"references are unavailable. Examples of what you could include are:"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"* Links to mailing list or IRC discussions"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"* Links to notes from a summit session"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"* Links to relevant research, if appropriate"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"* Related specifications as appropriate (e.g.  if it\u0027s an EC2 thing, link the"},{"line_number":548,"context_line":"  EC2 docs)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"* Anything else you feel it is worthwhile to refer to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff82abbf_61f44dd0","line":550,"range":{"start_line":537,"start_character":1,"end_line":550,"end_character":53},"in_reply_to":"ff82abbf_e5589a57","updated":"2017-11-23 02:57:05.000000000","message":"Done","commit_id":"81b00684ac27d3cbd6273aeae89d539161201c3d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"911585a592aea66a1bed97c8c196edcf3f3f3634","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone Limits API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_480008ac","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":8},"updated":"2017-11-24 17:05:00.000000000","message":"nit: s/Keystone/Unified/\n\nSince this lives within the keystone specs repository, it\u0027s already implied.","commit_id":"e9df41375eac3e86086bf4333e2ee6e16019dc07"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"911585a592aea66a1bed97c8c196edcf3f3f3634","unresolved":false,"context_lines":[{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone Limits API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Problem Description"},{"line_number":13,"context_line":"\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":8,"id":"ff82abbf_4819e81f","line":10,"updated":"2017-11-24 17:05:00.000000000","message":"We can add a brief description here and a link to the BP used to track the work in Launchpad: \n\n  Details for associating resource limits to projects.\n\n  `bp unified-limits \u003chttps://blueprints.launchpad.net/keystone/+spec/unified-limits\u003e`_","commit_id":"e9df41375eac3e86086bf4333e2ee6e16019dc07"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"kinds of Limits: ``Registered Limits`` and ``Project Limits``."},{"line_number":32,"context_line":"``Registered Limits`` are the defaults limits. You can\u0027t set a project limit on"},{"line_number":33,"context_line":"something that\u0027s not a registered limit."},{"line_number":34,"context_line":"``Project Limits`` are the real limits for each project."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Registered Limits"},{"line_number":37,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_8243286c","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":56},"updated":"2017-11-27 21:22:30.000000000","message":"This is not clear. Call this an override not a \"real limit\". This implies that nova is storing use data in keystone.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"kinds of Limits: ``Registered Limits`` and ``Project Limits``."},{"line_number":32,"context_line":"``Registered Limits`` are the defaults limits. You can\u0027t set a project limit on"},{"line_number":33,"context_line":"something that\u0027s not a registered limit."},{"line_number":34,"context_line":"``Project Limits`` are the real limits for each project."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Registered Limits"},{"line_number":37,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_0d42e03e","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":56},"in_reply_to":"ff82abbf_8243286c","updated":"2017-11-28 08:10:01.000000000","message":"Done","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":".. note::"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":230,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":231,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":232,"context_line":"   \"default_limit\" which means drop by absense (this feels a little"},{"line_number":233,"context_line":"   too clever)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"**Request:** ``DELETE /registered-limits``"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_851fb259","line":233,"range":{"start_line":229,"start_character":0,"end_line":233,"end_character":14},"updated":"2017-11-27 21:22:30.000000000","message":"Drop *all* ID information from the API.\n\nUtilize a path like setup?:\n\nDELETE /registered-limits/\u003cservice_type\u003e/region/resource_name \n\nAlternative:\n\nDELETE /registered-limits/service_type \u003c-- All for the service type\n\nDELETE /registered-limits/service_type?resource_name\u003d\u003cname\u003e \u003c-- just the resource_name\n\nDELETE /registered-limits/service_type?region\u003d\u003cregion\u003e \u003c-- all for the region\n\n\nDELETE /registered-limits/service_type?region\u003d\u003cregion\u003e\u0026resource_name\u003d\u003cname\u003e \u003c-- very specific deletion\n\nIf you don\u0027t want to use IDs, don\u0027t lean on IDs externally.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":".. note::"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"   Not entirely sure what the right delete semantics are here, as I"},{"line_number":230,"context_line":"   wanted to not be tracking limits by ids. Below is a random"},{"line_number":231,"context_line":"   idea. Another idea would be doing the PUT without the"},{"line_number":232,"context_line":"   \"default_limit\" which means drop by absense (this feels a little"},{"line_number":233,"context_line":"   too clever)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"**Request:** ``DELETE /registered-limits``"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_2da1e494","line":233,"range":{"start_line":229,"start_character":0,"end_line":233,"end_character":14},"in_reply_to":"ff82abbf_851fb259","updated":"2017-11-28 08:10:01.000000000","message":"ok, I\u0027ll drop all the \u0027ID\u0027 part.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":242,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":243,"context_line":"  to other resource names for the same service and region."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"**Request Body**"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":".. code-block:: json"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"limits\":["},{"line_number":251,"context_line":"            {"},{"line_number":252,"context_line":"                \"service_type\": \"compute\","},{"line_number":253,"context_line":"                \"region\": \"region1\","},{"line_number":254,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":255,"context_line":"            }"},{"line_number":256,"context_line":"        ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Response:**"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_e5531e16","line":257,"range":{"start_line":245,"start_character":0,"end_line":257,"end_character":5},"updated":"2017-11-27 21:22:30.000000000","message":"Warning:    A payload within a DELETE request message has no defined semantics;\n   sending a payload body on a DELETE request might cause some existing\n   implementations to reject the request.\n\n(from RFC 7231) - This may cause issues depending on what is fronting Keystone.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":242,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":243,"context_line":"  to other resource names for the same service and region."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"**Request Body**"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":".. code-block:: json"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"limits\":["},{"line_number":251,"context_line":"            {"},{"line_number":252,"context_line":"                \"service_type\": \"compute\","},{"line_number":253,"context_line":"                \"region\": \"region1\","},{"line_number":254,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":255,"context_line":"            }"},{"line_number":256,"context_line":"        ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Response:**"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_ed71bc45","line":257,"range":{"start_line":245,"start_character":0,"end_line":257,"end_character":5},"in_reply_to":"ff82abbf_e5531e16","updated":"2017-11-28 08:10:01.000000000","message":"Done","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":265,"context_line":"~~~~~~~~~~~~"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"All the Registered Limits resource above have no UUID. Although there is no"},{"line_number":268,"context_line":"problem in code logic, it\u0027s inconsistent with other keystone resources. So if"},{"line_number":269,"context_line":"we\u0027d like to keep it the same as other resources, the Registered Limits should"},{"line_number":270,"context_line":"have the unique ID. It will be something like:"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":".. code-block:: json"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    {"},{"line_number":275,"context_line":"        \"limits\":["},{"line_number":276,"context_line":"            {"},{"line_number":277,"context_line":"                \"service_type\": \"compute\","},{"line_number":278,"context_line":"                \"id\": \"fd7d5c939b6d4ab48071f248b2cd12b8\""},{"line_number":279,"context_line":"                \"region\": \"region1\","},{"line_number":280,"context_line":"                \"resource_name\": \"cores\","},{"line_number":281,"context_line":"                \"default_limit\": 10"},{"line_number":282,"context_line":"            }"},{"line_number":283,"context_line":"        ]"},{"line_number":284,"context_line":"    }"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"And the Update and Delete API urls will contain the resource id:"},{"line_number":287,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_45420a40","line":284,"range":{"start_line":268,"start_character":0,"end_line":284,"end_character":5},"updated":"2017-11-27 21:22:30.000000000","message":"IDs are only useful if you may have specifics that are duplicated at the same endpoint within the URI. Limits are not and you\u0027ll *never* have 2 entries for \"VM Limit\" in \"region X\" for \"service-compute\" as it would be broken.\n\nSimilar you can\u0027t have duplicates for projects.\n\nDrop the UUID/ID externally. We should be consistent unless we shouldn\u0027t be (this is a case of where it doesn\u0027t make sense to be consistent)","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":265,"context_line":"~~~~~~~~~~~~"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"All the Registered Limits resource above have no UUID. Although there is no"},{"line_number":268,"context_line":"problem in code logic, it\u0027s inconsistent with other keystone resources. So if"},{"line_number":269,"context_line":"we\u0027d like to keep it the same as other resources, the Registered Limits should"},{"line_number":270,"context_line":"have the unique ID. It will be something like:"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":".. code-block:: json"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    {"},{"line_number":275,"context_line":"        \"limits\":["},{"line_number":276,"context_line":"            {"},{"line_number":277,"context_line":"                \"service_type\": \"compute\","},{"line_number":278,"context_line":"                \"id\": \"fd7d5c939b6d4ab48071f248b2cd12b8\""},{"line_number":279,"context_line":"                \"region\": \"region1\","},{"line_number":280,"context_line":"                \"resource_name\": \"cores\","},{"line_number":281,"context_line":"                \"default_limit\": 10"},{"line_number":282,"context_line":"            }"},{"line_number":283,"context_line":"        ]"},{"line_number":284,"context_line":"    }"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"And the Update and Delete API urls will contain the resource id:"},{"line_number":287,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_6dce0cb5","line":284,"range":{"start_line":268,"start_character":0,"end_line":284,"end_character":5},"in_reply_to":"ff82abbf_45420a40","updated":"2017-11-28 08:10:01.000000000","message":"Done","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":326,"context_line":"defaults without overrides."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"* 200 - OK"},{"line_number":329,"context_line":"* 403 - The override limit is greater than parent project\u0027s limit. Or 400, it"},{"line_number":330,"context_line":"        depends on how we give users the error message. Please see \"Security"},{"line_number":331,"context_line":"        Impact\" section for more information."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":".. note::"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_a580b647","line":331,"range":{"start_line":329,"start_character":0,"end_line":331,"end_character":45},"updated":"2017-11-27 21:22:30.000000000","message":"Validation Error.\n\n403 is incorrect. The user at this point has access to set the limit.\n\nUse the 403 to indicate they are forbidden from accessing the API not because the value is incorrect.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":326,"context_line":"defaults without overrides."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"* 200 - OK"},{"line_number":329,"context_line":"* 403 - The override limit is greater than parent project\u0027s limit. Or 400, it"},{"line_number":330,"context_line":"        depends on how we give users the error message. Please see \"Security"},{"line_number":331,"context_line":"        Impact\" section for more information."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":".. note::"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_6d37ec4e","line":331,"range":{"start_line":329,"start_character":0,"end_line":331,"end_character":45},"in_reply_to":"ff82abbf_a580b647","updated":"2017-11-28 08:10:01.000000000","message":"Yeah, this is what I thought as well. I said more at after L529","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0dd774ca310c699d748586430ab5b6f549d7b1cf","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"   The same as the DELETE call for a Registered Limit. If no UUID, it will be"},{"line_number":388,"context_line":"   like PUT, otherwise it should be DELETE /limits/{project_id}/{limit_id}."},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"**Request:** ``DELETE /limits/{project_id}``"},{"line_number":391,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_e5ef9e1b","line":388,"range":{"start_line":387,"start_character":1,"end_line":388,"end_character":75},"updated":"2017-11-27 21:22:30.000000000","message":"See above comments, don\u0027t lean on limit ids anywhere IMO.","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88336e538aacc2b137c67f422066081735decac1","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"   The same as the DELETE call for a Registered Limit. If no UUID, it will be"},{"line_number":388,"context_line":"   like PUT, otherwise it should be DELETE /limits/{project_id}/{limit_id}."},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"**Request:** ``DELETE /limits/{project_id}``"},{"line_number":391,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_8d2cb002","line":388,"range":{"start_line":387,"start_character":1,"end_line":388,"end_character":75},"in_reply_to":"ff82abbf_e5ef9e1b","updated":"2017-11-28 08:10:01.000000000","message":"Done","commit_id":"4801fa1e28bb4869ea48f21a8e9404aee8df9740"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4d267817ba58d3709edcc36b59e75eb93ca5bf4a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"limits\": ["},{"line_number":138,"context_line":"            {"},{"line_number":139,"context_line":"                \"service_type\": \"compute\","},{"line_number":140,"context_line":"                \"region\": \"region1\","},{"line_number":141,"context_line":"                \"resource_name\": \"cores\","},{"line_number":142,"context_line":"                \"default_limit\": 10"},{"line_number":143,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_dbc34488","line":140,"updated":"2017-11-28 18:29:50.000000000","message":"should region really be required here? Would be nice to be able to register limits that apply to all regions. Also it looks like it\u0027s possible to have deployments without a region","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"978fa60639c2a8b226de05ff1ea8e6a016d66b34","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"limits\": ["},{"line_number":138,"context_line":"            {"},{"line_number":139,"context_line":"                \"service_type\": \"compute\","},{"line_number":140,"context_line":"                \"region\": \"region1\","},{"line_number":141,"context_line":"                \"resource_name\": \"cores\","},{"line_number":142,"context_line":"                \"default_limit\": 10"},{"line_number":143,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_c6526bde","line":140,"in_reply_to":"ff82abbf_2269d5f7","updated":"2017-11-29 15:46:28.000000000","message":"What about just having region be None?","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3b2c988f0d3ccba161eb8076a6e15369acd217e6","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"limits\": ["},{"line_number":138,"context_line":"            {"},{"line_number":139,"context_line":"                \"service_type\": \"compute\","},{"line_number":140,"context_line":"                \"region\": \"region1\","},{"line_number":141,"context_line":"                \"resource_name\": \"cores\","},{"line_number":142,"context_line":"                \"default_limit\": 10"},{"line_number":143,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_2269d5f7","line":140,"in_reply_to":"ff82abbf_dbc34488","updated":"2017-11-29 02:11:22.000000000","message":"Good point. There is a IRC log for this question:\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2017-11-29.log.html#t2017-11-29T00:46:49\n\nI\u0027d like to write my thought here:\n\n1. Should region be required?\nyes. For \"Registered Limits\", the region may be not required as you said for the global usage. But actullay IMO, In real case, regions are separate by each other(For example, one at us-east, and another at us-west) and they only care their limits. So set the \"Registered Limits\" to all regions maybe a little rough.\n\n2. Some deployments has no region\nThe endpoint can have no region. But it\u0027s unreasonable for real usage. It looks like that we can solve this by adding a default region for each endpoint through a db migration.","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"395371c89d112e3b278660c3959a97b570eee922","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        ]"},{"line_number":157,"context_line":"    }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Update a Registered Limit"},{"line_number":160,"context_line":"-------------------------"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Update is done similar to a POST however just the limits that you wish"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_fbe5e8dc","line":159,"updated":"2017-11-28 18:36:34.000000000","message":"Why don\u0027t I see a similar section for \"Create a Registered Limit\"?","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"f42a780ed01aacf9e299ca88b1fdd367795521df","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        ]"},{"line_number":157,"context_line":"    }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Update a Registered Limit"},{"line_number":160,"context_line":"-------------------------"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Update is done similar to a POST however just the limits that you wish"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_1bcae29f","line":159,"in_reply_to":"ff82abbf_4cd3f504","updated":"2017-11-30 01:14:20.000000000","message":"ops, yeah. It\u0027s on L42. But for \"project limit\", we use PUT for both create and update. Should we change them as well?","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3b2c988f0d3ccba161eb8076a6e15369acd217e6","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        ]"},{"line_number":157,"context_line":"    }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Update a Registered Limit"},{"line_number":160,"context_line":"-------------------------"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Update is done similar to a POST however just the limits that you wish"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_62983d74","line":159,"in_reply_to":"ff82abbf_fbe5e8dc","updated":"2017-11-29 02:11:22.000000000","message":"It should be \"Create or Update a Registered Limit\" like Project Limit does.\nBut I\u0027m not sure if we should use POST for create and PUT for update.","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"779bbf732a1e63127b2000cc8d6a45ef5769a3eb","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        ]"},{"line_number":157,"context_line":"    }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Update a Registered Limit"},{"line_number":160,"context_line":"-------------------------"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Update is done similar to a POST however just the limits that you wish"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_4cd3f504","line":159,"in_reply_to":"ff82abbf_fbe5e8dc","updated":"2017-11-29 15:44:13.000000000","message":"It\u0027s on line 42 I think.","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4d267817ba58d3709edcc36b59e75eb93ca5bf4a","unresolved":false,"context_lines":[{"line_number":163,"context_line":"to override are included. If the ``service_type``, ``region``, or"},{"line_number":164,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"**Request:** ``PUT /registered-limits``"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"**Parameters**"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_3b2b5083","line":166,"updated":"2017-11-28 18:29:50.000000000","message":"should use the same path structure as DELETE","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3b2c988f0d3ccba161eb8076a6e15369acd217e6","unresolved":false,"context_lines":[{"line_number":163,"context_line":"to override are included. If the ``service_type``, ``region``, or"},{"line_number":164,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"**Request:** ``PUT /registered-limits``"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"**Parameters**"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_e25bedf2","line":166,"in_reply_to":"ff82abbf_3b2b5083","updated":"2017-11-29 02:11:22.000000000","message":"Here is a case that users can update some limits within one request. So the url should be PUT /registered-limits, and the request body can be :\n    {\n        \"limits\":[\n            {\n                \"service_type\": \"compute\",\n                \"region\": \"region1\",\n                \"resource_name\": \"ram_mb\",\n                \"default_limit\": 10240\n            },\n            {\n                \"service_type\": \"compute\",\n                \"region\": \"region1\",\n                \"resource_name\": \"cores\",\n                \"default_limit\": 10\n            },\n        ]\n    }","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4d267817ba58d3709edcc36b59e75eb93ca5bf4a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"Delete a Registered Limit"},{"line_number":226,"context_line":"-------------------------"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"**Request:** ``DELETE /registered-limits/{service_type}/{region}/{resource_name}``"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"**Parameters**"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_5b6654c3","line":228,"updated":"2017-11-28 18:29:50.000000000","message":"if region isn\u0027t required for registered limits (see above comment) there would need to be an alternative path that doesn\u0027t include {region}","commit_id":"249e736ddcbb73b16026cd92624ef663d2974320"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"**Parameters**"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":56,"context_line":"  should match a service in the service catalog."},{"line_number":57,"context_line":"* ``region`` - The region that the service is hosted in."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c75012d8","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":14},"updated":"2017-12-01 15:15:30.000000000","message":"How come this changed from ``service_type`` to ``service_id``?","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3861904fba23a105e9cf6e42cfd86f77d8ea3c8a","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"**Parameters**"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":56,"context_line":"  should match a service in the service catalog."},{"line_number":57,"context_line":"* ``region`` - The region that the service is hosted in."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_1aecdfc5","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":14},"in_reply_to":"df87a7cf_026d6d97","updated":"2017-12-04 17:22:24.000000000","message":"I *hate* our catalog backend so much. It\u0027s so sloppy. This makes me sad.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cc09284cb4aeae5134743fb735d8032abfb37f2f","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"**Parameters**"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":56,"context_line":"  should match a service in the service catalog."},{"line_number":57,"context_line":"* ``region`` - The region that the service is hosted in."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_026d6d97","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":14},"in_reply_to":"df87a7cf_03d7bcef","updated":"2017-12-03 19:48:37.000000000","message":"I agree with wangxiyuan here. The endpoint API uses service_id here too for that same reason: https://developer.openstack.org/api-ref/identity/v3/index.html#create-endpoint","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"9c62e80040a10f93621b7bb8f7dbeeb42db5daf1","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"**Parameters**"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":56,"context_line":"  should match a service in the service catalog."},{"line_number":57,"context_line":"* ``region`` - The region that the service is hosted in."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_03d7bcef","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":14},"in_reply_to":"df87a7cf_3b6c7707","updated":"2017-12-02 12:55:40.000000000","message":"because that the service_type in service table in not unique. What if there are more than one service_type called \"compute\"?","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1f894e73613fb382e6a84ab0475f869a22415ca7","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"**Parameters**"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":56,"context_line":"  should match a service in the service catalog."},{"line_number":57,"context_line":"* ``region`` - The region that the service is hosted in."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_3b6c7707","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":14},"in_reply_to":"df87a7cf_c75012d8","updated":"2017-12-01 17:43:48.000000000","message":"++ This doesn\u0027t make sense to be id.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    .. note::"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"       Now Keystone supports create endpoints for deployments without region."},{"line_number":62,"context_line":"       For those deployments who have no regions, here are some solutions:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"       1. Create a default region like domain does, then move them to the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_040a7825","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":28},"updated":"2017-12-01 15:15:30.000000000","message":"Hasn\u0027t keystone always supported this? This would have been the case since the inception of v3.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3861904fba23a105e9cf6e42cfd86f77d8ea3c8a","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    .. note::"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"       Now Keystone supports create endpoints for deployments without region."},{"line_number":62,"context_line":"       For those deployments who have no regions, here are some solutions:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"       1. Create a default region like domain does, then move them to the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_7ac5eb3b","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":28},"in_reply_to":"df87a7cf_040a7825","updated":"2017-12-04 17:22:24.000000000","message":"Yep. This line can be removed. It\u0027s always been the case.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"779f2366ca6237b36ab1b2571c86d11384960034","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    .. note::"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"       Now Keystone supports create endpoints for deployments without region."},{"line_number":62,"context_line":"       For those deployments who have no regions, here are some solutions:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"       1. Create a default region like domain does, then move them to the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b93db8bc","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":28},"in_reply_to":"df87a7cf_7ac5eb3b","updated":"2017-12-05 02:53:35.000000000","message":"Done","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"       1. Create a default region like domain does, then move them to the"},{"line_number":65,"context_line":"          default region by a new db migration."},{"line_number":66,"context_line":"       2. Let limit support region to be None as well and leave them there."},{"line_number":67,"context_line":"       3. If a deployment want to use unified limit, it should be in a region."},{"line_number":68,"context_line":"          If not, reject it."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_872c4a9a","line":66,"range":{"start_line":66,"start_character":6,"end_line":66,"end_character":75},"updated":"2017-12-01 15:15:30.000000000","message":"The more and more I think about it, the more I lean towards option #2.\n\nSome services aren\u0027t deployed within a region, and keystone is actually a good example of that. Some deployments want to make sure keystone is available, or advertised, globally and not associated to a specific region. This is different from having a different nova in each region.\n\nThere are also deployments that *do* have different keystones in different regions.\n\nMaking region optional for a registered limit and project limit address both of those cases, IMO.\n\nWe should try and hash out this detail before merging the spec. How this is addressed can affect APIs based on the configuration or setup of the deployment (option #3), which is something we\u0027ve actively wanted to avoid doing.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":64,"context_line":"       1. Create a default region like domain does, then move them to the"},{"line_number":65,"context_line":"          default region by a new db migration."},{"line_number":66,"context_line":"       2. Let limit support region to be None as well and leave them there."},{"line_number":67,"context_line":"       3. If a deployment want to use unified limit, it should be in a region."},{"line_number":68,"context_line":"          If not, reject it."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":71,"context_line":"  to other resource names for the same service and region."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_67758698","line":68,"range":{"start_line":67,"start_character":7,"end_line":68,"end_character":28},"updated":"2017-12-01 15:15:30.000000000","message":"I wonder if this is too high a bar for deployment that don\u0027t use the concept of regions.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    {"},{"line_number":80,"context_line":"        \"limits\": ["},{"line_number":81,"context_line":"            {"},{"line_number":82,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":83,"context_line":"                \"region\": \"region1\","},{"line_number":84,"context_line":"                \"resource_name\": \"cores\","},{"line_number":85,"context_line":"                \"default_limit\": 10"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c769f28b","line":82,"range":{"start_line":82,"start_character":16,"end_line":82,"end_character":65},"updated":"2017-12-01 15:15:30.000000000","message":"Having this be ``service_type`` help readability here quite a bit. How come that attribute changed?","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":128,"context_line":"Update Registered Limits"},{"line_number":129,"context_line":"------------------------"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Update is done similar to a POST however just the limits that you wish"},{"line_number":132,"context_line":"to override are included. If the ``service_id``, ``region``, or"},{"line_number":133,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":134,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_67d26637","line":131,"range":{"start_line":131,"start_character":28,"end_line":131,"end_character":32},"updated":"2017-12-01 15:15:30.000000000","message":"nit: ``POST``","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Update is done similar to a POST however just the limits that you wish"},{"line_number":132,"context_line":"to override are included. If the ``service_id``, ``region``, or"},{"line_number":133,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"**Request:** ``PUT /registered-limits``"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_27b53eef","line":133,"updated":"2017-12-01 15:15:30.000000000","message":"What if I POST a service, resource, and region, but the service isn\u0027t actually in that region? That would be an error case I would think.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Registered limits can be read by anyone with a valid token."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"**Request:** ``GET /registered-limits/{service_id}/{region}/{resource_name}``"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"**Parameters**"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c7c1f230","line":242,"range":{"start_line":242,"start_character":52,"end_line":242,"end_character":58},"updated":"2017-12-01 15:15:30.000000000","message":"If we make this optional, we\u0027ll have to remove this from the path. One possible way to get around that would be to associate each registered-limit a uuid.\n\n  GET /registered-limits/{registered-limit-id}\n\nWhich can handle\n  \n    {\n        \"service_type\": \"compute\",\n        \"region\": \"region1\",\n        \"resource_name\": \"cores\",\n        \"default_limit\": 10\n    }\n\n\nbut it can also handle\n\n\n    {\n        \"service_type\": \"keystone\",\n        \"resource_name\": \"projects\",\n        \"default_limit\": 5\n    }","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"779f2366ca6237b36ab1b2571c86d11384960034","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Registered limits can be read by anyone with a valid token."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"**Request:** ``GET /registered-limits/{service_id}/{region}/{resource_name}``"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"**Parameters**"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_f9f81f4a","line":242,"range":{"start_line":242,"start_character":52,"end_line":242,"end_character":58},"in_reply_to":"df87a7cf_225191d9","updated":"2017-12-05 02:53:35.000000000","message":"I add it here to complete the resource\u0027s CRUD standard. Of cause we can remove it now and add it back in the future if some consumer want it.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cc09284cb4aeae5134743fb735d8032abfb37f2f","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Registered limits can be read by anyone with a valid token."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"**Request:** ``GET /registered-limits/{service_id}/{region}/{resource_name}``"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"**Parameters**"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_225191d9","line":242,"range":{"start_line":242,"start_character":52,"end_line":242,"end_character":58},"in_reply_to":"df87a7cf_c7c1f230","updated":"2017-12-03 19:48:37.000000000","message":"Do we really need to support showing a limit? We could just support list + filters, then no need to have all these identifiers in the path and no need to worry about null regions.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":288,"context_line":"--------------"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"The following API calls are specific to the management of Project Limits. They"},{"line_number":291,"context_line":"are admin only APIs."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Create Project Limits"},{"line_number":294,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_47eba2af","line":291,"updated":"2017-12-01 15:15:30.000000000","message":"But project administrator should eventually be able to manage this resource.","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"9c62e80040a10f93621b7bb8f7dbeeb42db5daf1","unresolved":false,"context_lines":[{"line_number":288,"context_line":"--------------"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"The following API calls are specific to the management of Project Limits. They"},{"line_number":291,"context_line":"are admin only APIs."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Create Project Limits"},{"line_number":294,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_83042c7d","line":291,"in_reply_to":"df87a7cf_47eba2af","updated":"2017-12-02 12:55:40.000000000","message":"yeah. I\u0027ll make it more clear in the next PS","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":412,"context_line":"Show a Project Limit"},{"line_number":413,"context_line":"--------------------"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"**Request:** ``GET /limits/{project_id}/{service_id}/{region}/{resource_name}``"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"**Response:**"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_27345e4a","line":415,"range":{"start_line":415,"start_character":54,"end_line":415,"end_character":60},"updated":"2017-12-01 15:15:30.000000000","message":"Same concerns here about having region in the path if we decide to make it optional","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a897baf1db85e1e82bd11ed48207458de419737","unresolved":false,"context_lines":[{"line_number":681,"context_line":"Documentation Impact"},{"line_number":682,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"The usage of the new limit APIs should be addressed."},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"References"},{"line_number":687,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_a775cefc","line":684,"range":{"start_line":684,"start_character":0,"end_line":684,"end_character":52},"updated":"2017-12-01 15:15:30.000000000","message":"The following is a list of significant documentation bits, IMO:\n\n- Document the difference between Registered Limits and Project Limits\n- Document Registered Limits in the installation guide (similar to how we create new services)\n- Provide common use cases in an example section of the administrator guide","commit_id":"ddb71ebf64d4c89ff6ee5c06a45113606231b41f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"**Request Parameters**"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":55,"context_line":"  should match a service in the service catalog."},{"line_number":56,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e9b3524c","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":14},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":55,"context_line":"  should match a service in the service catalog."},{"line_number":56,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    .. note::"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_6912e20b","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":10},"updated":"2017-12-05 21:14:25.000000000","message":"I think we should use ``region_id`` to be more consistent with other things in keystone that reference regions (like endpoints).","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":55,"context_line":"  should match a service in the service catalog."},{"line_number":56,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    .. note::"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_bb958b42","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":10},"in_reply_to":"df87a7cf_6912e20b","updated":"2017-12-06 06:30:10.000000000","message":"Done","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  should match a service in the service catalog."},{"line_number":56,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    .. note::"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"       For those deployments who have no regions, here are some possible"},{"line_number":61,"context_line":"       solutions:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"       1. Create a default region like domain does, then move them to the"},{"line_number":64,"context_line":"          default region by a new db migration."},{"line_number":65,"context_line":"       2. Let limit support region to be None as well and leave them there."},{"line_number":66,"context_line":"       3. If a deployment want to use unified limit, it should be in a region."},{"line_number":67,"context_line":"          If not, reject it."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"       This spec will follow the second solution at this moment. Unfortunately,"},{"line_number":70,"context_line":"       Only ``id`` is the unique key for endpoint. We can\u0027t distinguish a"},{"line_number":71,"context_line":"       deployment through ``service`` and ``region``. So that we should add"},{"line_number":72,"context_line":"       ``id`` here."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":75,"context_line":"  to other resource names for the same service and region."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a9878a61","line":72,"range":{"start_line":58,"start_character":4,"end_line":72,"end_character":19},"updated":"2017-12-05 21:14:25.000000000","message":"I don\u0027t think this note is needed anymore if we make region_ids optional.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  should match a service in the service catalog."},{"line_number":56,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    .. note::"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"       For those deployments who have no regions, here are some possible"},{"line_number":61,"context_line":"       solutions:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"       1. Create a default region like domain does, then move them to the"},{"line_number":64,"context_line":"          default region by a new db migration."},{"line_number":65,"context_line":"       2. Let limit support region to be None as well and leave them there."},{"line_number":66,"context_line":"       3. If a deployment want to use unified limit, it should be in a region."},{"line_number":67,"context_line":"          If not, reject it."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"       This spec will follow the second solution at this moment. Unfortunately,"},{"line_number":70,"context_line":"       Only ``id`` is the unique key for endpoint. We can\u0027t distinguish a"},{"line_number":71,"context_line":"       deployment through ``service`` and ``region``. So that we should add"},{"line_number":72,"context_line":"       ``id`` here."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":75,"context_line":"  to other resource names for the same service and region."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_bb3fcb23","line":72,"range":{"start_line":58,"start_character":4,"end_line":72,"end_character":19},"in_reply_to":"df87a7cf_a9878a61","updated":"2017-12-06 06:30:10.000000000","message":"Done","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    {"},{"line_number":84,"context_line":"        \"limits\": ["},{"line_number":85,"context_line":"            {"},{"line_number":86,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":87,"context_line":"                \"region\": \"region1\","},{"line_number":88,"context_line":"                \"resource_name\": \"cores\","},{"line_number":89,"context_line":"                \"default_limit\": 10"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_29937aa5","line":86,"range":{"start_line":86,"start_character":17,"end_line":86,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"limits\": ["},{"line_number":85,"context_line":"            {"},{"line_number":86,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":87,"context_line":"                \"region\": \"region1\","},{"line_number":88,"context_line":"                \"resource_name\": \"cores\","},{"line_number":89,"context_line":"                \"default_limit\": 10"},{"line_number":90,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a9d6aa26","line":87,"range":{"start_line":87,"start_character":17,"end_line":87,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                \"default_limit\": 10"},{"line_number":90,"context_line":"            },"},{"line_number":91,"context_line":"            {"},{"line_number":92,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":93,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":94,"context_line":"                \"default_limit\": 20480"},{"line_number":95,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c991ae9b","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Response Parameters**"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* ``id`` - The unique uuid for each registered limit. Call it ``id`` to keep"},{"line_number":106,"context_line":"  the same with other resources in Keystone."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"**Response Code**"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_69e0a2fb","line":106,"range":{"start_line":105,"start_character":0,"end_line":106,"end_character":44},"updated":"2017-12-05 21:14:25.000000000","message":"This should be an entire list of all parameters returned.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Response Parameters**"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* ``id`` - The unique uuid for each registered limit. Call it ``id`` to keep"},{"line_number":106,"context_line":"  the same with other resources in Keystone."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"**Response Code**"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_db3acf32","line":106,"range":{"start_line":105,"start_character":0,"end_line":106,"end_character":44},"in_reply_to":"df87a7cf_69e0a2fb","updated":"2017-12-06 06:30:10.000000000","message":"Done","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":143,"context_line":"------------------------"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Update is done similar to a POST however just the limits that you wish"},{"line_number":146,"context_line":"to override are included. If the ``service_id``, ``region``, or"},{"line_number":147,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"**Request:** ``PUT /registered-limits/{registered-limits-id}``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_49b6fefc","line":146,"range":{"start_line":146,"start_character":51,"end_line":146,"end_character":57},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":143,"context_line":"------------------------"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Update is done similar to a POST however just the limits that you wish"},{"line_number":146,"context_line":"to override are included. If the ``service_id``, ``region``, or"},{"line_number":147,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"**Request:** ``PUT /registered-limits/{registered-limits-id}``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e9eb52d9","line":146,"range":{"start_line":146,"start_character":35,"end_line":146,"end_character":45},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":151,"context_line":"**Request Parameters**"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"* ``registered-limits-id`` - The id for the specified registered limit."},{"line_number":154,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":155,"context_line":"  should match a service in the service catalog."},{"line_number":156,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":157,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_49ab5e88","line":154,"range":{"start_line":154,"start_character":4,"end_line":154,"end_character":14},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":153,"context_line":"* ``registered-limits-id`` - The id for the specified registered limit."},{"line_number":154,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":155,"context_line":"  should match a service in the service catalog."},{"line_number":156,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":157,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":158,"context_line":"  to other resource names for the same service and region."},{"line_number":159,"context_line":"* ``default_limit`` - The default limit for all projects to assume for that"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_69ae6299","line":156,"range":{"start_line":156,"start_character":4,"end_line":156,"end_character":10},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"limits\":["},{"line_number":168,"context_line":"            {"},{"line_number":169,"context_line":"                \"id\": \"1dc633fe5acd4182b63f68c9cc8e768a\","},{"line_number":170,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":171,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":172,"context_line":"                \"default_limit\": 10240"},{"line_number":173,"context_line":"            }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_09955640","line":170,"range":{"start_line":170,"start_character":17,"end_line":170,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \"limits\": ["},{"line_number":192,"context_line":"            {"},{"line_number":193,"context_line":"                \"id\": \"0681e10c01c044d78ef8e5cb592c6446\","},{"line_number":194,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":195,"context_line":"                \"region\": \"region1\","},{"line_number":196,"context_line":"                \"resource_name\": \"cores\","},{"line_number":197,"context_line":"                \"default_limit\": 10"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c99e8e62","line":194,"range":{"start_line":194,"start_character":17,"end_line":194,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            {"},{"line_number":193,"context_line":"                \"id\": \"0681e10c01c044d78ef8e5cb592c6446\","},{"line_number":194,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":195,"context_line":"                \"region\": \"region1\","},{"line_number":196,"context_line":"                \"resource_name\": \"cores\","},{"line_number":197,"context_line":"                \"default_limit\": 10"},{"line_number":198,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e9991279","line":195,"range":{"start_line":195,"start_character":17,"end_line":195,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            },"},{"line_number":199,"context_line":"            {"},{"line_number":200,"context_line":"                \"id\": \"1dc633fe5acd4182b63f68c9cc8e768a\","},{"line_number":201,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":202,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":203,"context_line":"                \"default_limit\": 10240"},{"line_number":204,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a98d4a32","line":201,"range":{"start_line":201,"start_character":17,"end_line":201,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            },"},{"line_number":205,"context_line":"            {"},{"line_number":206,"context_line":"                \"id\": \"5c4182eb45304cb3ac89030b19ab5a81\","},{"line_number":207,"context_line":"                \"service_id\": \"ae22fb0dfbd34464bf67e758977f4839\","},{"line_number":208,"context_line":"                \"region\": \"region1\","},{"line_number":209,"context_line":"                \"resource_name\": \"storage_gb\","},{"line_number":210,"context_line":"                \"default_limit\": 20"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_69874211","line":207,"range":{"start_line":207,"start_character":17,"end_line":207,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            {"},{"line_number":206,"context_line":"                \"id\": \"5c4182eb45304cb3ac89030b19ab5a81\","},{"line_number":207,"context_line":"                \"service_id\": \"ae22fb0dfbd34464bf67e758977f4839\","},{"line_number":208,"context_line":"                \"region\": \"region1\","},{"line_number":209,"context_line":"                \"resource_name\": \"storage_gb\","},{"line_number":210,"context_line":"                \"default_limit\": 20"},{"line_number":211,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_4984be0c","line":208,"range":{"start_line":208,"start_character":17,"end_line":208,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":222,"context_line":"**Request filter:**"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Registered limits will also support filters to make it easier to see"},{"line_number":225,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"},{"line_number":226,"context_line":"will all be valid search parameters."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"**Response:**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c9776e3a","line":225,"range":{"start_line":225,"start_character":33,"end_line":225,"end_character":39},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":222,"context_line":"**Request filter:**"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Registered limits will also support filters to make it easier to see"},{"line_number":225,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"},{"line_number":226,"context_line":"will all be valid search parameters."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"**Response:**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_29793a2e","line":225,"range":{"start_line":225,"start_character":17,"end_line":225,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        \"limits\": ["},{"line_number":243,"context_line":"            {"},{"line_number":244,"context_line":"                \"id\": \"0681e10c01c044d78ef8e5cb592c6446\","},{"line_number":245,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":246,"context_line":"                \"region\": \"region1\","},{"line_number":247,"context_line":"                \"resource_name\": \"cores\","},{"line_number":248,"context_line":"                \"default_limit\": 10"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_898f2622","line":245,"range":{"start_line":245,"start_character":17,"end_line":245,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            {"},{"line_number":244,"context_line":"                \"id\": \"0681e10c01c044d78ef8e5cb592c6446\","},{"line_number":245,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":246,"context_line":"                \"region\": \"region1\","},{"line_number":247,"context_line":"                \"resource_name\": \"cores\","},{"line_number":248,"context_line":"                \"default_limit\": 10"},{"line_number":249,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_49991e6c","line":246,"range":{"start_line":246,"start_character":17,"end_line":246,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            },"},{"line_number":250,"context_line":"            {"},{"line_number":251,"context_line":"                \"id\": \"1dc633fe5acd4182b63f68c9cc8e768a\","},{"line_number":252,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":253,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":254,"context_line":"                \"default_limit\": 20480"},{"line_number":255,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_699c225d","line":252,"range":{"start_line":252,"start_character":17,"end_line":252,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            },"},{"line_number":256,"context_line":"            {"},{"line_number":257,"context_line":"                \"id\": \"5c4182eb45304cb3ac89030b19ab5a81\","},{"line_number":258,"context_line":"                \"service_id\": \"ae22fb0dfbd34464bf67e758977f4839\","},{"line_number":259,"context_line":"                \"region\": \"region1\","},{"line_number":260,"context_line":"                \"resource_name\": \"storage_gb\","},{"line_number":261,"context_line":"                \"default_limit\": 20"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_299e1a54","line":258,"range":{"start_line":258,"start_character":17,"end_line":258,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            {"},{"line_number":257,"context_line":"                \"id\": \"5c4182eb45304cb3ac89030b19ab5a81\","},{"line_number":258,"context_line":"                \"service_id\": \"ae22fb0dfbd34464bf67e758977f4839\","},{"line_number":259,"context_line":"                \"region\": \"region1\","},{"line_number":260,"context_line":"                \"resource_name\": \"storage_gb\","},{"line_number":261,"context_line":"                \"default_limit\": 20"},{"line_number":262,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e9a7d2a6","line":259,"range":{"start_line":259,"start_character":17,"end_line":259,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"**Request Parameters**"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":334,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":335,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":336,"context_line":"  should match a service in the service catalog."},{"line_number":337,"context_line":"* ``region (optional)`` - The region that the service is hosted in."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_29c7fa47","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":56},"updated":"2017-12-05 21:14:25.000000000","message":"Oh - interesting... do we want to always pull it from the request context then? Is there a purpose for specifying it in the request body otherwise?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"**Request Parameters**"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":334,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":335,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":336,"context_line":"  should match a service in the service catalog."},{"line_number":337,"context_line":"* ``region (optional)`` - The region that the service is hosted in."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_09dead3e","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":56},"in_reply_to":"df87a7cf_29c7fa47","updated":"2017-12-06 06:30:10.000000000","message":"This allows cloud admin to create limits for the specified project.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":334,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":335,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":336,"context_line":"  should match a service in the service catalog."},{"line_number":337,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":338,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_89064686","line":335,"range":{"start_line":335,"start_character":4,"end_line":335,"end_character":14},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":334,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":335,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":336,"context_line":"  should match a service in the service catalog."},{"line_number":337,"context_line":"* ``region (optional)`` - The region that the service is hosted in."},{"line_number":338,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":339,"context_line":"  to other resource names for the same service and region."},{"line_number":340,"context_line":"* ``resource_limit`` - The override limit for the project to assume for that"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a909ca95","line":337,"range":{"start_line":337,"start_character":4,"end_line":337,"end_character":10},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        \"limits\":["},{"line_number":349,"context_line":"            {"},{"line_number":350,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":351,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":352,"context_line":"                \"region\": \"region1\","},{"line_number":353,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":354,"context_line":"                \"resource_limit\": 10240,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_49003e68","line":351,"range":{"start_line":351,"start_character":17,"end_line":351,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            {"},{"line_number":350,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":351,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":352,"context_line":"                \"region\": \"region1\","},{"line_number":353,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":354,"context_line":"                \"resource_limit\": 10240,"},{"line_number":355,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c9768e07","line":352,"range":{"start_line":352,"start_character":17,"end_line":352,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                \"resource_limit\": 10240,"},{"line_number":355,"context_line":"            },"},{"line_number":356,"context_line":"            {"},{"line_number":357,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":358,"context_line":"                \"region\": \"region1\","},{"line_number":359,"context_line":"                \"resource_name\": \"cores\","},{"line_number":360,"context_line":"                \"resource_limit\": 10,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_8962c63d","line":357,"range":{"start_line":357,"start_character":17,"end_line":357,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            },"},{"line_number":356,"context_line":"            {"},{"line_number":357,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":358,"context_line":"                \"region\": \"region1\","},{"line_number":359,"context_line":"                \"resource_name\": \"cores\","},{"line_number":360,"context_line":"                \"resource_limit\": 10,"},{"line_number":361,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e971120e","line":358,"range":{"start_line":358,"start_character":17,"end_line":358,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            {"},{"line_number":394,"context_line":"                \"id\": \"aaab50e9c36f4a84bab98dfc117c9836\","},{"line_number":395,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":396,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":397,"context_line":"                \"region\": \"region1\","},{"line_number":398,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":399,"context_line":"                \"resource_limit\": 10240,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e9f8324a","line":396,"range":{"start_line":396,"start_character":17,"end_line":396,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                \"id\": \"aaab50e9c36f4a84bab98dfc117c9836\","},{"line_number":395,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":396,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":397,"context_line":"                \"region\": \"region1\","},{"line_number":398,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":399,"context_line":"                \"resource_limit\": 10240,"},{"line_number":400,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_8995e6e6","line":397,"range":{"start_line":397,"start_character":17,"end_line":397,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":401,"context_line":"            {"},{"line_number":402,"context_line":"                \"id\": \"e08fcb2756be48e387e821bd79e29538\","},{"line_number":403,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":404,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":405,"context_line":"                \"region\": \"region1\","},{"line_number":406,"context_line":"                \"resource_name\": \"cores\","},{"line_number":407,"context_line":"                \"resource_limit\": 10,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_499fde02","line":404,"range":{"start_line":404,"start_character":17,"end_line":404,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                \"id\": \"e08fcb2756be48e387e821bd79e29538\","},{"line_number":403,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":404,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":405,"context_line":"                \"region\": \"region1\","},{"line_number":406,"context_line":"                \"resource_name\": \"cores\","},{"line_number":407,"context_line":"                \"resource_limit\": 10,"},{"line_number":408,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_0989d6c8","line":405,"range":{"start_line":405,"start_character":17,"end_line":405,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":412,"context_line":"Update Project Limits"},{"line_number":413,"context_line":"---------------------"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"Update Project Limits. Once the project limit is created, only property users"},{"line_number":416,"context_line":"can change is ``resource_limit``."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"**Request:** ``PUT /limits/{limit-id}``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e98d92d3","line":415,"range":{"start_line":415,"start_character":63,"end_line":415,"end_character":71},"updated":"2017-12-05 21:14:25.000000000","message":"What are property users? Does this mean project administrators?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":412,"context_line":"Update Project Limits"},{"line_number":413,"context_line":"---------------------"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"Update Project Limits. Once the project limit is created, only property users"},{"line_number":416,"context_line":"can change is ``resource_limit``."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"**Request:** ``PUT /limits/{limit-id}``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_3b909b43","line":415,"range":{"start_line":415,"start_character":63,"end_line":415,"end_character":71},"in_reply_to":"df87a7cf_e98d92d3","updated":"2017-12-06 06:30:10.000000000","message":"I mean only ``resource_limit`` can be update. I\u0027ll make it more clear.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            {"},{"line_number":458,"context_line":"                \"id\": \"aaab50e9c36f4a84bab98dfc117c9836\","},{"line_number":459,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":460,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":461,"context_line":"                \"region\": \"region1\","},{"line_number":462,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":463,"context_line":"                \"resource_limit\": 5120,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a9c1cae6","line":460,"range":{"start_line":460,"start_character":17,"end_line":460,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                \"id\": \"aaab50e9c36f4a84bab98dfc117c9836\","},{"line_number":459,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":460,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":461,"context_line":"                \"region\": \"region1\","},{"line_number":462,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":463,"context_line":"                \"resource_limit\": 5120,"},{"line_number":464,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_49b83e75","line":461,"range":{"start_line":461,"start_character":17,"end_line":461,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":465,"context_line":"            {"},{"line_number":466,"context_line":"                \"id\": \"e08fcb2756be48e387e821bd79e29538\","},{"line_number":467,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":468,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":469,"context_line":"                \"region\": \"region1\","},{"line_number":470,"context_line":"                \"resource_name\": \"cores\","},{"line_number":471,"context_line":"                \"resource_limit\": 5,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_69bbc271","line":468,"range":{"start_line":468,"start_character":17,"end_line":468,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                \"id\": \"e08fcb2756be48e387e821bd79e29538\","},{"line_number":467,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":468,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":469,"context_line":"                \"region\": \"region1\","},{"line_number":470,"context_line":"                \"resource_name\": \"cores\","},{"line_number":471,"context_line":"                \"resource_limit\": 5,"},{"line_number":472,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_09b23695","line":469,"range":{"start_line":469,"start_character":17,"end_line":469,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"* ``project_id`` - Only used for cloud admin to filter limits with the"},{"line_number":493,"context_line":"  specified project_id. Project admin only can list the limits belong to him."},{"line_number":494,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"limits will also support filters to make it easier to see"},{"line_number":497,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_496d9e02","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":76},"updated":"2017-12-05 21:14:25.000000000","message":"This feels like an RBAC work around? Shouldn\u0027t we be able to do this by listing all limits at the top of the project hierarchy?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"* ``project_id`` - Only used for cloud admin to filter limits with the"},{"line_number":493,"context_line":"  specified project_id. Project admin only can list the limits belong to him."},{"line_number":494,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"limits will also support filters to make it easier to see"},{"line_number":497,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a9d6a1f0","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":76},"in_reply_to":"df87a7cf_496d9e02","updated":"2017-12-06 06:30:10.000000000","message":"It\u0027s a little different with hierarchy list. When use this filter, all projects\u0027 limit will be queried. So this is only used for cloud admin. It\u0027s like \"nova list --all-tenants\"","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":494,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"limits will also support filters to make it easier to see"},{"line_number":497,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"},{"line_number":498,"context_line":"will all be valid search parameters."},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"**Response:**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_29729ae4","line":497,"range":{"start_line":497,"start_character":33,"end_line":497,"end_character":39},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":494,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"limits will also support filters to make it easier to see"},{"line_number":497,"context_line":"just a subset. ``service_id``, ``region``, and ``resource_name``"},{"line_number":498,"context_line":"will all be valid search parameters."},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"**Response:**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_6970a2dd","line":497,"range":{"start_line":497,"start_character":17,"end_line":497,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        \"limits\":["},{"line_number":514,"context_line":"            {"},{"line_number":515,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":516,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":517,"context_line":"                \"region\": \"region1\","},{"line_number":518,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":519,"context_line":"                \"resource_limit\": 10240,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e97b52bb","line":516,"range":{"start_line":516,"start_character":17,"end_line":516,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":514,"context_line":"            {"},{"line_number":515,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":516,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":517,"context_line":"                \"region\": \"region1\","},{"line_number":518,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":519,"context_line":"                \"resource_limit\": 10240,"},{"line_number":520,"context_line":"                \"default_limit\": 20480"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_894c069f","line":517,"range":{"start_line":517,"start_character":17,"end_line":517,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            },"},{"line_number":522,"context_line":"            {"},{"line_number":523,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":524,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":525,"context_line":"                \"region\": \"region1\","},{"line_number":526,"context_line":"                \"resource_name\": \"cores\","},{"line_number":527,"context_line":"                \"resource_limit\": 10,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a94f8a90","line":524,"range":{"start_line":524,"start_character":17,"end_line":524,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            {"},{"line_number":523,"context_line":"                \"project_id\": \"95541dbfaa054cab86510e0d0a87896a\","},{"line_number":524,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":525,"context_line":"                \"region\": \"region1\","},{"line_number":526,"context_line":"                \"resource_name\": \"cores\","},{"line_number":527,"context_line":"                \"resource_limit\": 10,"},{"line_number":528,"context_line":"                \"default_limit\": 10"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_4946fe7e","line":525,"range":{"start_line":525,"start_character":17,"end_line":525,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":553,"context_line":".. code-block:: json"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    {"},{"line_number":556,"context_line":"        \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":557,"context_line":"        \"region\": \"region1\","},{"line_number":558,"context_line":"        \"resource_name\": \"ram_mb\","},{"line_number":559,"context_line":"        \"resource_limit\": 10240,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_295b7a54","line":556,"range":{"start_line":556,"start_character":9,"end_line":556,"end_character":19},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    {"},{"line_number":556,"context_line":"        \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":557,"context_line":"        \"region\": \"region1\","},{"line_number":558,"context_line":"        \"resource_name\": \"ram_mb\","},{"line_number":559,"context_line":"        \"resource_limit\": 10240,"},{"line_number":560,"context_line":"        \"default_limit\": 20480"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c959ae5a","line":557,"range":{"start_line":557,"start_character":9,"end_line":557,"end_character":15},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        \"region\": \"region1\","},{"line_number":558,"context_line":"        \"resource_name\": \"ram_mb\","},{"line_number":559,"context_line":"        \"resource_limit\": 10240,"},{"line_number":560,"context_line":"        \"default_limit\": 20480"},{"line_number":561,"context_line":"    }"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Delete a Project Limit"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_e954b223","line":560,"updated":"2017-12-05 21:14:25.000000000","message":"do we want to include project id in the reference to be consistent with the other APIs?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        \"region\": \"region1\","},{"line_number":558,"context_line":"        \"resource_name\": \"ram_mb\","},{"line_number":559,"context_line":"        \"resource_limit\": 10240,"},{"line_number":560,"context_line":"        \"default_limit\": 20480"},{"line_number":561,"context_line":"    }"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Delete a Project Limit"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_3b073b85","line":560,"in_reply_to":"df87a7cf_e954b223","updated":"2017-12-06 06:30:10.000000000","message":"Done","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        \"hierarchical_limit_model\": \"Strict Hierarchy Default Closed\","},{"line_number":614,"context_line":"        \"limits\":["},{"line_number":615,"context_line":"            {"},{"line_number":616,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":617,"context_line":"                \"region\": \"region1\","},{"line_number":618,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":619,"context_line":"                \"resource_limit\": 10240,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_8931660e","line":616,"range":{"start_line":616,"start_character":17,"end_line":616,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        \"limits\":["},{"line_number":615,"context_line":"            {"},{"line_number":616,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":617,"context_line":"                \"region\": \"region1\","},{"line_number":618,"context_line":"                \"resource_name\": \"ram_mb\","},{"line_number":619,"context_line":"                \"resource_limit\": 10240,"},{"line_number":620,"context_line":"                \"default_limit\": 20480,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a9346afc","line":617,"range":{"start_line":617,"start_character":17,"end_line":617,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                \"default_limit\": 20480,"},{"line_number":621,"context_line":"                \"project_id\": aaa,"},{"line_number":622,"context_line":"                \"hierarchical_structure\":{"},{"line_number":623,"context_line":"                    \"brother_projects\":["},{"line_number":624,"context_line":"                        {"},{"line_number":625,"context_line":"                            \"project_id\": bbb,"},{"line_number":626,"context_line":"                            \"resource_limit\": 20480,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_693e62db","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":28},"updated":"2017-12-05 21:14:25.000000000","message":"sibling*? or peer?","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32a8bb0b591c2d9c948a70cf5e4441199a9e5ce1","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                \"default_limit\": 20480,"},{"line_number":621,"context_line":"                \"project_id\": aaa,"},{"line_number":622,"context_line":"                \"hierarchical_structure\":{"},{"line_number":623,"context_line":"                    \"brother_projects\":["},{"line_number":624,"context_line":"                        {"},{"line_number":625,"context_line":"                            \"project_id\": bbb,"},{"line_number":626,"context_line":"                            \"resource_limit\": 20480,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_bba34b9e","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":28},"in_reply_to":"df87a7cf_693e62db","updated":"2017-12-06 06:30:10.000000000","message":"Done","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                        \"project_id\": ddd,"},{"line_number":637,"context_line":"                        \"resource_limit\": 20480,"},{"line_number":638,"context_line":"                        \"default_limit\": 20480,"},{"line_number":639,"context_line":"                        \"brother_projects\": ["},{"line_number":640,"context_line":"                            \"project_id\": eee,"},{"line_number":641,"context_line":"                            \"resource_limit\": 10240,"},{"line_number":642,"context_line":"                            \"default_limit\": 20480,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_29205ab0","line":639,"range":{"start_line":639,"start_character":25,"end_line":639,"end_character":41},"updated":"2017-12-05 21:14:25.000000000","message":"Same comment as above.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":645,"context_line":"                            \"project_id\": fff,"},{"line_number":646,"context_line":"                            \"resource_limit\": 20480,"},{"line_number":647,"context_line":"                            \"default_limit\": 20480,"},{"line_number":648,"context_line":"                            \"brother_projects\": None,"},{"line_number":649,"context_line":"                            \"parent_project\": None,"},{"line_number":650,"context_line":"                        }"},{"line_number":651,"context_line":"                    }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_c92e8ea4","line":648,"range":{"start_line":648,"start_character":29,"end_line":648,"end_character":45},"updated":"2017-12-05 21:14:25.000000000","message":"same comment as above.","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                }"},{"line_number":653,"context_line":"            },"},{"line_number":654,"context_line":"            {"},{"line_number":655,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":656,"context_line":"                \"region\": \"region1\","},{"line_number":657,"context_line":"                \"resource_name\": \"cores\","},{"line_number":658,"context_line":"                ..."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_891ac67a","line":655,"range":{"start_line":655,"start_character":17,"end_line":655,"end_character":27},"updated":"2017-12-05 21:14:25.000000000","message":"service_type*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70c2de03db068dded819ccce547fcbfca9b89b42","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            },"},{"line_number":654,"context_line":"            {"},{"line_number":655,"context_line":"                \"service_id\": \"77232e5107074dfe801657000348e8c9\","},{"line_number":656,"context_line":"                \"region\": \"region1\","},{"line_number":657,"context_line":"                \"resource_name\": \"cores\","},{"line_number":658,"context_line":"                ..."},{"line_number":659,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_a91d4a74","line":656,"range":{"start_line":656,"start_character":17,"end_line":656,"end_character":23},"updated":"2017-12-05 21:14:25.000000000","message":"region_id*","commit_id":"ac429bd9baea12e37e556a14306e24cf1b0f8cd7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* ``registered-limits-id`` - The id for the specified registered limit."},{"line_number":144,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":145,"context_line":"  should match a service in the service catalog."},{"line_number":146,"context_line":"* ``region (optional)`` - The region_id that the service is hosted in."},{"line_number":147,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":148,"context_line":"  to other resource names for the same service and region."},{"line_number":149,"context_line":"* ``default_limit`` - The default limit for all projects to assume for that"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_929e5852","line":146,"range":{"start_line":146,"start_character":4,"end_line":146,"end_character":10},"updated":"2017-12-06 17:06:29.000000000","message":"region_id to be consistent with POST?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* ``registered-limits-id`` - The id for the specified registered limit."},{"line_number":144,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":145,"context_line":"  should match a service in the service catalog."},{"line_number":146,"context_line":"* ``region (optional)`` - The region_id that the service is hosted in."},{"line_number":147,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":148,"context_line":"  to other resource names for the same service and region."},{"line_number":149,"context_line":"* ``default_limit`` - The default limit for all projects to assume for that"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_b4249eb0","line":146,"range":{"start_line":146,"start_character":4,"end_line":146,"end_character":10},"in_reply_to":"df87a7cf_929e5852","updated":"2017-12-07 01:54:05.000000000","message":"Done","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":414,"context_line":"**Response Parameters**"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":417,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":418,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":419,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":420,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_32f42c86","line":417,"range":{"start_line":417,"start_character":15,"end_line":417,"end_character":25},"updated":"2017-12-06 17:06:29.000000000","message":"This will always be included in the response, right?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":414,"context_line":"**Response Parameters**"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":417,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":418,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":419,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":420,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_d44e026e","line":417,"range":{"start_line":417,"start_character":15,"end_line":417,"end_character":25},"in_reply_to":"df87a7cf_32f42c86","updated":"2017-12-07 01:54:05.000000000","message":"Done","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":493,"context_line":"**Response Parameters**"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":496,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":497,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":498,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":499,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_b20efc8a","line":496,"range":{"start_line":496,"start_character":16,"end_line":496,"end_character":24},"updated":"2017-12-06 17:06:29.000000000","message":"The response will always include this, right?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":493,"context_line":"**Response Parameters**"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":496,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":497,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":498,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":499,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_9454faff","line":496,"range":{"start_line":496,"start_character":16,"end_line":496,"end_character":24},"in_reply_to":"df87a7cf_b20efc8a","updated":"2017-12-07 01:54:05.000000000","message":"Done","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"* ``project_id`` - Only used for cloud admin to filter limits with the"},{"line_number":548,"context_line":"  specified project_id. Project admin only can list the limits belong to him."},{"line_number":549,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"limits will also support filters to make it easier to see"},{"line_number":552,"context_line":"just a subset. ``service_id``, ``region_id``, and ``resource_name``"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_726dd430","line":549,"range":{"start_line":549,"start_character":0,"end_line":549,"end_character":76},"updated":"2017-12-06 17:06:29.000000000","message":"Isn\u0027t this achieved with GET /limits? This feels like we\u0027re coding a specific RBAC check into a filter.","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"* ``project_id`` - Only used for cloud admin to filter limits with the"},{"line_number":548,"context_line":"  specified project_id. Project admin only can list the limits belong to him."},{"line_number":549,"context_line":"* ``all_project`` - Only used for cloud admin to get all the project limits."},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"limits will also support filters to make it easier to see"},{"line_number":552,"context_line":"just a subset. ``service_id``, ``region_id``, and ``resource_name``"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_34ebaedc","line":549,"range":{"start_line":549,"start_character":0,"end_line":549,"end_character":76},"in_reply_to":"df87a7cf_726dd430","updated":"2017-12-07 01:54:05.000000000","message":"OK. I\u0027ll remove this now.","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":564,"context_line":"**Response Parameters**"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":567,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":568,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":569,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":570,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_1266c852","line":567,"range":{"start_line":567,"start_character":16,"end_line":567,"end_character":24},"updated":"2017-12-06 17:06:29.000000000","message":"This should always be present.","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":564,"context_line":"**Response Parameters**"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":567,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":568,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":569,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":570,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_5442f23f","line":567,"range":{"start_line":567,"start_character":16,"end_line":567,"end_character":24},"in_reply_to":"df87a7cf_1266c852","updated":"2017-12-07 01:54:05.000000000","message":"Done","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":622,"context_line":"**Response Parameters**"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":625,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":626,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":627,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":628,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_12cb281e","line":625,"range":{"start_line":625,"start_character":16,"end_line":625,"end_character":24},"updated":"2017-12-06 17:06:29.000000000","message":"Same comment here as above.","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":622,"context_line":"**Response Parameters**"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"* ``id`` - The id for the specified limit."},{"line_number":625,"context_line":"* ``project_id (optional)`` - The project which assume the limit. If omit,"},{"line_number":626,"context_line":"  Keystone will get the project_id from token (context)."},{"line_number":627,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":628,"context_line":"  should match a service in the service catalog."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_1448ea59","line":625,"range":{"start_line":625,"start_character":16,"end_line":625,"end_character":24},"in_reply_to":"df87a7cf_12cb281e","updated":"2017-12-07 01:54:05.000000000","message":"Done","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":670,"context_line":""},{"line_number":671,"context_line":"With the (current) default policy a user with a member role on a project can\u0027t"},{"line_number":672,"context_line":"GET its parent or child project. So the ``show_hierarchy`` filter should be an"},{"line_number":673,"context_line":"admin filter. If non-admin users use this filter, keystone should ignore the"},{"line_number":674,"context_line":"filter or return 403 error."},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"**Request:** ``GET /limits/{limit-id}?show_hierarchy\u003dtrue``"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_52f9b04a","line":673,"range":{"start_line":673,"start_character":0,"end_line":673,"end_character":12},"updated":"2017-12-06 17:06:29.000000000","message":"So - if this is specified, keystone checks to make sure the user has the administrator role on the system?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":670,"context_line":""},{"line_number":671,"context_line":"With the (current) default policy a user with a member role on a project can\u0027t"},{"line_number":672,"context_line":"GET its parent or child project. So the ``show_hierarchy`` filter should be an"},{"line_number":673,"context_line":"admin filter. If non-admin users use this filter, keystone should ignore the"},{"line_number":674,"context_line":"filter or return 403 error."},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"**Request:** ``GET /limits/{limit-id}?show_hierarchy\u003dtrue``"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_74ce1683","line":673,"range":{"start_line":673,"start_character":0,"end_line":673,"end_character":12},"in_reply_to":"df87a7cf_52f9b04a","updated":"2017-12-07 01:54:05.000000000","message":"yes. I\u0027ll make it more clear.","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9cee73e0a1ba2c621ec768a75cf438b3a5c014e","unresolved":false,"context_lines":[{"line_number":793,"context_line":"    limits? Should a user be able to get limit information for a parent,"},{"line_number":794,"context_line":"    sibling, or child project? This might be necessary information in order to"},{"line_number":795,"context_line":"    answer the \"what do I put in the ticket\" question, but it\u0027s also really"},{"line_number":796,"context_line":"    private information. With the (current) default policy a user with a member"},{"line_number":797,"context_line":"    role on a project can\u0027t GET its parent or child project."},{"line_number":798,"context_line":""},{"line_number":799,"context_line":".. warning::"},{"line_number":800,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_325aec4e","line":797,"range":{"start_line":796,"start_character":25,"end_line":797,"end_character":60},"updated":"2017-12-06 17:06:29.000000000","message":"This seems like the right approach to take initially. I wouldn\u0027t be opposed to keeping this confined to just the limit information of the project and the registered defaults.\n\nThat said, if we don\u0027t expose parent, child, or sibling information to end users then we need to make sure we give administrators enough information to debug the issue sanely. So, do we think we\u0027re doing that?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"738d56711d94ee5b96bd0f31ee53506e621e1bcc","unresolved":false,"context_lines":[{"line_number":793,"context_line":"    limits? Should a user be able to get limit information for a parent,"},{"line_number":794,"context_line":"    sibling, or child project? This might be necessary information in order to"},{"line_number":795,"context_line":"    answer the \"what do I put in the ticket\" question, but it\u0027s also really"},{"line_number":796,"context_line":"    private information. With the (current) default policy a user with a member"},{"line_number":797,"context_line":"    role on a project can\u0027t GET its parent or child project."},{"line_number":798,"context_line":""},{"line_number":799,"context_line":".. warning::"},{"line_number":800,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_141f8ab7","line":797,"range":{"start_line":796,"start_character":25,"end_line":797,"end_character":60},"in_reply_to":"df87a7cf_325aec4e","updated":"2017-12-07 01:54:05.000000000","message":"I answered below and updated the answer as well. Could you please check the new patch set L795 to see whether it is OK?","commit_id":"9a01957cc0bd78637e1a655f4fd4cba0d4f35a2d"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"91e860c6d8a97dcfdaadb24090a292d300a8acd9","unresolved":false,"context_lines":[{"line_number":659,"context_line":"* 204 - No Content"},{"line_number":660,"context_line":"* 404 - Not Found"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"Fetching project hierarchy"},{"line_number":663,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"With the (current) default policy a user with a member role on a project can\u0027t"}],"source_content_type":"text/x-rst","patch_set":16,"id":"df87a7cf_1ae48ce0","line":662,"updated":"2017-12-07 10:39:19.000000000","message":"The /v3/projects API already has ways of showing a project hierarchy. I\u0027m not sure I see value in reimplementing that here. It makes more sense to me to use the /v3/projects API to get the project hierarchy, since that already has policies defined for it, and then use the limits API to match up limits with projects.\n\nPlus, in this initial implementation we\u0027re not going to address hierarchical quota models so the project hierarchy is not that important right now.","commit_id":"088921a53a8f6cff311611cfd1bd1b3e90e9376d"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"91e860c6d8a97dcfdaadb24090a292d300a8acd9","unresolved":false,"context_lines":[{"line_number":809,"context_line":"    value. If the user is admin, then the detail reason could be exposed, such"},{"line_number":810,"context_line":"    as: \"the new limit value will exceed the hierarchical hierarchical:"},{"line_number":811,"context_line":"    %(project)s: %(current_limit_value)s\""},{"line_number":812,"context_line":""},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"Notifications Impact"},{"line_number":815,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"df87a7cf_10bf8db0","line":812,"updated":"2017-12-07 10:39:19.000000000","message":"For now, I think we can agree that responding with a 400 and a generic error message about exceeding quota is the right direction. Initially we won\u0027t worry about hierarchical models so this won\u0027t even come up.\n\nI found this in the original overview spec (https://specs.openstack.org/openstack/keystone-specs/specs/keystone/ongoing/unified-limits.html):\n\n\u003e Users in a project will have visibility to all the project limits, as well as limits in child projects. Depending on the quota system model used, they may also have visibility to higher levels of the hierarchy (especially if their allocations only make sense in the context of higher levels of allocations) [5]. There should be a principle of self service here, that users in a project which is over quota should always be able to figure out why that project is.\n\nSo it\u0027s clear what the thinking was originally, but I think this is the wrong conclusion.\n\nIt might be important to think about the cases when this will come up. It will happen for two reasons:\n\n1) A user who is an administrator on a project (not necessarily on the system) tries to increase the limit on a project, which fails due to the constraints of the hierarchical model and the other existing limits in the tree. This is a keystone problem.\n\n2) A user who is not an administrator of anything tries to perform an operation that causes the effective resource usage to exceed quota, like booting another server. This is handled by the service controlling the resource, e.g. nova.\n\nIn both cases, the user needs to know the hierarchical model, the project hierarchy, and the limits of all the projects in the hierarchy in order to figure out which project needs to be adjusted in order to allow the original adjustment they intended to make. However, the project hierarchy should not be known to a user who doesn\u0027t have role assignments on the tree, and project limits, which are effectively properties of a project, should not be known to someone who does not have a role assignment on that project. So we can\u0027t fulfill that principle of self service without majorly violating privacy protection.\n\nTo solve case 1, the way I imagine it working is:\n\nProject limits carry two additional properties, an identifier for the hierarchical model in use, and an \"effective limit\", that uses the hierarchical model to calculate the effective limit behind the scenes. When a user tries to update a limit on their project and receives a 400, they see their own project limit, the effective limit, and the hierarchical model. That should be enough information to take to an administrator to ask for the problem to be fixed but doesn\u0027t leak specific information about other projects to an unprivileged user.\n\nTo solve case 2, the service will have do something similar but maintain an \"effective usage\" value for each project.\n\nAnyways, we shouldn\u0027t worry about this right now because a user can only update limits on one project, regardless of whether the project is in a hierarchy. Let\u0027s address this in the next spec.","commit_id":"088921a53a8f6cff311611cfd1bd1b3e90e9376d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ae3c608f3b22e5e5c48c939ef013ffe9ade2fc1","unresolved":false,"context_lines":[{"line_number":809,"context_line":"    value. If the user is admin, then the detail reason could be exposed, such"},{"line_number":810,"context_line":"    as: \"the new limit value will exceed the hierarchical hierarchical:"},{"line_number":811,"context_line":"    %(project)s: %(current_limit_value)s\""},{"line_number":812,"context_line":""},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"Notifications Impact"},{"line_number":815,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"df87a7cf_5c543eff","line":812,"in_reply_to":"df87a7cf_10bf8db0","updated":"2017-12-07 21:17:01.000000000","message":"I think this is a pretty good summary. We should condense this down into a digestible paragraph and add it to this section.\n\nWe will have the opportunity to elaborate on the details in a subsequent specification that deals with the hierarchy.","commit_id":"088921a53a8f6cff311611cfd1bd1b3e90e9376d"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Nova like \"project A can create 10 vms\". But if there no project called A"},{"line_number":23,"context_line":"in Keystone, Nova will still create the quota. Or if the project A is deleted"},{"line_number":24,"context_line":"in Keystone, Nova doesn\u0027t know it and will still leave the quota there. Even"},{"line_number":25,"context_line":"for nested quota, it\u0027s a heavy job for Nova to deal with."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed Change"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_cafceeb6","line":25,"updated":"2017-12-08 13:56:22.000000000","message":"You could link to the original overview spec for the full background: http://specs.openstack.org/openstack/keystone-specs/specs/keystone/ongoing/unified-limits.html","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Nova like \"project A can create 10 vms\". But if there no project called A"},{"line_number":23,"context_line":"in Keystone, Nova will still create the quota. Or if the project A is deleted"},{"line_number":24,"context_line":"in Keystone, Nova doesn\u0027t know it and will still leave the quota there. Even"},{"line_number":25,"context_line":"for nested quota, it\u0027s a heavy job for Nova to deal with."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed Change"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_2011fb5d","line":25,"in_reply_to":"df87a7cf_cafceeb6","updated":"2017-12-08 15:29:00.000000000","message":"I have mentioned it at L14","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Response Parameters**"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* ``id`` - The unique uuid for each registered limit. Call it ``id`` to keep"},{"line_number":89,"context_line":"  the same with other resources in Keystone."},{"line_number":90,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":91,"context_line":"  should match a service in the service catalog."},{"line_number":92,"context_line":"* ``region_id (optional)`` - The region that the service is hosted in."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_0a6bb61d","line":89,"range":{"start_line":88,"start_character":54,"end_line":89,"end_character":44},"updated":"2017-12-08 13:56:22.000000000","message":"nit - I don\u0027t think this needs to be called out explicitly.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Response Parameters**"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* ``id`` - The unique uuid for each registered limit. Call it ``id`` to keep"},{"line_number":89,"context_line":"  the same with other resources in Keystone."},{"line_number":90,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":91,"context_line":"  should match a service in the service catalog."},{"line_number":92,"context_line":"* ``region_id (optional)`` - The region that the service is hosted in."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_7b057610","line":89,"range":{"start_line":88,"start_character":54,"end_line":89,"end_character":44},"in_reply_to":"df87a7cf_0a6bb61d","updated":"2017-12-08 15:29:00.000000000","message":"Done","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":136,"context_line":"to override are included. If the ``service_id``, ``region_id``, or"},{"line_number":137,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"**Request:** ``PUT /registered-limits/{registered-limits-id}``"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"**Request Parameters**"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_8abee6b1","line":139,"range":{"start_line":139,"start_character":15,"end_line":139,"end_character":18},"updated":"2017-12-08 13:56:22.000000000","message":"This should either be POST /registered-limits/{registered-limits-id} or PUT /registered-limits. Sean\u0027s idea with PUT only makes sense when uploading a full JSON document of limits. POST should be used if we\u0027re only going to allow updating one at a time","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":136,"context_line":"to override are included. If the ``service_id``, ``region_id``, or"},{"line_number":137,"context_line":"``resource_name`` doesn\u0027t already exist, an error is thrown."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"**Request:** ``PUT /registered-limits/{registered-limits-id}``"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"**Request Parameters**"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_db41223b","line":139,"range":{"start_line":139,"start_character":15,"end_line":139,"end_character":18},"in_reply_to":"df87a7cf_8abee6b1","updated":"2017-12-08 15:29:00.000000000","message":"oh, yes, it should be PUT /registered-limits","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":".. note::"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"   When users set or update a project\u0027s limit, keystone will check the related"},{"line_number":406,"context_line":"   hierarchical limit, including default Registered Limits and Project Limits"},{"line_number":407,"context_line":"   within the project hierarchy. This spec doesn\u0027t talk about the usage check,"},{"line_number":408,"context_line":"   only making sure the limits in the hierarchy don\u0027t violate each other. If we"},{"line_number":409,"context_line":"   want to support usage check for limit, keystone would need to collect usage"},{"line_number":410,"context_line":"   information from each of the services. This will add more REST requests in"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_0a02d63d","line":407,"range":{"start_line":405,"start_character":47,"end_line":407,"end_character":32},"updated":"2017-12-08 13:56:22.000000000","message":"At this stage we have yet to define any of this, so keystone cannot do any hierarchical checks.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":".. note::"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"   When users set or update a project\u0027s limit, keystone will check the related"},{"line_number":406,"context_line":"   hierarchical limit, including default Registered Limits and Project Limits"},{"line_number":407,"context_line":"   within the project hierarchy. This spec doesn\u0027t talk about the usage check,"},{"line_number":408,"context_line":"   only making sure the limits in the hierarchy don\u0027t violate each other. If we"},{"line_number":409,"context_line":"   want to support usage check for limit, keystone would need to collect usage"},{"line_number":410,"context_line":"   information from each of the services. This will add more REST requests in"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_fbd8a6ef","line":407,"range":{"start_line":405,"start_character":47,"end_line":407,"end_character":32},"in_reply_to":"df87a7cf_0a02d63d","updated":"2017-12-08 15:29:00.000000000","message":"I\u0027ll move this part to [Proposed Change] and remove the hierarchical part. I think we can talk about in the next spec as well.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":405,"context_line":"   When users set or update a project\u0027s limit, keystone will check the related"},{"line_number":406,"context_line":"   hierarchical limit, including default Registered Limits and Project Limits"},{"line_number":407,"context_line":"   within the project hierarchy. This spec doesn\u0027t talk about the usage check,"},{"line_number":408,"context_line":"   only making sure the limits in the hierarchy don\u0027t violate each other. If we"},{"line_number":409,"context_line":"   want to support usage check for limit, keystone would need to collect usage"},{"line_number":410,"context_line":"   information from each of the services. This will add more REST requests in"},{"line_number":411,"context_line":"   keystone, which we should be careful about doing."},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"**Response Parameters**"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_caf70e59","line":410,"range":{"start_line":408,"start_character":74,"end_line":410,"end_character":41},"updated":"2017-12-08 13:56:22.000000000","message":"Keystone is not and cannot be in charge of this. It is up to the service to enforce usage. http://specs.openstack.org/openstack/keystone-specs/specs/keystone/ongoing/unified-limits.html#limits-vs-usage-enforcement","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":405,"context_line":"   When users set or update a project\u0027s limit, keystone will check the related"},{"line_number":406,"context_line":"   hierarchical limit, including default Registered Limits and Project Limits"},{"line_number":407,"context_line":"   within the project hierarchy. This spec doesn\u0027t talk about the usage check,"},{"line_number":408,"context_line":"   only making sure the limits in the hierarchy don\u0027t violate each other. If we"},{"line_number":409,"context_line":"   want to support usage check for limit, keystone would need to collect usage"},{"line_number":410,"context_line":"   information from each of the services. This will add more REST requests in"},{"line_number":411,"context_line":"   keystone, which we should be careful about doing."},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"**Response Parameters**"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_5b9c32bf","line":410,"range":{"start_line":408,"start_character":74,"end_line":410,"end_character":41},"in_reply_to":"df87a7cf_caf70e59","updated":"2017-12-08 15:29:00.000000000","message":"Yes, I should make it more clear.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"**Response:**"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"We return the entire limits structure for the relevant project, including"},{"line_number":484,"context_line":"defaults without overrides."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"**Response Code:**"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_ea0e9239","line":483,"range":{"start_line":483,"start_character":46,"end_line":483,"end_character":62},"updated":"2017-12-08 13:56:22.000000000","message":"But there\u0027s no project_id in the parameters any more :/","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"**Response:**"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"We return the entire limits structure for the relevant project, including"},{"line_number":484,"context_line":"defaults without overrides."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"**Response Code:**"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_fb48a62d","line":483,"range":{"start_line":483,"start_character":46,"end_line":483,"end_character":62},"in_reply_to":"df87a7cf_ea0e9239","updated":"2017-12-08 15:29:00.000000000","message":"Done","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":534,"context_line":"   well as what the default is, though given the bulk get maybe we"},{"line_number":535,"context_line":"   don\u0027t need that? Actually, what should be contained in the response body"},{"line_number":536,"context_line":"   depends on the model we select. For example, If choose \"Garbutt\" or"},{"line_number":537,"context_line":"   \"Stanek\" model, Do the effective/local limits should be contained as well?"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"**Request:** ``GET /limits``"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_e513255b","line":537,"updated":"2017-12-08 13:56:22.000000000","message":"We should either remove this or reword it so that it\u0027s no longer a question but note for future work.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":534,"context_line":"   well as what the default is, though given the bulk get maybe we"},{"line_number":535,"context_line":"   don\u0027t need that? Actually, what should be contained in the response body"},{"line_number":536,"context_line":"   depends on the model we select. For example, If choose \"Garbutt\" or"},{"line_number":537,"context_line":"   \"Stanek\" model, Do the effective/local limits should be contained as well?"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"**Request:** ``GET /limits``"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_bba69eaa","line":537,"in_reply_to":"df87a7cf_e513255b","updated":"2017-12-08 15:29:00.000000000","message":"Done","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":660,"context_line":"* 404 - Not Found"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"Fetching project hierarchy"},{"line_number":663,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"With the (current) default policy a user with a member role on a project can\u0027t"},{"line_number":666,"context_line":"GET its parent or child project. So the ``show_hierarchy`` filter should be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_053f29b4","line":663,"updated":"2017-12-08 13:56:22.000000000","message":"I think we should hold off on defining this until the next spec. It is already possible to fetch a project hierarchy, and in the short term the hierarchy won\u0027t affect limits, so we don\u0027t need a special query for this.\n\nHowever, I also feel like we should define a discovery mechanism so that non-admin users can understand whether they are constricted by a hierarchical model or not. This way we will be able to safely change the error response behavior for updating a project limit when we do start defining a project hierarchy.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":660,"context_line":"* 404 - Not Found"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"Fetching project hierarchy"},{"line_number":663,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"With the (current) default policy a user with a member role on a project can\u0027t"},{"line_number":666,"context_line":"GET its parent or child project. So the ``show_hierarchy`` filter should be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_1b96aa3f","line":663,"in_reply_to":"df87a7cf_053f29b4","updated":"2017-12-08 15:29:00.000000000","message":"Sure. We can create a new spec about it.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8964abd5a3a71ff56eae53ee5ab6aab2c38eaeba","unresolved":false,"context_lines":[{"line_number":771,"context_line":"Alternatives"},{"line_number":772,"context_line":"------------"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"One alternative that\u0027s already been taken by at least one project is to attempt"},{"line_number":775,"context_line":"to implement hierarchical quotas in the service itself. Since understanding the"},{"line_number":776,"context_line":"hierarchy can be confusing, not duplicating that logic is what lead us to this"},{"line_number":777,"context_line":"approach, which keeps the limit closely associated to the hierarchy."},{"line_number":778,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_85a1f9fa","line":775,"range":{"start_line":774,"start_character":36,"end_line":775,"end_character":55},"updated":"2017-12-08 13:56:22.000000000","message":"As I understand it, nova held off on trying to do this at all: http://specs.openstack.org/openstack/keystone-specs/specs/keystone/ongoing/unified-limits.html#id3","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70cc9053bd4cfa16877f9855ac972f4630e9bdae","unresolved":false,"context_lines":[{"line_number":771,"context_line":"Alternatives"},{"line_number":772,"context_line":"------------"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"One alternative that\u0027s already been taken by at least one project is to attempt"},{"line_number":775,"context_line":"to implement hierarchical quotas in the service itself. Since understanding the"},{"line_number":776,"context_line":"hierarchy can be confusing, not duplicating that logic is what lead us to this"},{"line_number":777,"context_line":"approach, which keeps the limit closely associated to the hierarchy."},{"line_number":778,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_e0fa3373","line":775,"range":{"start_line":774,"start_character":36,"end_line":775,"end_character":55},"in_reply_to":"df87a7cf_85a1f9fa","updated":"2017-12-08 17:08:25.000000000","message":"I think it was cinder that tried it.","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eaa02031114c2da61de84928ff425300e4fff95","unresolved":false,"context_lines":[{"line_number":771,"context_line":"Alternatives"},{"line_number":772,"context_line":"------------"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"One alternative that\u0027s already been taken by at least one project is to attempt"},{"line_number":775,"context_line":"to implement hierarchical quotas in the service itself. Since understanding the"},{"line_number":776,"context_line":"hierarchy can be confusing, not duplicating that logic is what lead us to this"},{"line_number":777,"context_line":"approach, which keeps the limit closely associated to the hierarchy."},{"line_number":778,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_db7e0218","line":775,"range":{"start_line":774,"start_character":36,"end_line":775,"end_character":55},"in_reply_to":"df87a7cf_85a1f9fa","updated":"2017-12-08 15:29:00.000000000","message":"This is wrote by Sean. As I know, Nova, Cinder both has nested quota mechanism. Does Sean mean this?","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"652ca2a4e0e8eb03da82a99b5c6a943397ef200f","unresolved":false,"context_lines":[{"line_number":771,"context_line":"Alternatives"},{"line_number":772,"context_line":"------------"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"One alternative that\u0027s already been taken by at least one project is to attempt"},{"line_number":775,"context_line":"to implement hierarchical quotas in the service itself. Since understanding the"},{"line_number":776,"context_line":"hierarchy can be confusing, not duplicating that logic is what lead us to this"},{"line_number":777,"context_line":"approach, which keeps the limit closely associated to the hierarchy."},{"line_number":778,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df87a7cf_4150a50b","line":775,"range":{"start_line":774,"start_character":36,"end_line":775,"end_character":55},"in_reply_to":"df87a7cf_e0fa3373","updated":"2017-12-11 03:16:24.000000000","message":"oh, yes. Cinder!","commit_id":"7e210447834e065768876f34a5ee517817866ad4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb3c0b7a3d5961e2f137c3f3c0a675e617fe02ba","unresolved":false,"context_lines":[{"line_number":41,"context_line":".. note::"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"   This spec doesn\u0027t talk about the usage check of limits. It is up to the"},{"line_number":44,"context_line":"   deployment to enforce usage."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Registered Limits"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_e96ec0fe","line":44,"range":{"start_line":44,"start_character":3,"end_line":44,"end_character":13},"updated":"2017-12-18 20:13:06.000000000","message":"This is unclear, I think you mean it\u0027s up to the consuming service (e.g. nova) to enforce usage. \"deployment\" has a different meaning.\n\nAlso, while it is up to the service to enforce usage we\u0027ll need to be developing a library to help with limit calculations so it is still our problem, but maybe not until the next iteration of work.","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"7379fc25de2c0a861c769d74543194d03a05cc5e","unresolved":false,"context_lines":[{"line_number":41,"context_line":".. note::"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"   This spec doesn\u0027t talk about the usage check of limits. It is up to the"},{"line_number":44,"context_line":"   deployment to enforce usage."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Registered Limits"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_74c36058","line":44,"range":{"start_line":44,"start_character":3,"end_line":44,"end_character":13},"in_reply_to":"df87a7cf_e96ec0fe","updated":"2017-12-19 01:30:17.000000000","message":"Done","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb3c0b7a3d5961e2f137c3f3c0a675e617fe02ba","unresolved":false,"context_lines":[{"line_number":241,"context_line":"**Response Code:**"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"* 200 - OK"},{"line_number":244,"context_line":"* 401 - Unauthorized"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"**Response Parameters**"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_22159e9c","line":244,"updated":"2017-12-18 20:13:06.000000000","message":"I think 401 is specific to an authentication failure and so it\u0027s specific to getting a token. More relevant here might be 403, forbidden (due to being unauthorized for this action).\n\nI think everywhere here that lists 401 should probably be using 403 instead (or maybe just omitting explicitly defining 401 and 403 since they are implied in the token API and in how policy works)","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3f644c6d78e4d1d61c3c100c363c678c9cb2963a","unresolved":false,"context_lines":[{"line_number":241,"context_line":"**Response Code:**"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"* 200 - OK"},{"line_number":244,"context_line":"* 401 - Unauthorized"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"**Response Parameters**"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_598f75cc","line":244,"in_reply_to":"df87a7cf_22159e9c","updated":"2017-12-19 01:29:39.000000000","message":"Done","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb3c0b7a3d5961e2f137c3f3c0a675e617fe02ba","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"No content."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"**Response Code:**"},{"line_number":344,"context_line":"* 204 - No Content"},{"line_number":345,"context_line":"* 401 - Unauthorized"},{"line_number":346,"context_line":"* 404 - Not Found"}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_82b26a48","line":343,"updated":"2017-12-18 20:13:06.000000000","message":"This list isn\u0027t rendering properly, I think because there\u0027s a missing newline here","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3f644c6d78e4d1d61c3c100c363c678c9cb2963a","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"No content."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"**Response Code:**"},{"line_number":344,"context_line":"* 204 - No Content"},{"line_number":345,"context_line":"* 401 - Unauthorized"},{"line_number":346,"context_line":"* 404 - Not Found"}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_396951f8","line":343,"in_reply_to":"df87a7cf_82b26a48","updated":"2017-12-19 01:29:39.000000000","message":"Done","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb3c0b7a3d5961e2f137c3f3c0a675e617fe02ba","unresolved":false,"context_lines":[{"line_number":411,"context_line":"**Response Code:**"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"* 200 - OK"},{"line_number":414,"context_line":"* 400 - it depends on how we give users the error message. Please see \"Security"},{"line_number":415,"context_line":"        Impact\" section for more information."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"**Response Parameters**"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_02e97ab5","line":415,"range":{"start_line":414,"start_character":0,"end_line":415,"end_character":45},"updated":"2017-12-18 20:13:06.000000000","message":"I don\u0027t think that section is really giving information about error codes any more.\n\nI think this would give a 404 if the project, service, region, or registered limit for that resource on that project/service/region is not found. It would give a 403 (maybe 400?) if the user was not authorized to act on that project or if, in the future, the resource_limit violated the hierarchy constraints.","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3f644c6d78e4d1d61c3c100c363c678c9cb2963a","unresolved":false,"context_lines":[{"line_number":411,"context_line":"**Response Code:**"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"* 200 - OK"},{"line_number":414,"context_line":"* 400 - it depends on how we give users the error message. Please see \"Security"},{"line_number":415,"context_line":"        Impact\" section for more information."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"**Response Parameters**"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_b43ec8b5","line":415,"range":{"start_line":414,"start_character":0,"end_line":415,"end_character":45},"in_reply_to":"df87a7cf_02e97ab5","updated":"2017-12-19 01:29:39.000000000","message":"I\u0027m not sure if we should return 400 or 404 if the project/service/region is not found. Keystone does it in different ways in some APIs. For example:\n1. create endpoint: it raise 400 error. https://github.com/openstack/keystone/blob/master/keystone/catalog/core.py#L161-L175\n2. create trust: it raise 404 error:\nhttps://github.com/openstack/keystone/blob/master/keystone/trust/controllers.py#L132","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"05114188a93c02de8a1da59e37251b13b3a9b9ac","unresolved":false,"context_lines":[{"line_number":411,"context_line":"**Response Code:**"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"* 200 - OK"},{"line_number":414,"context_line":"* 400 - it depends on how we give users the error message. Please see \"Security"},{"line_number":415,"context_line":"        Impact\" section for more information."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"**Response Parameters**"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_c24b7cae","line":415,"range":{"start_line":414,"start_character":0,"end_line":415,"end_character":45},"in_reply_to":"df87a7cf_b43ec8b5","updated":"2017-12-19 14:54:34.000000000","message":"I think I\u0027d opt returning a 404 in this case since it\u0027s a bit more descriptive in why the request failed (e.g. the service referenced in the request doesn\u0027t exist). That seems to make the most sense to me.","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb3c0b7a3d5961e2f137c3f3c0a675e617fe02ba","unresolved":false,"context_lines":[{"line_number":695,"context_line":"      F [label\u003d\"F (10)\"];"},{"line_number":696,"context_line":"      P [label\u003d\"P (30)\", textcolor \u003d \"#FF0000\"];"},{"line_number":697,"context_line":"   }"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"This is allowed with flat enforcement because the hierarchy is not taken into"},{"line_number":700,"context_line":"consideration during limit validation. In the future, we will introduce a model"},{"line_number":701,"context_line":"that has the ability to validate limits with respect to project hierarchies."}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_e2249662","line":698,"updated":"2017-12-18 20:13:06.000000000","message":"These are just rendering horizontally, is it supposed to have a tree structure? The text makes it clear what is intended at least.","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cc39ea510669e2e5730a8290457384ba0db20b3f","unresolved":false,"context_lines":[{"line_number":695,"context_line":"      F [label\u003d\"F (10)\"];"},{"line_number":696,"context_line":"      P [label\u003d\"P (30)\", textcolor \u003d \"#FF0000\"];"},{"line_number":697,"context_line":"   }"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"This is allowed with flat enforcement because the hierarchy is not taken into"},{"line_number":700,"context_line":"consideration during limit validation. In the future, we will introduce a model"},{"line_number":701,"context_line":"that has the ability to validate limits with respect to project hierarchies."}],"source_content_type":"text/x-rst","patch_set":21,"id":"df87a7cf_45f6ac65","line":698,"in_reply_to":"df87a7cf_e2249662","updated":"2017-12-18 20:36:03.000000000","message":"Yeah - these are just suppose to render in a flat/horizontal structure. The diagram becomes more useful once you start drawing tree structures (like in Sean\u0027s original review).","commit_id":"e58c68996bcadfe607e30cba236971dccbbeecc5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6ec47fc47e0622f6e3236b3a32116bcc5bf669c0","unresolved":false,"context_lines":[{"line_number":382,"context_line":"* ``service_id`` - The service that is responsible for the resource, which"},{"line_number":383,"context_line":"  should match a service in the service catalog."},{"line_number":384,"context_line":"* ``region_id (optional)`` - The region that the service is hosted in. It"},{"line_number":385,"context_line":"  should keep the same with the region_id of the registered limit which will be"},{"line_number":386,"context_line":"  overrode."},{"line_number":387,"context_line":"* ``resource_name`` - The name of the resource, which should be unique compared"},{"line_number":388,"context_line":"  to other resource names for the same service and region."}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_e2f6c05d","line":385,"range":{"start_line":385,"start_character":32,"end_line":385,"end_character":41},"updated":"2017-12-19 14:57:35.000000000","message":"Put this in backticks to be consistent with the usage above (line 66). This can be done in a follow-up, too.","commit_id":"b5695d6179655cfe4385fab42e55b1ea2f42f730"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"0504ec2b0e4a8eaaa31373f3a89e742bb179323f","unresolved":false,"context_lines":[{"line_number":419,"context_line":"**Response Code:**"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"* 200 - OK"},{"line_number":422,"context_line":"* 400 - Bab Request"},{"line_number":423,"context_line":"* 403 - Forbidden"},{"line_number":424,"context_line":"* 409 - Limits that already exist"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_592be2e9","line":422,"range":{"start_line":422,"start_character":8,"end_line":422,"end_character":11},"updated":"2017-12-19 16:09:51.000000000","message":"nit \"Bad\" (fixable in followup)\n\nbut +1 to using 400, that seems correct according to https://specs.openstack.org/openstack/api-wg/guidelines/http.html#failure-code-clarifications","commit_id":"b5695d6179655cfe4385fab42e55b1ea2f42f730"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"0504ec2b0e4a8eaaa31373f3a89e742bb179323f","unresolved":false,"context_lines":[{"line_number":499,"context_line":"* 200 - OK"},{"line_number":500,"context_line":"* 400 - Bab Request"},{"line_number":501,"context_line":"* 403 - Forbidden"},{"line_number":502,"context_line":"* 404 - Not Found"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"**Response Parameters**"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_f93bd634","line":502,"updated":"2017-12-19 16:09:51.000000000","message":"According to https://specs.openstack.org/openstack/api-wg/guidelines/http.html#failure-code-clarifications I\u0027m not sure this would ever return a 404 since that\u0027s reserved for the \"target resource\" and the \"representation for the target resource means a URI\"","commit_id":"b5695d6179655cfe4385fab42e55b1ea2f42f730"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6ec47fc47e0622f6e3236b3a32116bcc5bf669c0","unresolved":false,"context_lines":[{"line_number":613,"context_line":"**Response Code:**"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"* 200 - OK"},{"line_number":616,"context_line":"* 403 -Forbidden"},{"line_number":617,"context_line":"* 404 - Not Found"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"**Response Parameters**"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_22afc82a","line":616,"updated":"2017-12-19 14:57:35.000000000","message":"Missing a space between the - and Forbidden. This can be fixed in a follow up.","commit_id":"b5695d6179655cfe4385fab42e55b1ea2f42f730"}]}
