)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ecf63278f499474fa812e13f525b72cd8dac0ac7","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Guo Jingyu \u003cguojy8993@163.com\u003e"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Blueprint: add-flavor-metadata-or-metadata-group"},{"line_number":17,"context_line":"Change-Id: Ied367a32d3785b29c4ba7b64a04c855c407a38e7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7faddb67_488ffb2d","line":16,"range":{"start_line":16,"start_character":31,"end_line":16,"end_character":33},"updated":"2019-07-25 13:35:19.000000000","message":"and\n\n(to link properly to the blueprint)","commit_id":"2b15430ded7bbd887b9c1481751d4f385d7584df"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"67e169e30562cba13040b8eb8ed7ff7ae6c68a09","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Guo Jingyu \u003cguojy8993@163.com\u003e"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Blueprint: add-flavor-metadata-or-metadata-group"},{"line_number":17,"context_line":"Change-Id: Ied367a32d3785b29c4ba7b64a04c855c407a38e7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7faddb67_16356fda","line":16,"range":{"start_line":16,"start_character":31,"end_line":16,"end_character":33},"in_reply_to":"7faddb67_488ffb2d","updated":"2019-07-30 03:25:54.000000000","message":"Done","commit_id":"2b15430ded7bbd887b9c1481751d4f385d7584df"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Blueprint: add-flavor-metadata-and-metadata-group"},{"line_number":19,"context_line":"Change-Id: Ied367a32d3785b29c4ba7b64a04c855c407a38e7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3fa7e38b_37bd1bd7","line":18,"updated":"2019-11-14 08:29:34.000000000","message":"If the currently proposed idea get more acceptance then I suggest to rename the bp accordingly.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Blueprint: add-flavor-metadata-and-metadata-group"},{"line_number":19,"context_line":"Change-Id: Ied367a32d3785b29c4ba7b64a04c855c407a38e7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3fa7e38b_29e294a1","line":18,"in_reply_to":"3fa7e38b_37bd1bd7","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"}],"doc/source/specs/backlog/index.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3fa7e38b_77c2b355","updated":"2019-11-14 08:29:34.000000000","message":"Why do you propose this as a backlog spec? Do you have the intention to implement it if the spec gets accepted?","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b39b4840aea83ce1e212d28317fa2cfe59206d2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3fa7e38b_baa7b209","in_reply_to":"3fa7e38b_77c2b355","updated":"2019-11-14 11:02:00.000000000","message":"No, I want to  to achieve this, moving it to the ussuri/approved directory.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"}],"specs/backlog/approved/add-flavor-metadata-or-metadata-group.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":26,"context_line":"that flavor will be used as a dedicated flavor. For example, a flavor is named"},{"line_number":27,"context_line":"\u0027foo-flavor\u0027. When the memory large page configuration item"},{"line_number":28,"context_line":"``{\"hw:mem_page_size\": \"1GB\"}`` is set in \u0027foo-flavor\u0027, select \u0027foo-flavor\u0027"},{"line_number":29,"context_line":"when creating the instance. The instance will can only be booted on the node"},{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"If you want to successfully boot the server under the same configuration,"},{"line_number":33,"context_line":"you should remove ``{\"hw:mem_page_size\": \"1GB\"}``, or create a new flavor"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_57894c6c","line":30,"range":{"start_line":29,"start_character":28,"end_line":30,"end_character":78},"updated":"2019-10-31 20:06:53.000000000","message":"This is the definition of a flavor. The same argument goes for booting a flavor with a large disk or memory value, which can only fit on nodes that are configured or able to handle that amount.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"that flavor will be used as a dedicated flavor. For example, a flavor is named"},{"line_number":27,"context_line":"\u0027foo-flavor\u0027. When the memory large page configuration item"},{"line_number":28,"context_line":"``{\"hw:mem_page_size\": \"1GB\"}`` is set in \u0027foo-flavor\u0027, select \u0027foo-flavor\u0027"},{"line_number":29,"context_line":"when creating the instance. The instance will can only be booted on the node"},{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"If you want to successfully boot the server under the same configuration,"},{"line_number":33,"context_line":"you should remove ``{\"hw:mem_page_size\": \"1GB\"}``, or create a new flavor"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_5d7f18de","line":30,"range":{"start_line":29,"start_character":28,"end_line":30,"end_character":78},"in_reply_to":"3fa7e38b_57894c6c","updated":"2019-11-03 15:29:51.000000000","message":"Yeah, but the extra specs (large disk or large memory) limit its use.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":33,"context_line":"you should remove ``{\"hw:mem_page_size\": \"1GB\"}``, or create a new flavor"},{"line_number":34,"context_line":"with the same ``ram/disk/cpu`` as \u0027foo-flavor\u0027, start the server with the"},{"line_number":35,"context_line":"new flavor, or open the node\u0027s memory large page configuration"},{"line_number":36,"context_line":"(restart node effective)."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_17d67450","line":36,"updated":"2019-10-31 20:06:53.000000000","message":"Again, this goes for any of the other values in the flavor, even the simple ones.\n\nNone of this section actually describes a problem, IMHO. I think what you want to say is \"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk) are correlated to the optional complex details, such as numa or hugepages.\" If you make that the problem description, it more clearly identifies what you think is problematic today, whereas what you have described is just the regular operation of flavors.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"you should remove ``{\"hw:mem_page_size\": \"1GB\"}``, or create a new flavor"},{"line_number":34,"context_line":"with the same ``ram/disk/cpu`` as \u0027foo-flavor\u0027, start the server with the"},{"line_number":35,"context_line":"new flavor, or open the node\u0027s memory large page configuration"},{"line_number":36,"context_line":"(restart node effective)."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_3d681c1f","line":36,"in_reply_to":"3fa7e38b_17d67450","updated":"2019-11-03 15:29:51.000000000","message":"\u003e \"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk) are correlated to the optional complex details, such as numa or hugepages.\"\n\nYeah, it\u0027s the problem of I want to say, thanks.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":40,"context_line":"As an administrator, I would like to see that the same configuration of the"},{"line_number":41,"context_line":"flavor can be reused, reducing maintenance costs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As an operator, I prefer that each module has its own mission and should not"},{"line_number":44,"context_line":"impose information that does not belong to it."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"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":6,"id":"3fa7e38b_77c6c89c","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":46},"updated":"2019-10-31 20:06:53.000000000","message":"I totally do not understand this as a use-case (or really even how this sentence pertains to what is described here). Can you rephrase it or remove it?","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"As an administrator, I would like to see that the same configuration of the"},{"line_number":41,"context_line":"flavor can be reused, reducing maintenance costs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As an operator, I prefer that each module has its own mission and should not"},{"line_number":44,"context_line":"impose information that does not belong to it."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"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":6,"id":"3fa7e38b_dd722812","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":46},"in_reply_to":"3fa7e38b_77c6c89c","updated":"2019-11-03 15:29:51.000000000","message":"Done","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":48,"context_line":"1.The function of the manage flavor metadata is added to the nova, and the"},{"line_number":49,"context_line":"  metadata information irrelevant to the flavor in the current flavor is"},{"line_number":50,"context_line":"  extracted into the flavor metadata and stored in the form of (key, value)"},{"line_number":51,"context_line":"  and/or metadata group. When the same resource needs to set multiple"},{"line_number":52,"context_line":"  metadata, it can be provided in the form of a metadata group, for example:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  {"},{"line_number":55,"context_line":"      \"disk_qos\": {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_d740dc08","line":52,"range":{"start_line":48,"start_character":2,"end_line":52,"end_character":76},"updated":"2019-10-31 20:06:53.000000000","message":"I really don\u0027t understand what you\u0027re saying here. Based on some words in the last sentence it sounds like maybe you want to be able to set multiple extra_spec items at once (which you can do today), but I don\u0027t know how to map that to your sample JSON below.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":48,"context_line":"1.The function of the manage flavor metadata is added to the nova, and the"},{"line_number":49,"context_line":"  metadata information irrelevant to the flavor in the current flavor is"},{"line_number":50,"context_line":"  extracted into the flavor metadata and stored in the form of (key, value)"},{"line_number":51,"context_line":"  and/or metadata group. When the same resource needs to set multiple"},{"line_number":52,"context_line":"  metadata, it can be provided in the form of a metadata group, for example:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  {"},{"line_number":55,"context_line":"      \"disk_qos\": {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_7dd0d4c8","line":52,"range":{"start_line":48,"start_character":2,"end_line":52,"end_character":76},"in_reply_to":"3fa7e38b_d740dc08","updated":"2019-11-03 15:29:51.000000000","message":"I expect to be able to set a class of properties through a collection, so that I can get all the properties set by the server through the key associated with *this* server.\n\nI would like to changed this sentence to \"Set a class of properties through a collection, and stored in the form of (key, value) and/or metadata group, for example:\"","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7a3b5977a09b24b333fcc010ff943ec767116db7","unresolved":false,"context_lines":[{"line_number":86,"context_line":" }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":" {"},{"line_number":89,"context_line":"      \"cpu_pinging\": {"},{"line_number":90,"context_line":"          \"hw:cpu_policy\": \"shared\","},{"line_number":91,"context_line":"          \"hw:cpu_thread_policy\": \"require\""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_34edaeef","line":89,"range":{"start_line":89,"start_character":14,"end_line":89,"end_character":15},"updated":"2019-10-31 19:15:26.000000000","message":"n","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":86,"context_line":" }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":" {"},{"line_number":89,"context_line":"      \"cpu_pinging\": {"},{"line_number":90,"context_line":"          \"hw:cpu_policy\": \"shared\","},{"line_number":91,"context_line":"          \"hw:cpu_thread_policy\": \"require\""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_fd6da42e","line":89,"range":{"start_line":89,"start_character":14,"end_line":89,"end_character":15},"in_reply_to":"3fa7e38b_34edaeef","updated":"2019-11-03 15:29:51.000000000","message":"Done","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7a3b5977a09b24b333fcc010ff943ec767116db7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":106,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":107,"context_line":"  | name          | varchar(255) | YES  |     | NULL    |                |"},{"line_number":108,"context_line":"  | rules         | varchar(255) | YES  |     | NULL    |                |"},{"line_number":109,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":110,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_b4b2fe04","line":108,"range":{"start_line":108,"start_character":4,"end_line":108,"end_character":9},"updated":"2019-10-31 19:15:26.000000000","message":"Is this supposed to store a json dict? If so, varchar(255) probably isn\u0027t big enough for general use.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":105,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":106,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":107,"context_line":"  | name          | varchar(255) | YES  |     | NULL    |                |"},{"line_number":108,"context_line":"  | rules         | varchar(255) | YES  |     | NULL    |                |"},{"line_number":109,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":110,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_9dbef062","line":108,"range":{"start_line":108,"start_character":4,"end_line":108,"end_character":9},"in_reply_to":"3fa7e38b_b4b2fe04","updated":"2019-11-03 15:29:51.000000000","message":"Yeah, change this to \"text\" type.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7a3b5977a09b24b333fcc010ff943ec767116db7","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":121,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":122,"context_line":"  | group_id      | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":123,"context_line":"  | instance_uuid | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":124,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":125,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_344ccec6","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":17},"updated":"2019-10-31 19:15:26.000000000","message":"I would think you would want to use the instance ID instead (or in addition) and create a foreign key.\n\nBut...\n\nThe flavor group data should be saved in the instance_extra table, with the content copied in completely. We do this for the flavor itself, because if the flavor is changed or deleted, it\u0027s important that the instance\u0027s characteristics don\u0027t, e.g. so a rebuild does the right thing. The same thing would apply to these flavor groups.\n\nAnd to that end, it\u0027s okay if they lose their significance as individual groups once you make them part of an instance. And assuming the content of a flavor group is just a list of extra specs, that means you can just blat them into the extra specs of the flavor that\u0027s already in InstanceExtra.\n\nTL;DR: this bit doesn\u0027t require a new table, or any kind of model change at all.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":121,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":122,"context_line":"  | group_id      | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":123,"context_line":"  | instance_uuid | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":124,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":125,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_b75680cd","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":17},"in_reply_to":"3fa7e38b_344ccec6","updated":"2019-10-31 20:06:53.000000000","message":"Agree on all points here.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":121,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":122,"context_line":"  | group_id      | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":123,"context_line":"  | instance_uuid | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":124,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":125,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_8021a7a0","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":17},"in_reply_to":"3fa7e38b_344ccec6","updated":"2019-11-03 15:29:51.000000000","message":"Emm...as you said, if I remove \"flavor_group_instance_association\", it will be difficult for me to establish a connection between flavor_group and instance. Or I need to use \"flavor_group\" as an attribute of InstanceExtra to store the flavor_group metadata selected by the VM, I think that I should change the InstanceExtra model (in order to keep the rebuild right, maybe it\u0027s a good way to record the flavor group for the VM).\n\nAs the reply in [1] asked by Dan.\n\n[1]https://review.opendev.org/#/c/663563/6/specs/backlog/approved/add-flavor-metadata-or-metadata-group.rst@132","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"4.The configuration items in the flavor ``extra_spec`` will be stored in the"},{"line_number":131,"context_line":"  form of ``flavor_group`` table, the flavor returns to the source, as the"},{"line_number":132,"context_line":"  hardware template is provided only for the server creation."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"5.List related items that depend on the flavor extra spec when booting a"},{"line_number":135,"context_line":"  server, as follows (or others):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_17a514b5","line":132,"updated":"2019-10-31 20:06:53.000000000","message":"Is this trying to say that there is to be some link between a flavor and the flavor_group? If so, where is that in your above schema? And, are those links always implied, or do they control the *allowed* groups to be used with a flavor? I don\u0027t see anywhere in your API definition below where the association(s) can be made...","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"4.The configuration items in the flavor ``extra_spec`` will be stored in the"},{"line_number":131,"context_line":"  form of ``flavor_group`` table, the flavor returns to the source, as the"},{"line_number":132,"context_line":"  hardware template is provided only for the server creation."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"5.List related items that depend on the flavor extra spec when booting a"},{"line_number":135,"context_line":"  server, as follows (or others):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_e0189b76","line":132,"in_reply_to":"3fa7e38b_17a514b5","updated":"2019-11-03 15:29:51.000000000","message":"I once thought about using \"flavor_id\" as a foreign key to the \"flavor_group\" table, but if you bind the flavor like this, the flavor will be restricted and cannot be reused by different flavors. Therefore, \"flavor_id\" is not used as a foreign key to \"flavor_group\".\n\nWe can select the defined \"flavor_group\" while creating the VM, and store the selected \"flavor_group\" in the instance_extra table to ensure that the correct flavor_group is obtained when the rebulid server is obtained.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  - A mechanism for specifying flavor group to a nova API, such as the"},{"line_number":150,"context_line":"    spawn API, which will be implemented by another spec, but depends on"},{"line_number":151,"context_line":"    the current spec."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Alternatives"},{"line_number":154,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_17c0b44f","line":151,"updated":"2019-10-31 20:06:53.000000000","message":"I think we really have to see that other spec in parallel to this. I can\u0027t imagine us allowing this to move forward with the serious fundamental changes required to nova\u0027s underpinnings without agreement on how it will actually be used.\n\nAlso, I think that it should be clear that there needs to be some way to retain the existing flavor 1:1 nature with a set of extra_specs, as it\u0027s definitely the case that many (many) people will not want to let users combine any random set of groups, not require users to have to specify their own flavor groups.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  - A mechanism for specifying flavor group to a nova API, such as the"},{"line_number":150,"context_line":"    spawn API, which will be implemented by another spec, but depends on"},{"line_number":151,"context_line":"    the current spec."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Alternatives"},{"line_number":154,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_80cbe7a1","line":151,"in_reply_to":"3fa7e38b_17c0b44f","updated":"2019-11-03 15:29:51.000000000","message":"Change the processing mechanism of the nova API for the current flavor, especially the processing of the extra_spec of the flavor. That is, in addition to disk, memory, cpu from the flavor, other metadata will be obtained from the flavor group.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":166,"context_line":"-----------------"},{"line_number":167,"context_line":"Add ``flavor_group`` and ``flavor_group_instance_association`` tables to"},{"line_number":168,"context_line":"the nova DB and move the `extra spec`_ (currently dependent on a flavor)"},{"line_number":169,"context_line":"to the ``flavor_group`` table."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"REST API impact"},{"line_number":172,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_37fff0ab","line":169,"updated":"2019-10-31 20:06:53.000000000","message":"Assume you mean this happens in the API database right? We call the main/cell database \"nova\" and the api one \"nova_api\" in a lot of places, so probably good to call this out.\n\nAlso, is this saying that the current extra specs table will be effectively emptied (over time) and that information moved into the flavor_group table? Can you explain what that structure and process will look like? All I see in your schema is a \"rules\" item which doesn\u0027t seem sufficient, if I\u0027m understanding where you\u0027re going with this.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"-----------------"},{"line_number":167,"context_line":"Add ``flavor_group`` and ``flavor_group_instance_association`` tables to"},{"line_number":168,"context_line":"the nova DB and move the `extra spec`_ (currently dependent on a flavor)"},{"line_number":169,"context_line":"to the ``flavor_group`` table."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"REST API impact"},{"line_number":172,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_80a44708","line":169,"in_reply_to":"3fa7e38b_37fff0ab","updated":"2019-11-03 15:29:51.000000000","message":"\u003e Also, is this saying that the current extra specs table will be effectively emptied (over time) and that information moved into the flavor_group table? \n\nYeah, it\u0027s in the ``nova_api`` DB. Over time the extra specs table will gradually be weakened and eventually removed.\n\n \u003e Can you explain what that structure and process will look like?\n\nFor example, to create a server through Horizon, the booting server selects the image, flavor, and network configuration. If your server needs to specify some flavor group metadata (extra specs), you need to select the favor group metadata as the VM\u0027s creation parameter.\n\nIf your flavor group metadata is not None, the selected flavor_group will be recorded in the instance_extra (removing flavor_group_instance_association, adding flavor_group to instanceExtra) table.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8ea79a6734b7f69e73f53517d2047779e230127b","unresolved":false,"context_lines":[{"line_number":166,"context_line":"-----------------"},{"line_number":167,"context_line":"Add ``flavor_group`` and ``flavor_group_instance_association`` tables to"},{"line_number":168,"context_line":"the nova DB and move the `extra spec`_ (currently dependent on a flavor)"},{"line_number":169,"context_line":"to the ``flavor_group`` table."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"REST API impact"},{"line_number":172,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_f8ddab6c","line":169,"in_reply_to":"3fa7e38b_80a44708","updated":"2019-11-04 15:01:46.000000000","message":"I was looking for what the short and long-term upgrade path looks like for operators. Do they hand-copy all the extra_specs into flavor_groups when U is released? How do they know when to remove the extra_specs from their flavors? Do we copy that stuff for them somehow? Does the API work in the meantime?","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* Add new flavor group."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  * POST /flavor-group"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"  * Normal http response code(s): 200"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_d7b53cee","line":177,"updated":"2019-10-31 20:06:53.000000000","message":"I\u0027m definitely missing a lot about the association of flavors and flavor groups, as well as how much a regular user will see about this. However, it seems to me that \"flavor groups\" is a seriously problematic name for this. AFAICT, you\u0027re proposing splitting out the \"hairy details\" from the \"simple details\" of a given hardware configuration. The questionable legitimacy of that goal aside, the \"hairy details\" are not \"flavor groups\" by any stretch, AFAICT.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8ea79a6734b7f69e73f53517d2047779e230127b","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* Add new flavor group."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  * POST /flavor-group"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"  * Normal http response code(s): 200"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_186a07b2","line":177,"in_reply_to":"3fa7e38b_a03703b0","updated":"2019-11-04 15:01:46.000000000","message":"\u003e No association of flavor and flavor groups.\n\nThere *must* be some way to map flavors with these \"flavor groups\", IMHO. Going from what we have now to allowing people to boot guests that have tiny CPU and RAM, but expensive attributes like GPUs is not an option. If operators want to opt into that \"anything can be mixed with anything else\" behavior, that\u0027s fine, but we cannot remove the ability to limit that composition.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* Add new flavor group."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  * POST /flavor-group"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"  * Normal http response code(s): 200"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_a03703b0","line":177,"in_reply_to":"3fa7e38b_d7b53cee","updated":"2019-11-03 15:29:51.000000000","message":"No association of flavor and flavor groups.\n\nFlavor only provides simple VM\u0027s basic configuration CPU, memory and disk.\n\nThe flavor groups record the extra_spec configuration that originally existed in the flavor and do not need to be associated with the flavor.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7a3b5977a09b24b333fcc010ff943ec767116db7","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * Normal response codes: 202"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Security impact"},{"line_number":253,"context_line":"---------------"},{"line_number":254,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_d49e9a04","line":251,"updated":"2019-10-31 19:15:26.000000000","message":"still missing the bit about how you boot an instance with one or more flavor groups.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * Normal response codes: 202"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Security impact"},{"line_number":253,"context_line":"---------------"},{"line_number":254,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_a0d38337","line":251,"in_reply_to":"3fa7e38b_77224854","updated":"2019-11-03 15:29:51.000000000","message":"Deal with this as follows:\n\nWhen booting an instance, like selecting image and network, select a flavor group and record the flavor group in the ``instance_extra`` table.\nWhen multiple different flavor groups are selected, the server is combined according to the attributes of the flavor group.\nIf two groups specify different values for the same spec will raise a 400.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8ea79a6734b7f69e73f53517d2047779e230127b","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * Normal response codes: 202"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Security impact"},{"line_number":253,"context_line":"---------------"},{"line_number":254,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_18dd276f","line":251,"in_reply_to":"3fa7e38b_a0d38337","updated":"2019-11-04 15:01:46.000000000","message":"\u003e When booting an instance, like selecting image and network, select\n \u003e a flavor group and record the flavor group in the ``instance_extra``\n \u003e table.\n\nJust to be clear, the composed flavor group would need to be *copied* into instance_extra, not just referenced.\n\n \u003e When multiple different flavor groups are selected, the server is\n \u003e combined according to the attributes of the flavor group.\n \u003e\n \u003e If two groups specify different values for the same spec will raise\n \u003e a 400.\n\nSo you will do this composition in the api and return a 400 to the user if they combine anything that conflicts? What happens if two groups combine to create something that the virt driver cannot possibly provide? Like some combination of hugepages, pci devices, and disk cache mode or something? You can\u0027t determine that in the API, no keys technically conflicted, and the only option is to fail very late (and expensively) in the virt driver with an instance fault hopefully explaining the problem. That is not a good situation, IMHO. One reason/benefit of flavors being atomic (or at least cultivated by the admins) is that they are known-good configurations that can be booted on the virt driver(s) and hardware available in the cluster.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * Normal response codes: 202"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Security impact"},{"line_number":253,"context_line":"---------------"},{"line_number":254,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_77224854","line":251,"in_reply_to":"3fa7e38b_d49e9a04","updated":"2019-10-31 20:06:53.000000000","message":"...or how flavors get associated with flavor groups. Surely you\u0027re not proposing allowing users to boot any flavor in combination with any arbitrary group(s) of extra_specs, right? So where is that affinity? As an operator, I would not want to allow someone to boot the 512mb \"free\" flavor with hugepages, or a gpu, or anything else that normally would imply a certain kind of machine, service tier, etc.\n\nWill you be able to boot an instance with any combination and number of these? How will you resolve conflicts if two groups specify different values for the same spec?","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Other end user impact"},{"line_number":261,"context_line":"---------------------"},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Performance Impact"},{"line_number":265,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_37edb0ef","line":262,"updated":"2019-10-31 20:06:53.000000000","message":"Clearly there is some impact to the user if they\u0027re going to need to or be able to provide one or more flavor groups on instance boot...","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"302815b79c80c12487e1f2b7856570bcd76a0b3f","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Other end user impact"},{"line_number":261,"context_line":"---------------------"},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Performance Impact"},{"line_number":265,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_40e2cf02","line":262,"in_reply_to":"3fa7e38b_37edb0ef","updated":"2019-11-03 15:29:51.000000000","message":"Yeah, If the user provides one or more flavor groups when the instance starts, the instance will be restricted by the flavor groups.","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"Other deployer impact"},{"line_number":269,"context_line":"---------------------"},{"line_number":270,"context_line":"The python-novaclient and python-openstackclient will be updated."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Developer impact"},{"line_number":273,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_57138c01","line":270,"updated":"2019-10-31 20:06:53.000000000","message":"Presumably there is a ton of deployer impact here, because (unless I\u0027m missing something) this will me moving extra_specs into flavor groups. What will that migration look like, how will the operator do it, and how will their workflow for defining new flavors and extra_specs differ from today?","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61e6d83ca6283cd6b39e769c1aa643cc27291225","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Developer impact"},{"line_number":273,"context_line":"----------------"},{"line_number":274,"context_line":"None"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"Upgrade impact"},{"line_number":277,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3fa7e38b_77e7a813","line":274,"updated":"2019-10-31 20:06:53.000000000","message":"There are a lot of scheduler filters that work based on the extra_specs. What changes will need to happen in the scheduler filter code?","commit_id":"b86045b9b2a94fb6b32a67b5f015535f864218fa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"92b7867756c17787e1a312cec37b86e37605da3f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk)"},{"line_number":33,"context_line":"are correlated to the optional complex details, such as numa or hugepages."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"},{"line_number":36,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_f84b6b24","line":33,"updated":"2019-11-04 15:06:18.000000000","message":"I have many other issues with this spec, but this statement right here (which, yes, I summarized for you in the previous rev :)) is where we disagree. I don\u0027t agree that the templating is important, but I _strongly_ disagree that flavors and (what is now) extra_specs should be completely disjoint and compose-able with no affinity or restriction. Since today they are necessarily tightly bound, I will not support any proposal that breaks that in a way that operators cannot retain the current functionality and behavior.","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"096fe8c46a119f7c988ec04b348d051941f42645","unresolved":false,"context_lines":[{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk)"},{"line_number":33,"context_line":"are correlated to the optional complex details, such as numa or hugepages."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"},{"line_number":36,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_bbc16de6","line":33,"in_reply_to":"3fa7e38b_3b79fd2d","updated":"2019-11-04 17:04:24.000000000","message":"\u003e \u003e I will not support any proposal that breaks that in a way\n \u003e \u003e that operators cannot retain the current functionality and\n \u003e \u003e behavior.\n \u003e \n \u003e FWIW I\u0027ve been assuming this would not replace extra specs, that\n \u003e there would \"never\" be a requirement to migrate existing flavors to\n \u003e use these flavor groups. Rather, it would just be an additional\n \u003e option that operators could use if they chose and felt it was right\n \u003e for their environment.\n\nWell, Brin confirmed in his replies on the previous set that the goal here is to empty, and eventually remove extra_specs. So, keeping them would provide at least the ability to retain today\u0027s functionality.\n\n \u003e Nevertheless, as mentioned elsewhere, the devil is in the details:\n \u003e how to determine which components can or can\u0027t be composed together\n \u003e for technical, resource, authorization, or just plain sensibility\n \u003e reasons. Is there an overall yes/no policy switch allowing\n \u003e composition? Are individual groups available to certain users? Are\n \u003e groups \"aggregated\" somehow to signify which flavors and other\n \u003e groups they can be composed with? Etc.\n\nIndeed. Plus, if we gain this compose-able groups thing, plus have extra_specs on the flavor still, we need to have logic on how to handle conflicts, overrides, etc. And that needs to exist everywhere that flavors are currently handled in the code, which is...a lot of places.","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a20bf7c2ccf1624686537ea37ddfa72c42c798f4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk)"},{"line_number":33,"context_line":"are correlated to the optional complex details, such as numa or hugepages."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"},{"line_number":36,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_2682cb53","line":33,"in_reply_to":"3fa7e38b_bbc16de6","updated":"2019-11-18 22:21:53.000000000","message":"i would expect that we woudl check for conflcit when associating the composable bits with the","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77ec1ce0ec7b0648782670d1f0c98587294f3e4b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I think it\u0027s a problem that the simple details of a flavor (cpu, mem, disk)"},{"line_number":33,"context_line":"are correlated to the optional complex details, such as numa or hugepages."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"},{"line_number":36,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_3b79fd2d","line":33,"in_reply_to":"3fa7e38b_f84b6b24","updated":"2019-11-04 16:45:53.000000000","message":"\u003e I will not support any proposal that breaks that in a way\n \u003e that operators cannot retain the current functionality and\n \u003e behavior.\n\nFWIW I\u0027ve been assuming this would not replace extra specs, that there would \"never\" be a requirement to migrate existing flavors to use these flavor groups. Rather, it would just be an additional option that operators could use if they chose and felt it was right for their environment.\n\nNevertheless, as mentioned elsewhere, the devil is in the details: how to determine which components can or can\u0027t be composed together for technical, resource, authorization, or just plain sensibility reasons. Is there an overall yes/no policy switch allowing composition? Are individual groups available to certain users? Are groups \"aggregated\" somehow to signify which flavors and other groups they can be composed with? Etc.\n\nAnswering all of these questions is possible, but will lead to a semantically complex solution by the time we\u0027re done. And as I said before, I\u0027m not sure that complexity is worth the benefit gained.","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"061f202b83e0178ffc1d7307e7d9a7856aa7b446","unresolved":false,"context_lines":[{"line_number":94,"context_line":"  | created_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":95,"context_line":"  | updated_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":96,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":97,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":98,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":99,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":100,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_6401ffb5","line":97,"updated":"2019-11-06 06:50:55.000000000","message":"Emm... I think I was missed something by Dan, the instance shuold configuration of the hw:numa_xxx (such as hw:numa_nodes,hw:numa_cpus.x,hw:numa_mem.x), the *target* source number need to come from the flavor, so the flavor group is mapping to the flavor is necessary, refer https://docs.openstack.org/nova/pike/admin/cpu-topologies.html#customizing-instance-numa-placement-policies\n\nSo I think we need to consider to add the foreign key for the flavor (such as \"flavor_id\").","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77ec1ce0ec7b0648782670d1f0c98587294f3e4b","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  The column of ``name`` in ``flavor_group`` is unique."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"3.Add the column of ``flavor_group`` to the ``instance_extra`` table, the"},{"line_number":106,"context_line":"  accuracy of the data is guaranteed when we rebuild the instance, and"},{"line_number":107,"context_line":"  show ``flavor_group`` in the show server detailed API."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_5bae3981","line":105,"range":{"start_line":105,"start_character":2,"end_line":105,"end_character":68},"updated":"2019-11-04 16:45:53.000000000","message":"Nah, like I said before, just copy the data into the existing flavor as if they were extra specs to begin with. IMO it is not important to maintain a connection back to the original flavor groups once the instance is created.","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77ec1ce0ec7b0648782670d1f0c98587294f3e4b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"Add ``flavor_group`` table to the ``nova_api`` DB and move the `extra spec`_"},{"line_number":147,"context_line":"(currently dependent on a flavor) to the ``flavor_group`` table."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Add the column of ``flavor_group`` to the ``instance_extra`` table."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"REST API impact"},{"line_number":152,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_3bc7bd47","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":67},"updated":"2019-11-04 16:45:53.000000000","message":"x","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77ec1ce0ec7b0648782670d1f0c98587294f3e4b","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"When booting an instance, like selecting image and network, select a flavor"},{"line_number":233,"context_line":"group and record the flavor group in the ``instance_extra`` table."},{"line_number":234,"context_line":"When multiple different flavor groups are selected, the server is combined"},{"line_number":235,"context_line":"according to the attributes of the flavor group."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_3b233d07","line":233,"range":{"start_line":232,"start_character":60,"end_line":233,"end_character":5},"updated":"2019-11-04 16:45:53.000000000","message":"How? You need to spell out the API and CLI changes associated with this. For example, I would expect to see something like:\n\n The input payload to ``POST /servers`` gets a new field\n ``flavor_groups`` which is a list of references to flavor \n groups, e.g.\n\n {\n    \"server\": {\n        \"name\": \"composed-server\",\n        \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\",\n        \"flavorRef\": \"http://openstack.example.com/flavors/1\",\n        \"flavor_groups\": [\n            \"http://openstack.example.com/flavor-group/42\",\n            \"http://openstack.example.com/flavor-group/10\",\n        ]\n        ...\n    }\n }\n\nand:\n\n The ``openstack server create`` command gets a new\n optional argument ``--flavor-group`` specifying the name\n or ID of a flavor group. The option may be repeated to\n specify multiple flavor groups.\n\nand similar for the novaclient CLI.\n\nAnd what about other lifecycle operations like resize? Etc.","commit_id":"e8402a2e81ebb7d07653188756e66de691525a74"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/add-flavor-metadata-and-metadata-group"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_d7a8478d","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":53},"updated":"2019-11-14 08:29:34.000000000","message":"This was a placeholder name from me during the PTG. We need to find a proper name for it.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/add-flavor-metadata-and-metadata-group"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_494830b2","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":53},"in_reply_to":"3fa7e38b_d7a8478d","updated":"2019-11-15 01:52:06.000000000","message":"s/ComposableFlavorBit/ResourcesMetadata","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"identical hardware templates (cpu, memory, disk ) due to the difference"},{"line_number":45,"context_line":"in the flavor extra specs,and I would like to see that the same configuration"},{"line_number":46,"context_line":"of the flavor can be reused, reducing maintenance costs."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_f7b223e5","line":47,"updated":"2019-11-14 08:29:34.000000000","message":"I think mnaser mentioned another use case during the discussion. if I remember correctly mnaser said that Google Cloud Engine supports composing machine types as well and in that case not just extra spec like information can be composed but the basic resource information like cpu and memory.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b39b4840aea83ce1e212d28317fa2cfe59206d2c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"identical hardware templates (cpu, memory, disk ) due to the difference"},{"line_number":45,"context_line":"in the flavor extra specs,and I would like to see that the same configuration"},{"line_number":46,"context_line":"of the flavor can be reused, reducing maintenance costs."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_7ae93ae1","line":47,"in_reply_to":"3fa7e38b_f7b223e5","updated":"2019-11-14 11:02:00.000000000","message":"Emm...I think I need some help from mnaser, guide the direction of this use case.\n\nThinking about it, maybe mnaser means:\nMaybe compose the cpu, memory and disk, like \n{\n    \"vcpu_1\": {\n        \"vcpu\":1\n    }\n},\n{\n    \"vcpu_5\": {\n        \"vcpu\":5\n    }\n},\n{\n    \"ram_512M\": {\n        \"ram\": 512\n    }\n},\n{\n    \"disk_10G\": {\n        \"disk\": 10\n    }\n}\nor combine vcpu, them with one:\n{\n    \"1-512-10\": {\n        \"vcpu\":1,\n        \"ram\": 512,\n        \"disk\": 10\n    }\n}\n\nIt means the end user can combine any of them, or choose the combined one \"1-512-10\" while him to create a server.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  flavor bits (extra specs, normal flavor fields), propose some format in the"},{"line_number":53,"context_line":"  spec for it. This entity can only be created by the admin by default."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"2.Add ``flavor_extra_specs_group`` table to the nova api DB, the table"},{"line_number":56,"context_line":"  structure is defined as follows:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_37de7b10","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":34},"updated":"2019-11-14 08:29:34.000000000","message":"lets not call this after flavor extra specs. This table needs to hold any kind of flavor composable bit not just extra specs.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  flavor bits (extra specs, normal flavor fields), propose some format in the"},{"line_number":53,"context_line":"  spec for it. This entity can only be created by the admin by default."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"2.Add ``flavor_extra_specs_group`` table to the nova api DB, the table"},{"line_number":56,"context_line":"  structure is defined as follows:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_ebda3e49","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":34},"in_reply_to":"3fa7e38b_37de7b10","updated":"2019-11-15 01:52:06.000000000","message":"I would like to rename it as \"resources_metadata\", because of it can contain flavor\u0027s extra specs, and the vcpu, ram and disk etc., there are multiple resources.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_f7e783e2","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":13},"updated":"2019-11-14 08:29:34.000000000","message":"A composable bit should not be tight to a given flavor that would go against the composability to any flavor.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_0b5d5a78","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":13},"in_reply_to":"3fa7e38b_f7e783e2","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_97ce4f59","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":17},"updated":"2019-11-14 08:29:34.000000000","message":"we don\u0027t want to tight this to instances at all.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_cb4e62c1","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":17},"in_reply_to":"3fa7e38b_97ce4f59","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"4.The nova api then merges the \"ComposableFalvorBit\"s with the base flavor"},{"line_number":79,"context_line":"  and embed the resulted flavor object into the instance."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"5.Add the column of ``flavor_extra_specs_group`` to the ``instance_extra``"},{"line_number":82,"context_line":"  table, the accuracy of the data is guaranteed when we rebuild the instance,"},{"line_number":83,"context_line":"  and show ``flavor_extra_specs_group`` in the show server detailed API."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"6.Set a class of properties through a collection, and stored in the form of"},{"line_number":86,"context_line":"  (key, value) and/or metadata group, for example:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_17049f7d","line":83,"range":{"start_line":81,"start_character":0,"end_line":83,"end_character":72},"updated":"2019-11-14 08:29:34.000000000","message":"I think we shall not extend the instance tables at all for this feature. From the instance perspective a composed flavor is no different from the current non composed flavor.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":78,"context_line":"4.The nova api then merges the \"ComposableFalvorBit\"s with the base flavor"},{"line_number":79,"context_line":"  and embed the resulted flavor object into the instance."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"5.Add the column of ``flavor_extra_specs_group`` to the ``instance_extra``"},{"line_number":82,"context_line":"  table, the accuracy of the data is guaranteed when we rebuild the instance,"},{"line_number":83,"context_line":"  and show ``flavor_extra_specs_group`` in the show server detailed API."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"6.Set a class of properties through a collection, and stored in the form of"},{"line_number":86,"context_line":"  (key, value) and/or metadata group, for example:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_0bd23ad2","line":83,"range":{"start_line":81,"start_character":0,"end_line":83,"end_character":72},"in_reply_to":"3fa7e38b_17049f7d","updated":"2019-11-15 01:52:06.000000000","message":"yeah, removed.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Add a new flavor extra specs group."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  * POST /flavor-extra-specs-group"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  * Normal http response code(s): 200"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_f700e368","line":161,"range":{"start_line":161,"start_character":9,"end_line":161,"end_character":34},"updated":"2019-11-14 08:29:34.000000000","message":"lets find a good naming that 1) does not restrict this to extra specs 2) express composability","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Add a new flavor extra specs group."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  * POST /flavor-extra-specs-group"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  * Normal http response code(s): 200"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_26bacbe0","line":161,"range":{"start_line":161,"start_character":9,"end_line":161,"end_character":34},"in_reply_to":"3fa7e38b_f700e368","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  * Example create flavor extra specs group: JSON request"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    {"},{"line_number":171,"context_line":"        \"foo_group\": {"},{"line_number":172,"context_line":"            \"key1\": \"value1\","},{"line_number":173,"context_line":"            \"key2\": \"value2\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        }"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    }"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_97f72f8d","line":175,"range":{"start_line":170,"start_character":1,"end_line":175,"end_character":9},"updated":"2019-11-14 08:29:34.000000000","message":"I think we need to model that this composable bit can hold the basic flavor attributes as well like cpu and memory.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  * Example create flavor extra specs group: JSON request"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    {"},{"line_number":171,"context_line":"        \"foo_group\": {"},{"line_number":172,"context_line":"            \"key1\": \"value1\","},{"line_number":173,"context_line":"            \"key2\": \"value2\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        }"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    }"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_26b64bde","line":175,"range":{"start_line":170,"start_character":1,"end_line":175,"end_character":9},"in_reply_to":"3fa7e38b_97f72f8d","updated":"2019-11-15 01:52:06.000000000","message":"I think that we can use the current form, whether it is one or more keys. Or do you have any suggestions?","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        }"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Associated a flavor extra specs group"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"  * POST /flavor-extra-specs-group/{name}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  * Normal response codes: 202"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  * Example associated a flavor extra specs group: JSON request"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  {"},{"line_number":211,"context_line":"      \"flavor_id\": 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  }"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"* List flavor extra specs groups"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_57f1b794","line":213,"range":{"start_line":199,"start_character":0,"end_line":213,"end_character":3},"updated":"2019-11-14 08:29:34.000000000","message":"We don\u0027t need this. We compose the base flavor with the composable bits during server create","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        }"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Associated a flavor extra specs group"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"  * POST /flavor-extra-specs-group/{name}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  * Normal response codes: 202"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  * Example associated a flavor extra specs group: JSON request"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  {"},{"line_number":211,"context_line":"      \"flavor_id\": 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  }"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"* List flavor extra specs groups"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_46b907c9","line":213,"range":{"start_line":199,"start_character":0,"end_line":213,"end_character":3},"in_reply_to":"3fa7e38b_57f1b794","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            \"name\": \"composed-server\","},{"line_number":267,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":268,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":269,"context_line":"            \"flavor_extra_specs_group\": ["},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/42\","},{"line_number":272,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/10\""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_77ecf3ba","line":269,"range":{"start_line":269,"start_character":13,"end_line":269,"end_character":37},"updated":"2019-11-14 08:29:34.000000000","message":"naming","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            \"name\": \"composed-server\","},{"line_number":267,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":268,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":269,"context_line":"            \"flavor_extra_specs_group\": ["},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/42\","},{"line_number":272,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/10\""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_a6f79b8c","line":269,"range":{"start_line":269,"start_character":13,"end_line":269,"end_character":37},"in_reply_to":"3fa7e38b_77ecf3ba","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":293,"context_line":"          \"OS-EXT-SRV-ATTR:hostname\": \"new-server-test\","},{"line_number":294,"context_line":"          \"OS-EXT-SRV-ATTR:hypervisor_hostname\": \"fake-mini\","},{"line_number":295,"context_line":"          \"OS-EXT-SRV-ATTR:instance_name\": \"instance-00000001\","},{"line_number":296,"context_line":"          \"OS-EXT-SRV-ATTR:kernel_id\": \"\","},{"line_number":297,"context_line":"          \"flavor_extra_specs_group\": ["},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"              \"foo_group1\": {"},{"line_number":300,"context_line":"                  \"key1\": \"value1\","},{"line_number":301,"context_line":"                  \"key2\": \"value2\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"              },"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"              \"foo_group2\": {"},{"line_number":306,"context_line":"                  \"key1\": \"value1\","},{"line_number":307,"context_line":"                  \"key2\": \"value2\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"              }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"          ]"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_973c0f31","line":309,"range":{"start_line":296,"start_character":1,"end_line":309,"end_character":15},"updated":"2019-11-14 08:29:34.000000000","message":"During server create we merge the bits into the base flavor and the resulted new flavor object is embeded into the instance. So there is no way (and I think there should not be a way) to show which bits was used for the composition. But the flavor field of the response should show the composed flavor information.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":293,"context_line":"          \"OS-EXT-SRV-ATTR:hostname\": \"new-server-test\","},{"line_number":294,"context_line":"          \"OS-EXT-SRV-ATTR:hypervisor_hostname\": \"fake-mini\","},{"line_number":295,"context_line":"          \"OS-EXT-SRV-ATTR:instance_name\": \"instance-00000001\","},{"line_number":296,"context_line":"          \"OS-EXT-SRV-ATTR:kernel_id\": \"\","},{"line_number":297,"context_line":"          \"flavor_extra_specs_group\": ["},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"              \"foo_group1\": {"},{"line_number":300,"context_line":"                  \"key1\": \"value1\","},{"line_number":301,"context_line":"                  \"key2\": \"value2\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"              },"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"              \"foo_group2\": {"},{"line_number":306,"context_line":"                  \"key1\": \"value1\","},{"line_number":307,"context_line":"                  \"key2\": \"value2\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"              }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"          ]"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_a66a3b18","line":309,"range":{"start_line":296,"start_character":1,"end_line":309,"end_character":15},"in_reply_to":"3fa7e38b_973c0f31","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  }"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"When booting an instance, like selecting image and network, select flavor"},{"line_number":320,"context_line":"extra specs group and record that in the ``instance_extra`` table."},{"line_number":321,"context_line":"When multiple different flavor extra specs groups are selected, the server"},{"line_number":322,"context_line":"is combined according to the attributes of the flavor extra specs group."},{"line_number":323,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_d70b677a","line":320,"range":{"start_line":319,"start_character":1,"end_line":320,"end_character":66},"updated":"2019-11-14 08:29:34.000000000","message":"Nope. What we discussed was that the composition happens during the server create but then only the resulted, merged flavor is embedded into the instance (as today), no new data model is needed at this point","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  }"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"When booting an instance, like selecting image and network, select flavor"},{"line_number":320,"context_line":"extra specs group and record that in the ``instance_extra`` table."},{"line_number":321,"context_line":"When multiple different flavor extra specs groups are selected, the server"},{"line_number":322,"context_line":"is combined according to the attributes of the flavor extra specs group."},{"line_number":323,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_667443ff","line":320,"range":{"start_line":319,"start_character":1,"end_line":320,"end_character":66},"in_reply_to":"3fa7e38b_d70b677a","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":328,"context_line":"  - No change for operators who choose not to request the flavor extra specs"},{"line_number":329,"context_line":"    group."},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"  - Requested more than one flavor extra specs groups, if there are different"},{"line_number":332,"context_line":"    values for the same spec will be raised a 409."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"  - Flavor in request body of server create that has the same spec in the"},{"line_number":335,"context_line":"    request ``flavor_extra_specs_group``, it will be raised a 409."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_1777bf0a","line":332,"range":{"start_line":331,"start_character":0,"end_line":332,"end_character":50},"updated":"2019-11-14 08:29:34.000000000","message":"If we want to support mnaser\u0027s use case about composing base values like cpu and memory. Then we need to decide if\na) a composable bit overwrites what is in the base flavor regarding memory, cpu and disk\nb) a composable bit acts like an addition to what is int he base flavor memory, cpu and disk field.\nc) something else\n\nFor flavor extra specs we can go with your proposal that if an extra spec key is present in the base flavor and also present in any of the composable bits then 409. Also if the same key is present in more than on composable bit in the server create request then 409 as well.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":328,"context_line":"  - No change for operators who choose not to request the flavor extra specs"},{"line_number":329,"context_line":"    group."},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"  - Requested more than one flavor extra specs groups, if there are different"},{"line_number":332,"context_line":"    values for the same spec will be raised a 409."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"  - Flavor in request body of server create that has the same spec in the"},{"line_number":335,"context_line":"    request ``flavor_extra_specs_group``, it will be raised a 409."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_4915903c","line":332,"range":{"start_line":331,"start_character":0,"end_line":332,"end_character":50},"in_reply_to":"3fa7e38b_1777bf0a","updated":"2019-11-15 01:52:06.000000000","message":"Done","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6edcbba8873a6572e772e4bf163789c0f12d6c7","unresolved":false,"context_lines":[{"line_number":334,"context_line":"  - Flavor in request body of server create that has the same spec in the"},{"line_number":335,"context_line":"    request ``flavor_extra_specs_group``, it will be raised a 409."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"  - When resize an instance, you need to compare the"},{"line_number":338,"context_line":"    ``flavor_extra_specs_group`` with the spec request spec,"},{"line_number":339,"context_line":"    otherwise raise a 400."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Security impact"},{"line_number":342,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_b74eebbf","line":339,"range":{"start_line":337,"start_character":1,"end_line":339,"end_character":26},"updated":"2019-11-14 08:29:34.000000000","message":"You need to specify how the resize REST API will look like above.\nIf we want to support composability there as well then there will be a merged flavor in the instance and there will be a new base flavor + composable bits in the resize request. The requested new base flavor and new bits needs to be merged first according to the above rules. Then we might need to compare the embedded flavor with the newly composed flavor to see if we need to reject non suppored downsizing requests","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2f8d09c96c3866a301b513e4afc1c9875b733914","unresolved":false,"context_lines":[{"line_number":334,"context_line":"  - Flavor in request body of server create that has the same spec in the"},{"line_number":335,"context_line":"    request ``flavor_extra_specs_group``, it will be raised a 409."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"  - When resize an instance, you need to compare the"},{"line_number":338,"context_line":"    ``flavor_extra_specs_group`` with the spec request spec,"},{"line_number":339,"context_line":"    otherwise raise a 400."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Security impact"},{"line_number":342,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_294db4c3","line":339,"range":{"start_line":337,"start_character":1,"end_line":339,"end_character":26},"in_reply_to":"3fa7e38b_b74eebbf","updated":"2019-11-15 01:52:06.000000000","message":"Yeah, will be shown in the next patch.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"973421c959cce1aa88189510c65abdc5d6cc3e3f","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"References"},{"line_number":419,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":".. _extra spec: https://docs.openstack.org/nova/latest/user/flavors.html#extra-specs"},{"line_number":422,"context_line":".. _server create: https://docs.openstack.org/api-ref/compute/?expanded\u003dcreate-server-detail#create-server"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa7e38b_d4f2b6e3","line":420,"updated":"2019-11-10 15:59:08.000000000","message":"There need to add the disscussion info in the references, and will be add in next patch as follows.\n\n\nFor a discussion of this feature, please refer to:\n\n* https://etherpad.openstack.org/p/nova-shanghai-ptg\n  Train PTG etherpad, discussion on or around line 260 and 379.\n\n* http://lists.openstack.org/pipermail/openstack-discuss/2019-November/010643.html\n  Balázs Gibizer\u0027s recap email to the dev list on Train PTG.","commit_id":"cd159274e78a972b4f7117ae849afc3941741e7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"},{"line_number":17,"context_line":"wants to add to the \"base\" flavor he/she used in the create request.This is"},{"line_number":18,"context_line":"not strongly associated with flavors, enhancing the reusability of flavors."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_4b4ef26e","line":16,"range":{"start_line":16,"start_character":69,"end_line":16,"end_character":75},"updated":"2019-11-14 12:30:25.000000000","message":"if you want to use the gender neutral term just use \"they\"\nor the user","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"},{"line_number":17,"context_line":"wants to add to the \"base\" flavor he/she used in the create request.This is"},{"line_number":18,"context_line":"not strongly associated with flavors, enhancing the reusability of flavors."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_497910c3","line":16,"range":{"start_line":16,"start_character":69,"end_line":16,"end_character":75},"in_reply_to":"3fa7e38b_4b4ef26e","updated":"2019-11-15 03:47:11.000000000","message":"Done","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"},{"line_number":17,"context_line":"wants to add to the \"base\" flavor he/she used in the create request.This is"},{"line_number":18,"context_line":"not strongly associated with flavors, enhancing the reusability of flavors."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_eb38feee","line":17,"range":{"start_line":15,"start_character":52,"end_line":17,"end_character":68},"updated":"2019-11-14 12:30:25.000000000","message":"this does not aling with the body of the spec.\n\nwhat you are proposing is createing a new top level entitiy in the api the flavor extra specs group which has to be pre created and applied to","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ComposableFlavorBit\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Extend the server create"},{"line_number":16,"context_line":"REST API to allow the end user to specify the \"ComposableFlavorBit\"s he/she"},{"line_number":17,"context_line":"wants to add to the \"base\" flavor he/she used in the create request.This is"},{"line_number":18,"context_line":"not strongly associated with flavors, enhancing the reusability of flavors."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_8c0b9620","line":17,"range":{"start_line":15,"start_character":52,"end_line":17,"end_character":68},"in_reply_to":"3fa7e38b_eb38feee","updated":"2019-11-15 03:47:11.000000000","message":"I think *that* is not accurate, firstly to add the flavor fragment management APIs, and then extend the server create, show server details and resize server APIs, I think they are all belongs to this spec.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Flavor, the instance hardware template, record ``ram/cpu/disk`` related"},{"line_number":24,"context_line":"information."},{"line_number":25,"context_line":"Currently, it takes on too much responsibility for instance-related metadata"},{"line_number":26,"context_line":"(key, value), even if many metadata information not related to the flavor is"},{"line_number":27,"context_line":"placed in `extra spec`_, due to these extra spec exist, the flavor looks too"},{"line_number":28,"context_line":"bloated and highly coupled."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"If some (key, value) option is configured in the ``extra_spec`` of the flavor,"},{"line_number":31,"context_line":"that flavor will be used as a dedicated flavor. For example, a flavor is named"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_8b5cea19","line":28,"range":{"start_line":25,"start_character":0,"end_line":28,"end_character":27},"updated":"2019-11-14 12:30:25.000000000","message":"this is partly intentional as the flavor today is uses as a billing as part metric in most public clouds.\n\nnon resouce altering metatadata such as non standard extraspec could be seperated without breaking that usecase but not in all cases.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Flavor, the instance hardware template, record ``ram/cpu/disk`` related"},{"line_number":24,"context_line":"information."},{"line_number":25,"context_line":"Currently, it takes on too much responsibility for instance-related metadata"},{"line_number":26,"context_line":"(key, value), even if many metadata information not related to the flavor is"},{"line_number":27,"context_line":"placed in `extra spec`_, due to these extra spec exist, the flavor looks too"},{"line_number":28,"context_line":"bloated and highly coupled."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"If some (key, value) option is configured in the ``extra_spec`` of the flavor,"},{"line_number":31,"context_line":"that flavor will be used as a dedicated flavor. For example, a flavor is named"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_cc574e01","line":28,"range":{"start_line":25,"start_character":0,"end_line":28,"end_character":27},"in_reply_to":"3fa7e38b_8b5cea19","updated":"2019-11-15 03:47:11.000000000","message":"Yeah, some public clouds uses the flavor basic for billing.\nBut the feature proposed by this spec does not affect the original features. And in private cloud it\u0027s a headache.\n\nPerhaps in the future, this approach will also become a means of public cloud billing module.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"when creating the instance. The instance will can only be booted on the node"},{"line_number":35,"context_line":"where the large page of memory is configured, otherwise it will fail to start."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"I think it\u0027s a problem that the simple details of a flavor (cpu, memory, disk)"},{"line_number":38,"context_line":"are correlated to the optional complex details, such as numa or hugepages."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Use Cases"},{"line_number":41,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_4bd35260","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":74},"updated":"2019-11-14 12:30:25.000000000","message":"againg this was by design hugepages prevents memory over substiption and when it was intoduced operators wanted to charge for that and the extra performace it brings. numa less so much but thing like cpu pinning also incurs a cost.\n\nflavor extra specs are also used for vgpu passthouhg so there are two type of metatada \n\nmetataday that affect resouce usage which typicly people want to charge more for e.g hw:cpu_policy\u003ddedicated and metatadata that does not e.g. hw:pmu\u003dtrue|false or hw:cpu_socket\u003d2","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_aba0c692","line":67,"range":{"start_line":67,"start_character":5,"end_line":67,"end_character":33},"updated":"2019-11-14 12:30:25.000000000","message":"this is problematic too as it will lead to a flvor_group explotion\n\nyou want a many to many relation ship or at a minium a many to 1 relation ship where the flaovr meta data group can be mapped to multiple flavors.\n\n\nif we want to normalise the db, which i think we should,\ninstead of 1 table we shoudl add 3.\n\nflavor_extra_spec_group_mappings with 3 colums flavor_id(int), instance_uuid(nullable),and extra_spec_group_id(int) that have the unique constraint shoudl be the triplet of all fields.\n\nthe second table the flavor_extra_specs_group\nshoudl contain the id(int),uuid,create_at,updated_at,deleted_at,name and deleted fields\n\na third table extra_specs shoudl have an the following fields\nflavor_group_id(int),key,value\n\non full delete(purge) of a flavor group row form the flavor_extra_specs_group table the delete shoudl cascade removing the flavor_extra_spec_group_mappings entry and the related rows.\n\nim not actully conviced we need to soft delete this by the way i woudl prefer to delete the row when you delete the flavor group rather then have a deleted_at column and deleted filed.\n\nby the way part of the reason im suggesting this is i think we shoudl use this for all flavours to store the metadata in a table so that we dont store it in a json blob in the db.\n\nthat woudl allow use to efficiently search for flavours based on metadata. even without the flavour groups concept i think there would be value in that.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_ccdd0e42","line":67,"range":{"start_line":67,"start_character":5,"end_line":67,"end_character":33},"in_reply_to":"3fa7e38b_aba0c692","updated":"2019-11-15 03:47:11.000000000","message":"In the latest patch (PS11), I will add anonther table to the DB, and I think there are two tables can achieve the desired function.\n\nOne table is \"resources_metadata\" to record the composable bits, as following fuelds.\n  - id(int),create_at,updated_at,deleted_at, name, rules, description and deleted fields\n\nAnother table is \"resources_metadata_mapping\" to record the composable bits used by which instance, as following fields:\n  - created_at, updated_at,deleted_at, id(int), resources_md_id, instance_uuid and deleted fields.\n\nI dont think we need the flaovr_id in the \"resources_metadata_mapping\" table, because of the mnaser point, we can save the vcpu, ram and disk in a composable bit, at this point we don\u0027t need a flavor.\n\n \u003e by the way part of the reason im suggesting this is i think we shoudl use this for all flavours to store the  metadata in a table so that we dont store it in a json blob in the db.\n\nIf we saved the metadata as key, value (not json blob), that maybe we should compose some of keys to support the server create, maybe that\u0027s not easy (such as disk_qos).\nIn other words, if we just have one key,value, we can save as json blob, it\u0027s just include a metadata.\n\n \u003e that woudl allow use to efficiently search for flavours based on metadata. even without the flavour groups concept i think there would be value in that.\n\nReview \"resources_metadata\" and \"resources_metadata_mapping\", we can search the resources metadata for an instance easily, if the instance composed by a base flavor and composable bits, we can from the instance get the flavor_id or the instance\u0027s all metadata.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a20bf7c2ccf1624686537ea37ddfa72c42c798f4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":65,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":66,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":67,"context_line":"  | flavor_id     | varchar(255) | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | instance_uuid | varchar(36)  | YES  |     | NULL    |                |"},{"line_number":69,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":70,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_a6144d42","line":67,"range":{"start_line":67,"start_character":5,"end_line":67,"end_character":33},"in_reply_to":"3fa7e38b_ccdd0e42","updated":"2019-11-18 22:21:53.000000000","message":"the flavor id was in the flavor_extra_spec_group_mappings for a reason.\n\ni did not want user to be able to apply flavor_extra_specs_group to any flavor.\n\nso for a use to be able to apply a flavor_extra_specs_group to a flaovr i wanted to require that there must be a mapping\nbetween the flavor and flavor_extra_specs_group with the instacne_uuid filed set to null.\n\ni was also thinking we could extend mapping with 1 addtional filed which woudl indicate if flavor_extra_specs_group shoud be applied by default.\n\ni left those out of my previous comments becaue i wanted to see your responces to some for the other comments i had first.\n\ni think we need a way to restrict what flavour the flavor_extra_specs_group can be applied too and perhaps even want project can use them similar to the way favour access\n\ni need to look at the latest version but with the breilf look i gave i dont think that is possible with the latest schema","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"6.Set a class of properties through a collection, and stored in the form of"},{"line_number":86,"context_line":"  (key, value) and/or metadata group, for example:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  {"},{"line_number":89,"context_line":"      \"disk_qos\": {"},{"line_number":90,"context_line":"          \"quota:disk_read_bytes_sec\": 10485760,"},{"line_number":91,"context_line":"          \"quota:disk_read_iops_sec\": 5000,"},{"line_number":92,"context_line":"          \"quota:disk_write_bytes_sec\": 10000000,"},{"line_number":93,"context_line":"          \"quota:disk_write_iops_sec\": 8000"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"      }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  }"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"  {"},{"line_number":100,"context_line":"      \"cpu_limits\": {"},{"line_number":101,"context_line":"          \"quota:cpu_quota\": 10000,"},{"line_number":102,"context_line":"          \"quota:cpu_period\": 20000,"},{"line_number":103,"context_line":"          \"quota:cpu_shares\": 2048"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"      }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"  }"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  {"},{"line_number":110,"context_line":"      \"vif_qos\": {"},{"line_number":111,"context_line":"          \"quota:vif_outbound_average\": 32768,"},{"line_number":112,"context_line":"          \"quota:vif_outbound_peak\": 65536,"},{"line_number":113,"context_line":"          \"quota:vif_outbound_burst\": 65536,"},{"line_number":114,"context_line":"          \"quota:vif_inbound_average\": 32768,"},{"line_number":115,"context_line":"          \"quota:vif_inbound_peak\": 65536,"},{"line_number":116,"context_line":"          \"quota:vif_inbound_burst\": 65536"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"      }"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":" }"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":" {"},{"line_number":123,"context_line":"      \"cpu_pinning\": {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_6bf16e95","line":120,"range":{"start_line":88,"start_character":0,"end_line":120,"end_character":2},"updated":"2019-11-14 12:30:25.000000000","message":"as a side note we should consider deprecating these for removal.\n\nthe vif_qos item in partacalar should not be used any more and you should use neutron qos policies instead.\n\nthe cpu_limits dont actually server much use unless you hare heavily over subscribing a host. cpu_allocation_ratio\u003e4\n\nthe disk qos is the only modertly useful one and even then if you are using cinder you should be using cinder qos instead.\nits only really use is for non cinder volumes to limit the rbd or qcow backends. even then on the ceph side you can limit iops via ceph pool options so that just leaves qos of local storage which i dont think is often used.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"6.Set a class of properties through a collection, and stored in the form of"},{"line_number":86,"context_line":"  (key, value) and/or metadata group, for example:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  {"},{"line_number":89,"context_line":"      \"disk_qos\": {"},{"line_number":90,"context_line":"          \"quota:disk_read_bytes_sec\": 10485760,"},{"line_number":91,"context_line":"          \"quota:disk_read_iops_sec\": 5000,"},{"line_number":92,"context_line":"          \"quota:disk_write_bytes_sec\": 10000000,"},{"line_number":93,"context_line":"          \"quota:disk_write_iops_sec\": 8000"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"      }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  }"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"  {"},{"line_number":100,"context_line":"      \"cpu_limits\": {"},{"line_number":101,"context_line":"          \"quota:cpu_quota\": 10000,"},{"line_number":102,"context_line":"          \"quota:cpu_period\": 20000,"},{"line_number":103,"context_line":"          \"quota:cpu_shares\": 2048"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"      }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"  }"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  {"},{"line_number":110,"context_line":"      \"vif_qos\": {"},{"line_number":111,"context_line":"          \"quota:vif_outbound_average\": 32768,"},{"line_number":112,"context_line":"          \"quota:vif_outbound_peak\": 65536,"},{"line_number":113,"context_line":"          \"quota:vif_outbound_burst\": 65536,"},{"line_number":114,"context_line":"          \"quota:vif_inbound_average\": 32768,"},{"line_number":115,"context_line":"          \"quota:vif_inbound_peak\": 65536,"},{"line_number":116,"context_line":"          \"quota:vif_inbound_burst\": 65536"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"      }"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":" }"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":" {"},{"line_number":123,"context_line":"      \"cpu_pinning\": {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_ec9eca67","line":120,"range":{"start_line":88,"start_character":0,"end_line":120,"end_character":2},"in_reply_to":"3fa7e38b_6bf16e95","updated":"2019-11-15 03:47:11.000000000","message":"Yeah, I will remove the vif qos note. I think the disk qos will still be used frequently in local storage, and we do have such customers (although a few), the cpu_limits also used by some customers.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"REST API impact"},{"line_number":155,"context_line":"---------------"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Add flavor fragment management APIs to compute API."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Add a new flavor extra specs group."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  * POST /flavor-extra-specs-group"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  * Normal http response code(s): 200"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  * Expected error http response code(s):"},{"line_number":166,"context_line":"    unauthorized(401), forbidden(403), itemNotFound(404), conflict(409)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  * Example create flavor extra specs group: JSON request"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    {"},{"line_number":171,"context_line":"        \"foo_group\": {"},{"line_number":172,"context_line":"            \"key1\": \"value1\","},{"line_number":173,"context_line":"            \"key2\": \"value2\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        }"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    }"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Update an exist flavor extra specs group."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  * PUT /flavor-extra-specs-group/{name}"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  * Normal http response code(s): 200"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"  * Expected error http response code(s):"},{"line_number":186,"context_line":"    badRequest(400), unauthorized(401), forbidden(403),"},{"line_number":187,"context_line":"    itemNotFound(404), conflict(409)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"  * Example update an exist flavor group: JSON request"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    {"},{"line_number":192,"context_line":"        \"foo_group\": {"},{"line_number":193,"context_line":"            \"key1\": \"new_value1\","},{"line_number":194,"context_line":"            \"key2\": \"new_value2\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        }"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Associated a flavor extra specs group"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"  * POST /flavor-extra-specs-group/{name}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  * Normal response codes: 202"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  * Example associated a flavor extra specs group: JSON request"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  {"},{"line_number":211,"context_line":"      \"flavor_id\": 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  }"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"* List flavor extra specs groups"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"  * GET /flavor-extra-specs-group"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"  * Normal response codes: 200"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"  * Error response codes: unauthorized(401), forbidden(403)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  * Example list flavor group: JSON request"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    {"},{"line_number":226,"context_line":"        \"flavor_groups\": ["},{"line_number":227,"context_line":"            \"foo_group1\": {"},{"line_number":228,"context_line":"                \"key1\": \"value1\","},{"line_number":229,"context_line":"                \"key2\": \"value2\""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"            },"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"            \"foo_group2\": {"},{"line_number":234,"context_line":"                \"key1\": \"value1\","},{"line_number":235,"context_line":"                \"key2\": \"value2\""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            }"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        ]"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    }"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"* Delete an exist flavor group."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"  * DELETE /flavor-extra-specs-group/{name}"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"  * Normal response codes: 202"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Extend the server create API to allow the end user to specify the"},{"line_number":252,"context_line":"\"ComposableFlavorBit\"s he/she wants to add to the \"base\" flavor in"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_8b794ac6","line":249,"range":{"start_line":157,"start_character":0,"end_line":249,"end_character":78},"updated":"2019-11-14 12:30:25.000000000","message":"these would be admin only by default correct.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"REST API impact"},{"line_number":155,"context_line":"---------------"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Add flavor fragment management APIs to compute API."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Add a new flavor extra specs group."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  * POST /flavor-extra-specs-group"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  * Normal http response code(s): 200"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  * Expected error http response code(s):"},{"line_number":166,"context_line":"    unauthorized(401), forbidden(403), itemNotFound(404), conflict(409)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  * Example create flavor extra specs group: JSON request"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    {"},{"line_number":171,"context_line":"        \"foo_group\": {"},{"line_number":172,"context_line":"            \"key1\": \"value1\","},{"line_number":173,"context_line":"            \"key2\": \"value2\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        }"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    }"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Update an exist flavor extra specs group."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  * PUT /flavor-extra-specs-group/{name}"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  * Normal http response code(s): 200"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"  * Expected error http response code(s):"},{"line_number":186,"context_line":"    badRequest(400), unauthorized(401), forbidden(403),"},{"line_number":187,"context_line":"    itemNotFound(404), conflict(409)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"  * Example update an exist flavor group: JSON request"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    {"},{"line_number":192,"context_line":"        \"foo_group\": {"},{"line_number":193,"context_line":"            \"key1\": \"new_value1\","},{"line_number":194,"context_line":"            \"key2\": \"new_value2\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        }"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Associated a flavor extra specs group"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"  * POST /flavor-extra-specs-group/{name}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  * Normal response codes: 202"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  * Example associated a flavor extra specs group: JSON request"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  {"},{"line_number":211,"context_line":"      \"flavor_id\": 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  }"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"* List flavor extra specs groups"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"  * GET /flavor-extra-specs-group"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"  * Normal response codes: 200"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"  * Error response codes: unauthorized(401), forbidden(403)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  * Example list flavor group: JSON request"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    {"},{"line_number":226,"context_line":"        \"flavor_groups\": ["},{"line_number":227,"context_line":"            \"foo_group1\": {"},{"line_number":228,"context_line":"                \"key1\": \"value1\","},{"line_number":229,"context_line":"                \"key2\": \"value2\""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"            },"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"            \"foo_group2\": {"},{"line_number":234,"context_line":"                \"key1\": \"value1\","},{"line_number":235,"context_line":"                \"key2\": \"value2\""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            }"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        ]"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    }"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"* Delete an exist flavor group."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"  * DELETE /flavor-extra-specs-group/{name}"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"  * Normal response codes: 202"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  * Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Extend the server create API to allow the end user to specify the"},{"line_number":252,"context_line":"\"ComposableFlavorBit\"s he/she wants to add to the \"base\" flavor in"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_aca8d28b","line":249,"range":{"start_line":157,"start_character":0,"end_line":249,"end_character":78},"in_reply_to":"3fa7e38b_8b794ac6","updated":"2019-11-15 03:47:11.000000000","message":"Done","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5bf67e6b2380552ab22decc6cfb58b89d1b7d18f","unresolved":false,"context_lines":[{"line_number":255,"context_line":"Add a new microversion version to server create API and show server"},{"line_number":256,"context_line":"detailed API."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"* Create Server"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"  * POST /servers"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"  * Example request flavor extra specs group in the request body: JSON request"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    {"},{"line_number":265,"context_line":"        \"server\": {"},{"line_number":266,"context_line":"            \"name\": \"composed-server\","},{"line_number":267,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":268,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":269,"context_line":"            \"flavor_extra_specs_group\": ["},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/42\","},{"line_number":272,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/10\""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"            ]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            ..."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        }"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    }"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"* Show Server Details"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_4b327211","line":280,"range":{"start_line":258,"start_character":0,"end_line":280,"end_character":5},"updated":"2019-11-14 12:30:25.000000000","message":"which would allow this extention to server create to be non admin","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8b910280e7550755a753c210839431bc71fc6ae8","unresolved":false,"context_lines":[{"line_number":255,"context_line":"Add a new microversion version to server create API and show server"},{"line_number":256,"context_line":"detailed API."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"* Create Server"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"  * POST /servers"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"  * Example request flavor extra specs group in the request body: JSON request"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    {"},{"line_number":265,"context_line":"        \"server\": {"},{"line_number":266,"context_line":"            \"name\": \"composed-server\","},{"line_number":267,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":268,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":269,"context_line":"            \"flavor_extra_specs_group\": ["},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/42\","},{"line_number":272,"context_line":"                \"http://openstack.example.com/flavor-extra-specs-group/10\""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"            ]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            ..."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        }"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    }"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"* Show Server Details"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fa7e38b_cc998e6d","line":280,"range":{"start_line":258,"start_character":0,"end_line":280,"end_character":5},"in_reply_to":"3fa7e38b_4b327211","updated":"2019-11-15 03:47:11.000000000","message":"These policies of these server apis are consistent with the original ones.","commit_id":"147f5c8dc5c4f68b923df941d0c4753d099f60c4"}],"specs/train/approved/add-flavor-metadata-or-metadata-group.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"00ff35317472c8ca2a5a723135878ed2a4f2723f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"As a developer, I prefer that each module has its own mission and should not"},{"line_number":42,"context_line":"impose information that does not belong to it."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_b9a1b9ab","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":14},"updated":"2019-06-27 04:33:59.000000000","message":"sounds like a usecase for operator.","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6311ad28b68a854f71997a3d813935e765aabd13","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"As a developer, I prefer that each module has its own mission and should not"},{"line_number":42,"context_line":"impose information that does not belong to it."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_df300d59","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":14},"in_reply_to":"9fb8cfa7_b9a1b9ab","updated":"2019-06-27 07:55:39.000000000","message":"Done","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"00ff35317472c8ca2a5a723135878ed2a4f2723f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"---------"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"As a developer, I prefer that each module has its own mission and should not"},{"line_number":42,"context_line":"impose information that does not belong to it."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Proposed change"},{"line_number":45,"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":2,"id":"9fb8cfa7_999ab55f","line":42,"updated":"2019-06-27 04:33:59.000000000","message":"Maybe say specific usecase, like the one you said about disk io.","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"00ff35317472c8ca2a5a723135878ed2a4f2723f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  metadata, it can be provided in the form of a metadata group, for example:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  {"},{"line_number":54,"context_line":"      \"disk_IO\": {"},{"line_number":55,"context_line":"          \"disk_read_bytes_sec\": 10485760,"},{"line_number":56,"context_line":"          \"disk_read_iops_sec\": 5000,"},{"line_number":57,"context_line":"          \"disk_write_bytes_sec\": 10000000,"},{"line_number":58,"context_line":"          \"disk_write_iops_sec\": 8000"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"      }"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_d98fcd27","line":58,"range":{"start_line":54,"start_character":6,"end_line":58,"end_character":37},"updated":"2019-06-27 04:33:59.000000000","message":"It will be good you have more example for grouping.","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6311ad28b68a854f71997a3d813935e765aabd13","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  metadata, it can be provided in the form of a metadata group, for example:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  {"},{"line_number":54,"context_line":"      \"disk_IO\": {"},{"line_number":55,"context_line":"          \"disk_read_bytes_sec\": 10485760,"},{"line_number":56,"context_line":"          \"disk_read_iops_sec\": 5000,"},{"line_number":57,"context_line":"          \"disk_write_bytes_sec\": 10000000,"},{"line_number":58,"context_line":"          \"disk_write_iops_sec\": 8000"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"      }"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_bf067985","line":58,"range":{"start_line":54,"start_character":6,"end_line":58,"end_character":37},"in_reply_to":"9fb8cfa7_d98fcd27","updated":"2019-06-27 07:55:39.000000000","message":"Can the restrictions on the same resource be attributed to the group for unified management? Compared to creating a record corresponding to the flavor, I prefer to use group to manage such a type of metadata.\n\nI think cpu limits, vif I/O, CPU pinning policy can also be managed with group, for example:\n \n{\n  \"cpu_limits\": {\n\t  \"quota:cpu_quota\": 10000,\n\t  \"quota:cpu_period\": 20000,\n\t  \"quota:cpu_shares\": 2048\n  }\n}\n\n{    \n  \"vif_qos\": {\n\t  \"quota:vif_outbound_average\": 32768,\n\t  \"quota:vif_outbound_peak\": 65536,\n\t  \"quota:vif_outbound_burst\": 65536,\n\t  \"quota:vif_inbound_average\": 32768,\n\t  \"quota:vif_inbound_peak\": 65536,\n\t  \"quota:vif_inbound_burst\": 65536\n  }\n}\n\n{\n  \"cpu_pinging\": {\n\t  \"hw:cpu_policy\": \"shared\",\n\t  \"hw:cpu_thread_policy\": \"require\"\n  }\n}","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"cf571bac0927bdc56bf7a19e68f70f6ef9e1ac48","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":85,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":86,"context_line":"  | key           | varchar(255) | YES  |     | NULL    |                |"},{"line_number":87,"context_line":"  | value         | varchar(255) | YES  |     | NULL    |                |"},{"line_number":88,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":89,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_e700fe04","line":87,"updated":"2019-06-26 13:09:56.000000000","message":"I want to add the ``falvorid`` as a field to this table.\n\n  +---------------+--------------+------+-----+---------+----------------+\n  | Field         | Type         | Null | Key | Default | Extra          |\n  +---------------+--------------+------+-----+---------+----------------+\n  | flavorid      | varchar(255) | YES  | MUL | NULL    |                |","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"8e4bee6a9188efb8786984c5f5a06424c207462f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":85,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":86,"context_line":"  | key           | varchar(255) | YES  |     | NULL    |                |"},{"line_number":87,"context_line":"  | value         | varchar(255) | YES  |     | NULL    |                |"},{"line_number":88,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":89,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_abd2c3cf","line":87,"in_reply_to":"9fb8cfa7_359ab761","updated":"2019-06-27 00:54:54.000000000","message":"Thanks Eric Fried. Good suggestion, it\u0027s simpler, and it\u0027s much easier to break it down.\nI\u0027ll update this later :P","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9015d21d40eb8c667fe346a091ee40f75607b64a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":85,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":86,"context_line":"  | key           | varchar(255) | YES  |     | NULL    |                |"},{"line_number":87,"context_line":"  | value         | varchar(255) | YES  |     | NULL    |                |"},{"line_number":88,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":89,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_359ab761","line":87,"in_reply_to":"9fb8cfa7_e700fe04","updated":"2019-06-26 16:58:36.000000000","message":"Okay, but that wouldn\u0027t allow the level of modularization that I think is one of the main selling points of this idea.\n\nI would instead suggest:\n- A mechanism for grouping several keys together into a \"module\"\n- A mechanism for specifying a list of \"modules\" either a) within a Flavor; or b) to the spawn API itself. (Suggest the former as a first pass; the latter for future development.)","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"00ff35317472c8ca2a5a723135878ed2a4f2723f","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* Add new flavor metadata key to flavor_metadata."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  * POST /flavors/flavor-metadata"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"  * Normal http response code(s): 200"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_d9bd8db7","line":110,"updated":"2019-06-27 04:33:59.000000000","message":"you need a API allowing you bind those metadata(or group) with the falvor.","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6311ad28b68a854f71997a3d813935e765aabd13","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* Add new flavor metadata key to flavor_metadata."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  * POST /flavors/flavor-metadata"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"  * Normal http response code(s): 200"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_dfc32dec","line":110,"in_reply_to":"9fb8cfa7_d9bd8db7","updated":"2019-06-27 07:55:39.000000000","message":"Yeah, it\u0027s necessary to provide an API to bind thoso metadata(or group) with the flavor.","commit_id":"da5507a7cb63797b13b56f9d97d67f9654012451"}],"specs/ussuri/approved/composable-flavor-properties.rst":[{"author":{"_account_id":29071,"name":"norman shen","email":"yshxxsjt715@gmail.com","username":"ushen"},"change_message_id":"8ae4b3e6cba8e72a61eb2cfbb175c35636afb002","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"name\": \"composed-server\","},{"line_number":274,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":275,"context_line":"            \"flavorRef\": \"dc6ac662-e41b-4120-88df-b2f58543a91f\","},{"line_number":276,"context_line":"            \"composable_flavor_properties\": ["},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"                \"key1\": \"value1\","},{"line_number":279,"context_line":"                \"key2\": \"value2\""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa7e38b_e6227354","line":276,"updated":"2020-01-20 01:01:35.000000000","message":"Is `composable-flavor-properties` an object or you have to explicitly spell out values each time creating server? Because if it is an object then I suppose you could just use its uuid?","commit_id":"89e4d17191b518f5c638dacf14ed62f8c05abcfd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"29f2d27e1e2d486a4a80aa140953cad5f8d719d6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"name\": \"composed-server\","},{"line_number":274,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":275,"context_line":"            \"flavorRef\": \"dc6ac662-e41b-4120-88df-b2f58543a91f\","},{"line_number":276,"context_line":"            \"composable_flavor_properties\": ["},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"                \"key1\": \"value1\","},{"line_number":279,"context_line":"                \"key2\": \"value2\""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa7e38b_eff7838d","line":276,"in_reply_to":"3fa7e38b_e6227354","updated":"2020-01-22 00:30:42.000000000","message":"The evolution from the ``composable_flavor_property`` table, it is a key-value combination now, so that you can choose as needed when booting the instance.","commit_id":"89e4d17191b518f5c638dacf14ed62f8c05abcfd"}],"specs/ussuri/approved/resources-metadata-of-instance.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_267e1d6a","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":51},"updated":"2019-11-18 23:35:18.000000000","message":"metadata is an overloaded term.\n\nits not really metadata about the resouce infact resouce request can be encoded in the extra specs.\n\nFlavorMetadata woudl be better then resouces but other options would be FlavorProperties or instanceProperties\n\nthe Properties name correlates with the commandline argument\n\ne.g. openstack flavor set --property ...\n\nso that would be more more familar\n\nif we keep the term ResourcesMetadata as the root i woudl extend to ResourcesMetadataPolicy","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_fb92d757","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":51},"in_reply_to":"3fa7e38b_267e1d6a","updated":"2019-11-19 11:19:53.000000000","message":"I like \"property\" better than \"metadata\" What about ComposableFlavorPropery ?","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_09c1a280","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":51},"in_reply_to":"3fa7e38b_4c78137d","updated":"2019-11-20 04:42:58.000000000","message":"Done","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18dbe50a43652fdea6b6284fd2b3900a61f71503","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_4c78137d","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":51},"in_reply_to":"3fa7e38b_fb92d757","updated":"2019-11-19 15:19:02.000000000","message":"i would use the plural form ComposableFlavorProperties \nas each extra spec is a property and the new api entity contains multiple of them but yes i like that name much more in either form.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"},{"line_number":17,"context_line":"they want to add to the base flavor they used in the create request. This"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_260ffde0","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":67},"updated":"2019-11-18 23:35:18.000000000","message":"personally i am much less ok with this.\n\nit has sever issues.\n1.) you can no longer look at the flavor values for any instance and now always have to check if the instace was part of a flavor group for resouce usage.\n\n2.) it implies that you can override values defiend in the flavor which required defining a precidence or error condition and also raise the question of what happend if 2 resouce metadata deffintions with different values for the same entitiy.\n\nideally i would prefer to keep this to describing the qualitative aspects and keep the flavour for the quantitative aspects.\n\nso for example i think qos constraits or hugepage or cpu pinning are all qulitiave asspects of the instnace that would be good to be composible in this way but the amound of disk or ram or cpus would not be.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"},{"line_number":17,"context_line":"they want to add to the base flavor they used in the create request. This"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_9b1723a4","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":67},"in_reply_to":"3fa7e38b_260ffde0","updated":"2019-11-19 11:19:53.000000000","message":"\u003e personally i am much less ok with this.\n \u003e \n \u003e it has sever issues.\n \u003e 1.) you can no longer look at the flavor values for any instance\n \u003e and now always have to check if the instace was part of a flavor\n \u003e group for resouce usage.\n \u003e \n\nI think we are dropping the group concept in the spec. As far as I understand the current proposal (or at least what we discussed at the PTG) to have ComposableFlavorProperty objects passed in the boot (and resize) request along with a Flavor and merge the Flavor and the ComposableFlavorProperty at the API level and then store the resulted new Flavor in the instance as if it were the requested flavor for this instance. This the GET /servers/{intance-uuid} response would return the merged flavor as a single entity as before. \n\n \u003e 2.) it implies that you can override values defiend in the flavor\n \u003e which required defining a precidence or error condition and also\n \u003e raise the question of what happend if 2 resouce metadata\n \u003e deffintions with different values for the same entitiy.\n \u003e \n \u003e ideally i would prefer to keep this to describing the qualitative\n \u003e aspects and keep the flavour for the quantitative aspects.\n \u003e \n \u003e so for example i think qos constraits or hugepage or cpu pinning\n \u003e are all qulitiave asspects of the instnace that would be good to be\n \u003e composible in this way but the amound of disk or ram or cpus would\n \u003e not be.\n\nMnaser proposed during the PTG to allow composing vcpus, ram and disk as well. If this feels to big scope to start with then I think it is OK to start with the extra specs. I also agree to define precedence order. For me as the first step the rules would be the following:\n* If a base flavor has an extra_spec key then it cannot be in any ComposableFalvorProperty in the same boot or resize request.\n* If a ComposableFlavorProperty has an extra_spec key then no other ComposableFlavorProperty can have the same extra_spec key in the same boot or resize request\nIf the any of the rules are violated then HTTP 409.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18dbe50a43652fdea6b6284fd2b3900a61f71503","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"},{"line_number":17,"context_line":"they want to add to the base flavor they used in the create request. This"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_cce0832a","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":67},"in_reply_to":"3fa7e38b_9b1723a4","updated":"2019-11-19 15:19:02.000000000","message":"ya that is kind of what i was thinking for the conflict rules. if we allow cpus,ram and disk to be overrides however it does not follow the rules as we are allowing the ComposableFalvorProperties to override the base flavour.\n\ni could resolve that conflict in my head by saying the flavour values must be set to 0 or -1 to allow them to be set by the ComposableFalvorProperties in which case i think it could be self consistent for flavour resource and extra specs.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resources-metadata-of-instance"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes define a \"ResourcesMetadata\" REST API entity that"},{"line_number":14,"context_line":"can hold any kind of flavor bits (extra specs, normal flavor fields), and"},{"line_number":15,"context_line":"add additional apis for flavor fragment management. Then extend the server"},{"line_number":16,"context_line":"create REST API to allow the end user to specify the \"ResourcesMetadata\"s"},{"line_number":17,"context_line":"they want to add to the base flavor they used in the create request. This"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_e9ce8659","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":67},"in_reply_to":"3fa7e38b_cce0832a","updated":"2019-11-20 04:42:58.000000000","message":"composed the ram, disk and vcpu will be not contained in this spec.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":69,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":70,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":71,"context_line":"  | description   | text         | YES  |     | NULL    |                |"},{"line_number":72,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":73,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_c693895b","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":60},"updated":"2019-11-18 23:35:18.000000000","message":"what is the rules filed.\n\ni really dont want a flavor replacemnet spec to just tore the extra_specs as a json blob so if this is intended to hold the  extra specs that a hard -1 form me.\n\ntext fields are stored as seperate files on disk so in addtion to being very hard to work with if we just dump a dictonay of key values into it as json its also slow.\n\nthis is why i had 3 tables to normalise it and extract the key value data into a seperate table which is both faster to query and makes it much eaier to do thinks like find which\n\nresources_metadata entries have a specify key/value set.\n\ne.g. if i want to be able to query this api to determin what\nResourcesMetadata policy to apply to request hugepages it woudl be nice to be able to quickly list the ResourcesMetadata polices that have hw:mem_page_size defiend preferable with a value of large,2MB or 1G.\n\nthat way i dont need to query for the list of all policies and filter them client side.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  | deleted_at    | datetime     | YES  |     | NULL    |                |"},{"line_number":68,"context_line":"  | id            | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":69,"context_line":"  | name          | varchar(255) | YES  | PRI | NULL    |                |"},{"line_number":70,"context_line":"  | rules         | text         | YES  |     | NULL    |                |"},{"line_number":71,"context_line":"  | description   | text         | YES  |     | NULL    |                |"},{"line_number":72,"context_line":"  | deleted       | int(11)      | YES  |     | NULL    |                |"},{"line_number":73,"context_line":"  +---------------+--------------+------+-----+---------+----------------+"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_1b233307","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":60},"in_reply_to":"3fa7e38b_c693895b","updated":"2019-11-19 11:19:53.000000000","message":"I rely on Sean or others here to propose a workable db data model for the key value pairs to model the ComposableFalvorProperty entity.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"  | deleted_at      | datetime     | YES  |     | NULL    |                |"},{"line_number":87,"context_line":"  | id              | int(11)      | NO   | PRI | NULL    | auto_increment |"},{"line_number":88,"context_line":"  | resources_md_id | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":89,"context_line":"  | instance_uuid   | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":90,"context_line":"  | deleted         | int(11)      | YES  |     | NULL    |                |"},{"line_number":91,"context_line":"  +-----------------+--------------+------+-----+---------+----------------+"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_bb49bfb8","line":89,"range":{"start_line":89,"start_character":4,"end_line":89,"end_character":17},"updated":"2019-11-19 11:19:53.000000000","message":"I still think we don\u0027t need connection to instance here. The instance will only have a single flavor object embedded.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  | resources_md_id | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":89,"context_line":"  | instance_uuid   | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":90,"context_line":"  | deleted         | int(11)      | YES  |     | NULL    |                |"},{"line_number":91,"context_line":"  +-----------------+--------------+------+-----+---------+----------------+"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  Another implementation is detailed in `Alternatives`_ (In the second"},{"line_number":94,"context_line":"  paragraph)."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_6693b550","line":91,"updated":"2019-11-18 23:35:18.000000000","message":"so as i mention on v10\n\ni think you allso need to add the flavor id here so we can declare what flavor it may be applied too.\n\nthat would be don by setting the resources_md_id and flavour id but not an instance id.\n\non one hand user can upload there own image with any metadta they like set but i think it makes sense to have finer granded contol in this case.\n\ne.g. as an operator i want to define a hugepages resources metadata policy however i dont want it to be useable with flvoar with less then 1G of memory because i know i use 1G hugepages on the hosts.\n\nif we allow resouce requests via this mechaniums then this is even more important as i might not want to allow GPUS or FPGAS or whatever finight resouce to be paired with my smallest flavors.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  | resources_md_id | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":89,"context_line":"  | instance_uuid   | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":90,"context_line":"  | deleted         | int(11)      | YES  |     | NULL    |                |"},{"line_number":91,"context_line":"  +-----------------+--------------+------+-----+---------+----------------+"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  Another implementation is detailed in `Alternatives`_ (In the second"},{"line_number":94,"context_line":"  paragraph)."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_3b562f60","line":91,"in_reply_to":"3fa7e38b_6693b550","updated":"2019-11-19 11:19:53.000000000","message":"\u003e so as i mention on v10\n \u003e \n \u003e i think you allso need to add the flavor id here so we can declare\n \u003e what flavor it may be applied too.\n\nWhat if as a first step we allow composing every ComposableFlavorProperty with every flavor just to reduce scope? \nIf that would severely limit the usability (e.g. only those composable bits would be created by the admin that is always composable with every flavor) then I\u0027m OK to have a a list of flavor_ids stored in every ComposableFlavorProperty to specify which flavor the composable bit can be composed to.\n\n \u003e \n \u003e that would be don by setting the resources_md_id and flavour id but\n \u003e not an instance id.\n \u003e \n \u003e on one hand user can upload there own image with any metadta they\n \u003e like set but i think it makes sense to have finer granded contol in\n \u003e this case.\n \u003e \n \u003e e.g. as an operator i want to define a hugepages resources metadata\n \u003e policy however i dont want it to be useable with flvoar with less\n \u003e then 1G of memory because i know i use 1G hugepages on the hosts.\n \u003e \n \u003e if we allow resouce requests via this mechaniums then this is even\n \u003e more important as i might not want to allow GPUS or FPGAS or\n \u003e whatever finight resouce to be paired with my smallest flavors.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  | resources_md_id | int(11)      | YES  | MUL | NULL    |                |"},{"line_number":89,"context_line":"  | instance_uuid   | varchar(36)  | YES  | MUL | NULL    |                |"},{"line_number":90,"context_line":"  | deleted         | int(11)      | YES  |     | NULL    |                |"},{"line_number":91,"context_line":"  +-----------------+--------------+------+-----+---------+----------------+"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  Another implementation is detailed in `Alternatives`_ (In the second"},{"line_number":94,"context_line":"  paragraph)."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_8966f228","line":91,"in_reply_to":"3fa7e38b_6693b550","updated":"2019-11-20 04:42:58.000000000","message":"Yeah, should add the flavor_id to this table, and I will change the ``resource_metadata`` table\u0027s model. Change the \"name, rules\" to \"key/value\" (from your suggestion in PS10).\n\nIn ``resource_metadata`` table, I want to define the \"key\" is unique, so if we need another value of the same \"key\", we need to update it firstly.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":104,"context_line":"  (key, value) and/or metadata group, for example:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  {"},{"line_number":107,"context_line":"      \"disk_qos\": {"},{"line_number":108,"context_line":"          \"quota:disk_read_bytes_sec\": 10485760,"},{"line_number":109,"context_line":"          \"quota:disk_read_iops_sec\": 5000,"},{"line_number":110,"context_line":"          \"quota:disk_write_bytes_sec\": 10000000,"},{"line_number":111,"context_line":"          \"quota:disk_write_iops_sec\": 8000"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"      }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"  }"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_667df5e5","line":113,"range":{"start_line":107,"start_character":4,"end_line":113,"end_character":7},"updated":"2019-11-18 23:35:18.000000000","message":"this is a case where i think it makes sense to think about the ablity to apply some metadta groups by default and how over rides would work.\n\nso if we have the flavor_id in the mapping table and a default colum that woudl allow use to do two things\n\nfirst we could define a low ios qos policy say 100 iops and we coulld map it to all our cheaper flavors and mark it as default.\n\nwe could then define a high iops resouce metadata group\nmap it to all a set of flavor and allow the user to opt into more iops potentially at a higher cost.\n\nif instead of a boolean default colume we make it a enuma policy colume we could support default,requested,required policies default means it would be applied to the flavor without being requested on teh command line, requested means\nit must be requested expcitly and reqire means if there is a conflcit the value for this resouce group is used.\n\nthis might be more complex then stictly nessisary but if this was to eventurally replace flavors i would want a richer way of grouping resouce metadata and flavor so that i could more essily express policy.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"  (key, value) and/or metadata group, for example:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  {"},{"line_number":107,"context_line":"      \"disk_qos\": {"},{"line_number":108,"context_line":"          \"quota:disk_read_bytes_sec\": 10485760,"},{"line_number":109,"context_line":"          \"quota:disk_read_iops_sec\": 5000,"},{"line_number":110,"context_line":"          \"quota:disk_write_bytes_sec\": 10000000,"},{"line_number":111,"context_line":"          \"quota:disk_write_iops_sec\": 8000"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"      }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"  }"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_bbf77f5a","line":113,"range":{"start_line":107,"start_character":4,"end_line":113,"end_character":7},"in_reply_to":"3fa7e38b_667df5e5","updated":"2019-11-19 11:19:53.000000000","message":"To limit the scope of the first step I would skip defaulting now. But later this could be an interesting step forward.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18dbe50a43652fdea6b6284fd2b3900a61f71503","unresolved":false,"context_lines":[{"line_number":104,"context_line":"  (key, value) and/or metadata group, for example:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  {"},{"line_number":107,"context_line":"      \"disk_qos\": {"},{"line_number":108,"context_line":"          \"quota:disk_read_bytes_sec\": 10485760,"},{"line_number":109,"context_line":"          \"quota:disk_read_iops_sec\": 5000,"},{"line_number":110,"context_line":"          \"quota:disk_write_bytes_sec\": 10000000,"},{"line_number":111,"context_line":"          \"quota:disk_write_iops_sec\": 8000"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"      }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"  }"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_8c604b37","line":113,"range":{"start_line":107,"start_character":4,"end_line":113,"end_character":7},"in_reply_to":"3fa7e38b_bbf77f5a","updated":"2019-11-19 15:19:02.000000000","message":"it think it would give an interesting way to quickly apply things to multiple flavours at once but keep a single point of control. but ya i would be ok with skiping the default/polices in v1 to limit scope.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  }"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  {"},{"line_number":145,"context_line":"     \"2-1024-10\": {"},{"line_number":146,"context_line":"         \"vcpu\": 2,"},{"line_number":147,"context_line":"         \"ram\": 1024,"},{"line_number":148,"context_line":"         \"disk\": 10"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"     }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  }"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Alternatives"},{"line_number":155,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_26d13dcd","line":152,"range":{"start_line":144,"start_character":1,"end_line":152,"end_character":3},"updated":"2019-11-18 23:35:18.000000000","message":"this is the use case im least comfortable with.\n\nwe could do this but it has the highest chance to break expectation and workflows.\n\nallowing resouce requst in general without a way to restict the resouce groups as i said above would allow you to request the cheapest/smallest flavor + a gpu or fpga which you have a limited amoutn of or other malicious requests that could stave the could of specific types of resources.\n\nthe defence against this currently is that the resource metadta polices would be create via the admin but it means if they ever create a policy for a gpu or cyborg reousce without a way to restic that resource metadata to a set of flavour you can prevent people abusing this or jsut requesting combination that cant work but that they dont know cant work since they dont understand your infrastructure.\ni.e. you cant request hugpages for guest with memory that is not a multiple of 1G becuase you only use 1G hugepage in your cloud.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  }"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  {"},{"line_number":145,"context_line":"     \"2-1024-10\": {"},{"line_number":146,"context_line":"         \"vcpu\": 2,"},{"line_number":147,"context_line":"         \"ram\": 1024,"},{"line_number":148,"context_line":"         \"disk\": 10"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"     }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  }"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Alternatives"},{"line_number":155,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_5e83d903","line":152,"range":{"start_line":144,"start_character":1,"end_line":152,"end_character":3},"in_reply_to":"3fa7e38b_26d13dcd","updated":"2019-11-19 11:19:53.000000000","message":"This side of the requested feature coming from mnaser, so it would be good if he could chime in. Personally I\u0027m OK to drop this from the scope of the first implementation step.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18dbe50a43652fdea6b6284fd2b3900a61f71503","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  }"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  {"},{"line_number":145,"context_line":"     \"2-1024-10\": {"},{"line_number":146,"context_line":"         \"vcpu\": 2,"},{"line_number":147,"context_line":"         \"ram\": 1024,"},{"line_number":148,"context_line":"         \"disk\": 10"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"     }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  }"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Alternatives"},{"line_number":155,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_273cd0bd","line":152,"range":{"start_line":144,"start_character":1,"end_line":152,"end_character":3},"in_reply_to":"3fa7e38b_5e83d903","updated":"2019-11-19 15:19:02.000000000","message":"if we only allowed this if the flavour values were set to a sentential like 0 or -1 then i would be more ok with this\n\n-1 would likely be better as 0 because 0 is used for boot form volume but both would work.\nthe down side fo this is you need to create new flavors\n\nwhich is why i originally wannted to use the mapping table to say which flaovr composible bits could be applied too.\n\nthen the admin can choose which flavor can have the cpus ram or disk altered without altering any existign flavors","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":177,"context_line":"|  3 | disk  | 10     | instance_uuid_1 |        11       |    0    |"},{"line_number":178,"context_line":"+----+-------+--------+-----------------+-----------------+---------+"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"This way will change the existing data table structure, and I am not sure"},{"line_number":181,"context_line":"if this will affect some of the features of the instance."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Data model impact"},{"line_number":184,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_0668c1f1","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":57},"updated":"2019-11-18 23:35:18.000000000","message":"the current proposal will change the existing data storage too because you will have to merged the extra specs form teh flavor with the new construct that are being added.\n\nalso this is in third normal form which will allow seach for resouce metadata polices/goups by key/value or searching for instance by key/value which could be quite useful for capacity or resource planning. this will also allow an efficent way to quickly and programticly select resouce groups based on there content without having to list all of them and parse the embeded json blob.\n\nwhile this would chagne the database structure we could hide this in the model so we don\u0027t need any object changes and exsiting flavor api would not need to change.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8794735480d8d6194b963cc5a0ff0b7cae434d5","unresolved":false,"context_lines":[{"line_number":177,"context_line":"|  3 | disk  | 10     | instance_uuid_1 |        11       |    0    |"},{"line_number":178,"context_line":"+----+-------+--------+-----------------+-----------------+---------+"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"This way will change the existing data table structure, and I am not sure"},{"line_number":181,"context_line":"if this will affect some of the features of the instance."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Data model impact"},{"line_number":184,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_de6ee962","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":57},"in_reply_to":"3fa7e38b_0668c1f1","updated":"2019-11-19 11:19:53.000000000","message":"\u003e the current proposal will change the existing data storage too\n \u003e because you will have to merged the extra specs form teh flavor\n \u003e with the new construct that are being added.\n\nThe result of such merge is a flavor in the format as is today. So I think the current flavor db model does not need to be changed.\n\n \u003e \n \u003e also this is in third normal form which will allow seach for\n \u003e resouce metadata polices/goups by key/value or searching for\n \u003e instance by key/value which could be quite useful for capacity or\n \u003e resource planning. this will also allow an efficent way to quickly\n \u003e and programticly select resouce groups based on there content\n \u003e without having to list all of them and parse the embeded json blob.\n \u003e \n \u003e while this would chagne the database structure we could hide this\n \u003e in the model so we don\u0027t need any object changes and exsiting\n \u003e flavor api would not need to change.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18dbe50a43652fdea6b6284fd2b3900a61f71503","unresolved":false,"context_lines":[{"line_number":177,"context_line":"|  3 | disk  | 10     | instance_uuid_1 |        11       |    0    |"},{"line_number":178,"context_line":"+----+-------+--------+-----------------+-----------------+---------+"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"This way will change the existing data table structure, and I am not sure"},{"line_number":181,"context_line":"if this will affect some of the features of the instance."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Data model impact"},{"line_number":184,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_a79e80b5","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":57},"in_reply_to":"3fa7e38b_de6ee962","updated":"2019-11-19 15:19:02.000000000","message":"sure but we don\u0027t need to store the key value pairs in a JSON blob to construct the same flavour object.\n\nso all im suggesting is we handle this at the db object level and we make no changes to the ovo fields. by the time we have constructed the flavor ovo we shoudl have already done the merge.\n\nfor what its worth i did not  have the instance_uuid in this table wehn i proposed it for that reason since i wanted to store the merged version in the instance.\n\nas a compromise can we keep this third table and just drop the instance filed to not store the \nComposableFalvorProperties key value paris in a json blob.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":198,"context_line":"The shows details for a resources metadata rule and list details resources"},{"line_number":199,"context_line":"metadata rules apis would be ``admin_or_owner`` by default."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* Add a new resources metadata rule."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  * POST /resources-metadata-rule"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_a678cdc0","line":201,"range":{"start_line":201,"start_character":31,"end_line":201,"end_character":35},"updated":"2019-11-18 23:35:18.000000000","message":"i really dont like the use of rule as a noun here by the way.\neach of the indvigual key value paris are metadata itme and the whole thing is a polcy or group.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* Add a new resources metadata rule."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  * POST /resources-metadata-rule"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"  * Normal http response code(s): 200"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_0641a163","line":203,"range":{"start_line":203,"start_character":9,"end_line":203,"end_character":33},"updated":"2019-11-18 23:35:18.000000000","message":"/resouce-metadata-group or /resouce-metadata-policy","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* Update an exist resources metadata rule."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  * PUT /resources-metadata-rule/{name}"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  * Normal http response code(s): 200"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_a6ff6d00","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":33},"updated":"2019-11-18 23:35:18.000000000","message":"/resouce-metadata-group or /resouce-metadata-policy","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":231,"context_line":"  * Example update an exist resources metadata rule: JSON request"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    {"},{"line_number":234,"context_line":"        \"foo_name\": {"},{"line_number":235,"context_line":"            \"key1\": \"new_value1\","},{"line_number":236,"context_line":"            \"key2\": \"new_value2\""},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_8602710b","line":234,"range":{"start_line":234,"start_character":9,"end_line":234,"end_character":17},"updated":"2019-11-18 23:35:18.000000000","message":"including the name again only has one usecase i can think of which is to renamem the metadata policy.\n\nfor updating a singl  policy i think\n\nPUT /resources-metadata-rule/{name}\n{\n   \"key1\": \"new_value1\",\n   \"key2\": \"new_value2\"\n}\n\nis more correct.\n\nif the name is a the uniqu identifier for a group\nim not sure we would want to allow it to change\n\nThe mapping table decouple the name of the resouce group form the instance its applied too so changing it would not cause issue for exising instance they woudl still be mapped to the same resouce metadata group but things like heat stack could break if they tried to scale up the resouce. as they would nolonger have a way to refer to the group.\n\nwith that said like flavour i think the resource metadata groups shoudl be immutable when created this would avoid all the complexiteis of breaking heat or external tooling and it also preventes one fo the bigest painpoint with extra specs and image properties that we have today. namely operator changing them and then being surpriesed when the canges are not applied to existing instnaces.\n\nso i would personally dissallow PUT entirely and only have list/show, create and delete operations.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":231,"context_line":"  * Example update an exist resources metadata rule: JSON request"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    {"},{"line_number":234,"context_line":"        \"foo_name\": {"},{"line_number":235,"context_line":"            \"key1\": \"new_value1\","},{"line_number":236,"context_line":"            \"key2\": \"new_value2\""},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_040e6731","line":234,"range":{"start_line":234,"start_character":9,"end_line":234,"end_character":17},"in_reply_to":"3fa7e38b_8602710b","updated":"2019-11-20 04:42:58.000000000","message":"If we set the key/value to the ``resource_metadata`` table, and if we want to re-use the same key with different value, we need to allow to update the key firstly, if so, we will get an error mapping in ``resource_metadata_mapping``. The same key has the different value between that server is has bean specified and in the db table.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* Shows details for a resources metadata rule"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"  * GET /resources-metadata-rule/{name}"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"  * Normal response codes: 200"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_61039f0e","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":33},"updated":"2019-11-18 23:35:18.000000000","message":"/resouce-metadata-group or /resouce-metadata-policy","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"* List details resources metadata rules"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"  * GET /resources-metadata-rules"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"  * Normal response codes: 200"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_01042b13","line":264,"range":{"start_line":264,"start_character":8,"end_line":264,"end_character":33},"updated":"2019-11-18 23:35:18.000000000","message":"/resouce-metadata-group or /resouce-metadata-policy","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        \"server\": {"},{"line_number":316,"context_line":"            \"name\": \"composed-server\","},{"line_number":317,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":318,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":319,"context_line":"            \"resources_metadata_rules\": ["},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/42\","}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_81301beb","line":318,"range":{"start_line":318,"start_character":26,"end_line":318,"end_character":65},"updated":"2019-11-18 23:35:18.000000000","message":"while this is allowed it more typical to use the flavor uuid","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        \"server\": {"},{"line_number":316,"context_line":"            \"name\": \"composed-server\","},{"line_number":317,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":318,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":319,"context_line":"            \"resources_metadata_rules\": ["},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/42\","}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_a9288e97","line":318,"range":{"start_line":318,"start_character":26,"end_line":318,"end_character":65},"in_reply_to":"3fa7e38b_81301beb","updated":"2019-11-20 04:42:58.000000000","message":"Done","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            \"name\": \"composed-server\","},{"line_number":317,"context_line":"            \"imageRef\": \"70a599e0-31e7-49b7-b260-868f441e862b\","},{"line_number":318,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":319,"context_line":"            \"resources_metadata_rules\": ["},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/42\","},{"line_number":322,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/10\""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_2109272a","line":319,"range":{"start_line":319,"start_character":13,"end_line":319,"end_character":37},"updated":"2019-11-18 23:35:18.000000000","message":"resouce-metadata-groups or resouce-metadata-policys","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":319,"context_line":"            \"resources_metadata_rules\": ["},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/42\","},{"line_number":322,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/10\""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            ]"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_a1143742","line":322,"range":{"start_line":321,"start_character":17,"end_line":322,"end_character":73},"updated":"2019-11-18 23:35:18.000000000","message":"i think using the resouce metadata policy name would be a better exampele or show both.\n\nimage ref for example only support the uuid and i dont think any of the other resouce like networks, ports or volumes support the url syntax so i think this is a legacy feature for flavor from cells v1 when the flavor was defiend per cell.\n\nso i dont think we should be copying that for this new resouce\n\nhttps://docs.openstack.org/api-ref/compute/?expanded\u003dcreate-server-detail#create-server","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            \"flavorRef\": \"http://openstack.example.com/flavors/1\","},{"line_number":319,"context_line":"            \"resources_metadata_rules\": ["},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/42\","},{"line_number":322,"context_line":"                \"http://openstack.example.com/resources_metadata_rule/10\""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            ]"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_69185683","line":322,"range":{"start_line":321,"start_character":17,"end_line":322,"end_character":73},"in_reply_to":"3fa7e38b_a1143742","updated":"2019-11-20 04:42:58.000000000","message":"Done","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":344,"context_line":"          \"OS-EXT-SRV-ATTR:hypervisor_hostname\": \"fake-mini\","},{"line_number":345,"context_line":"          \"OS-EXT-SRV-ATTR:instance_name\": \"instance-00000001\","},{"line_number":346,"context_line":"          \"OS-EXT-SRV-ATTR:kernel_id\": \"\","},{"line_number":347,"context_line":"          \"resources_metadata_rules\": ["},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"              \"foo_name_key1\": \"foo_value1\","},{"line_number":350,"context_line":"              \"foo_name_key2\": \"foo_value2\","}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_e1378fe2","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":35},"updated":"2019-11-18 23:35:18.000000000","message":"resouce_metadata\n\nsince its listing the metadta itmes\nrather then the polices/groups","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":344,"context_line":"          \"OS-EXT-SRV-ATTR:hypervisor_hostname\": \"fake-mini\","},{"line_number":345,"context_line":"          \"OS-EXT-SRV-ATTR:instance_name\": \"instance-00000001\","},{"line_number":346,"context_line":"          \"OS-EXT-SRV-ATTR:kernel_id\": \"\","},{"line_number":347,"context_line":"          \"resources_metadata_rules\": ["},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"              \"foo_name_key1\": \"foo_value1\","},{"line_number":350,"context_line":"              \"foo_name_key2\": \"foo_value2\","}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_c9fe2a05","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":35},"in_reply_to":"3fa7e38b_e1378fe2","updated":"2019-11-20 04:42:58.000000000","message":"Done","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"  }"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"* Resize Server (resize Action)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"  * POST /servers/{server_id}/action"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_c13ff3b2","line":364,"range":{"start_line":364,"start_character":2,"end_line":364,"end_character":31},"updated":"2019-11-18 23:35:18.000000000","message":"im glad you added this as i was going to raise this as a gap","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc3c6898fdc7ee4c9be093c05a43fc030b582917","unresolved":false,"context_lines":[{"line_number":373,"context_line":"          \"OS-DCF:diskConfig\": \"AUTO\","},{"line_number":374,"context_line":"          \"resources_metadata_rules\": ["},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"              \"http://openstack.example.com/resources_metadata_rule/12\","},{"line_number":377,"context_line":"              \"http://openstack.example.com/resources_metadata_rule/13\""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"          ]"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_e13c6fc0","line":377,"range":{"start_line":376,"start_character":12,"end_line":377,"end_character":71},"updated":"2019-11-18 23:35:18.000000000","message":"again i would prefer the name to be used here instead fo the url syntax.\n\nthe url syntax is fragile if the domain or port ever chagnes.","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c3aa89873b4f8d1e68fbd3fe60279950b1dab81a","unresolved":false,"context_lines":[{"line_number":373,"context_line":"          \"OS-DCF:diskConfig\": \"AUTO\","},{"line_number":374,"context_line":"          \"resources_metadata_rules\": ["},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"              \"http://openstack.example.com/resources_metadata_rule/12\","},{"line_number":377,"context_line":"              \"http://openstack.example.com/resources_metadata_rule/13\""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"          ]"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_64fddb06","line":377,"range":{"start_line":376,"start_character":12,"end_line":377,"end_character":71},"in_reply_to":"3fa7e38b_e13c6fc0","updated":"2019-11-20 04:42:58.000000000","message":"Done","commit_id":"24264aa44e98934a9499afcdb2145c3930f68a52"}]}
