)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"abfe419c6253901e5036e3dc719359536e4fc76a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     He Jie Xu \u003chejie.xu@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-01 15:20:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"ResourceProviderTags - Manage Capabilities with ResourceProvider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This propose is about bp resource-provider-tags"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_d1140b4e","line":7,"updated":"2016-08-01 15:09:48.000000000","message":"Let\u0027s stick with the term \"capabilities\" instead of \"tags\". \"tags\" in Nova are **normal end-user-defined simple strings** that users can use to categorize their server instances. Capabilities, on the other hand, are *not* settable by normal end-users. Instead, they are a *collated*, *catalogued* (as you refer to on line 28) set of strings that mean something very specific and are settable only by the cloud adminstrator or the system itself.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     He Jie Xu \u003chejie.xu@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-01 15:20:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"ResourceProviderTags - Manage Capabilities with ResourceProvider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This propose is about bp resource-provider-tags"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_23340149","line":7,"in_reply_to":"bacf61ea_afc928ae","updated":"2016-08-02 15:16:37.000000000","message":"Even if we use \u0027capabilities\u0027, then user still can free to add new tags which isn\u0027t defined by OpenStack...I want to call \u0027capabilities\u0027 if there isn\u0027t any user defined capabilities(or say tags), but we have to support user defined capabilities, due to there are some resource isn\u0027t owned by OpenStack Services.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"569c0db07dd568236b287d04633ca9eb7d02dd54","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     He Jie Xu \u003chejie.xu@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-01 15:20:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"ResourceProviderTags - Manage Capabilities with ResourceProvider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This propose is about bp resource-provider-tags"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_afc928ae","line":7,"in_reply_to":"bacf61ea_d1140b4e","updated":"2016-08-01 19:02:13.000000000","message":"Disagree. The fact that Nova used \u0027tags\u0027 to mean one particular type of tag, it is a generic term, and is described by the API-WG: https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e9631e60c6abe1a9c06224295a28bae93f7d120f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"we need a mechanism for storing and querying these traits with Traits"},{"line_number":11,"context_line":"API is the approach taken in this spec."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Blueprint resource-provider-traits"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: Ed Leafe \u003ced@leafe.com\u003e"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba5201f7_6a821f54","line":13,"range":{"start_line":13,"start_character":28,"end_line":13,"end_character":34},"updated":"2017-01-11 02:37:46.000000000","message":"s/traits/tags/","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"}],"specs/ocata/approved/resource-provider-tags.rst":[{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"hypervisor. Then those tags can be used across the clouds. The tags can"},{"line_number":68,"context_line":"be defined as below::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    COMPUTE_HW_CAP_CPU_AVX"},{"line_number":71,"context_line":"    COMPUTE_HW_CAP_CPU_SSE"},{"line_number":72,"context_line":"    ...."},{"line_number":73,"context_line":"    COMPUTE_HV_CAP_LIVE_MIGRATION"},{"line_number":74,"context_line":"    COMPUTE_HV_CAP_LIVE_SNAPSHOT"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Those tags are with prefix which is used to catalog the Capabilities, as said"},{"line_number":77,"context_line":"above there a variety of device/resource and come from different projects. But"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_b146c9bd","line":74,"range":{"start_line":70,"start_character":4,"end_line":74,"end_character":32},"updated":"2016-07-27 02:38:33.000000000","message":"I see two different styles in this spec, another style is at line @196. Maybe we need to clarify this is not the final representation of capability tags.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"hypervisor. Then those tags can be used across the clouds. The tags can"},{"line_number":68,"context_line":"be defined as below::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    COMPUTE_HW_CAP_CPU_AVX"},{"line_number":71,"context_line":"    COMPUTE_HW_CAP_CPU_SSE"},{"line_number":72,"context_line":"    ...."},{"line_number":73,"context_line":"    COMPUTE_HV_CAP_LIVE_MIGRATION"},{"line_number":74,"context_line":"    COMPUTE_HV_CAP_LIVE_SNAPSHOT"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Those tags are with prefix which is used to catalog the Capabilities, as said"},{"line_number":77,"context_line":"above there a variety of device/resource and come from different projects. But"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_748f1175","line":74,"range":{"start_line":70,"start_character":4,"end_line":74,"end_character":32},"in_reply_to":"dada55a8_b146c9bd","updated":"2016-07-27 09:59:07.000000000","message":"yea, I copy them. I will make them consistent. But just reminder that the style won\u0027t be decided in this spec.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Scenario of ResourceProviders. Let\u0027s see how to manage capabilities in differet"},{"line_number":82,"context_line":"scenario."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Scenario1: Single Resource Provider"},{"line_number":85,"context_line":"-----------------------------------"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"In this scenario, we take the nova report the capabilities of compute nodes as"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_5124ad0b","line":84,"range":{"start_line":84,"start_character":11,"end_line":84,"end_character":35},"updated":"2016-07-27 02:38:33.000000000","message":"Compute-node Resource Provider?","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Scenario of ResourceProviders. Let\u0027s see how to manage capabilities in differet"},{"line_number":82,"context_line":"scenario."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Scenario1: Single Resource Provider"},{"line_number":85,"context_line":"-----------------------------------"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"In this scenario, we take the nova report the capabilities of compute nodes as"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_14db357d","line":84,"range":{"start_line":84,"start_character":11,"end_line":84,"end_character":35},"in_reply_to":"dada55a8_5124ad0b","updated":"2016-07-27 09:59:07.000000000","message":"Yea, that is ok also, just want to compare this to \u0027share\u0027","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"-------------------------------"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"The shared storage pool is an example for this scenario, the admin-user want"},{"line_number":95,"context_line":"to mark out the resource pools with SSD, then user can distinguish them in the"},{"line_number":96,"context_line":"request."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The first three steps is totally same with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_a15956ff","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":39},"updated":"2016-07-27 02:38:33.000000000","message":"Hmm, the steps to mark out resource pool with tags seems lost.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":92,"context_line":"-------------------------------"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"The shared storage pool is an example for this scenario, the admin-user want"},{"line_number":95,"context_line":"to mark out the resource pools with SSD, then user can distinguish them in the"},{"line_number":96,"context_line":"request."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The first three steps is totally same with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_34c75997","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":39},"in_reply_to":"dada55a8_a15956ff","updated":"2016-07-27 09:59:07.000000000","message":"yea...forget that...I added in next patchset.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    UNIQUE INDEX (name)"},{"line_number":147,"context_line":"  );"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  CREATE TABLE resource_provider_tags ("},{"line_number":150,"context_line":"    resource_provider_id INT NOT NULL"},{"line_number":151,"context_line":"    tag_id INT NOT NULL,"},{"line_number":152,"context_line":"    PRIMARY KEY (resource_provider_id, tag_id),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_61a0fef4","line":149,"range":{"start_line":149,"start_character":2,"end_line":149,"end_character":37},"updated":"2016-07-27 02:38:33.000000000","message":"@195 and @199 shows there are two kinds of relationships, one is \"require\", and another is \"prefer\". Maybe this table needs another column \"required INT NOT NULL\" to distinguish them.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    UNIQUE INDEX (name)"},{"line_number":147,"context_line":"  );"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  CREATE TABLE resource_provider_tags ("},{"line_number":150,"context_line":"    resource_provider_id INT NOT NULL"},{"line_number":151,"context_line":"    tag_id INT NOT NULL,"},{"line_number":152,"context_line":"    PRIMARY KEY (resource_provider_id, tag_id),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_9463a5b0","line":149,"range":{"start_line":149,"start_character":2,"end_line":149,"end_character":37},"in_reply_to":"dada55a8_61a0fef4","updated":"2016-07-27 09:59:07.000000000","message":"\u0027require\u0027 and \u0027perfer\u0027 are parameters for request. This is for record the relationship between tags and resource provider","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e07ee20f7f661098fc26007f1959c9b5521dc1ec","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    UNIQUE INDEX (name)"},{"line_number":147,"context_line":"  );"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  CREATE TABLE resource_provider_tags ("},{"line_number":150,"context_line":"    resource_provider_id INT NOT NULL"},{"line_number":151,"context_line":"    tag_id INT NOT NULL,"},{"line_number":152,"context_line":"    PRIMARY KEY (resource_provider_id, tag_id),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bacf61ea_e455be1d","line":149,"range":{"start_line":149,"start_character":2,"end_line":149,"end_character":37},"in_reply_to":"dada55a8_9463a5b0","updated":"2016-07-28 02:57:51.000000000","message":"You\u0027re right, I accidentally mixed these two concepts.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":158,"context_line":"---------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"The API is attached to the Placement API endpoint. And the API will follow"},{"line_number":161,"context_line":"the API-WG \u0027tags\u0027 guideline."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"The resource provider will have a sub-resource tags:"},{"line_number":164,"context_line":"`/resource_providers/{uuid}/tags`"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_d14ffd8f","line":161,"range":{"start_line":161,"start_character":4,"end_line":161,"end_character":27},"updated":"2016-07-27 02:38:33.000000000","message":"Is there a link for this guideline?","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"---------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"The API is attached to the Placement API endpoint. And the API will follow"},{"line_number":161,"context_line":"the API-WG \u0027tags\u0027 guideline."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"The resource provider will have a sub-resource tags:"},{"line_number":164,"context_line":"`/resource_providers/{uuid}/tags`"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_14705571","line":161,"range":{"start_line":161,"start_character":4,"end_line":161,"end_character":27},"in_reply_to":"dada55a8_d14ffd8f","updated":"2016-07-27 09:59:07.000000000","message":"yea, I will add link","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":220,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":221,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":222,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_4154dac8","line":219,"range":{"start_line":219,"start_character":48,"end_line":219,"end_character":57},"updated":"2016-07-27 02:38:33.000000000","message":"How to specify \"required/preferred\" of those tags?","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":220,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":221,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":222,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_d4107d02","line":219,"range":{"start_line":219,"start_character":48,"end_line":219,"end_character":57},"in_reply_to":"dada55a8_4154dac8","updated":"2016-07-27 09:59:07.000000000","message":"That is part of request resource, the cmd listed at here just a set of cmd for managing tags.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"710c41a1571b4403e22a166b567e20cff0873fb9","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":220,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":221,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":222,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Performance Impact"},{"line_number":225,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_41bdfa00","line":222,"range":{"start_line":222,"start_character":2,"end_line":222,"end_character":54},"updated":"2016-07-27 02:38:33.000000000","message":"Don\u0027t know why users need this cmd. They already have \"openstack resource-provider-tags list $RP_UUID\" to list all the tags in a resource provider.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6545d82b07909e99b4ba7a87911b0328fb0ab7e0","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":220,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":221,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":222,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Performance Impact"},{"line_number":225,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_34eab9db","line":222,"range":{"start_line":222,"start_character":2,"end_line":222,"end_character":54},"in_reply_to":"dada55a8_41bdfa00","updated":"2016-07-27 09:59:07.000000000","message":"I thought it is used to check single tag and needn\u0027t list all the tags. There is API for check single tag accroding the api-wg guideline.","commit_id":"8c0acd4cdb76d1b54c3b1aada4522800683fb36d"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_6033cff6","line":22,"range":{"start_line":22,"start_character":54,"end_line":22,"end_character":63},"updated":"2016-07-27 09:28:38.000000000","message":"generically","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_d4b51ded","line":22,"range":{"start_line":22,"start_character":54,"end_line":22,"end_character":63},"in_reply_to":"dada55a8_6033cff6","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_402e8b8c","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":49},"updated":"2016-07-27 09:28:38.000000000","message":"generically","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_23a601ae","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":39},"updated":"2016-07-27 09:28:38.000000000","message":"qualitative? quantitative?","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_34d11924","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":39},"in_reply_to":"dada55a8_23a601ae","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericly. There also"},{"line_number":23,"context_line":"needs a solution to manage quanlitative genericly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_14ccd587","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":49},"in_reply_to":"dada55a8_402e8b8c","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"  example, each compute node as a single resource, shared storage pool as"},{"line_number":34,"context_line":"  resource pool."},{"line_number":35,"context_line":"* The capabilities can be defined by service as standard capability, it also"},{"line_number":36,"context_line":"  can be user-defined capabilities. Nova want to defined a standard way to"},{"line_number":37,"context_line":"  describe capability, then those capabilities can be used across the openstack"},{"line_number":38,"context_line":"  deployment. But in the real world, there are many hardware capabilities isn\u0027t"},{"line_number":39,"context_line":"  managed or detected by Openstack services, the user may want to manage"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_803c0394","line":36,"range":{"start_line":36,"start_character":49,"end_line":36,"end_character":56},"updated":"2016-07-27 09:28:38.000000000","message":"define","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"  example, each compute node as a single resource, shared storage pool as"},{"line_number":34,"context_line":"  resource pool."},{"line_number":35,"context_line":"* The capabilities can be defined by service as standard capability, it also"},{"line_number":36,"context_line":"  can be user-defined capabilities. Nova want to defined a standard way to"},{"line_number":37,"context_line":"  describe capability, then those capabilities can be used across the openstack"},{"line_number":38,"context_line":"  deployment. But in the real world, there are many hardware capabilities isn\u0027t"},{"line_number":39,"context_line":"  managed or detected by Openstack services, the user may want to manage"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_c0cb9ba2","line":36,"updated":"2016-07-27 09:28:38.000000000","message":"s","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"The propose is using Tags with ResourceProviders to manage capablities. The"},{"line_number":59,"context_line":"API of ResourceProviderTags will folow the API-WG `Tags` guideline."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The tag is just string, The meaning of Tags aren\u0027t defined by scheduler, and"},{"line_number":62,"context_line":"scheduler needn\u0027t to know the meaning of Tags. The scheduler just find out the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_c010bb02","line":59,"range":{"start_line":59,"start_character":33,"end_line":59,"end_character":38},"updated":"2016-07-27 09:28:38.000000000","message":"follow","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"The propose is using Tags with ResourceProviders to manage capablities. The"},{"line_number":59,"context_line":"API of ResourceProviderTags will folow the API-WG `Tags` guideline."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The tag is just string, The meaning of Tags aren\u0027t defined by scheduler, and"},{"line_number":62,"context_line":"scheduler needn\u0027t to know the meaning of Tags. The scheduler just find out the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_74c71164","line":59,"range":{"start_line":59,"start_character":33,"end_line":59,"end_character":38},"in_reply_to":"dada55a8_c010bb02","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The meaning of Tags are defined by resource owner. For nova, it will define a"},{"line_number":66,"context_line":"set of tags to indicate the capabilities of compute node\u0027s hardware and"},{"line_number":67,"context_line":"hypervisor. Then those tags can be used across the clouds. The tags can"},{"line_number":68,"context_line":"be defined as below::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    COMPUTE_HW_CAP_CPU_AVX"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_a0a307b1","line":67,"range":{"start_line":67,"start_character":51,"end_line":67,"end_character":57},"updated":"2016-07-27 09:28:38.000000000","message":"s/s//","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The meaning of Tags are defined by resource owner. For nova, it will define a"},{"line_number":66,"context_line":"set of tags to indicate the capabilities of compute node\u0027s hardware and"},{"line_number":67,"context_line":"hypervisor. Then those tags can be used across the clouds. The tags can"},{"line_number":68,"context_line":"be defined as below::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    COMPUTE_HW_CAP_CPU_AVX"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_b4a349b1","line":67,"range":{"start_line":67,"start_character":51,"end_line":67,"end_character":57},"in_reply_to":"dada55a8_a0a307b1","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"72c91da3998306f035495a74aa4a6d07790c8527","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"4) The cloud deployer updates the resource pool\u0027s capability of shared disk::"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    openstack resource-provider-tags add $RP_UUD STORAGE_WITH_SSD"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Alternatives"},{"line_number":130,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_5e430caf","line":127,"range":{"start_line":127,"start_character":49,"end_line":127,"end_character":65},"updated":"2016-07-27 09:39:07.000000000","message":"I think this should be $STORAGE_WITH_SSD, or it should be a plain text string?","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"4) The cloud deployer updates the resource pool\u0027s capability of shared disk::"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    openstack resource-provider-tags add $RP_UUD STORAGE_WITH_SSD"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Alternatives"},{"line_number":130,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_749ef163","line":127,"range":{"start_line":127,"start_character":49,"end_line":127,"end_character":65},"in_reply_to":"dada55a8_5e430caf","updated":"2016-07-27 10:03:42.000000000","message":"yes, it is plain string. STORAGE_WITH_SDD is a tag.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"fd5e02319e5bdbc364269c0cbb915653b2bc557b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"normal users. The third possible attribute is to mark the namespace of this"},{"line_number":137,"context_line":"tag to help group tags. For example the prefix \"HV\" and \"HW\" can be managed"},{"line_number":138,"context_line":"in this way.Then we can query/manage those tags very easily from database by"},{"line_number":139,"context_line":"attributes."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Data model impact"},{"line_number":142,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_ebff3732","line":139,"updated":"2016-07-28 12:13:28.000000000","message":"I very much hope we will not have attributes for tags. This will make them not-tags. Instead they will be meaningful objects that are more complex to manage.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9a3b95fb564e80675b296aa70d1572282bad0aaf","unresolved":false,"context_lines":[{"line_number":136,"context_line":"normal users. The third possible attribute is to mark the namespace of this"},{"line_number":137,"context_line":"tag to help group tags. For example the prefix \"HV\" and \"HW\" can be managed"},{"line_number":138,"context_line":"in this way.Then we can query/manage those tags very easily from database by"},{"line_number":139,"context_line":"attributes."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Data model impact"},{"line_number":142,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_00b2ef05","line":139,"in_reply_to":"bacf61ea_ebff3732","updated":"2016-08-01 01:57:31.000000000","message":"yea, agree","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  CREATE TABLE tags ("},{"line_number":147,"context_line":"    id INT NOT NULL,"},{"line_number":148,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":149,"context_line":"    PRIMARY KEY (id),"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_3ecd7866","line":146,"range":{"start_line":146,"start_character":0,"end_line":146,"end_character":21},"updated":"2016-07-27 09:28:38.000000000","message":"Alex, this table only has a tag id to tag name mapping, does a created tag need to be on top of a resource provider or we can just create a tag with specify on what resource provider? \nI wonder if we can merge this table into resource_provider_tags by adding \u0027tag_name\u0027 into resource_provider_tags?","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"72c91da3998306f035495a74aa4a6d07790c8527","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  CREATE TABLE tags ("},{"line_number":147,"context_line":"    id INT NOT NULL,"},{"line_number":148,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":149,"context_line":"    PRIMARY KEY (id),"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_9e68e4f6","line":146,"range":{"start_line":146,"start_character":0,"end_line":146,"end_character":21},"in_reply_to":"dada55a8_3ecd7866","updated":"2016-07-27 09:39:07.000000000","message":"seen from line 223, that a newly created tag should be resided on a resource provider. so I think we don\u0027t need to have a table to save tags, right?  we have too may tables already I think.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"b27c56e8f146667cacfd326296b1deec6eec61cf","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  CREATE TABLE tags ("},{"line_number":147,"context_line":"    id INT NOT NULL,"},{"line_number":148,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":149,"context_line":"    PRIMARY KEY (id),"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_e769408d","line":146,"range":{"start_line":146,"start_character":0,"end_line":146,"end_character":21},"in_reply_to":"dada55a8_94944537","updated":"2016-07-28 03:04:24.000000000","message":"ACK. good thought.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  CREATE TABLE tags ("},{"line_number":147,"context_line":"    id INT NOT NULL,"},{"line_number":148,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":149,"context_line":"    PRIMARY KEY (id),"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_94944537","line":146,"range":{"start_line":146,"start_character":0,"end_line":146,"end_character":21},"in_reply_to":"dada55a8_9e68e4f6","updated":"2016-07-27 10:03:42.000000000","message":"there a discussion about that in the mid-cycle. This can avoid big fat table, due to there are a lot of duplicated tags in the table.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"fd5e02319e5bdbc364269c0cbb915653b2bc557b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  }"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The API is used for request specific capabilities as below::"},{"line_number":191,"context_line":"  GET /resource_providers"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"  {"},{"line_number":194,"context_line":"    \"resources\": {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_eb6a9719","line":191,"updated":"2016-07-28 12:13:28.000000000","message":"As others have said this will conflict with the existing API described in http://specs.openstack.org/openstack/nova-specs/specs/newton/approved/generic-resource-pools.html#get-resource-providers\n\nThere was discussion at the mid-cycle about there being some way to retrieve a list of resource providers based on a provided set of launch requirements but we didn\u0027t resolve where that would go. This is something we\u0027re going to need to resolve.\n\nFor this section perhaps you could just indicate how requires and prefers are going to be used in the launch info? And we\u0027ll figure out the specifics of the api later?","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"72c91da3998306f035495a74aa4a6d07790c8527","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  }"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The API is used for request specific capabilities as below::"},{"line_number":191,"context_line":"  GET /resource_providers"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"  {"},{"line_number":194,"context_line":"    \"resources\": {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_99875e60","line":191,"range":{"start_line":191,"start_character":1,"end_line":191,"end_character":25},"updated":"2016-07-27 09:39:07.000000000","message":"I think you made a mistake here ? or not?\nhttp://specs.openstack.org/openstack/nova-specs/specs/newton/approved/generic-resource-pools.html#get-resource-providers","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9a3b95fb564e80675b296aa70d1572282bad0aaf","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  }"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The API is used for request specific capabilities as below::"},{"line_number":191,"context_line":"  GET /resource_providers"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"  {"},{"line_number":194,"context_line":"    \"resources\": {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_40d0671f","line":191,"in_reply_to":"bacf61ea_eb6a9719","updated":"2016-08-01 01:57:31.000000000","message":"yea, I will update this. Let us figure out that later.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"42b0c4b42c800a9fc9f19d3bc85b52c217401791","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  }"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The API is used for request specific capabilities as below::"},{"line_number":191,"context_line":"  GET /resource_providers"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"  {"},{"line_number":194,"context_line":"    \"resources\": {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_87e7a4e3","line":191,"range":{"start_line":191,"start_character":1,"end_line":191,"end_character":25},"in_reply_to":"dada55a8_74f1d194","updated":"2016-07-28 03:18:36.000000000","message":"I think we can remove this API for now, to limit the scope of this spec. It looks like an advanced filtering operation, and there\u0027s another spec related to it: https://review.openstack.org/#/c/300178/","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  }"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The API is used for request specific capabilities as below::"},{"line_number":191,"context_line":"  GET /resource_providers"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"  {"},{"line_number":194,"context_line":"    \"resources\": {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_74f1d194","line":191,"range":{"start_line":191,"start_character":1,"end_line":191,"end_character":25},"in_reply_to":"dada55a8_99875e60","updated":"2016-07-27 10:03:42.000000000","message":"I\u0027m not sure this yet. Accroding the mail-list, Jay said there is API like this for get a resource-provider. And I remeber Jay talk about that in the mid-cycle also, but I can\u0027t follow that discussion.\n\nI think that API still under desgin, I will update this when people figure out what it should looks like","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"fd5e02319e5bdbc364269c0cbb915653b2bc557b","unresolved":false,"context_lines":[{"line_number":201,"context_line":"      \"compute:hw:x86:avx2\","},{"line_number":202,"context_line":"    ],"},{"line_number":203,"context_line":"    \"prefers\": ["},{"line_number":204,"context_line":"      \"compute:virt:accelerated_whizzybang\""},{"line_number":205,"context_line":"    ]"},{"line_number":206,"context_line":"  }"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_eb51f763","line":204,"updated":"2016-07-28 12:13:28.000000000","message":"These examples don\u0027t seem to align with some of the (uppercase) examples above. This version implies some structuring to the capabilities that wasn\u0027t present above.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9a3b95fb564e80675b296aa70d1572282bad0aaf","unresolved":false,"context_lines":[{"line_number":201,"context_line":"      \"compute:hw:x86:avx2\","},{"line_number":202,"context_line":"    ],"},{"line_number":203,"context_line":"    \"prefers\": ["},{"line_number":204,"context_line":"      \"compute:virt:accelerated_whizzybang\""},{"line_number":205,"context_line":"    ]"},{"line_number":206,"context_line":"  }"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bacf61ea_a0a7a3bb","line":204,"in_reply_to":"bacf61ea_eb51f763","updated":"2016-08-01 01:57:31.000000000","message":"yea, YingXin point this out also, i will correct them to make consistent. But just for clear, we won\u0027t discuss the catalog and naming style at here.","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a6d8fa2a25ae6af839e953876577c59fb43cc82a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"Other end user impact"},{"line_number":219,"context_line":"---------------------"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":224,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_c0b71b83","line":221,"range":{"start_line":221,"start_character":23,"end_line":221,"end_character":26},"updated":"2016-07-27 09:28:38.000000000","message":"CLI","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":218,"context_line":"Other end user impact"},{"line_number":219,"context_line":"---------------------"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":224,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_9430c557","line":221,"range":{"start_line":221,"start_character":23,"end_line":221,"end_character":26},"in_reply_to":"dada55a8_c0b71b83","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"72c91da3998306f035495a74aa4a6d07790c8527","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":224,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":225,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":226,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_5e482cb3","line":223,"range":{"start_line":223,"start_character":48,"end_line":223,"end_character":57},"updated":"2016-07-27 09:39:07.000000000","message":"$TAG1 $TAG2","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"There will be a set of cmd for end user to manage the ResourceProviderTags"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":224,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":225,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":226,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_d436bd4f","line":223,"range":{"start_line":223,"start_character":48,"end_line":223,"end_character":57},"in_reply_to":"dada55a8_5e482cb3","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"72c91da3998306f035495a74aa4a6d07790c8527","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"* Deployer needs to set the Capabilities for the shared resources, like shared"},{"line_number":237,"context_line":"  storage pool. Those shared resource is managed by deployer, not the OpenStack"},{"line_number":238,"context_line":"  services, so the capabilities won\u0027t be managed by OpenStack services also."},{"line_number":239,"context_line":"* Deployer can use ResourceProviderTags to instead of Aggregate metadata. It is"},{"line_number":240,"context_line":"  more flexable and managable than Aggregate metadata."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_d921d69f","line":238,"range":{"start_line":238,"start_character":19,"end_line":238,"end_character":20},"updated":"2016-07-27 09:39:07.000000000","message":"C?","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f2a71f0deb3183a174a976108f71f2ebc336ec9","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"* Deployer needs to set the Capabilities for the shared resources, like shared"},{"line_number":237,"context_line":"  storage pool. Those shared resource is managed by deployer, not the OpenStack"},{"line_number":238,"context_line":"  services, so the capabilities won\u0027t be managed by OpenStack services also."},{"line_number":239,"context_line":"* Deployer can use ResourceProviderTags to instead of Aggregate metadata. It is"},{"line_number":240,"context_line":"  more flexable and managable than Aggregate metadata."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"dada55a8_143df52a","line":238,"range":{"start_line":238,"start_character":19,"end_line":238,"end_character":20},"in_reply_to":"dada55a8_d921d69f","updated":"2016-07-27 10:03:42.000000000","message":"Done","commit_id":"d60f893f8c32ef046c8cb37f33022f47b13e4178"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"abfe419c6253901e5036e3dc719359536e4fc76a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"ResourceProviderTags - Manage Capabilities with ResourceProvider"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_b11b5780","line":9,"updated":"2016-08-01 15:09:48.000000000","message":"I would just call this \"Resource provider capabilities\".","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"ResourceProviderTags - Manage Capabilities with ResourceProvider"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_23d081c9","line":9,"in_reply_to":"bacf61ea_b11b5780","updated":"2016-08-02 15:16:37.000000000","message":"Same reply as the one in the commit message","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"abfe419c6253901e5036e3dc719359536e4fc76a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This propose is about using Tags as a generic way to manage capabilities with"},{"line_number":14,"context_line":"ResourceProvider in scheduler. With this way, scheduler can manage capabilities"},{"line_number":15,"context_line":"which coming from different service, also can manage capabilities for single"},{"line_number":16,"context_line":"resource or a resource pool."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_911e136e","line":16,"updated":"2016-08-01 15:09:48.000000000","message":"The above paragraph is a mess from an English-language perspective. How about this instead?\n\n \"We propose to introduce a way of querying and managing the capabilities\n  of a resource provider via additions to the new placement REST API.\"","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This propose is about using Tags as a generic way to manage capabilities with"},{"line_number":14,"context_line":"ResourceProvider in scheduler. With this way, scheduler can manage capabilities"},{"line_number":15,"context_line":"which coming from different service, also can manage capabilities for single"},{"line_number":16,"context_line":"resource or a resource pool."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_c3f1a56c","line":16,"in_reply_to":"bacf61ea_911e136e","updated":"2016-08-02 15:16:37.000000000","message":"sorry, :( and thanks :)","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericaly. There also"},{"line_number":23,"context_line":"needs a solution to manage qualitative genericaly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_ca00dc68","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":71},"updated":"2016-08-01 13:45:27.000000000","message":"This may happen, but you don\u0027t need to state it here. It doesn\u0027t affect the need to add capability support.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The nova scheduler will be split out of nova to be a generic scheduler. The"},{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericaly. There also"},{"line_number":23,"context_line":"needs a solution to manage qualitative genericaly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_c398851e","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":71},"in_reply_to":"bacf61ea_ca00dc68","updated":"2016-08-02 15:16:37.000000000","message":"Done","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"abfe419c6253901e5036e3dc719359536e4fc76a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericaly. There also"},{"line_number":23,"context_line":"needs a solution to manage qualitative genericaly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"There are many different kind of resources in the cloud. The capabilities of"},{"line_number":28,"context_line":"those resources should be managed. We can catalog them as below:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_f1114f5e","line":25,"updated":"2016-08-01 15:09:48.000000000","message":"Alex, the above paragraph needs a lot of work :( It doesn\u0027t really make sense in English. I think perhaps you meant to say something like this?\n\n \"The new placement REST API introduced in Newton exposes functionality to\n  query and manage the quantitative parts of a scheduling request. However,\n  we need to add functionality to allow the qualitative parts of the request\n  to be represented and managed.\"","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":22,"context_line":"ResourceProvider as a solution to manage quantitative genericaly. There also"},{"line_number":23,"context_line":"needs a solution to manage qualitative genericaly in the scheduler. This"},{"line_number":24,"context_line":"solution is better to match the ResourceProvider also, then we can have"},{"line_number":25,"context_line":"consistent implementation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"There are many different kind of resources in the cloud. The capabilities of"},{"line_number":28,"context_line":"those resources should be managed. We can catalog them as below:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_0348dd86","line":25,"in_reply_to":"bacf61ea_f1114f5e","updated":"2016-08-02 15:16:37.000000000","message":"yea, that is what i want to say. thanks","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"normal users. The third possible attribute is to mark the namespace of this"},{"line_number":162,"context_line":"tag to help group tags. For example the prefix \"HV\" and \"HW\" can be managed"},{"line_number":163,"context_line":"in this way. Then we can query/manage those tags very easily from database by"},{"line_number":164,"context_line":"attributes. But the attributes really make the tags as object, that is complex"},{"line_number":165,"context_line":"than a single string."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Also have alternative idea is about using custom ResourceClass with infinite"},{"line_number":168,"context_line":"inventory. The tags will be the name of ResourceClass. With this way, we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_0aaf942a","line":165,"range":{"start_line":164,"start_character":12,"end_line":165,"end_character":21},"updated":"2016-08-01 13:45:27.000000000","message":"True, but in order to determine namespaces, we will have to take those simple strings and parse them into their components. You can\u0027t remove the complexity; you have to decide which solution better manages that complexity.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":161,"context_line":"normal users. The third possible attribute is to mark the namespace of this"},{"line_number":162,"context_line":"tag to help group tags. For example the prefix \"HV\" and \"HW\" can be managed"},{"line_number":163,"context_line":"in this way. Then we can query/manage those tags very easily from database by"},{"line_number":164,"context_line":"attributes. But the attributes really make the tags as object, that is complex"},{"line_number":165,"context_line":"than a single string."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Also have alternative idea is about using custom ResourceClass with infinite"},{"line_number":168,"context_line":"inventory. The tags will be the name of ResourceClass. With this way, we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_fe71dea9","line":165,"range":{"start_line":164,"start_character":12,"end_line":165,"end_character":21},"in_reply_to":"bacf61ea_0aaf942a","updated":"2016-08-02 15:16:37.000000000","message":"I think the namespace is only for query. User can query like this \u0027GET /resource_providers?tag_prefix\u003dCOMPUTE_HW_CPU\u0027, then it can find out all the RPs with tags and tag prefix with \u0027COMPUTE_HW_CPU\u0027. This is very easy to use for user.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"09a23091a4fac41feab8c655e250c8eb26b4840d","unresolved":false,"context_lines":[{"line_number":164,"context_line":"attributes. But the attributes really make the tags as object, that is complex"},{"line_number":165,"context_line":"than a single string."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Also have alternative idea is about using custom ResourceClass with infinite"},{"line_number":168,"context_line":"inventory. The tags will be the name of ResourceClass. With this way, we"},{"line_number":169,"context_line":"needn\u0027t more tables and API to the placement engine and the whole"},{"line_number":170,"context_line":"ResourceProvider models. But the ResourceClass is desgined for Quantitative"},{"line_number":171,"context_line":"stuff arguably, people have to add infinite inventory to simulate this isn\u0027t"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_a1eddbb8","line":168,"range":{"start_line":167,"start_character":63,"end_line":168,"end_character":9},"updated":"2016-08-01 13:10:47.000000000","message":"I think it is really a hack in resource provider, we need to consider inventories and whether to put allocations to this infinite inventory.\n\nA capability tag is just a marker to classify resource providers into different types.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":164,"context_line":"attributes. But the attributes really make the tags as object, that is complex"},{"line_number":165,"context_line":"than a single string."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Also have alternative idea is about using custom ResourceClass with infinite"},{"line_number":168,"context_line":"inventory. The tags will be the name of ResourceClass. With this way, we"},{"line_number":169,"context_line":"needn\u0027t more tables and API to the placement engine and the whole"},{"line_number":170,"context_line":"ResourceProvider models. But the ResourceClass is desgined for Quantitative"},{"line_number":171,"context_line":"stuff arguably, people have to add infinite inventory to simulate this isn\u0027t"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_5ec3ca8a","line":168,"range":{"start_line":167,"start_character":63,"end_line":168,"end_character":9},"in_reply_to":"bacf61ea_a1eddbb8","updated":"2016-08-02 15:16:37.000000000","message":"yea, as we discussed today, I wrote new idea at here http://lists.openstack.org/pipermail/openstack-dev/2016-August/100634.html","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Also have alternative idea is about using custom ResourceClass with infinite"},{"line_number":168,"context_line":"inventory. The tags will be the name of ResourceClass. With this way, we"},{"line_number":169,"context_line":"needn\u0027t more tables and API to the placement engine and the whole"},{"line_number":170,"context_line":"ResourceProvider models. But the ResourceClass is desgined for Quantitative"},{"line_number":171,"context_line":"stuff arguably, people have to add infinite inventory to simulate this isn\u0027t"},{"line_number":172,"context_line":"quantitative stuff. For managable, we have to add more API to query the"},{"line_number":173,"context_line":"capabilities, like, which ResourceProvider have specific ResourceClass("},{"line_number":174,"context_line":"Capabilities)."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_07cdcd84","line":172,"range":{"start_line":170,"start_character":25,"end_line":172,"end_character":19},"updated":"2016-08-01 13:45:27.000000000","message":"This is a bad code smell, and shows that this really isn\u0027t an approach we should follow.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6bff2637842fea6e6531839461a1f9281df9d7f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"needn\u0027t more tables and API to the placement engine and the whole"},{"line_number":170,"context_line":"ResourceProvider models. But the ResourceClass is desgined for Quantitative"},{"line_number":171,"context_line":"stuff arguably, people have to add infinite inventory to simulate this isn\u0027t"},{"line_number":172,"context_line":"quantitative stuff. For managable, we have to add more API to query the"},{"line_number":173,"context_line":"capabilities, like, which ResourceProvider have specific ResourceClass("},{"line_number":174,"context_line":"Capabilities)."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_e06cdf09","line":172,"in_reply_to":"bacf61ea_07cdcd84","updated":"2016-08-01 14:19:35.000000000","message":"Interesting, I think the smell is in the opposite direction: In the API. I\u0027m increasingly convinced that what we want to represent on the placement surface is a way to account for inventories and allocations of quantitative resources and that representing some classes of resources as having infinite capabilities allows us to have exactly one interface for managing them. When something wants for example some SSD, they ask for one SSD. When it is claimed that 1 SSD is subtracted from the infinite amount of SSD available, leaving infinity behind.\n\nThe result here is a unified mental model, a unified api (http and python), and less complexity if/when we stop managing this stuff in an RDBMS.\n\nThe statement of \"have to add infinite inventory to simulate\" isn\u0027t really accurate to me. It\u0027s not a simulation, it\u0027s just infinite.\n\nThe reason for me thinking this way is because I imagine a future where we are keeping all this information in memory, in numpy arrarys, and having everything quantitative allows us to keep the placement service as narrow as possible, which is a goal we should stick to.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":169,"context_line":"needn\u0027t more tables and API to the placement engine and the whole"},{"line_number":170,"context_line":"ResourceProvider models. But the ResourceClass is desgined for Quantitative"},{"line_number":171,"context_line":"stuff arguably, people have to add infinite inventory to simulate this isn\u0027t"},{"line_number":172,"context_line":"quantitative stuff. For managable, we have to add more API to query the"},{"line_number":173,"context_line":"capabilities, like, which ResourceProvider have specific ResourceClass("},{"line_number":174,"context_line":"Capabilities)."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_7eedeeee","line":172,"in_reply_to":"bacf61ea_e06cdf09","updated":"2016-08-02 15:16:37.000000000","message":"@Chris, my answer at here http://lists.openstack.org/pipermail/openstack-dev/2016-August/100634.html","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"Data model impact"},{"line_number":177,"context_line":"-----------------"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  CREATE TABLE tags ("},{"line_number":182,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_a707a180","line":179,"range":{"start_line":179,"start_character":8,"end_line":179,"end_character":23},"updated":"2016-08-01 13:45:27.000000000","message":"You should note that this will be in the API database.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":176,"context_line":"Data model impact"},{"line_number":177,"context_line":"-----------------"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  CREATE TABLE tags ("},{"line_number":182,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_1eaaf285","line":179,"range":{"start_line":179,"start_character":8,"end_line":179,"end_character":23},"in_reply_to":"bacf61ea_a707a180","updated":"2016-08-02 15:16:37.000000000","message":"yea, thanks","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"09a23091a4fac41feab8c655e250c8eb26b4840d","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  CREATE TABLE tags ("},{"line_number":182,"context_line":"    id INT NOT NULL,"},{"line_number":183,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":184,"context_line":"    PRIMARY KEY (id),"},{"line_number":185,"context_line":"    UNIQUE INDEX (name)"},{"line_number":186,"context_line":"  );"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"  CREATE TABLE resource_provider_tags ("},{"line_number":189,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8db29092","line":186,"range":{"start_line":181,"start_character":2,"end_line":186,"end_character":4},"updated":"2016-08-01 13:10:47.000000000","message":"We may need a different tablename because the instance tag is already using the \"tags\" tablename [1].\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L1433-L1449","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"For the database schema, the following table constructs would suffice::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  CREATE TABLE tags ("},{"line_number":182,"context_line":"    id INT NOT NULL,"},{"line_number":183,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":184,"context_line":"    PRIMARY KEY (id),"},{"line_number":185,"context_line":"    UNIQUE INDEX (name)"},{"line_number":186,"context_line":"  );"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"  CREATE TABLE resource_provider_tags ("},{"line_number":189,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_de869a15","line":186,"range":{"start_line":181,"start_character":2,"end_line":186,"end_character":4},"in_reply_to":"bacf61ea_8db29092","updated":"2016-08-02 15:16:37.000000000","message":"Yea, I noticed that. I hate naming :(","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"09a23091a4fac41feab8c655e250c8eb26b4840d","unresolved":false,"context_lines":[{"line_number":202,"context_line":"The Tags will be attached as sub-resource of Resource Providers:"},{"line_number":203,"context_line":"`/resource_providers/{uuid}/tags`"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"All the method will match the API-WG guideline, so it won\u0027t be duplicated at"},{"line_number":206,"context_line":"here again."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"One more API which isn\u0027t described by the API-WG guideline is:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_e1051311","line":205,"range":{"start_line":205,"start_character":20,"end_line":205,"end_character":46},"updated":"2016-08-01 13:10:47.000000000","message":"The main difference between capability and instance tags is that capability tags have an id field and there\u0027s an extra table \"resource_provider_tags\" recording the relationship.\n\nI\u0027m wondering that does all the methods still match the same API with instance tags, while the capability tags can also be referred by its id?","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":202,"context_line":"The Tags will be attached as sub-resource of Resource Providers:"},{"line_number":203,"context_line":"`/resource_providers/{uuid}/tags`"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"All the method will match the API-WG guideline, so it won\u0027t be duplicated at"},{"line_number":206,"context_line":"here again."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"One more API which isn\u0027t described by the API-WG guideline is:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_1e34b248","line":205,"range":{"start_line":205,"start_character":20,"end_line":205,"end_character":46},"in_reply_to":"bacf61ea_27061152","updated":"2016-08-02 15:16:37.000000000","message":"Instance Tags is in the nova API endpoint. The ResourceProviderTags is on placement API endpoint, we have to think about separatly.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"The Tags will be attached as sub-resource of Resource Providers:"},{"line_number":203,"context_line":"`/resource_providers/{uuid}/tags`"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"All the method will match the API-WG guideline, so it won\u0027t be duplicated at"},{"line_number":206,"context_line":"here again."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"One more API which isn\u0027t described by the API-WG guideline is:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_27061152","line":205,"range":{"start_line":205,"start_character":20,"end_line":205,"end_character":46},"in_reply_to":"bacf61ea_e1051311","updated":"2016-08-01 13:45:27.000000000","message":"While they are similar, since both are simple tags, I don\u0027t think that we should make the code more confusing my hacking the two into a single table. It will complicate the data model if we do that.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":252,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":253,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":254,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":255,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Performance Impact"},{"line_number":258,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_4a2fcc87","line":255,"updated":"2016-08-01 13:45:27.000000000","message":"There should also be:\n\n    openstack resource-provider-tags list\n\n...for getting all the tags. This is equivalent to the `GET /resource_providers/tags` call you note above.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":252,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":253,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":254,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":255,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Performance Impact"},{"line_number":258,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_3e225602","line":255,"in_reply_to":"bacf61ea_4a2fcc87","updated":"2016-08-02 15:16:37.000000000","message":"yea","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":257,"context_line":"Performance Impact"},{"line_number":258,"context_line":"------------------"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"None"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Other deployer impact"},{"line_number":263,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_0a1f9408","line":260,"range":{"start_line":260,"start_character":0,"end_line":260,"end_character":4},"updated":"2016-08-01 13:45:27.000000000","message":"We are adding tables and joins to every query about resource providers, so there will be some impact. I know we are hoping that these are efficient queries and not dragging down performance, but there has to be *some* impact.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":257,"context_line":"Performance Impact"},{"line_number":258,"context_line":"------------------"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"None"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Other deployer impact"},{"line_number":263,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_7e732e16","line":260,"range":{"start_line":260,"start_character":0,"end_line":260,"end_character":4},"in_reply_to":"bacf61ea_0a1f9408","updated":"2016-08-02 15:16:37.000000000","message":"yea","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"Developer impact"},{"line_number":272,"context_line":"----------------"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"None"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"Implementation"},{"line_number":277,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_6a5570c4","line":274,"range":{"start_line":274,"start_character":0,"end_line":274,"end_character":4},"updated":"2016-08-01 13:45:27.000000000","message":"This will greatly impact any developer working on the nova scheduler, or the placement API. It will also affect devs working on libvirt and other such interfaces to hw/hv, which now have to report capabilities for this.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":271,"context_line":"Developer impact"},{"line_number":272,"context_line":"----------------"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"None"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"Implementation"},{"line_number":277,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_3e8536ad","line":274,"range":{"start_line":274,"start_character":0,"end_line":274,"end_character":4},"in_reply_to":"bacf61ea_6a5570c4","updated":"2016-08-02 15:16:37.000000000","message":"yea, worth to write something.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":285,"context_line":"Other contributors:"},{"line_number":286,"context_line":"  Cheng, Yingxin \u003cyingxin.cheng@intel.com\u003e"},{"line_number":287,"context_line":"  Jin, Yuntong \u003cyuntong.jin@intel.com\u003e"},{"line_number":288,"context_line":"  Tan, Lin \u003clin.tan@intel.com\u003e"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"Work Items"},{"line_number":291,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8ad9c459","line":288,"updated":"2016-08-01 13:45:27.000000000","message":"You can add me to this list.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":285,"context_line":"Other contributors:"},{"line_number":286,"context_line":"  Cheng, Yingxin \u003cyingxin.cheng@intel.com\u003e"},{"line_number":287,"context_line":"  Jin, Yuntong \u003cyuntong.jin@intel.com\u003e"},{"line_number":288,"context_line":"  Tan, Lin \u003clin.tan@intel.com\u003e"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"Work Items"},{"line_number":291,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_1e6cb207","line":288,"in_reply_to":"bacf61ea_8ad9c459","updated":"2016-08-02 15:16:37.000000000","message":"Thank your so much for your help on the English!","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d4883a2d1ab840f13aaa631c4f030ae67a495f0f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"* Add DB Schema for ResourceProviderTags"},{"line_number":294,"context_line":"* Implements the ResourceProviderTagsFilter (Maybe scheduler filters in DB as"},{"line_number":295,"context_line":"  https://review.openstack.org/#/c/300178/ described)"},{"line_number":296,"context_line":"* Implements the API of ResourceProviderTags"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Dependencies"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_0a7b1429","line":296,"updated":"2016-08-01 13:45:27.000000000","message":"We will also need to add the collecting and reporting of capabilities to the various resource providers so that they can keep the capabilities in the placement engine correct.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fece6ea488bce18cfbd50b05b39f43c3859d516","unresolved":false,"context_lines":[{"line_number":293,"context_line":"* Add DB Schema for ResourceProviderTags"},{"line_number":294,"context_line":"* Implements the ResourceProviderTagsFilter (Maybe scheduler filters in DB as"},{"line_number":295,"context_line":"  https://review.openstack.org/#/c/300178/ described)"},{"line_number":296,"context_line":"* Implements the API of ResourceProviderTags"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Dependencies"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_1e3af2e7","line":296,"in_reply_to":"bacf61ea_0a7b1429","updated":"2016-08-02 15:16:37.000000000","message":"Do you mean how to report capabilities from the virt driver? I think that is separated propose.","commit_id":"a979fbdeedbd29613d886a4403a7c8846e9a260a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have both quantitative aspects; when a instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d9ae9be6","line":13,"updated":"2016-08-03 02:00:59.000000000","message":"I think you meant to say that resources have both quantitative and qualitative aspects?\n\nHowever, that is not the case. Resources are quantitative. They can be consumed by a user from a resource provider that has available inventory of that resource class.\n\nI think what you meant to say is that *the launch request from a user* has both quantitative and qualitative aspects. The quantitative aspects of that launch request are a set of requested resources and a set of required capabilities that any provider of resources must feature.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have both quantitative aspects; when a instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_6bc32b58","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":19},"updated":"2016-08-03 17:53:26.000000000","message":"That is my mistake from editing. Originally I wrote what Alex said below, but then separated the thoughts. So just remove the word \u0027both\u0027.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have both quantitative aspects; when a instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d05e6511","line":13,"in_reply_to":"bacf61ea_d9ae9be6","updated":"2016-08-03 07:22:26.000000000","message":"Maybe just say \"ResourceProviders have both quantitative and qualitative aspects\"","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"08115f94b00fd0597bb40148c079b4f54f536f0f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can both manage capabilities reported from different"},{"line_number":19,"context_line":"services, as well as from a single resource provider/pool, and then make"},{"line_number":20,"context_line":"placement decisions that match what was requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d9915f48","line":19,"updated":"2016-08-03 13:10:30.000000000","message":"@alex_xu: OK, yeah, I understand now. I think it\u0027s fine, of course, to have different OpenStack projects be able to use the resource provider capabilities functionality in the new placement API. I\u0027m not sure it\u0027s necessary to put that in this spec, though. Let\u0027s just keep this spec focused on the Nova use case for the moment?","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can both manage capabilities reported from different"},{"line_number":19,"context_line":"services, as well as from a single resource provider/pool, and then make"},{"line_number":20,"context_line":"placement decisions that match what was requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_b9abe7d5","line":19,"updated":"2016-08-03 02:00:59.000000000","message":"What specifically do you mean by \"from different services\" above? The service is definitely not the thing that has a set of capabilities associated to it. The compute node (resource provider) is the thing that has capabilities associated with it.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can both manage capabilities reported from different"},{"line_number":19,"context_line":"services, as well as from a single resource provider/pool, and then make"},{"line_number":20,"context_line":"placement decisions that match what was requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_b52483c6","line":19,"in_reply_to":"bacf61ea_9959c391","updated":"2016-08-03 07:22:26.000000000","message":"Yea, just as Yinxin explained, that is what I mean, Maybe I can add more word to clear about that. Just want to show we need a \u0027generic\u0027 solution..","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can both manage capabilities reported from different"},{"line_number":19,"context_line":"services, as well as from a single resource provider/pool, and then make"},{"line_number":20,"context_line":"placement decisions that match what was requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_9959c391","line":19,"in_reply_to":"bacf61ea_b9abe7d5","updated":"2016-08-03 04:13:12.000000000","message":"I can read \"report\" here means to tell resource provider to associated with some capabilities. When a resource provider needs to associate with capabilities, they may be \"reported\" by different services other than nova, such as ironic, cinder or neutron, through REST API.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aa4f3f3a621d6237c3da557e245cd8dc5a72105e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can both manage capabilities reported from different"},{"line_number":19,"context_line":"services, as well as from a single resource provider/pool, and then make"},{"line_number":20,"context_line":"placement decisions that match what was requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_5a09da2b","line":19,"in_reply_to":"bacf61ea_d9915f48","updated":"2016-08-08 02:53:38.000000000","message":"yea, got it","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"within those types there can be many differences. The classic example is disk"},{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also request that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a disk provider is SSD or spinning is what we are concerned"},{"line_number":33,"context_line":"with."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_2b2133fd","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":32},"updated":"2016-08-03 17:53:26.000000000","message":"Again, this is my fault. I originally wrote \u0027resource provider\u0027, but changed it to \u0027disk\u0027. Unfortunately, I left the word \u0027provider\u0027.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"08115f94b00fd0597bb40148c079b4f54f536f0f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also request that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a disk provider is SSD or spinning is what we are concerned"},{"line_number":33,"context_line":"with."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_39999b6f","line":33,"updated":"2016-08-03 13:10:30.000000000","message":"@Yingxin: Your example isn\u0027t really about the granularity level of the system, but you make a good point. Clearly we do not want to allow a single resource provider to have both disk:ssd and disk:hdd capabilities. If a compute node had some spinning disks and some SSD disks, both of which the deployer wanted to expose to consumers, then we would create two resource providers, one with the capability disk:hdd and one with the capability disk:ssd, each with an appropriate inventory record with resource class DISK_GB. You are correct that nested resource providers will need to come into play in this case, because we would need some mechanism of indicating that the HDD and SSD resource providers of DISK_GB are \"nested\" within the resource provider representing the local compute node that has inventory of VCPU and MEMORY_MB.\n\nLuckily, we don\u0027t have to support that right away, since currently it isn\u0027t possible to have \u003e1 local storage area for instance disks.\n\nThis does bring up the related question of how we will handle conflicting capabilities. I\u0027ll add some language for that into the spec for the os-capabilities library...","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also request that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a disk provider is SSD or spinning is what we are concerned"},{"line_number":33,"context_line":"with."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_19b9532f","line":33,"updated":"2016-08-03 02:00:59.000000000","message":"The above really isn\u0027t correct, sorry. The resource is DISK_GB. The resource *provider* is the shared storage pool or local compute node\u0027s attached storage. The capability string -- e.g. disk:ssd -- would be associated with the resource provider, not the resource. It\u0027s critical that we be explicit and ultra-pedantic with the terminology here, since the interrelationships among objects in this modeling is sometimes quite difficult to speak about.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also request that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a disk provider is SSD or spinning is what we are concerned"},{"line_number":33,"context_line":"with."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_6b6d16cc","line":33,"in_reply_to":"bacf61ea_19b9532f","updated":"2016-08-03 04:13:12.000000000","message":"I\u0027m wondering about how to manage capabilities that is more fine-grained than resource provider level. For example, what if a compute node has both disk:ssd and disk:hdd installed, maybe we don\u0027t need to worry about this?\n\nMaybe it is an advanced topic related to nested resource provider.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aa4f3f3a621d6237c3da557e245cd8dc5a72105e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also request that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a disk provider is SSD or spinning is what we are concerned"},{"line_number":33,"context_line":"with."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_3a5a262b","line":33,"in_reply_to":"bacf61ea_39999b6f","updated":"2016-08-08 02:53:38.000000000","message":"The better case at here is I think it is FPGA, PCI. I want to add capabilities to FPGA and PCI device","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"08115f94b00fd0597bb40148c079b4f54f536f0f","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_199c975c","line":37,"updated":"2016-08-03 13:10:30.000000000","message":"@alex_xu: I\u0027d advise leaving mention of non-Nova things out of this spec, just for brevity reasons.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_f9b55f31","line":37,"updated":"2016-08-03 02:00:59.000000000","message":"Advise not to use the term service above unless you are going to define it very specifically in a glossary section beforehand. The term \"service\" within Nova is very specific and refers to the underlying message queue endpoint of a Nova api, compute, scheduler, network or conductor node.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_8b4e5fbf","line":37,"in_reply_to":"bacf61ea_199c975c","updated":"2016-08-03 17:53:26.000000000","message":"The point here is that we don\u0027t want to do anything here that would preclude handling other OpenStack services in the future.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aa4f3f3a621d6237c3da557e245cd8dc5a72105e","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_3a7186a9","line":37,"in_reply_to":"bacf61ea_199c975c","updated":"2016-08-08 02:53:38.000000000","message":"ok, no problem","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ec3e24b567f79575dab1cd518e2cd83d0fece0d1","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_156b05f2","line":37,"in_reply_to":"bacf61ea_8b4e5fbf","updated":"2016-08-08 06:57:02.000000000","message":"Yea, as Ed said, that is what I mean. Some of words isn\u0027t related to Nova, but I think we need show whole idea at somewhere for people.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_f0b8c92c","line":37,"in_reply_to":"bacf61ea_f9b55f31","updated":"2016-08-03 07:22:26.000000000","message":"Actually I want to say Openstack Services: Nova, Ironic, Cinder... how about I say \u0027Openstack Services\u0027?","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"08115f94b00fd0597bb40148c079b4f54f536f0f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."},{"line_number":41,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":42,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":43,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_79a3139f","line":40,"updated":"2016-08-03 13:10:30.000000000","message":"@alex_xu: Sure, if you want, but there\u0027s no reason to differentiate here. A resource provider is the thing that is associated with a capability, that\u0027s all.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."},{"line_number":41,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":42,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":43,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_59810b4d","line":40,"updated":"2016-08-03 02:00:59.000000000","message":"Based on popular request, we\u0027re no longer differentiating between a \"resource provider\" and a \"resource pool\". They are one and the same, and we\u0027ve been asked by the community to just use the term \"resource provider\" to refer to the object/model within the placement API.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."},{"line_number":41,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":42,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":43,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_90d98d86","line":40,"in_reply_to":"bacf61ea_59810b4d","updated":"2016-08-03 07:22:26.000000000","message":"got it, I can say the shared resource and single resource?","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aa4f3f3a621d6237c3da557e245cd8dc5a72105e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* There are many potential resource providers from many different services, and"},{"line_number":38,"context_line":"  we need to be able to be flexible enough to handle them all."},{"line_number":39,"context_line":"* Both individual resource providers as well as resource pools can have"},{"line_number":40,"context_line":"  capabilities to manage."},{"line_number":41,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":42,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":43,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_5aa55a02","line":40,"in_reply_to":"bacf61ea_79a3139f","updated":"2016-08-08 02:53:38.000000000","message":"ok, I will try to reword those.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Use Cases"},{"line_number":48,"context_line":"---------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* An end user wants to request a resource with a specific capability.  * An end"},{"line_number":51,"context_line":"  user wants to know what capabilties are supported by a specific cloud"},{"line_number":52,"context_line":"  provider."},{"line_number":53,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_3986d765","line":50,"updated":"2016-08-03 02:00:59.000000000","message":"bullet point above needs a CRLF.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Use Cases"},{"line_number":48,"context_line":"---------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* An end user wants to request a resource with a specific capability.  * An end"},{"line_number":51,"context_line":"  user wants to know what capabilties are supported by a specific cloud"},{"line_number":52,"context_line":"  provider."},{"line_number":53,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d0e30532","line":50,"in_reply_to":"bacf61ea_3986d765","updated":"2016-08-03 07:22:26.000000000","message":"Done","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Use Cases"},{"line_number":48,"context_line":"---------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* An end user wants to request a resource with a specific capability.  * An end"},{"line_number":51,"context_line":"  user wants to know what capabilties are supported by a specific cloud"},{"line_number":52,"context_line":"  provider."},{"line_number":53,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_cbbb3774","line":50,"in_reply_to":"bacf61ea_d0e30532","updated":"2016-08-03 17:53:26.000000000","message":"Oops.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  provider."},{"line_number":53,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":54,"context_line":"  (example: spinning vs SSD)"},{"line_number":55,"context_line":"* A cloud provider admin wants to manage the capabilties of baremetal machines."},{"line_number":56,"context_line":"* A deployer wants the scheduler to be aware of the capabilities from many"},{"line_number":57,"context_line":"  different OpenStack services."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_997b837b","line":55,"updated":"2016-08-03 02:00:59.000000000","message":"s/capabilties/capabilities/","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  provider."},{"line_number":53,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":54,"context_line":"  (example: spinning vs SSD)"},{"line_number":55,"context_line":"* A cloud provider admin wants to manage the capabilties of baremetal machines."},{"line_number":56,"context_line":"* A deployer wants the scheduler to be aware of the capabilities from many"},{"line_number":57,"context_line":"  different OpenStack services."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_10d47d45","line":55,"in_reply_to":"bacf61ea_997b837b","updated":"2016-08-03 07:22:26.000000000","message":"Done","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  (example: spinning vs SSD)"},{"line_number":55,"context_line":"* A cloud provider admin wants to manage the capabilties of baremetal machines."},{"line_number":56,"context_line":"* A deployer wants the scheduler to be aware of the capabilities from many"},{"line_number":57,"context_line":"  different OpenStack services."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"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":7,"id":"bacf61ea_79804f47","line":57,"updated":"2016-08-03 02:00:59.000000000","message":"Recommend leaving this last use case off. It\u0027s OK, but not really adding much versus the distraction of expanding the scope of the spec.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  (example: spinning vs SSD)"},{"line_number":55,"context_line":"* A cloud provider admin wants to manage the capabilties of baremetal machines."},{"line_number":56,"context_line":"* A deployer wants the scheduler to be aware of the capabilities from many"},{"line_number":57,"context_line":"  different OpenStack services."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"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":7,"id":"bacf61ea_103bdd9d","line":57,"in_reply_to":"bacf61ea_79804f47","updated":"2016-08-03 07:22:26.000000000","message":"Done","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"We propose to us Tags with ResourceProviders to manage capabilities. The API of"},{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d995fb88","line":62,"updated":"2016-08-03 02:00:59.000000000","message":"s/us/use/\n\nUpon further reflection, I\u0027m still against calling the REST resource \"tags\". The term \"capabilities\" is what I strongly believe we should use. We can say that the tags.rst guidelines from the API WG will be used as the guideline for the REST API with regards to the filters and such, but I really believe that having a separate term from \"tag\" -- which really infers non-standard, end-user-defined strings for categorization/taxonomy purposes -- is a better long-term API here.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"We propose to us Tags with ResourceProviders to manage capabilities. The API of"},{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_76e78e40","line":62,"in_reply_to":"bacf61ea_502a752d","updated":"2016-08-03 17:53:26.000000000","message":"From the API-WG document on tags: \"Tags are strings attached to an entity with the purpose of classification into groups\". That is exactly what we are doing here. The groups into which we are classifying resource providers are their *capabilities*. Calling these things \"capabilities\" confuses their interpretation with their implementation. This spec is describing the implementation of describing and managing capabilities within the placement service, using the programmatic concept of tags.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"We propose to us Tags with ResourceProviders to manage capabilities. The API of"},{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_502a752d","line":62,"in_reply_to":"bacf61ea_ce47f049","updated":"2016-08-03 07:22:26.000000000","message":"Agree to use Capabilities in the doc. But still not sure for the API, same question as I replied in the maillist:\n\nIf we call Capabilities instead of tags, but user still can free to input any string. User can input \u0027fish\u0027 as a capabilities, and placement API won\u0027t say no. Is this OK? Why this is OK when user input non-capability into a capability field? Actually same question for ResourceClass.\n\n\nWe call it as Capabilities, but user can\u0027t do different thing.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Proposed change"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"We propose to us Tags with ResourceProviders to manage capabilities. The API of"},{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_ce47f049","line":62,"in_reply_to":"bacf61ea_d995fb88","updated":"2016-08-03 04:13:12.000000000","message":"Yes, I also agree with the explicit name \"capabilities\", it\u0027s specific to resource providers. But the \"tags\" is implicit, I can\u0027t understand what it is related to placement service simply from its name.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"A tag is just a string. The scheduler neither assigns meaning to tags, nor"},{"line_number":67,"context_line":"treats some tags differently; the ResourceProvider either has the requested"},{"line_number":68,"context_line":"tag, or it doesn\u0027t."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_b992c79d","line":66,"updated":"2016-08-03 02:00:59.000000000","message":"But that isn\u0027t true for capabilities. The capability is indeed just a string identifier, but there absolutely *is* meaning to a capability string like \"disk:ssd\" or \"hw:cpu:x86:avx2\". Those mean very specific things -- that the resource provider upon which those capabilities are associated has that feature enabled. A simple string tag like \"gold\" has no inherent meaning to it; it\u0027s just a means of categorization. But capability strings are not meaningless. They indicate a very explcit feature is available from that resource provider.\n\nThis is why I support using the underlying *mechanism* of the tags implementation in Nova and the API WG guidance for tags API queries as foundations for the capabilities work in the placement API, but I\u0027m not good with just calling these things \"tags\".\n\nPut it this way: we wouldn\u0027t ever have an \"os-tags\" library now would we? But we definitely will have an os-capabilities library, because the things in that library are standardized and have meaning behind the constants. Any old tags don\u0027t have meaning more than a simple taxonomy use.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"A tag is just a string. The scheduler neither assigns meaning to tags, nor"},{"line_number":67,"context_line":"treats some tags differently; the ResourceProvider either has the requested"},{"line_number":68,"context_line":"tag, or it doesn\u0027t."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_76f14ecd","line":66,"in_reply_to":"bacf61ea_b992c79d","updated":"2016-08-03 17:53:26.000000000","message":"That\u0027s a kind of meaningless distinction. Of course the strings that are chosen have meaning - they represent the group that that tag is meant to classify the entity into. Every system of tags uses tags that have meaning - you don\u0027t just assign randomly-generated strings to things. Or can you point to a system that uses tagging in which the tags do not have a specific meaning within that system?","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"ResourceProviderTags will follow the API-WG `Tags` guidelines, as noted here:"},{"line_number":64,"context_line":"https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"A tag is just a string. The scheduler neither assigns meaning to tags, nor"},{"line_number":67,"context_line":"treats some tags differently; the ResourceProvider either has the requested"},{"line_number":68,"context_line":"tag, or it doesn\u0027t."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_10babdc0","line":66,"in_reply_to":"bacf61ea_b992c79d","updated":"2016-08-03 07:22:26.000000000","message":"Those words may change my mind a little about using Capabilities instead of Tags.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7491160c178565dfb021061f14ea189cba296a46","unresolved":false,"context_lines":[{"line_number":71,"context_line":"a set of tags to indicate the capabilities of compute node\u0027s hardware and"},{"line_number":72,"context_line":"hypervisor. By getting these capabilities programmatically from the hardware"},{"line_number":73,"context_line":"and hypervisor, it will ensure that these tags will be the same across all"},{"line_number":74,"context_line":"clouds. The tags can be defined as below::"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    COMPUTE_HW_CPU_AVX"},{"line_number":77,"context_line":"    COMPUTE_HW_CPU_SSE"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_19903395","line":74,"updated":"2016-08-03 02:00:59.000000000","message":"I recommend leaving discussion of how capability strings will be discovered or even catalogued out of this spec entirely. Let\u0027s deal with that in a separate spec for an os-capabilities library and focus this one entirely on the placement REST API for handling qualitative aspects of a launch request and the capabilities associated with a resource provider.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":71,"context_line":"a set of tags to indicate the capabilities of compute node\u0027s hardware and"},{"line_number":72,"context_line":"hypervisor. By getting these capabilities programmatically from the hardware"},{"line_number":73,"context_line":"and hypervisor, it will ensure that these tags will be the same across all"},{"line_number":74,"context_line":"clouds. The tags can be defined as below::"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    COMPUTE_HW_CPU_AVX"},{"line_number":77,"context_line":"    COMPUTE_HW_CPU_SSE"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_1008fd90","line":74,"in_reply_to":"bacf61ea_0eed8825","updated":"2016-08-03 07:22:26.000000000","message":"Yes, actually I put a note at line 85. Just want to show what tag may looks like for people","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"a set of tags to indicate the capabilities of compute node\u0027s hardware and"},{"line_number":72,"context_line":"hypervisor. By getting these capabilities programmatically from the hardware"},{"line_number":73,"context_line":"and hypervisor, it will ensure that these tags will be the same across all"},{"line_number":74,"context_line":"clouds. The tags can be defined as below::"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    COMPUTE_HW_CPU_AVX"},{"line_number":77,"context_line":"    COMPUTE_HW_CPU_SSE"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_0eed8825","line":74,"in_reply_to":"bacf61ea_19903395","updated":"2016-08-03 04:13:12.000000000","message":"++","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"straightforward to manage through the API. In the `Tags API-WG guideline`_,"},{"line_number":154,"context_line":"there are many query parameters to make management easy."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Once the use of capability tags is in place, the use of aggregate metadata will"},{"line_number":157,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":158,"context_line":"for much more than capability tracking."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_8e5a184f","line":156,"range":{"start_line":156,"start_character":45,"end_line":156,"end_character":74},"updated":"2016-08-03 04:13:12.000000000","message":"I see many other usages of aggregate metadata, such as aggregate io_ops/num_instances, aggregate cpu/ram/disk allocation ratio, etc. It may be too early to say the deprecation of aggregate metadata.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":153,"context_line":"straightforward to manage through the API. In the `Tags API-WG guideline`_,"},{"line_number":154,"context_line":"there are many query parameters to make management easy."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Once the use of capability tags is in place, the use of aggregate metadata will"},{"line_number":157,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":158,"context_line":"for much more than capability tracking."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_d0ee65b3","line":156,"range":{"start_line":156,"start_character":45,"end_line":156,"end_character":74},"in_reply_to":"bacf61ea_8e5a184f","updated":"2016-08-03 07:22:26.000000000","message":"yes, I agree, actually I think the deprecation of aggregate metadata will be separated propose. Let us discuss that separately.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":182,"context_line":"Data model impact"},{"line_number":183,"context_line":"-----------------"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"For the database schema, the following tables would suffice::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  CREATE TABLE tags ("},{"line_number":188,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_eeac748e","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":16},"updated":"2016-08-03 04:13:12.000000000","message":"Is it API database or placement database? I think it\u0027s latter.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"46fd745ae1001accda68ca9b2e7c0c4ec9cdef7f","unresolved":false,"context_lines":[{"line_number":182,"context_line":"Data model impact"},{"line_number":183,"context_line":"-----------------"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"For the database schema, the following tables would suffice::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  CREATE TABLE tags ("},{"line_number":188,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_f6e6dee6","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":16},"in_reply_to":"bacf61ea_7034d949","updated":"2016-08-03 17:53:26.000000000","message":"Heh, I pointed that out in my review, but forgot to add it in my rewrite!","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":182,"context_line":"Data model impact"},{"line_number":183,"context_line":"-----------------"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"For the database schema, the following tables would suffice::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  CREATE TABLE tags ("},{"line_number":188,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_7034d949","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":16},"in_reply_to":"bacf61ea_eeac748e","updated":"2016-08-03 07:22:26.000000000","message":"Done","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1a1c26dbbdeee20b7890ca169e566585bef32ed5","unresolved":false,"context_lines":[{"line_number":206,"context_line":"`Tags API-WG guideline`_."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"The Tags will be attached as sub-resource of Resource Providers:"},{"line_number":209,"context_line":"`/resource_providers/{uuid}/tags`"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"All the methods will match the API-WG guidelines, so there is no need to repeat"},{"line_number":212,"context_line":"those here."}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_bbdc23e5","line":209,"updated":"2016-08-04 13:14:28.000000000","message":"Above Jay says \"Resources are quantitative\". Throughout all this we are talking about adding tags or capabilities to resource providers to add qualitative information. Unless you\u0027ve been through the multiple discussions about this it is easy to think \"qualitative stuff is being added to something that is quantitative\". That\u0027s not quite the case: The distinction is that the tags or capabilities are being added to the Resource Provider which is not quite the same thing as the Resource.\n\nMaking that distinction more clear might be helpful if any confusion remains.\n\nI\u0027m thinking about this, I guess, because even after the discussion we\u0027ve had thus far I still think infinite capacity results in a better (as in more consumable) API and better (as in more maintainable) placement code. I don\u0027t, however, feel strongly about it enough (in the face of other constraints) to resist.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bdd3d42265da4bb8b8d17db77ceb5d4515caabd1","unresolved":false,"context_lines":[{"line_number":258,"context_line":"There will be a set of CLI commands for admin users to query and manage the"},{"line_number":259,"context_line":"ResourceProviderTags"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":262,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":263,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":264,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_a1128d56","line":261,"range":{"start_line":261,"start_character":2,"end_line":261,"end_character":57},"updated":"2016-08-03 04:13:12.000000000","message":"It might be useful to add another command to associate tag(s) to a list of resource providers or a group of hosts in a host aggregate.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e7b10827570bd81ad1666248b7e3b35b30b319a0","unresolved":false,"context_lines":[{"line_number":258,"context_line":"There will be a set of CLI commands for admin users to query and manage the"},{"line_number":259,"context_line":"ResourceProviderTags"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":262,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":263,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":264,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_10cbdd1f","line":261,"range":{"start_line":261,"start_character":2,"end_line":261,"end_character":57},"in_reply_to":"bacf61ea_04e1e7d0","updated":"2016-08-03 07:22:26.000000000","message":"@Yingxin, yes, that will be very convenient for user. @Eli, I want to hide that complex for end-user.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c50a44ae6e6f4d6e28b8f902178c3ce19f2e7068","unresolved":false,"context_lines":[{"line_number":258,"context_line":"There will be a set of CLI commands for admin users to query and manage the"},{"line_number":259,"context_line":"ResourceProviderTags"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"* openstack resource-provider-tags add $RP_UUID $TAG $TAG..."},{"line_number":262,"context_line":"* openstack resource-provider-tags remove $RP_UUID $TAG"},{"line_number":263,"context_line":"* openstack resource-provider-tags list $RP_UUID"},{"line_number":264,"context_line":"* openstack resource-provider-tags exist $RP_UUID $TAG"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_04e1e7d0","line":261,"range":{"start_line":261,"start_character":2,"end_line":261,"end_character":57},"in_reply_to":"bacf61ea_a1128d56","updated":"2016-08-03 05:11:18.000000000","message":"which mean, add another CLI to manage tag itself, since we have 2 tables one to save tag, and one to save  the relationship with tag and provider.","commit_id":"a57de8bec288dc8b8932e2d2ee5fffe3a590fdc1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"31942388584ed3468de90b5ceacf7c4c072f74a6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have quantitative aspects; when a instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."}],"source_content_type":"text/x-rst","patch_set":8,"id":"9ad45d7e_39feed6b","line":13,"updated":"2016-08-08 13:44:30.000000000","message":"an instance","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7dda2534f2301eca8a010b530ada1cd8aaa8035","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have quantitative aspects; when a instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_58e48d3a","line":13,"in_reply_to":"9ad45d7e_39feed6b","updated":"2016-08-14 04:23:11.000000000","message":"thanks, will update","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"31942388584ed3468de90b5ceacf7c4c072f74a6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can manage capabilities reported from a single"},{"line_number":19,"context_line":"resource provider/pool, and then make placement decisions that match what was"},{"line_number":20,"context_line":"requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9ad45d7e_9990b9ee","line":19,"updated":"2016-08-08 13:44:30.000000000","message":"can probably get rid of \u0027/pool\u0027 as that term is not really being used any more. This sentence might make more sense as:\n\nUsing Tags, the scheduler can view capabilities that describe different resource providers and make decisions that match capabilities expressed in a placement request.","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7dda2534f2301eca8a010b530ada1cd8aaa8035","unresolved":false,"context_lines":[{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose using Tags as the way to manage capabilities for ResourceProviders."},{"line_number":18,"context_line":"Using Tags, the scheduler can manage capabilities reported from a single"},{"line_number":19,"context_line":"resource provider/pool, and then make placement decisions that match what was"},{"line_number":20,"context_line":"requested."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_b8cf81b2","line":19,"in_reply_to":"9ad45d7e_9990b9ee","updated":"2016-08-14 04:23:11.000000000","message":"yea, will remove it","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"31942388584ed3468de90b5ceacf7c4c072f74a6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* All kinds of resources, which quantitative information can be managed by"},{"line_number":38,"context_line":"  resource providers, can be managed with qualitative information."},{"line_number":39,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":40,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":41,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9ad45d7e_795ea546","line":38,"updated":"2016-08-08 13:44:30.000000000","message":"I\u0027m not sure what you\u0027re trying to say here.","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7dda2534f2301eca8a010b530ada1cd8aaa8035","unresolved":false,"context_lines":[{"line_number":35,"context_line":"Capability management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* All kinds of resources, which quantitative information can be managed by"},{"line_number":38,"context_line":"  resource providers, can be managed with qualitative information."},{"line_number":39,"context_line":"* Many capabilities are defined in a standard way, such as the Intel"},{"line_number":40,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":41,"context_line":"  consistent across all OpenStack clouds. However, there may be some"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_98d44548","line":38,"in_reply_to":"9ad45d7e_795ea546","updated":"2016-08-14 04:23:11.000000000","message":"Emm....I want to re-word the same thing as in previous patchset line 39, but without mention \u0027pool\u0027....I\u0027m failed....but let me try again..","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"8eecdc313e39f2e92d02b0fdf825778e5bbc5357","unresolved":false,"context_lines":[{"line_number":44,"context_line":"* In the future there are many potential resource providers from many different"},{"line_number":45,"context_line":"  OpenStack services, and we need to be able to be flexible enough to handle"},{"line_number":46,"context_line":"  them all."},{"line_number":47,"context_line":"  (This spec focused on Nova implementation, just notice the design don\u0027t"},{"line_number":48,"context_line":"   want to anything here that would preclude handling other OpenStack services"},{"line_number":49,"context_line":"   in the future)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_d58e7b26","line":47,"updated":"2016-08-15 02:44:54.000000000","message":"s/focused/focuses, s/don\u0027t/doesn\u0027t","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"8eecdc313e39f2e92d02b0fdf825778e5bbc5357","unresolved":false,"context_lines":[{"line_number":80,"context_line":"programmatically from the hardware and hypervisor, it will ensure that these"},{"line_number":81,"context_line":"tags will be the same across all clouds. The tags can be defined as below::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    COMPUTE_HW_CPU_AVX"},{"line_number":84,"context_line":"    COMPUTE_HW_CPU_SSE"},{"line_number":85,"context_line":"    ...."},{"line_number":86,"context_line":"    COMPUTE_HV_LIVE_MIGRATION"},{"line_number":87,"context_line":"    COMPUTE_HV_LIVE_SNAPSHOT"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"We propose to prefix each of these capabilities with a short string that will"},{"line_number":90,"context_line":"be used to categorize the various capabilities, and provide a way of"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_b5081f93","line":87,"range":{"start_line":83,"start_character":4,"end_line":87,"end_character":28},"updated":"2016-08-15 02:44:54.000000000","message":"Instead  of specifying the caps representations that might be changed, we can give out a hyperlink here to the os-capabilities library.","commit_id":"c9f054d8f99369a26bf58d63dd5da5c0918a93f2"}],"specs/ocata/approved/resource-provider-traits.rst":[{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"},{"line_number":19,"context_line":"traits reported from a single resource provider, and then make placement"},{"line_number":20,"context_line":"decisions that match what was requested."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_01735a81","line":17,"range":{"start_line":17,"start_character":17,"end_line":17,"end_character":25},"updated":"2016-09-29 08:56:39.000000000","message":"It is easy to get confused by the term \"resource\" in placement criterion.\n\nso \"REST resource\" would be better.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"},{"line_number":19,"context_line":"traits reported from a single resource provider, and then make placement"},{"line_number":20,"context_line":"decisions that match what was requested."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_4cc91978","line":17,"range":{"start_line":17,"start_character":17,"end_line":17,"end_character":25},"in_reply_to":"3a98d1f4_01735a81","updated":"2016-09-29 09:01:02.000000000","message":"good point, will update","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_216bf61f","line":57,"range":{"start_line":57,"start_character":32,"end_line":57,"end_character":44},"updated":"2016-09-29 08:56:39.000000000","message":"\"known traits\" is not clear enough to me.\n\nknown traits consist of two kinds:\n1. valid traits that can be recognized by the cloud.\n2. existing traits that are attached to resource providers.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_6cab3575","line":57,"range":{"start_line":57,"start_character":32,"end_line":57,"end_character":44},"in_reply_to":"3a98d1f4_216bf61f","updated":"2016-09-29 09:01:02.000000000","message":"Emm... is there better word at here?  or I just should define the term in the beginning first. Basically the #1 is the superset of #2","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_d9a40659","line":57,"range":{"start_line":57,"start_character":32,"end_line":57,"end_character":44},"in_reply_to":"3a98d1f4_6cab3575","updated":"2016-09-29 09:57:01.000000000","message":"Occupied traits and valid traits?","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afdd9f3e54c2db26e351b7186fcf81feb8b33524","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_2d1be41c","line":57,"range":{"start_line":57,"start_character":32,"end_line":57,"end_character":44},"in_reply_to":"3a98d1f4_d9a40659","updated":"2016-09-29 10:40:11.000000000","message":"Let us use valid trait at here. Due to there want to reference a list of traits which include the standard trait and user-defined traits. If there is only have starndard traits, maybe \u0027known\u0027 is good chocie. Due to there are some user-defined traits, I think \u0027valid\u0027 is better.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_21d936f4","line":58,"range":{"start_line":58,"start_character":68,"end_line":58,"end_character":73},"updated":"2016-09-29 08:56:39.000000000","message":"also need to distinguish \"valid\" and \"existing\" traits.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the known traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is known by"},{"line_number":59,"context_line":"  cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_ececa5c9","line":58,"range":{"start_line":58,"start_character":68,"end_line":58,"end_character":73},"in_reply_to":"3a98d1f4_21d936f4","updated":"2016-09-29 09:01:02.000000000","message":"good point also.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We propose to use new resource `Trait` with ResourceProviders in the placement"},{"line_number":67,"context_line":"API to manage qualitative. The `Trait` is just a string, it is pretty similar"},{"line_number":68,"context_line":"with `Tags`_ which defined in `Tags API-WG guideline`_ ."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_c1b6d289","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":30},"updated":"2016-09-29 08:56:39.000000000","message":"REST resource","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We propose to use new resource `Trait` with ResourceProviders in the placement"},{"line_number":67,"context_line":"API to manage qualitative. The `Trait` is just a string, it is pretty similar"},{"line_number":68,"context_line":"with `Tags`_ which defined in `Tags API-WG guideline`_ ."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_2cf68d8f","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":30},"in_reply_to":"3a98d1f4_c1b6d289","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyment."},{"line_number":73,"context_line":"The definition of standard traits is coming from `os-traits` library. It is"},{"line_number":74,"context_line":"read-only from the placement API. The definition of traits in `os-traits` will"},{"line_number":75,"context_line":"be discussed in a separated propose. All the traits example in this spec just"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_21ae962e","line":72,"range":{"start_line":72,"start_character":65,"end_line":72,"end_character":74},"updated":"2016-09-29 08:56:39.000000000","message":"deployments","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyment."},{"line_number":73,"context_line":"The definition of standard traits is coming from `os-traits` library. It is"},{"line_number":74,"context_line":"read-only from the placement API. The definition of traits in `os-traits` will"},{"line_number":75,"context_line":"be discussed in a separated propose. All the traits example in this spec just"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_4cf3d99e","line":72,"range":{"start_line":72,"start_character":65,"end_line":72,"end_character":74},"in_reply_to":"3a98d1f4_21ae962e","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyment."},{"line_number":73,"context_line":"The definition of standard traits is coming from `os-traits` library. It is"},{"line_number":74,"context_line":"read-only from the placement API. The definition of traits in `os-traits` will"},{"line_number":75,"context_line":"be discussed in a separated propose. All the traits example in this spec just"},{"line_number":76,"context_line":"for demo the usage of Traits API."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_0178bac3","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":43},"updated":"2016-09-29 08:56:39.000000000","message":"comes","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyment."},{"line_number":73,"context_line":"The definition of standard traits is coming from `os-traits` library. It is"},{"line_number":74,"context_line":"read-only from the placement API. The definition of traits in `os-traits` will"},{"line_number":75,"context_line":"be discussed in a separated propose. All the traits example in this spec just"},{"line_number":76,"context_line":"for demo the usage of Traits API."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_c1441276","line":73,"range":{"start_line":73,"start_character":70,"end_line":73,"end_character":75},"updated":"2016-09-29 08:56:39.000000000","message":"s/It is/Standard traits are","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyment."},{"line_number":73,"context_line":"The definition of standard traits is coming from `os-traits` library. It is"},{"line_number":74,"context_line":"read-only from the placement API. The definition of traits in `os-traits` will"},{"line_number":75,"context_line":"be discussed in a separated propose. All the traits example in this spec just"},{"line_number":76,"context_line":"for demo the usage of Traits API."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_ac30dd57","line":73,"range":{"start_line":73,"start_character":70,"end_line":73,"end_character":75},"in_reply_to":"3a98d1f4_c1441276","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"  CREATE TABLE traits ("},{"line_number":200,"context_line":"    id INT NOT NULL,"},{"line_number":201,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":202,"context_line":"    PRIMARY KEY (id),"},{"line_number":203,"context_line":"    UNIQUE INDEX (name)"},{"line_number":204,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_ac3c5d94","line":201,"range":{"start_line":201,"start_character":17,"end_line":201,"end_character":20},"updated":"2016-09-29 08:56:39.000000000","message":"doesn\u0027t match 255 @234","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"  CREATE TABLE traits ("},{"line_number":200,"context_line":"    id INT NOT NULL,"},{"line_number":201,"context_line":"    name VARCHAR(200) NOT NULL,"},{"line_number":202,"context_line":"    PRIMARY KEY (id),"},{"line_number":203,"context_line":"    UNIQUE INDEX (name)"},{"line_number":204,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_2c3dad2b","line":201,"range":{"start_line":201,"start_character":17,"end_line":201,"end_character":20},"in_reply_to":"3a98d1f4_ac3c5d94","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The Traits API is attached to the Placement API endpoint. The Traits API"},{"line_number":218,"context_line":"includes three new resources: `/traits`, `/resource_providers/traits` and"},{"line_number":219,"context_line":"`/resource_providers/{rp_uuid/traits`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_2c3f6db5","line":219,"range":{"start_line":219,"start_character":21,"end_line":219,"end_character":29},"updated":"2016-09-29 08:56:39.000000000","message":"{rp_uuid}","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The Traits API is attached to the Placement API endpoint. The Traits API"},{"line_number":218,"context_line":"includes three new resources: `/traits`, `/resource_providers/traits` and"},{"line_number":219,"context_line":"`/resource_providers/{rp_uuid/traits`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_8c1241b3","line":219,"range":{"start_line":219,"start_character":21,"end_line":219,"end_character":29},"in_reply_to":"3a98d1f4_2c3f6db5","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":218,"context_line":"includes three new resources: `/traits`, `/resource_providers/traits` and"},{"line_number":219,"context_line":"`/resource_providers/{rp_uuid/traits`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."},{"line_number":223,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":224,"context_line":"  traits` which associate with resource_providers."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_4c63d9dc","line":221,"range":{"start_line":221,"start_character":29,"end_line":221,"end_character":53},"updated":"2016-09-29 08:56:39.000000000","message":"might be better to change to:\n\nmanage the valid Trait list","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":218,"context_line":"includes three new resources: `/traits`, `/resource_providers/traits` and"},{"line_number":219,"context_line":"`/resource_providers/{rp_uuid/traits`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."},{"line_number":223,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":224,"context_line":"  traits` which associate with resource_providers."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_ec1105ae","line":221,"range":{"start_line":221,"start_character":29,"end_line":221,"end_character":53},"in_reply_to":"3a98d1f4_4c63d9dc","updated":"2016-09-29 09:01:02.000000000","message":"yea,","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"includes three new resources: `/traits`, `/resource_providers/traits` and"},{"line_number":219,"context_line":"`/resource_providers/{rp_uuid/traits`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."},{"line_number":223,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":224,"context_line":"  traits` which associate with resource_providers."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_1c3f3cb5","line":221,"range":{"start_line":221,"start_character":29,"end_line":221,"end_character":53},"in_reply_to":"3a98d1f4_ec1105ae","updated":"2016-09-29 09:57:01.000000000","message":"And it is better to emphasize the fact that this API can only modify user-defined traits.","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"43a546cc0705c3d14c72b0260c6773a0cb0819e2","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."},{"line_number":223,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":224,"context_line":"  traits` which associate with resource_providers."},{"line_number":225,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to edit the association"},{"line_number":226,"context_line":"  between tratis and resource_providers."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_ac87fd5f","line":224,"range":{"start_line":223,"start_character":66,"end_line":224,"end_character":8},"updated":"2016-09-29 08:56:39.000000000","message":"list the existing traits","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"02f4072c29f3c6bd41f4e4cc4df121e045b677c1","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* `/traits`: This is used to operate the Trait object in the placement"},{"line_number":222,"context_line":"  services."},{"line_number":223,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":224,"context_line":"  traits` which associate with resource_providers."},{"line_number":225,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to edit the association"},{"line_number":226,"context_line":"  between tratis and resource_providers."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_6c1ed5bb","line":224,"range":{"start_line":223,"start_character":66,"end_line":224,"end_character":8},"in_reply_to":"3a98d1f4_ac87fd5f","updated":"2016-09-29 09:01:02.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"For example, when admin-user add some traits in the flavor. Nova will validate"},{"line_number":265,"context_line":"those traits with placement service by the API request as below::"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:unknown_feature"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"The response includes a list of traits which is known by cloud. In the above,"},{"line_number":270,"context_line":"`hw:cpu:x86:unknown_feature` isn\u0027t a trait known by cloud, so it won\u0027t include"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_9c042c16","line":267,"updated":"2016-09-29 09:57:01.000000000","message":"Also good to mention the use case of GET /traits?user-defined\u003dtrue\n\nhttps://review.openstack.org/#/c/377382/","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afdd9f3e54c2db26e351b7186fcf81feb8b33524","unresolved":false,"context_lines":[{"line_number":264,"context_line":"For example, when admin-user add some traits in the flavor. Nova will validate"},{"line_number":265,"context_line":"those traits with placement service by the API request as below::"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:unknown_feature"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"The response includes a list of traits which is known by cloud. In the above,"},{"line_number":270,"context_line":"`hw:cpu:x86:unknown_feature` isn\u0027t a trait known by cloud, so it won\u0027t include"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_eddd7c71","line":267,"in_reply_to":"3a98d1f4_9c042c16","updated":"2016-09-29 10:40:11.000000000","message":"Done","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":291,"context_line":"      \u0027additionalProperties\u0027: False"},{"line_number":292,"context_line":"    }"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    Successful status code: 201"},{"line_number":295,"context_line":"    Default permission: admin only"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"This API is used by admin user to add user-defined traits. The user can\u0027t input"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_bc448874","line":294,"updated":"2016-09-29 09:57:01.000000000","message":"Any attempts to modify \"standard traits\" or \"occupied traits\" will result in HTTP 409.\n\nhttps://review.openstack.org/#/c/377690/","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afdd9f3e54c2db26e351b7186fcf81feb8b33524","unresolved":false,"context_lines":[{"line_number":291,"context_line":"      \u0027additionalProperties\u0027: False"},{"line_number":292,"context_line":"    }"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    Successful status code: 201"},{"line_number":295,"context_line":"    Default permission: admin only"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"This API is used by admin user to add user-defined traits. The user can\u0027t input"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_addd3444","line":294,"in_reply_to":"3a98d1f4_bc448874","updated":"2016-09-29 10:40:11.000000000","message":"I described at line 299","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    DELETE /traits"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    Successful status code: 204"},{"line_number":306,"context_line":"    Default permission: admin only"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"This API is used by admin user to delete all the user-defined traits. The"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_3c823895","line":305,"updated":"2016-09-29 09:57:01.000000000","message":"Any attempts to delete \"standard traits\" or \"occupied traits\" will result in HTTP 409.\n\nhttps://review.openstack.org/#/c/377690/","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afdd9f3e54c2db26e351b7186fcf81feb8b33524","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    DELETE /traits"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    Successful status code: 204"},{"line_number":306,"context_line":"    Default permission: admin only"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"This API is used by admin user to delete all the user-defined traits. The"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_0de54808","line":305,"in_reply_to":"3a98d1f4_3c823895","updated":"2016-09-29 10:40:11.000000000","message":"There can\u0027t be 409. Due to it is request on \"/traits\", not the \"/traits/{user-defined-trait}","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"32e199d9d4a11f0a98954a512ea37b6a43a7d17f","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    The JSON-Schema of request is same with \u0027PUT \u0027traits\u0027"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    Successful status code: 201"},{"line_number":343,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"This API is used by admin user to add traits to specific for resource provider."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_bcd1e8cf","line":342,"updated":"2016-09-29 09:57:01.000000000","message":"If the specified traits are not “valid traits\", it will return HTTP 400.\nhttps://review.openstack.org/#/c/378601/","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afdd9f3e54c2db26e351b7186fcf81feb8b33524","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    The JSON-Schema of request is same with \u0027PUT \u0027traits\u0027"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    Successful status code: 201"},{"line_number":343,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"This API is used by admin user to add traits to specific for resource provider."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a98d1f4_2da0449f","line":342,"in_reply_to":"3a98d1f4_bcd1e8cf","updated":"2016-09-29 10:40:11.000000000","message":"yea, I descrbed at line 349","commit_id":"9287bfee131de471e46786ef3c9294c0d34adaea"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have quantitative aspects; when an instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new REST resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_2fde636d","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":19},"updated":"2016-09-29 16:45:23.000000000","message":"Yes, they are. It is the resource *providers* of a class of resource that are different.\n\nIn other words, the resources represented by the VCPU resource class are all the exact same regardless of whether a host (resource provider) exposes some trait like AVX2 x86 CPU instruction set extensions.\n\nLet\u0027s be as specific as possible here. It is not the resource or resource class that is described by a trait. It is the *provider* of those resources.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Resources have quantitative aspects; when an instance uses that resource,"},{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new REST resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_8d104303","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":19},"in_reply_to":"3a98d1f4_2fde636d","updated":"2016-09-30 06:18:10.000000000","message":"yea, will try to clear that. totally same page with you, but it\u0027s a little hard to describe cearly. let me try. thanks","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new REST resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"},{"line_number":19,"context_line":"traits reported from a single resource provider, and then make placement"},{"line_number":20,"context_line":"decisions that match what was requested."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_4fc00f7d","line":17,"updated":"2016-09-29 16:45:23.000000000","message":"REST endpoints should be lowercase.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the amount it uses isn\u0027t available to others. But not all resources of the same"},{"line_number":15,"context_line":"class are identical; they have qualitative aspects that aren\u0027t consumed by an"},{"line_number":16,"context_line":"instance, and we need a way to represent those in the ResourceProvider world."},{"line_number":17,"context_line":"We propose a new REST resource `Traits` in placement API as the way to manage"},{"line_number":18,"context_line":"traits for ResourceProviders. Using Traits API, the scheduler can manage"},{"line_number":19,"context_line":"traits reported from a single resource provider, and then make placement"},{"line_number":20,"context_line":"decisions that match what was requested."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_35177bee","line":17,"in_reply_to":"3a98d1f4_4fc00f7d","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":26,"context_line":"cloud resources that they represent. However, it is also necessary to manage"},{"line_number":27,"context_line":"*qualitative* information about these resources, too, so that users can specify"},{"line_number":28,"context_line":"the types of resources they need. Cloud resources come in many types, and"},{"line_number":29,"context_line":"within those types there can be many differences. The classic example is disk"},{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also expect that the disk be SSD instead of spinning disk. Having a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_cf8b3f1d","line":28,"updated":"2016-09-29 16:45:23.000000000","message":"again, it\u0027s not the type of resource. The type of resource is the resource class. What you are describing here are attributes/traits of the resource provider, not the resource the provider provides.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":26,"context_line":"cloud resources that they represent. However, it is also necessary to manage"},{"line_number":27,"context_line":"*qualitative* information about these resources, too, so that users can specify"},{"line_number":28,"context_line":"the types of resources they need. Cloud resources come in many types, and"},{"line_number":29,"context_line":"within those types there can be many differences. The classic example is disk"},{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also expect that the disk be SSD instead of spinning disk. Having a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b5e1cb00","line":28,"in_reply_to":"3a98d1f4_cf8b3f1d","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"the types of resources they need. Cloud resources come in many types, and"},{"line_number":29,"context_line":"within those types there can be many differences. The classic example is disk"},{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also expect that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a storage provider (it can be a shared storage pool or compute"},{"line_number":33,"context_line":"node\u0027s attached storage) is SSD or spinning is what we are concerned with."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_cf925f4b","line":31,"updated":"2016-09-29 16:45:23.000000000","message":"Again, no, the resource class is the same: it\u0027s DISK_GB. It\u0027s the provider of that disk resource that has the trait of \"spinning\" or \"solid state\".","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"the types of resources they need. Cloud resources come in many types, and"},{"line_number":29,"context_line":"within those types there can be many differences. The classic example is disk"},{"line_number":30,"context_line":"space: a user may request 80GB of disk space for an instance (quantitative),"},{"line_number":31,"context_line":"but may also expect that the disk be SSD instead of spinning disk. Having a"},{"line_number":32,"context_line":"way to mark that a storage provider (it can be a shared storage pool or compute"},{"line_number":33,"context_line":"node\u0027s attached storage) is SSD or spinning is what we are concerned with."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_f5e35303","line":31,"in_reply_to":"3a98d1f4_cf925f4b","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a9a81ecbacfa9acbaf169b5e1be57210a7a2ce54","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Trait management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Any type of resources\u0027 qualitative information can be managed. Whatever the"},{"line_number":38,"context_line":"  resource is shared or nested."},{"line_number":39,"context_line":"* Many traits are defined in a standard way, such as the Intel"},{"line_number":40,"context_line":"  instruction set extensions. These are reported programmatically, and will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_7b7d981b","line":37,"updated":"2016-09-29 14:02:28.000000000","message":"s/Whatever/Whether/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Trait management has to take into account the following:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Any type of resources\u0027 qualitative information can be managed. Whatever the"},{"line_number":38,"context_line":"  resource is shared or nested."},{"line_number":39,"context_line":"* Many traits are defined in a standard way, such as the Intel"},{"line_number":40,"context_line":"  instruction set extensions. These are reported programmatically, and will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_35c5bb5a","line":37,"in_reply_to":"3a98d1f4_7b7d981b","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a9a81ecbacfa9acbaf169b5e1be57210a7a2ce54","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  them all."},{"line_number":47,"context_line":"  (This spec focused on Nova implementation, just notice the design don\u0027t"},{"line_number":48,"context_line":"   want to anything here that would preclude handling other OpenStack services"},{"line_number":49,"context_line":"   in the future)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Use Cases"},{"line_number":52,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_fb04487f","line":49,"updated":"2016-09-29 14:02:28.000000000","message":"something like:\n\nThis spec is focused on the implementation of qualitative information for resource providers used by Nova, however this design should not preclude handling of qualitative information for resource providers related of other OpenStack services.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  them all."},{"line_number":47,"context_line":"  (This spec focused on Nova implementation, just notice the design don\u0027t"},{"line_number":48,"context_line":"   want to anything here that would preclude handling other OpenStack services"},{"line_number":49,"context_line":"   in the future)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Use Cases"},{"line_number":52,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_f5919353","line":49,"in_reply_to":"3a98d1f4_fb04487f","updated":"2016-09-30 06:18:10.000000000","message":"thanks","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Use Cases"},{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_482497ae","line":54,"range":{"start_line":54,"start_character":2,"end_line":54,"end_character":64},"updated":"2016-09-29 13:29:18.000000000","message":"It seems that the scope of this spec doesn\u0027t include this use case.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Use Cases"},{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d57d771d","line":54,"range":{"start_line":54,"start_character":2,"end_line":54,"end_character":64},"in_reply_to":"3a98d1f4_0f10c7a7","updated":"2016-09-30 06:18:10.000000000","message":"yea, I will remove that one.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Use Cases"},{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0f10c7a7","line":54,"range":{"start_line":54,"start_character":2,"end_line":54,"end_character":64},"in_reply_to":"3a98d1f4_482497ae","updated":"2016-09-29 16:45:23.000000000","message":"I asked that, as much as possible, we keep this spec focused exclusively on the CRUD operations of traits and not on scheduler or placement decision use case implementation. That is why the spec doesn\u0027t include the above use case.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0851af0e","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":11},"updated":"2016-09-29 13:29:18.000000000","message":"Is this duplicated with the use case @57?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_6f786bf3","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":11},"in_reply_to":"3a98d1f4_0851af0e","updated":"2016-09-29 16:45:23.000000000","message":"Yeah, I think this is duplicative.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"---------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* An end user wants to request a resource with a specific trait."},{"line_number":55,"context_line":"* An end user wants to know what traits are supported by a specific cloud"},{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_959a0f62","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":11},"in_reply_to":"3a98d1f4_6f786bf3","updated":"2016-09-30 06:18:10.000000000","message":"yea, it is duplicated. a little mess at here. let me cleanup them","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_dd7947fe","line":59,"updated":"2016-09-29 13:29:18.000000000","message":"Another use case for openstack services:\n* Some OpenStack services need to report the association between traits and resource providers.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  provider."},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_f59fd34d","line":59,"in_reply_to":"3a98d1f4_dd7947fe","updated":"2016-09-30 06:18:10.000000000","message":"Yea","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"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":10,"id":"3a98d1f4_5d037742","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":28},"updated":"2016-09-29 13:29:18.000000000","message":"I think it is more clear to say:\n* An administrative user wants to manage user-defined traits in the cloud (example: spinning vs SSD).","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"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":10,"id":"3a98d1f4_ef6d5b05","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":28},"in_reply_to":"3a98d1f4_5d037742","updated":"2016-09-29 16:45:23.000000000","message":"No. It\u0027s not that the cloud provider wants to offer different resource classes. The resource class is DISK_GB. The use case here is that the cloud provider wants a way to indicate that some of its storage providers are better-performing than others (and thus likely more expensive to the consumer).","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* Other Openstack service want to know whether user input traits is valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"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":10,"id":"3a98d1f4_55b7a7d7","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":28},"in_reply_to":"3a98d1f4_ef6d5b05","updated":"2016-09-30 06:18:10.000000000","message":"yes, using wrong word at here.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_68fa33bf","line":62,"updated":"2016-09-29 13:29:18.000000000","message":"Another possible use case here:\n* An administrative user wants to associate traits with resource providers.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* A cloud provider admin wants to offer different classes of resources"},{"line_number":61,"context_line":"  (example: spinning vs SSD)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_75bae3c1","line":62,"in_reply_to":"3a98d1f4_68fa33bf","updated":"2016-09-30 06:18:10.000000000","message":"same with line 60?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a9a81ecbacfa9acbaf169b5e1be57210a7a2ce54","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We propose to use new REST resource `Trait` with ResourceProviders in the"},{"line_number":67,"context_line":"placement API to manage qualitative. The `Trait` is just a string, it is pretty"},{"line_number":68,"context_line":"similar with `Tags`_ which defined in `Tags API-WG guideline`_ ."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_9b3b4438","line":68,"updated":"2016-09-29 14:02:28.000000000","message":"s/which/as/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We propose to use new REST resource `Trait` with ResourceProviders in the"},{"line_number":67,"context_line":"placement API to manage qualitative. The `Trait` is just a string, it is pretty"},{"line_number":68,"context_line":"similar with `Tags`_ which defined in `Tags API-WG guideline`_ ."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b5b46bd1","line":68,"in_reply_to":"3a98d1f4_9b3b4438","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_e8a1e3aa","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":38},"updated":"2016-09-29 13:29:18.000000000","message":"comes","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5cbb751","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":38},"in_reply_to":"3a98d1f4_e8a1e3aa","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_a8943be2","line":74,"range":{"start_line":74,"start_character":9,"end_line":74,"end_character":18},"updated":"2016-09-29 13:29:18.000000000","message":"\"read-only\" here means we cannot remove any standard traits from the cloud, but we can freely modify their associations with resource providers.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_15dd1f0e","line":74,"range":{"start_line":74,"start_character":9,"end_line":74,"end_character":18},"in_reply_to":"3a98d1f4_a8943be2","updated":"2016-09-30 06:18:10.000000000","message":"I mean \"/traits\" is read-only.  \"/resource_providers/{uuid}/traits\" isn\u0027t read-only. yea, I need more clear words at here.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a9a81ecbacfa9acbaf169b5e1be57210a7a2ce54","unresolved":false,"context_lines":[{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_1bcbb41f","line":75,"updated":"2016-09-29 14:02:28.000000000","message":"s/separated propose/separate proposal/\n\nAll the traits used in examples in this spec are for demonstration purposes only.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"The standard traits can be used across different Openstack cloud deloyments."},{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_95b12fe4","line":75,"in_reply_to":"3a98d1f4_1bcbb41f","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"},{"line_number":79,"context_line":"for the resource which isn\u0027t managed by any Openstack services. User can define"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_2883cb05","line":76,"range":{"start_line":76,"start_character":19,"end_line":76,"end_character":28},"updated":"2016-09-29 13:29:18.000000000","message":"the demo","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The definition of standard traits come from `os-traits` library. The standard"},{"line_number":74,"context_line":"trait is read-only from the placement API. The definition of traits in"},{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"},{"line_number":79,"context_line":"for the resource which isn\u0027t managed by any Openstack services. User can define"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_5505e777","line":76,"range":{"start_line":76,"start_character":19,"end_line":76,"end_character":28},"in_reply_to":"3a98d1f4_2883cb05","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"},{"line_number":79,"context_line":"for the resource which isn\u0027t managed by any Openstack services. User can define"},{"line_number":80,"context_line":"the user-defined traits from the placement API."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0867ef25","line":78,"range":{"start_line":78,"start_character":35,"end_line":78,"end_character":39},"updated":"2016-09-29 13:29:18.000000000","message":"administrative users","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"`os-traits` will be discussed in a separated propose. All the traits example in"},{"line_number":76,"context_line":"this spec just for demo the usage of Traits API."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The user-defined traits is used by user to manage the qualitative information"},{"line_number":79,"context_line":"for the resource which isn\u0027t managed by any Openstack services. User can define"},{"line_number":80,"context_line":"the user-defined traits from the placement API."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5f9f781","line":78,"range":{"start_line":78,"start_character":35,"end_line":78,"end_character":39},"in_reply_to":"3a98d1f4_0867ef25","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":88,"context_line":"-----------------------------------"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"In this scenario, Nova creates a single ResourceProvider for each compute node."},{"line_number":91,"context_line":"Each compute node then reports its qualitative information, which are tag with"},{"line_number":92,"context_line":"a set of Traits. This will be updated regularly, although we don\u0027t expect a"},{"line_number":93,"context_line":"resource provider\u0027s qualitative information to change very often."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_a830bb02","line":91,"range":{"start_line":91,"start_character":70,"end_line":91,"end_character":73},"updated":"2016-09-29 13:29:18.000000000","message":"tagged","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":88,"context_line":"-----------------------------------"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"In this scenario, Nova creates a single ResourceProvider for each compute node."},{"line_number":91,"context_line":"Each compute node then reports its qualitative information, which are tag with"},{"line_number":92,"context_line":"a set of Traits. This will be updated regularly, although we don\u0027t expect a"},{"line_number":93,"context_line":"resource provider\u0027s qualitative information to change very often."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_15f43f84","line":91,"range":{"start_line":91,"start_character":70,"end_line":91,"end_character":73},"in_reply_to":"3a98d1f4_a830bb02","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"a set of Traits. This will be updated regularly, although we don\u0027t expect a"},{"line_number":93,"context_line":"resource provider\u0027s qualitative information to change very often."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Scenario 2: Shared Storage Resource Pool"},{"line_number":96,"context_line":"----------------------------------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b577209e","line":95,"updated":"2016-09-29 16:45:23.000000000","message":"s/Pool/Provider/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"a set of Traits. This will be updated regularly, although we don\u0027t expect a"},{"line_number":93,"context_line":"resource provider\u0027s qualitative information to change very often."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Scenario 2: Shared Storage Resource Pool"},{"line_number":96,"context_line":"----------------------------------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_35ef7bb1","line":95,"in_reply_to":"3a98d1f4_b577209e","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"----------------------------------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":99,"context_line":"pools as having SSD trait so that they are only used by flavors that specify"},{"line_number":100,"context_line":"SSD trait."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"The first three steps are the same as in:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5a58c04","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":5},"updated":"2016-09-29 16:45:23.000000000","message":"s/pools/providers/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"----------------------------------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":99,"context_line":"pools as having SSD trait so that they are only used by flavors that specify"},{"line_number":100,"context_line":"SSD trait."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"The first three steps are the same as in:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_95368f50","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":5},"in_reply_to":"3a98d1f4_d5a58c04","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":127,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"4) The cloud deployer updates the resource provider\u0027s capability of shared"},{"line_number":130,"context_line":"   disk, add the `STORAGE_SSD` flag to the resource pool::"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    openstack resource-provider-traits add $RP_UUD STORAGE_SSD"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5caeca0","line":129,"updated":"2016-09-29 16:45:23.000000000","message":"s/updates the resource provider\u0027s capability of shared disk/adds the `storage:ssd` trait to the compute node resource provider/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":127,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"4) The cloud deployer updates the resource provider\u0027s capability of shared"},{"line_number":130,"context_line":"   disk, add the `STORAGE_SSD` flag to the resource pool::"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    openstack resource-provider-traits add $RP_UUD STORAGE_SSD"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_35469bbf","line":129,"in_reply_to":"3a98d1f4_d5caeca0","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a9a81ecbacfa9acbaf169b5e1be57210a7a2ce54","unresolved":false,"context_lines":[{"line_number":129,"context_line":"4) The cloud deployer updates the resource provider\u0027s capability of shared"},{"line_number":130,"context_line":"   disk, add the `STORAGE_SSD` flag to the resource pool::"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    openstack resource-provider-traits add $RP_UUD STORAGE_SSD"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Traits API vs. Aggregate metadata API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_7b2678cf","line":132,"updated":"2016-09-29 14:02:28.000000000","message":"I suspect this is more likely to end up something like:\n\n    openstack resource-provider trait add [...]\n\nthat is, trait manipulations will be a subcommand under the resource-provider parent?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"4) The cloud deployer updates the resource provider\u0027s capability of shared"},{"line_number":130,"context_line":"   disk, add the `STORAGE_SSD` flag to the resource pool::"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    openstack resource-provider-traits add $RP_UUD STORAGE_SSD"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Traits API vs. Aggregate metadata API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_aeb7bc84","line":132,"in_reply_to":"3a98d1f4_7b2678cf","updated":"2016-09-30 06:18:10.000000000","message":"yea, check the style of OSC, probably that is right way.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":147,"context_line":"may have. Finally, this approach only works for compute nodes, not all"},{"line_number":148,"context_line":"potential resource providers."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The Traits will replace the use of aggregates to track and manage qualitative"},{"line_number":151,"context_line":"information. The traits for a given host will be a flat list, and is"},{"line_number":152,"context_line":"straightforward to manage through the API."},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_95ba24e0","line":150,"updated":"2016-09-29 16:45:23.000000000","message":"s/The Traits/The proposed traits REST API endpoint/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":147,"context_line":"may have. Finally, this approach only works for compute nodes, not all"},{"line_number":148,"context_line":"potential resource providers."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The Traits will replace the use of aggregates to track and manage qualitative"},{"line_number":151,"context_line":"information. The traits for a given host will be a flat list, and is"},{"line_number":152,"context_line":"straightforward to manage through the API."},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b510eba9","line":150,"in_reply_to":"3a98d1f4_95ba24e0","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"potential resource providers."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The Traits will replace the use of aggregates to track and manage qualitative"},{"line_number":151,"context_line":"information. The traits for a given host will be a flat list, and is"},{"line_number":152,"context_line":"straightforward to manage through the API."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_35ca306f","line":151,"updated":"2016-09-29 16:45:23.000000000","message":"s/host/resource provider/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":148,"context_line":"potential resource providers."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The Traits will replace the use of aggregates to track and manage qualitative"},{"line_number":151,"context_line":"information. The traits for a given host will be a flat list, and is"},{"line_number":152,"context_line":"straightforward to manage through the API."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5273710","line":151,"in_reply_to":"3a98d1f4_35ca306f","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"},{"line_number":155,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":156,"context_line":"for much more than capability tracking. The deprecation of aggregate metadata"},{"line_number":157,"context_line":"will be discussed in separated spec."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d582ecff","line":156,"updated":"2016-09-29 16:45:23.000000000","message":"s/capability tracking/metadata purposes/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"},{"line_number":155,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":156,"context_line":"for much more than capability tracking. The deprecation of aggregate metadata"},{"line_number":157,"context_line":"will be discussed in separated spec."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_f5227300","line":156,"in_reply_to":"3a98d1f4_d582ecff","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"},{"line_number":155,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":156,"context_line":"for much more than capability tracking. The deprecation of aggregate metadata"},{"line_number":157,"context_line":"will be discussed in separated spec."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Alternatives"},{"line_number":160,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_3578702b","line":157,"updated":"2016-09-29 16:45:23.000000000","message":"s/separated/a separate/","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":154,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"},{"line_number":155,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":156,"context_line":"for much more than capability tracking. The deprecation of aggregate metadata"},{"line_number":157,"context_line":"will be discussed in separated spec."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Alternatives"},{"line_number":160,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_351dbbbd","line":157,"in_reply_to":"3a98d1f4_3578702b","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    PRIMARY KEY (resource_provider_id, tag_id),"},{"line_number":213,"context_line":"    INDEX (tag_id)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"REST API impact"},{"line_number":218,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b515609c","line":215,"updated":"2016-09-29 16:45:23.000000000","message":"++ good DB schema.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    PRIMARY KEY (resource_provider_id, tag_id),"},{"line_number":213,"context_line":"    INDEX (tag_id)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"REST API impact"},{"line_number":218,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b5870bd6","line":215,"in_reply_to":"3a98d1f4_b515609c","updated":"2016-09-30 06:18:10.000000000","message":"That come from your suggestion.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":221,"context_line":"includes three new REST resources: `/traits`, `/resource_providers/traits` and"},{"line_number":222,"context_line":"`/resource_providers/{rp_uuid}/traits`."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* `/traits`: This is used to manage the valid trait list in the cloud."},{"line_number":225,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":226,"context_line":"  traits which associate with resource_providers."},{"line_number":227,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to query/edit the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_432ab82d","line":224,"range":{"start_line":224,"start_character":29,"end_line":224,"end_character":56},"updated":"2016-09-29 13:29:18.000000000","message":"Maybe need to change to a clearer statement like:\n\nquery valid trait list and edit user-defined traits","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"includes three new REST resources: `/traits`, `/resource_providers/traits` and"},{"line_number":222,"context_line":"`/resource_providers/{rp_uuid}/traits`."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* `/traits`: This is used to manage the valid trait list in the cloud."},{"line_number":225,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":226,"context_line":"  traits which associate with resource_providers."},{"line_number":227,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to query/edit the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_aecb3ca4","line":224,"range":{"start_line":224,"start_character":29,"end_line":224,"end_character":56},"in_reply_to":"3a98d1f4_432ab82d","updated":"2016-09-30 06:18:10.000000000","message":"Emm...the valid traits \u003d  the standard traits + user-defined traits.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":222,"context_line":"`/resource_providers/{rp_uuid}/traits`."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* `/traits`: This is used to manage the valid trait list in the cloud."},{"line_number":225,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":226,"context_line":"  traits which associate with resource_providers."},{"line_number":227,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to query/edit the"},{"line_number":228,"context_line":"  association between traits and resource_providers."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_83912055","line":225,"range":{"start_line":225,"start_character":58,"end_line":225,"end_character":62},"updated":"2016-09-29 13:29:18.000000000","message":"which user? \nguess it\u0027s all users?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b673cddb7c1eb1f42a4b4e11d8161fb9194227e4","unresolved":false,"context_lines":[{"line_number":222,"context_line":"`/resource_providers/{rp_uuid}/traits`."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* `/traits`: This is used to manage the valid trait list in the cloud."},{"line_number":225,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":226,"context_line":"  traits which associate with resource_providers."},{"line_number":227,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to query/edit the"},{"line_number":228,"context_line":"  association between traits and resource_providers."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b57c80ec","line":225,"range":{"start_line":225,"start_character":58,"end_line":225,"end_character":62},"in_reply_to":"3a98d1f4_83912055","updated":"2016-09-29 16:45:23.000000000","message":"Yes, I have the same questions.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":222,"context_line":"`/resource_providers/{rp_uuid}/traits`."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* `/traits`: This is used to manage the valid trait list in the cloud."},{"line_number":225,"context_line":"* `/resource_providers/traits`: This is read-only API for user to query the"},{"line_number":226,"context_line":"  traits which associate with resource_providers."},{"line_number":227,"context_line":"* `/resource_providers/{rp_uuid}/traits`: This is used to query/edit the"},{"line_number":228,"context_line":"  association between traits and resource_providers."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_b55e2b74","line":225,"range":{"start_line":225,"start_character":58,"end_line":225,"end_character":62},"in_reply_to":"3a98d1f4_b57c80ec","updated":"2016-09-30 06:18:10.000000000","message":"For any user at here, the end-user have requirement to query the traits supported in the code. the admin-user also have requirement to query what traits in their cloud.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:invalid_feature"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"The response includes a list of traits which is valid in the cloud. In the"},{"line_number":272,"context_line":"above, `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it"},{"line_number":273,"context_line":"won\u0027t include in the response. With this response, the Nova can response to"},{"line_number":274,"context_line":"user about there is an invalid trait in the request."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_03e190d0","line":271,"range":{"start_line":271,"start_character":45,"end_line":271,"end_character":47},"updated":"2016-09-29 13:29:18.000000000","message":"are","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:invalid_feature"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"The response includes a list of traits which is valid in the cloud. In the"},{"line_number":272,"context_line":"above, `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it"},{"line_number":273,"context_line":"won\u0027t include in the response. With this response, the Nova can response to"},{"line_number":274,"context_line":"user about there is an invalid trait in the request."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_d5557750","line":271,"range":{"start_line":271,"start_character":45,"end_line":271,"end_character":47},"in_reply_to":"3a98d1f4_03e190d0","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"The response includes a list of traits which is valid in the cloud. In the"},{"line_number":272,"context_line":"above, `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it"},{"line_number":273,"context_line":"won\u0027t include in the response. With this response, the Nova can response to"},{"line_number":274,"context_line":"user about there is an invalid trait in the request."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":".. code:: javascript"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_c3d7a8eb","line":273,"range":{"start_line":273,"start_character":6,"end_line":273,"end_character":13},"updated":"2016-09-29 13:29:18.000000000","message":"be included","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"The response includes a list of traits which is valid in the cloud. In the"},{"line_number":272,"context_line":"above, `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it"},{"line_number":273,"context_line":"won\u0027t include in the response. With this response, the Nova can response to"},{"line_number":274,"context_line":"user about there is an invalid trait in the request."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":".. code:: javascript"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_f550b360","line":273,"range":{"start_line":273,"start_character":6,"end_line":273,"end_character":13},"in_reply_to":"3a98d1f4_c3d7a8eb","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"72a48737133f34e392516080573aeb2f38d60efc","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":".. code:: javascript"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    PUT /traits"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    The JSON-Schema of request"},{"line_number":281,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_9e85f2ae","line":278,"updated":"2016-09-29 14:05:33.000000000","message":"Unless a PUT to this URI is replacing _all_ the traits, then this should probably be a POST","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":".. code:: javascript"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    PUT /traits"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    The JSON-Schema of request"},{"line_number":281,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_354bfbb1","line":278,"in_reply_to":"3a98d1f4_9e85f2ae","updated":"2016-09-30 06:18:10.000000000","message":"This is replacing all the traits","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    Successful status code: 201"},{"line_number":297,"context_line":"    Default permission: admin only"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"This API is used by admin user to add user-defined traits. The user can\u0027t input"},{"line_number":300,"context_line":"any trait with same name with standard traits which defined in `os-traits`"},{"line_number":301,"context_line":"library, otherwise the API will return `HTTPConflict 409`."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_c32b2893","line":299,"range":{"start_line":299,"start_character":34,"end_line":299,"end_character":37},"updated":"2016-09-29 13:29:18.000000000","message":"In PoC implementation, this API is used to rewrite, or update user-defined trait list, not merely add.\n\nAlso, if user attempts to remove the user-defined traits that already have associations with resource providers, HTTP 409 will be returned.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    Successful status code: 201"},{"line_number":297,"context_line":"    Default permission: admin only"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"This API is used by admin user to add user-defined traits. The user can\u0027t input"},{"line_number":300,"context_line":"any trait with same name with standard traits which defined in `os-traits`"},{"line_number":301,"context_line":"library, otherwise the API will return `HTTPConflict 409`."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0e6fd092","line":299,"range":{"start_line":299,"start_character":34,"end_line":299,"end_character":37},"in_reply_to":"3a98d1f4_c32b2893","updated":"2016-09-30 06:18:10.000000000","message":"yea, I can clear that.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":".. code:: javascript"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    DELETE /traits"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    Successful status code: 204"},{"line_number":313,"context_line":"    Default permission: admin only"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_4ece5fb5","line":310,"range":{"start_line":310,"start_character":4,"end_line":310,"end_character":18},"updated":"2016-09-29 13:29:18.000000000","message":"Is it really useful to delete all user-defined traits? It has a great chance to fail because many of the traits may already have associations.\n\nBy the way, users can already update trait list through \"PUT /traits\"","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":".. code:: javascript"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    DELETE /traits"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    Successful status code: 204"},{"line_number":313,"context_line":"    Default permission: admin only"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_4e4b98b0","line":310,"range":{"start_line":310,"start_character":4,"end_line":310,"end_character":18},"in_reply_to":"3a98d1f4_4ece5fb5","updated":"2016-09-30 06:18:10.000000000","message":"emm....maybe not used very often, but it is convenient for user. I\u0027m not sure we really need thinning our API. I also thought we will have a set of API for operate single trait. But you also can say, PUT /traits can do everything. And at here, I probably just follow the api-wg tags guideline at here.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    The JSON-Schema of response is same with \u0027GET /traits\u0027"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    Successful status code: 200"},{"line_number":338,"context_line":"    Default permission: admin only"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"This is used by admin user to query the traits provided by specific resource"},{"line_number":341,"context_line":"provider."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0e8c5734","line":338,"range":{"start_line":338,"start_character":24,"end_line":338,"end_character":34},"updated":"2016-09-29 13:29:18.000000000","message":"or openstack service user?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    The JSON-Schema of response is same with \u0027GET /traits\u0027"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    Successful status code: 200"},{"line_number":338,"context_line":"    Default permission: admin only"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"This is used by admin user to query the traits provided by specific resource"},{"line_number":341,"context_line":"provider."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_eedc64e6","line":338,"range":{"start_line":338,"start_character":24,"end_line":338,"end_character":34},"in_reply_to":"3a98d1f4_0e8c5734","updated":"2016-09-30 06:18:10.000000000","message":"Emm...yea, maybe, is there exactly case?","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    Successful status code: 201"},{"line_number":350,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"This API is used by admin user to add traits to specific for resource provider."},{"line_number":353,"context_line":"The Openstack services also report the traits for managed resource through"},{"line_number":354,"context_line":"this API. For example, The ResourceTracker in nova-compute will report the"},{"line_number":355,"context_line":"compute node traits through this API. Only the traits is valid in the cloud can"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_cec0af2d","line":352,"range":{"start_line":352,"start_character":34,"end_line":352,"end_character":37},"updated":"2016-09-29 13:29:18.000000000","message":"same with @299","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    Successful status code: 201"},{"line_number":350,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"This API is used by admin user to add traits to specific for resource provider."},{"line_number":353,"context_line":"The Openstack services also report the traits for managed resource through"},{"line_number":354,"context_line":"this API. For example, The ResourceTracker in nova-compute will report the"},{"line_number":355,"context_line":"compute node traits through this API. Only the traits is valid in the cloud can"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_2ee72cb1","line":352,"range":{"start_line":352,"start_character":34,"end_line":352,"end_character":37},"in_reply_to":"3a98d1f4_cec0af2d","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"This API is used by admin user or Openstack service user to delete all the"},{"line_number":367,"context_line":"traits which associate with specific resource provider."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"Security impact"},{"line_number":370,"context_line":"---------------"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_ae07e31a","line":368,"updated":"2016-09-29 13:29:18.000000000","message":"APIs not mentioned:\n\n/traits/{user-defined-trait}","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"This API is used by admin user or Openstack service user to delete all the"},{"line_number":367,"context_line":"traits which associate with specific resource provider."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"Security impact"},{"line_number":370,"context_line":"---------------"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_0effd034","line":368,"in_reply_to":"3a98d1f4_ae07e31a","updated":"2016-09-30 06:18:10.000000000","message":"yea, I can do that now.","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"006e71dc598e6e46e87ff44344fce9f463423d99","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  deprecated."},{"line_number":407,"context_line":"* The `os-traits` library in the placement service needs to be the latest"},{"line_number":408,"context_line":"  version in the cloud, otherwise the new traits reported from other openstack"},{"line_number":409,"context_line":"  services won\u0027t be recognition by Placement service. So when upgrade the cloud"},{"line_number":410,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":411,"context_line":"  need to be upgraded first."},{"line_number":412,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_8e85c7ae","line":409,"range":{"start_line":409,"start_character":20,"end_line":409,"end_character":31},"updated":"2016-09-29 13:29:18.000000000","message":"recognized","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea1e631c2ae9c57a8e7f13196008510fd20beca6","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  deprecated."},{"line_number":407,"context_line":"* The `os-traits` library in the placement service needs to be the latest"},{"line_number":408,"context_line":"  version in the cloud, otherwise the new traits reported from other openstack"},{"line_number":409,"context_line":"  services won\u0027t be recognition by Placement service. So when upgrade the cloud"},{"line_number":410,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":411,"context_line":"  need to be upgraded first."},{"line_number":412,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a98d1f4_4ef9d84c","line":409,"range":{"start_line":409,"start_character":20,"end_line":409,"end_character":31},"in_reply_to":"3a98d1f4_8e85c7ae","updated":"2016-09-30 06:18:10.000000000","message":"Done","commit_id":"86372e90e8d5db0f2ac833d8295379be50873d8c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9d493aab08971dbacb7d0eec562d4963a76312b6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The ResourceProvider associates with the concept of Inventory and Allocation"},{"line_number":14,"context_line":"to manage the *quantitative* aspects; when an instance uses that the resource"},{"line_number":15,"context_line":"from a ResourceProvider, the amount it uses isn\u0027t available to others. But not"},{"line_number":16,"context_line":"all resource providers of the same resource class are identical; they have"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_3be64e15","line":13,"updated":"2016-10-14 22:31:04.000000000","message":"s/associates with the concept of/has a collection of/","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdbac1716069597983fd84fbd1737c3114d0c311","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The ResourceProvider associates with the concept of Inventory and Allocation"},{"line_number":14,"context_line":"to manage the *quantitative* aspects; when an instance uses that the resource"},{"line_number":15,"context_line":"from a ResourceProvider, the amount it uses isn\u0027t available to others. But not"},{"line_number":16,"context_line":"all resource providers of the same resource class are identical; they have"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_5828369a","line":13,"in_reply_to":"1a95cdbc_3be64e15","updated":"2016-10-17 02:40:55.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9d493aab08971dbacb7d0eec562d4963a76312b6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The ResourceProvider associates with the concept of Inventory and Allocation"},{"line_number":14,"context_line":"to manage the *quantitative* aspects; when an instance uses that the resource"},{"line_number":15,"context_line":"from a ResourceProvider, the amount it uses isn\u0027t available to others. But not"},{"line_number":16,"context_line":"all resource providers of the same resource class are identical; they have"},{"line_number":17,"context_line":"qualitative aspects that aren\u0027t consumed by an instance, and we need a way to"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_1ba512a1","line":14,"updated":"2016-10-14 22:31:04.000000000","message":"s/to manage/objects to manage/\ns/aspects; when/aspects of a boot request. When/\ns/uses that the resource/uses resources/","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdbac1716069597983fd84fbd1737c3114d0c311","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-tags"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The ResourceProvider associates with the concept of Inventory and Allocation"},{"line_number":14,"context_line":"to manage the *quantitative* aspects; when an instance uses that the resource"},{"line_number":15,"context_line":"from a ResourceProvider, the amount it uses isn\u0027t available to others. But not"},{"line_number":16,"context_line":"all resource providers of the same resource class are identical; they have"},{"line_number":17,"context_line":"qualitative aspects that aren\u0027t consumed by an instance, and we need a way to"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_78233abd","line":14,"in_reply_to":"1a95cdbc_1ba512a1","updated":"2016-10-17 02:40:55.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_b404514a","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"updated":"2016-10-06 21:35:08.000000000","message":"I don\u0027t think the distinction is important. If a trait isn\u0027t supported, the end user can\u0027t request it, period. It doesn\u0027t really help to know that a trait may be a valid name if you cannot use it in that cloud.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_e3242a0e","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"in_reply_to":"1a95cdbc_14078f18","updated":"2016-10-08 07:14:41.000000000","message":"@Ed, But in the real world, the flavor may have a trait, but the compute node which support that trait is just removed. So what we can do for that flavor? If we say that flavor is still ok, then we should allow user to input a trait which is valid but not supported in the flavor.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9d493aab08971dbacb7d0eec562d4963a76312b6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_7bfe16af","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"in_reply_to":"1a95cdbc_b404514a","updated":"2016-10-14 22:31:04.000000000","message":"Agreed, just remove the second bullet point IMHO.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"338aeb7232f20b5179fbca09b4972e4847463fe3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_14078f18","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"in_reply_to":"1a95cdbc_b404514a","updated":"2016-10-08 03:34:10.000000000","message":"The distinction is important for custom traits, their names need to be added through \"/traits\" endpoint before being associated to resource providers. It adds a protection so that users cannot associate arbitrary trait names to resource providers.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ab20ab6778ee65536d3b1c0e07fc1537009241a6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_405bc254","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"in_reply_to":"1a95cdbc_e3242a0e","updated":"2016-10-10 20:08:48.000000000","message":"To an end user, a trait cannot be requested is not supported, and thus not valid. Getting a 404 or a 400 is a secondary matter.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3c38f0cc6f44afba406f86c2c5c86dc9157730de","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits in the cloud."},{"line_number":58,"context_line":"* An end user wants to know what kind of traits supported in the cloud."},{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_4f3bdceb","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":71},"in_reply_to":"fa6399be_405bc254","updated":"2016-10-11 09:44:15.000000000","message":"Emm...looks like the line 57 is wrong one, the end user needn\u0027t care about the valid trait, the end-user needn\u0027t input traits for the request, they only need select one of flavor. For the line 57, actually it should be the use-case line 59","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"338aeb7232f20b5179fbca09b4972e4847463fe3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_14a30f01","line":62,"range":{"start_line":62,"start_character":37,"end_line":62,"end_character":46},"updated":"2016-10-08 03:34:10.000000000","message":"themselves","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"* Other Openstack services want to know whether user input traits is valid in"},{"line_number":60,"context_line":"  the cloud."},{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_8359a690","line":62,"range":{"start_line":62,"start_character":37,"end_line":62,"end_character":46},"in_reply_to":"1a95cdbc_14a30f01","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("},{"line_number":66,"context_line":"  For example, A cloud provider admin wants to indicate that some of storage"},{"line_number":67,"context_line":"  providers which deployed and managed by themselve are better-performing than"},{"line_number":68,"context_line":"  others)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":12,"id":"1a95cdbc_94b9157c","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":9},"updated":"2016-10-06 21:35:08.000000000","message":"Just state the case. Don\u0027t state the generic case, and then repeat it with the name of the specific case. We get the idea. :)","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ab20ab6778ee65536d3b1c0e07fc1537009241a6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("},{"line_number":66,"context_line":"  For example, A cloud provider admin wants to indicate that some of storage"},{"line_number":67,"context_line":"  providers which deployed and managed by themselve are better-performing than"},{"line_number":68,"context_line":"  others)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":12,"id":"fa6399be_00170a52","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":9},"in_reply_to":"1a95cdbc_83d0c6ca","updated":"2016-10-10 20:08:48.000000000","message":"These are use cases. Just say \"A cloud provider admin wants to indicate that some storage providers are better-performing than others\"","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"338aeb7232f20b5179fbca09b4972e4847463fe3","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("},{"line_number":66,"context_line":"  For example, A cloud provider admin wants to indicate that some of storage"},{"line_number":67,"context_line":"  providers which deployed and managed by themselve are better-performing than"},{"line_number":68,"context_line":"  others)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":12,"id":"1a95cdbc_d49c47c2","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":9},"in_reply_to":"1a95cdbc_94b9157c","updated":"2016-10-08 03:34:10.000000000","message":"I think so, maybe just \"manage custom traits and indicate the traits of the ResourceProviders.\"","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("},{"line_number":66,"context_line":"  For example, A cloud provider admin wants to indicate that some of storage"},{"line_number":67,"context_line":"  providers which deployed and managed by themselve are better-performing than"},{"line_number":68,"context_line":"  others)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":12,"id":"1a95cdbc_83d0c6ca","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":9},"in_reply_to":"1a95cdbc_d49c47c2","updated":"2016-10-08 07:14:41.000000000","message":"@Ed, ok :) @Yingxin, emm... is it too abstraction?","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3c38f0cc6f44afba406f86c2c5c86dc9157730de","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":62,"context_line":"  ResourceProviders which managed by themselve. (For example, Nova want to"},{"line_number":63,"context_line":"  indicate which cpu features of compute node provided)"},{"line_number":64,"context_line":"* A cloud provider admin wants to a way to indicate that some of its resource"},{"line_number":65,"context_line":"  providers which managed by themselve are better-performing than others. ("},{"line_number":66,"context_line":"  For example, A cloud provider admin wants to indicate that some of storage"},{"line_number":67,"context_line":"  providers which deployed and managed by themselve are better-performing than"},{"line_number":68,"context_line":"  others)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":12,"id":"fa6399be_8f0c1444","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":9},"in_reply_to":"fa6399be_00170a52","updated":"2016-10-11 09:44:15.000000000","message":"ok, that sounds good","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":136,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_d739dfd8","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":68},"updated":"2016-10-06 21:35:08.000000000","message":"What if that trait exists in os-traits as a standard name? It should be made clear whether \u0027openstack trait add\u0027 will check to see if the admin is trying to add a trait name that already exists, either in os-traits or in the user-defined traits.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ab20ab6778ee65536d3b1c0e07fc1537009241a6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":136,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_e308602b","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":68},"in_reply_to":"1a95cdbc_a3b86276","updated":"2016-10-10 20:08:48.000000000","message":"That\u0027s not consistent with other API calls. If you attempt to add a duplicate, the response should be a 409.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":136,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_a3b86276","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":68},"in_reply_to":"1a95cdbc_d739dfd8","updated":"2016-10-08 07:14:41.000000000","message":"If the traits existed, the CLI still return successfully. I will clear that in the CLI and API.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3edbb358d140a5188fe0034c6ffc9c0c4213aa3c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":136,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_14ffe534","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":68},"in_reply_to":"fa6399be_d24b1358","updated":"2016-10-12 22:11:41.000000000","message":"But in https://review.openstack.org/#/c/366888/2/specs/newton/approved/generic-resource-pools.rst@622, adding a duplicate resource class returns a 409.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3c38f0cc6f44afba406f86c2c5c86dc9157730de","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":136,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_d24b1358","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":68},"in_reply_to":"fa6399be_e308602b","updated":"2016-10-11 09:44:15.000000000","message":"The server-tags API return 204 for PUT /servers/{id}/tags/{tag} at here, so I guess it should be same at here. For PUT /traits, it also return successful, due to it replace all the traits.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":172,"context_line":"Alternatives"},{"line_number":173,"context_line":"------------"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"An alternative for naming this new REST resource as Tags in previous propose."},{"line_number":176,"context_line":"But in the current propose, there is validation for the standard traits from"},{"line_number":177,"context_line":"the \u0027os-traits\u0027 library. The API needs to distingish the standard traits and"},{"line_number":178,"context_line":"user-defined traits, they won\u0027t be some generic tag anymore. So use the term"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_b76a93b1","line":175,"range":{"start_line":175,"start_character":69,"end_line":175,"end_character":76},"updated":"2016-10-06 21:35:08.000000000","message":"Nit: s/propose/proposal\n\nHere and in other places in this spec.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":172,"context_line":"Alternatives"},{"line_number":173,"context_line":"------------"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"An alternative for naming this new REST resource as Tags in previous propose."},{"line_number":176,"context_line":"But in the current propose, there is validation for the standard traits from"},{"line_number":177,"context_line":"the \u0027os-traits\u0027 library. The API needs to distingish the standard traits and"},{"line_number":178,"context_line":"user-defined traits, they won\u0027t be some generic tag anymore. So use the term"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_23a53246","line":175,"range":{"start_line":175,"start_character":69,"end_line":175,"end_character":76},"in_reply_to":"1a95cdbc_b76a93b1","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":179,"context_line":"\u0027Traits\u0027 is right at here."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"An alternative idea is adding attributes to the traits. An example would be in"},{"line_number":182,"context_line":"creating namespaces: instead of prefixing the tag string with a namespace"},{"line_number":183,"context_line":"string, we would add an attribute to that tag that denotes the namespace. This"},{"line_number":184,"context_line":"would eliminate the need to add the \"HW\" and \"HV\" parts of the tag name in the"},{"line_number":185,"context_line":"examples above.  Another use of attributes is to distinguish between"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_17b50730","line":182,"range":{"start_line":182,"start_character":46,"end_line":182,"end_character":49},"updated":"2016-10-06 21:35:08.000000000","message":"s/tag/trait\n\nThere are many places in this section that needs this replacement.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"\u0027Traits\u0027 is right at here."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"An alternative idea is adding attributes to the traits. An example would be in"},{"line_number":182,"context_line":"creating namespaces: instead of prefixing the tag string with a namespace"},{"line_number":183,"context_line":"string, we would add an attribute to that tag that denotes the namespace. This"},{"line_number":184,"context_line":"would eliminate the need to add the \"HW\" and \"HV\" parts of the tag name in the"},{"line_number":185,"context_line":"examples above.  Another use of attributes is to distinguish between"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_4366be2a","line":182,"range":{"start_line":182,"start_character":46,"end_line":182,"end_character":49},"in_reply_to":"1a95cdbc_17b50730","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"With above request, the response only includes all the user-defined traits."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"For the end-user to query the supported traits in the cloud, the query"},{"line_number":298,"context_line":"parameter `associated` can be used::"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    GET /traits?associated\u003dTrue"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"With above request, the response includes all the traits which already"},{"line_number":303,"context_line":"associated with resource provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_77e56bda","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":31},"updated":"2016-10-06 21:35:08.000000000","message":"If, from the user\u0027s perspective, are supported traits, why not use GET /traits?supported\u003dtrue ?","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ab20ab6778ee65536d3b1c0e07fc1537009241a6","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"With above request, the response only includes all the user-defined traits."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"For the end-user to query the supported traits in the cloud, the query"},{"line_number":298,"context_line":"parameter `associated` can be used::"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    GET /traits?associated\u003dTrue"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"With above request, the response includes all the traits which already"},{"line_number":303,"context_line":"associated with resource provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_c3519c10","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":31},"in_reply_to":"1a95cdbc_63501a33","updated":"2016-10-10 20:08:48.000000000","message":"It seems like whether a trait is associated with a RP is information about the deployment. If \u0027supported\u0027 isn\u0027t the best word, how about \u0027available\u0027? As a user, the only reason to run this query is to be able to tell what traits I can request in this cloud.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"With above request, the response only includes all the user-defined traits."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"For the end-user to query the supported traits in the cloud, the query"},{"line_number":298,"context_line":"parameter `associated` can be used::"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    GET /traits?associated\u003dTrue"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"With above request, the response includes all the traits which already"},{"line_number":303,"context_line":"associated with resource provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_63501a33","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":31},"in_reply_to":"1a95cdbc_77e56bda","updated":"2016-10-08 07:14:41.000000000","message":"Emm....\u0027associated\u0027 means a trait associate with RP. \u0027supported\u0027 sounds like an attributes of trait.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3c38f0cc6f44afba406f86c2c5c86dc9157730de","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"With above request, the response only includes all the user-defined traits."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"For the end-user to query the supported traits in the cloud, the query"},{"line_number":298,"context_line":"parameter `associated` can be used::"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    GET /traits?associated\u003dTrue"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"With above request, the response includes all the traits which already"},{"line_number":303,"context_line":"associated with resource provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_f28d777c","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":31},"in_reply_to":"fa6399be_c3519c10","updated":"2016-10-11 09:44:15.000000000","message":"emm..I\u0027m not sure which one is best. let see what other people say.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6b6d93d8565367c0a2c099a60e83c522a38b1390","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"With above request, the response only includes all the user-defined traits."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"For the end-user to query the supported traits in the cloud, the query"},{"line_number":298,"context_line":"parameter `associated` can be used::"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    GET /traits?associated\u003dTrue"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"With above request, the response includes all the traits which already"},{"line_number":303,"context_line":"associated with resource provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_abebbada","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":31},"in_reply_to":"fa6399be_f28d777c","updated":"2016-10-17 03:18:27.000000000","message":"\u0027associated\u0027 is good to me (at least), I think it is very clear to state that the trait is being attached to a r-p, or being used/occupied by the placement service.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":341,"context_line":"    Default permission: admin only"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"This API is used by admin user to delete all the user-defined traits. The"},{"line_number":344,"context_line":"standard traits is read-only, they won\u0027t be deleted. The user can\u0027t remove"},{"line_number":345,"context_line":"any trait which associate with any ResourceProvider, otherwise"},{"line_number":346,"context_line":"`HTTPConflict 409` returned."},{"line_number":347,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_7733ab62","line":344,"range":{"start_line":344,"start_character":16,"end_line":344,"end_character":18},"updated":"2016-10-06 21:35:08.000000000","message":"nit: s/is/are","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":341,"context_line":"    Default permission: admin only"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"This API is used by admin user to delete all the user-defined traits. The"},{"line_number":344,"context_line":"standard traits is read-only, they won\u0027t be deleted. The user can\u0027t remove"},{"line_number":345,"context_line":"any trait which associate with any ResourceProvider, otherwise"},{"line_number":346,"context_line":"`HTTPConflict 409` returned."},{"line_number":347,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_8343666b","line":344,"range":{"start_line":344,"start_character":16,"end_line":344,"end_character":18},"in_reply_to":"1a95cdbc_7733ab62","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":343,"context_line":"This API is used by admin user to delete all the user-defined traits. The"},{"line_number":344,"context_line":"standard traits is read-only, they won\u0027t be deleted. The user can\u0027t remove"},{"line_number":345,"context_line":"any trait which associate with any ResourceProvider, otherwise"},{"line_number":346,"context_line":"`HTTPConflict 409` returned."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":".. code:: javascript"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_b76ff329","line":346,"range":{"start_line":346,"start_character":1,"end_line":346,"end_character":27},"updated":"2016-10-06 21:35:08.000000000","message":"You should clarify that if there are, say, 100 user-defined traits, and only 1 is still associated with a RP, then none of the traits will be deleted, and not all but that one.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"This API is used by admin user to delete all the user-defined traits. The"},{"line_number":344,"context_line":"standard traits is read-only, they won\u0027t be deleted. The user can\u0027t remove"},{"line_number":345,"context_line":"any trait which associate with any ResourceProvider, otherwise"},{"line_number":346,"context_line":"`HTTPConflict 409` returned."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":".. code:: javascript"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_c361ee06","line":346,"range":{"start_line":346,"start_character":1,"end_line":346,"end_character":27},"in_reply_to":"1a95cdbc_b76ff329","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e360adae9db82bebc06041dbf20d103b2590dced","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":".. code:: javascript"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    GET /resource_providers/{uuid}/traits"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    The JSON-Schema of response is same with \u0027GET /traits\u0027"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_e63fd8b1","line":350,"updated":"2016-10-08 07:21:56.000000000","message":"404 if the uuid of r-p is invalid or doesn\u0027t exist.\n\nThe same to @362, @397","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"This API is used by admin user to update traits to specific for resource"},{"line_number":387,"context_line":"provider. All the asscoiated traits will be replaced by the traits in the"},{"line_number":388,"context_line":"request with this API. The Openstack services also report the traits for"},{"line_number":389,"context_line":"managed resource through this API. For example, The ResourceTracker in"},{"line_number":390,"context_line":"nova-compute will report the compute node traits through this API. Only the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_f7e33ba2","line":387,"range":{"start_line":387,"start_character":18,"end_line":387,"end_character":28},"updated":"2016-10-06 21:35:08.000000000","message":"s/asscoiated/associated","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    Default permission: admin only or openstack service user"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"This API is used by admin user to update traits to specific for resource"},{"line_number":387,"context_line":"provider. All the asscoiated traits will be replaced by the traits in the"},{"line_number":388,"context_line":"request with this API. The Openstack services also report the traits for"},{"line_number":389,"context_line":"managed resource through this API. For example, The ResourceTracker in"},{"line_number":390,"context_line":"nova-compute will report the compute node traits through this API. Only the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_e35c2a4d","line":387,"range":{"start_line":387,"start_character":18,"end_line":387,"end_character":28},"in_reply_to":"1a95cdbc_f7e33ba2","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":388,"context_line":"request with this API. The Openstack services also report the traits for"},{"line_number":389,"context_line":"managed resource through this API. For example, The ResourceTracker in"},{"line_number":390,"context_line":"nova-compute will report the compute node traits through this API. Only the"},{"line_number":391,"context_line":"traits is valid in the cloud can be added to resource provider, otherwise"},{"line_number":392,"context_line":"`HTTPBadRequest 400` will be returned. The valid traits can be queried by"},{"line_number":393,"context_line":"`GET /traits`."},{"line_number":394,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_17f8a748","line":391,"range":{"start_line":391,"start_character":7,"end_line":391,"end_character":15},"updated":"2016-10-06 21:35:08.000000000","message":"that are valid","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":388,"context_line":"request with this API. The Openstack services also report the traits for"},{"line_number":389,"context_line":"managed resource through this API. For example, The ResourceTracker in"},{"line_number":390,"context_line":"nova-compute will report the compute node traits through this API. Only the"},{"line_number":391,"context_line":"traits is valid in the cloud can be added to resource provider, otherwise"},{"line_number":392,"context_line":"`HTTPBadRequest 400` will be returned. The valid traits can be queried by"},{"line_number":393,"context_line":"`GET /traits`."},{"line_number":394,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_03583655","line":391,"range":{"start_line":391,"start_character":7,"end_line":391,"end_character":15},"in_reply_to":"1a95cdbc_17f8a748","updated":"2016-10-08 07:14:41.000000000","message":"Done","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"01c34ae0e1052a61ec1020b98d1ab7cec2e1c6af","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`/resource_providers/{rp_uuid}/traits`. The singular REST resource will be"},{"line_number":407,"context_line":"attached the endpoint as below::"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    `/traits/{trait_name}`"},{"line_number":410,"context_line":"    `/resource_providers/{rp_uuid}/traits/{trait_name}`"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Those API for singular REST resource is convenient for API user to operate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_b760d302","line":409,"range":{"start_line":409,"start_character":4,"end_line":409,"end_character":26},"updated":"2016-10-06 21:35:08.000000000","message":"What does this do? A GET will return the trait name, which is already specified in the request! So why is this needed? Same question for the next line.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"65aa4734af35797073d37fcd7cf49774707c172a","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`/resource_providers/{rp_uuid}/traits`. The singular REST resource will be"},{"line_number":407,"context_line":"attached the endpoint as below::"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    `/traits/{trait_name}`"},{"line_number":410,"context_line":"    `/resource_providers/{rp_uuid}/traits/{trait_name}`"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Those API for singular REST resource is convenient for API user to operate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_833a86e5","line":409,"range":{"start_line":409,"start_character":4,"end_line":409,"end_character":26},"in_reply_to":"1a95cdbc_34f64bf9","updated":"2016-10-08 07:14:41.000000000","message":"This is pretty similar to the API-WG suggestion: https://github.com/openstack/api-wg/blob/master/guidelines/tags.rst#addressing-individual-tags","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3edbb358d140a5188fe0034c6ffc9c0c4213aa3c","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`/resource_providers/{rp_uuid}/traits`. The singular REST resource will be"},{"line_number":407,"context_line":"attached the endpoint as below::"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    `/traits/{trait_name}`"},{"line_number":410,"context_line":"    `/resource_providers/{rp_uuid}/traits/{trait_name}`"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Those API for singular REST resource is convenient for API user to operate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_3408692c","line":409,"range":{"start_line":409,"start_character":4,"end_line":409,"end_character":26},"in_reply_to":"1a95cdbc_833a86e5","updated":"2016-10-12 22:11:41.000000000","message":"Yes, but only in the context of changing an individual tag (PUT or DELETE). There is nothing there about GET for an individual tag. That\u0027s why I was saying that we should clarify that this is for changing/deleting a trait only.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"338aeb7232f20b5179fbca09b4972e4847463fe3","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`/resource_providers/{rp_uuid}/traits`. The singular REST resource will be"},{"line_number":407,"context_line":"attached the endpoint as below::"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    `/traits/{trait_name}`"},{"line_number":410,"context_line":"    `/resource_providers/{rp_uuid}/traits/{trait_name}`"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Those API for singular REST resource is convenient for API user to operate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a95cdbc_34f64bf9","line":409,"range":{"start_line":409,"start_character":4,"end_line":409,"end_character":26},"in_reply_to":"1a95cdbc_b760d302","updated":"2016-10-08 03:34:10.000000000","message":"If we want to add/remove/modify just one trait, this is the needed endpoint. The same applies to the next line.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6b6d93d8565367c0a2c099a60e83c522a38b1390","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`/resource_providers/{rp_uuid}/traits`. The singular REST resource will be"},{"line_number":407,"context_line":"attached the endpoint as below::"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    `/traits/{trait_name}`"},{"line_number":410,"context_line":"    `/resource_providers/{rp_uuid}/traits/{trait_name}`"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Those API for singular REST resource is convenient for API user to operate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fa6399be_0baae684","line":409,"range":{"start_line":409,"start_character":4,"end_line":409,"end_character":26},"in_reply_to":"fa6399be_3408692c","updated":"2016-10-17 03:18:27.000000000","message":"GET is to check if a trait exists or not, as API-WG suggested.","commit_id":"cbe35552b4b90289a2417385a9a40ba509774017"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with a particular trait that they wished to track, and then set metadata on"},{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires making"},{"line_number":153,"context_line":"an aggregate for each trait, and adding the each host to multiple"},{"line_number":154,"context_line":"aggregates. This creates a very complex mapping between traits and hosts."},{"line_number":155,"context_line":"It is also not a simple task to determine which traits a particular host"},{"line_number":156,"context_line":"may have. Finally, this approach only works for compute nodes, not all"},{"line_number":157,"context_line":"potential resource providers."}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_0d9f895f","line":154,"range":{"start_line":152,"start_character":55,"end_line":154,"end_character":11},"updated":"2016-11-28 15:55:03.000000000","message":"Side question, just to understand things better - the metadata can contain multiple keys, also you can\u0027t specify multiple availability zones when doing boot request right? Why create an aggregate with only one \"capability\" then? As if you\u0027re talking about requesting an instance on the node that eg has a specific cpu extension and ssd, you won\u0027t be able to use an AZ that has only one of those capabilities, you\u0027d need to create an aggregate with 2 properties, or combine them somehow into one string anyway.","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with a particular trait that they wished to track, and then set metadata on"},{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires making"},{"line_number":153,"context_line":"an aggregate for each trait, and adding the each host to multiple"},{"line_number":154,"context_line":"aggregates. This creates a very complex mapping between traits and hosts."},{"line_number":155,"context_line":"It is also not a simple task to determine which traits a particular host"},{"line_number":156,"context_line":"may have. Finally, this approach only works for compute nodes, not all"},{"line_number":157,"context_line":"potential resource providers."}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_38ec2f8f","line":154,"range":{"start_line":152,"start_character":55,"end_line":154,"end_character":11},"in_reply_to":"5a74a57a_0d9f895f","updated":"2016-11-30 02:37:10.000000000","message":"Agreed, the original wording is not precise.","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":198,"context_line":"ResourceProviderTraits instead of ResourceClass. The reason is ResourceClass"},{"line_number":199,"context_line":"and Traits are very similar, both of them are string. Actually we just need an"},{"line_number":200,"context_line":"indication for the management of quantative and qualitative. With this way, we"},{"line_number":201,"context_line":"canfinish the goal of above alternative idea, and without the infinite"},{"line_number":202,"context_line":"inventory. The more explanation about this is at mail-list `Use"},{"line_number":203,"context_line":"ResourceProviderTraits instead of ResourceClass`_."},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_b35c387e","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":9},"updated":"2016-11-28 15:55:03.000000000","message":"can achieve?","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":198,"context_line":"ResourceProviderTraits instead of ResourceClass. The reason is ResourceClass"},{"line_number":199,"context_line":"and Traits are very similar, both of them are string. Actually we just need an"},{"line_number":200,"context_line":"indication for the management of quantative and qualitative. With this way, we"},{"line_number":201,"context_line":"canfinish the goal of above alternative idea, and without the infinite"},{"line_number":202,"context_line":"inventory. The more explanation about this is at mail-list `Use"},{"line_number":203,"context_line":"ResourceProviderTraits instead of ResourceClass`_."},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_5801eb38","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":9},"in_reply_to":"5a74a57a_b35c387e","updated":"2016-11-30 02:37:10.000000000","message":"Done","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f05ee74f96d8516adec20fe4a03c4d36440056bf","unresolved":false,"context_lines":[{"line_number":397,"context_line":"response. The returned response will be one of the following:"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"* `200 OK` if successfully updated."},{"line_number":400,"context_line":"* `409 Conflict` if any trait name conflicts with standard trait names."},{"line_number":401,"context_line":"* `409 Confilct` if any trait to delete has associations with any"},{"line_number":402,"context_line":"  ResourceProvider."},{"line_number":403,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"fa6399be_9e85e15a","line":400,"range":{"start_line":400,"start_character":65,"end_line":400,"end_character":70},"updated":"2016-10-19 12:42:27.000000000","message":"should this be 400 ?\n\nhttps://review.openstack.org/#/c/312696/9/specs/newton/approved/custom-resource-classes.rst\nproposed a 400 for DELETE standard resource class","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":397,"context_line":"response. The returned response will be one of the following:"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"* `200 OK` if successfully updated."},{"line_number":400,"context_line":"* `409 Conflict` if any trait name conflicts with standard trait names."},{"line_number":401,"context_line":"* `409 Confilct` if any trait to delete has associations with any"},{"line_number":402,"context_line":"  ResourceProvider."},{"line_number":403,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_8c126457","line":400,"range":{"start_line":400,"start_character":65,"end_line":400,"end_character":70},"in_reply_to":"fa6399be_9e85e15a","updated":"2016-11-30 02:37:10.000000000","message":"custom-resource-provider will report 409 if there is an existing\nresource class with the same name. (@277)","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"Return the trait list provided by specific resource provider."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"The response format is the same with \u0027GET /traits\u0027"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"The returned response will be one of the following:"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_166cfa9a","line":467,"updated":"2016-11-28 15:55:03.000000000","message":"\"resource_provider_generation\" will be returned too here?","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"Return the trait list provided by specific resource provider."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"The response format is the same with \u0027GET /traits\u0027"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"The returned response will be one of the following:"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_6c48a888","line":467,"in_reply_to":"5a74a57a_166cfa9a","updated":"2016-11-30 02:37:10.000000000","message":"Thanks, still not sure about this, will reply soon.","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":516,"context_line":"* `200 OK` if the update is successful."},{"line_number":517,"context_line":"* `400 Bad Request` if any of the specified traits are not valid. The valid"},{"line_number":518,"context_line":"  traits can be queried by `GET /traits`."},{"line_number":519,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":522,"context_line":"******************************************"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_76328ea8","line":519,"updated":"2016-11-28 15:55:03.000000000","message":"Also 409 when resource_provider_generation is outdated? Same comment for several other places.","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":521,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":522,"context_line":"******************************************"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"This API is to deassociate all the traits with the specific resource provider."},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"The returned response will be one of the following:"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_f6e5be08","line":524,"updated":"2016-11-28 15:55:03.000000000","message":"ditto, should it include \"resource_provider_generation\" too.","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"fde215d1332c949440f09e30c103b1482bf00662","unresolved":false,"context_lines":[{"line_number":583,"context_line":"`DELETE` /resource_providers/{uuid}/traits/{trait_name}"},{"line_number":584,"context_line":"*******************************************************"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"This API is to purge all the trait associations with the specified resource"},{"line_number":587,"context_line":"provider."},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"The returned response will be one of the following:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"fa6399be_cbdcfc1a","line":586,"range":{"start_line":586,"start_character":21,"end_line":586,"end_character":34},"updated":"2016-10-19 11:35:28.000000000","message":"only the one matched with \u0027trait_name\u0027 ?","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":583,"context_line":"`DELETE` /resource_providers/{uuid}/traits/{trait_name}"},{"line_number":584,"context_line":"*******************************************************"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"This API is to purge all the trait associations with the specified resource"},{"line_number":587,"context_line":"provider."},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"The returned response will be one of the following:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_acac8036","line":586,"range":{"start_line":586,"start_character":21,"end_line":586,"end_character":34},"in_reply_to":"fa6399be_cbdcfc1a","updated":"2016-11-30 02:37:10.000000000","message":"correct","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9359fe83c043ee4474b080da81579598db96c8e5","unresolved":false,"context_lines":[{"line_number":663,"context_line":"----------"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"* Add DB Schema for Traits"},{"line_number":666,"context_line":"* Add Traits ralated object"},{"line_number":667,"context_line":"* Implement the Traits API in placement API"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_b60ee689","line":666,"range":{"start_line":666,"start_character":13,"end_line":666,"end_character":20},"updated":"2016-11-28 15:55:03.000000000","message":"related","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6a2ea5869bfc4d3517ec42dc5033e8fccff3faa7","unresolved":false,"context_lines":[{"line_number":663,"context_line":"----------"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"* Add DB Schema for Traits"},{"line_number":666,"context_line":"* Add Traits ralated object"},{"line_number":667,"context_line":"* Implement the Traits API in placement API"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a74a57a_ac5ac04e","line":666,"range":{"start_line":666,"start_character":13,"end_line":666,"end_character":20},"in_reply_to":"5a74a57a_b60ee689","updated":"2016-11-30 02:37:10.000000000","message":"Done","commit_id":"531bf3a1a8adc781fc008120366bea246fc296d8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"manage the *quantitative* aspects of a boot request: When an instance uses"},{"line_number":15,"context_line":"resources from a ResourceProvider, the corresponding resource amounts of"},{"line_number":16,"context_line":"Inventories are subtracted by its Allocations. Despite the quantitative"},{"line_number":17,"context_line":"aspects, the ResourceProvider also needs none-consumable *qualitative* aspects"},{"line_number":18,"context_line":"to differenciate their characteristics from each other. We need a way to"},{"line_number":19,"context_line":"represent the missing piece of ResourceProviders, so we propose a new REST"},{"line_number":20,"context_line":"resource `traits` in placement API to manage the qualitative parts of"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_bded67b9","line":17,"updated":"2016-11-30 17:23:35.000000000","message":"s/none/non/","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":14,"context_line":"manage the *quantitative* aspects of a boot request: When an instance uses"},{"line_number":15,"context_line":"resources from a ResourceProvider, the corresponding resource amounts of"},{"line_number":16,"context_line":"Inventories are subtracted by its Allocations. Despite the quantitative"},{"line_number":17,"context_line":"aspects, the ResourceProvider also needs none-consumable *qualitative* aspects"},{"line_number":18,"context_line":"to differenciate their characteristics from each other. We need a way to"},{"line_number":19,"context_line":"represent the missing piece of ResourceProviders, so we propose a new REST"},{"line_number":20,"context_line":"resource `traits` in placement API to manage the qualitative parts of"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_cbc11de6","line":17,"in_reply_to":"5a74a57a_bded67b9","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":15,"context_line":"resources from a ResourceProvider, the corresponding resource amounts of"},{"line_number":16,"context_line":"Inventories are subtracted by its Allocations. Despite the quantitative"},{"line_number":17,"context_line":"aspects, the ResourceProvider also needs none-consumable *qualitative* aspects"},{"line_number":18,"context_line":"to differenciate their characteristics from each other. We need a way to"},{"line_number":19,"context_line":"represent the missing piece of ResourceProviders, so we propose a new REST"},{"line_number":20,"context_line":"resource `traits` in placement API to manage the qualitative parts of"},{"line_number":21,"context_line":"ResourceProviders. Using Traits API, the placement service can manage the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_ee6e5f95","line":18,"range":{"start_line":18,"start_character":3,"end_line":18,"end_character":16},"updated":"2016-11-30 13:05:19.000000000","message":"nit: differentiate","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":15,"context_line":"resources from a ResourceProvider, the corresponding resource amounts of"},{"line_number":16,"context_line":"Inventories are subtracted by its Allocations. Despite the quantitative"},{"line_number":17,"context_line":"aspects, the ResourceProvider also needs none-consumable *qualitative* aspects"},{"line_number":18,"context_line":"to differenciate their characteristics from each other. We need a way to"},{"line_number":19,"context_line":"represent the missing piece of ResourceProviders, so we propose a new REST"},{"line_number":20,"context_line":"resource `traits` in placement API to manage the qualitative parts of"},{"line_number":21,"context_line":"ResourceProviders. Using Traits API, the placement service can manage the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_ebb25995","line":18,"range":{"start_line":18,"start_character":3,"end_line":18,"end_character":16},"in_reply_to":"5a74a57a_ee6e5f95","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Traits management has to take into account the following:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Any ResourceProviders\u0027 qualitative information can be managed. Whether the"},{"line_number":41,"context_line":"  ResourceProvider provides shared or nested resources."},{"line_number":42,"context_line":"* Many traits are defined in a standard way, such as the Intel instruction set"},{"line_number":43,"context_line":"  extensions. These are reported programmatically, and will be consistent"},{"line_number":44,"context_line":"  across all OpenStack clouds. However, there may be some other traits that"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_9d4eebbf","line":41,"updated":"2016-11-30 17:23:35.000000000","message":"I don\u0027t understand this bullet point. Can it be elaborated?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Traits management has to take into account the following:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Any ResourceProviders\u0027 qualitative information can be managed. Whether the"},{"line_number":41,"context_line":"  ResourceProvider provides shared or nested resources."},{"line_number":42,"context_line":"* Many traits are defined in a standard way, such as the Intel instruction set"},{"line_number":43,"context_line":"  extensions. These are reported programmatically, and will be consistent"},{"line_number":44,"context_line":"  across all OpenStack clouds. However, there may be some other traits that"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_eb409961","line":41,"in_reply_to":"5a74a57a_9d4eebbf","updated":"2016-12-12 03:58:04.000000000","message":"This want to indicate the proposal should works with all the scenarios of RP. The scenarios of RP are includes nest RP and  RP with shared resource.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"* Many traits are defined in a standard way, such as the Intel instruction set"},{"line_number":43,"context_line":"  extensions. These are reported programmatically, and will be consistent"},{"line_number":44,"context_line":"  across all OpenStack clouds. However, there may be some other traits that"},{"line_number":45,"context_line":"  placement service need to support, aka user-defined traits."},{"line_number":46,"context_line":"* In the future some resource providers may be managed by independent scripts"},{"line_number":47,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":48,"context_line":"  handle them all."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_fdf0bf68","line":45,"updated":"2016-11-30 17:23:35.000000000","message":"Should we be more specific than \"user\" here? Are traits managed by the deployer, a project admin, an end user?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":42,"context_line":"* Many traits are defined in a standard way, such as the Intel instruction set"},{"line_number":43,"context_line":"  extensions. These are reported programmatically, and will be consistent"},{"line_number":44,"context_line":"  across all OpenStack clouds. However, there may be some other traits that"},{"line_number":45,"context_line":"  placement service need to support, aka user-defined traits."},{"line_number":46,"context_line":"* In the future some resource providers may be managed by independent scripts"},{"line_number":47,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":48,"context_line":"  handle them all."}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_8e8ad362","line":45,"in_reply_to":"5a74a57a_fdf0bf68","updated":"2016-12-12 03:58:04.000000000","message":"Yea, more specific user is better always. The deployer manage the user-defined traits. For the standard traits are managed by Openstack.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits that the cloud can recognize."},{"line_number":58,"context_line":"* Other Openstack services want to know whether user input traits are valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":61,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_5d5e1346","line":58,"updated":"2016-11-30 17:23:35.000000000","message":"big S in OpenStack","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":55,"context_line":"---------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* An end user wants to know the valid traits that the cloud can recognize."},{"line_number":58,"context_line":"* Other Openstack services want to know whether user input traits are valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":61,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_2ede1f6d","line":58,"in_reply_to":"5a74a57a_5d5e1346","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* An end user wants to know the valid traits that the cloud can recognize."},{"line_number":58,"context_line":"* Other Openstack services want to know whether user input traits are valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":61,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"},{"line_number":62,"context_line":"  to indicate which cpu features a compute node provides)"},{"line_number":63,"context_line":"* A cloud provider admin wants a way to indicate the traits of resource"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_bd53a738","line":60,"updated":"2016-11-30 17:23:35.000000000","message":"ditto","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* An end user wants to know the valid traits that the cloud can recognize."},{"line_number":58,"context_line":"* Other Openstack services want to know whether user input traits are valid in"},{"line_number":59,"context_line":"  the cloud."},{"line_number":60,"context_line":"* Other Openstack services want a way to indicate the traits of the"},{"line_number":61,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"},{"line_number":62,"context_line":"  to indicate which cpu features a compute node provides)"},{"line_number":63,"context_line":"* A cloud provider admin wants a way to indicate the traits of resource"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_aed06f54","line":60,"in_reply_to":"5a74a57a_bd53a738","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"We propose to use a new REST resource `trait` in the placement API to manage"},{"line_number":71,"context_line":"qualitative information of resoruce providers. The `trait` is just a string, it"},{"line_number":72,"context_line":"is pretty similar with `Tags` which are defined in `Tags API-WG guideline`_."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_9d2fcba0","line":71,"updated":"2016-11-30 17:23:35.000000000","message":"resource","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"We propose to use a new REST resource `trait` in the placement API to manage"},{"line_number":71,"context_line":"qualitative information of resoruce providers. The `trait` is just a string, it"},{"line_number":72,"context_line":"is pretty similar with `Tags` which are defined in `Tags API-WG guideline`_."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_6ee4973b","line":71,"in_reply_to":"5a74a57a_9d2fcba0","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The standard traits are inter-operatable across different Openstack cloud"},{"line_number":77,"context_line":"deloyments. The definition of standard traits comes from `os-traits` library."},{"line_number":78,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":79,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_c2d7b7bd","line":76,"range":{"start_line":76,"start_character":24,"end_line":76,"end_character":40},"updated":"2016-11-30 13:05:19.000000000","message":"nit: interoperable?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The standard traits are inter-operatable across different Openstack cloud"},{"line_number":77,"context_line":"deloyments. The definition of standard traits comes from `os-traits` library."},{"line_number":78,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":79,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_8ee1f32c","line":76,"range":{"start_line":76,"start_character":24,"end_line":76,"end_character":40},"in_reply_to":"5a74a57a_c2d7b7bd","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The standard traits are inter-operatable across different Openstack cloud"},{"line_number":77,"context_line":"deloyments. The definition of standard traits comes from `os-traits` library."},{"line_number":78,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":79,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":80,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_e292f3f5","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":10},"updated":"2016-11-30 13:05:19.000000000","message":"deployments","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":74,"context_line":"There are two kinds of Traits: The standard traits and the user-defined traits."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The standard traits are inter-operatable across different Openstack cloud"},{"line_number":77,"context_line":"deloyments. The definition of standard traits comes from `os-traits` library."},{"line_number":78,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":79,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":80,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_eec6e79a","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":10},"in_reply_to":"5a74a57a_e292f3f5","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":101,"context_line":"--------------------------------------------"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":104,"context_line":"provider as having SSD trait so that they are only used by flavors that specify"},{"line_number":105,"context_line":"SSD trait."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The first three steps are the same as in:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_45cbb11e","line":104,"range":{"start_line":103,"start_character":0,"end_line":104,"end_character":79},"updated":"2016-11-30 13:05:19.000000000","message":"Does that means, that if we are run out of spinning discs, there is no way for booting another vm using SSD without specifying what kind of storage user requested?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":101,"context_line":"--------------------------------------------"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":104,"context_line":"provider as having SSD trait so that they are only used by flavors that specify"},{"line_number":105,"context_line":"SSD trait."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The first three steps are the same as in:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_8e6653b9","line":104,"range":{"start_line":103,"start_character":0,"end_line":104,"end_character":79},"in_reply_to":"5a74a57a_45cbb11e","updated":"2016-12-12 03:58:04.000000000","message":"It depends on how you define the requirement in the flavor. If there isn\u0027t any traits requirement in the flavor, I think we can boot new VM using SSD.\n\nIf you said the spinning discs are required, then your required will fail when run out of spinning discs.\n\nAbout how to request traits, it is in the spec https://review.openstack.org/351063","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # for all compute nodes in the system that are in racks 6-10 in row 1..."},{"line_number":115,"context_line":"    openstack aggregate add host $AGG_UUID $HOSTNAME"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"2) The cloud deployer creates a resource pool representing the NFS share::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    $RP_UUID\u003d`openstack resource-provider create \"/mnt/nfs/row1racks0610/\" \\"},{"line_number":120,"context_line":"        --aggregate-uuid\u003d$AGG_UUID`"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_60416439","line":117,"updated":"2016-11-30 17:23:35.000000000","message":"we\u0027ve stopped using the term \u0027pool\u0027 and now just use \u0027provider\u0027.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # for all compute nodes in the system that are in racks 6-10 in row 1..."},{"line_number":115,"context_line":"    openstack aggregate add host $AGG_UUID $HOSTNAME"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"2) The cloud deployer creates a resource pool representing the NFS share::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    $RP_UUID\u003d`openstack resource-provider create \"/mnt/nfs/row1racks0610/\" \\"},{"line_number":120,"context_line":"        --aggregate-uuid\u003d$AGG_UUID`"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_2efa9fbd","line":117,"in_reply_to":"5a74a57a_60416439","updated":"2016-12-12 03:58:04.000000000","message":"ok, I should say The provider with shared resource?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with a particular trait that they wished to track, and then set metadata on"},{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires managing"},{"line_number":153,"context_line":"aggregates indirectly instead of straitforward traits. This creates a very"},{"line_number":154,"context_line":"complex mapping between traits and hosts.  It is also not a simple task to"},{"line_number":155,"context_line":"determine which traits a particular host may have.  Finally, this approach only"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_6096c495","line":152,"updated":"2016-11-30 17:23:35.000000000","message":"s/there/there are/","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with a particular trait that they wished to track, and then set metadata on"},{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires managing"},{"line_number":153,"context_line":"aggregates indirectly instead of straitforward traits. This creates a very"},{"line_number":154,"context_line":"complex mapping between traits and hosts.  It is also not a simple task to"},{"line_number":155,"context_line":"determine which traits a particular host may have.  Finally, this approach only"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_ae2cef4a","line":152,"in_reply_to":"5a74a57a_6096c495","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires managing"},{"line_number":153,"context_line":"aggregates indirectly instead of straitforward traits. This creates a very"},{"line_number":154,"context_line":"complex mapping between traits and hosts.  It is also not a simple task to"},{"line_number":155,"context_line":"determine which traits a particular host may have.  Finally, this approach only"},{"line_number":156,"context_line":"works for compute nodes, not all potential resource providers."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_e7dafd16","line":153,"range":{"start_line":153,"start_character":33,"end_line":153,"end_character":46},"updated":"2016-11-30 13:05:19.000000000","message":"straightforward","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":150,"context_line":"that aggregate to identify the trait that those hosts have. This practice has"},{"line_number":151,"context_line":"limited scalability and is hard to manage. Take for example the situation where"},{"line_number":152,"context_line":"there a variety of trait combinations in a deployment: this requires managing"},{"line_number":153,"context_line":"aggregates indirectly instead of straitforward traits. This creates a very"},{"line_number":154,"context_line":"complex mapping between traits and hosts.  It is also not a simple task to"},{"line_number":155,"context_line":"determine which traits a particular host may have.  Finally, this approach only"},{"line_number":156,"context_line":"works for compute nodes, not all potential resource providers."}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_ee226753","line":153,"range":{"start_line":153,"start_character":33,"end_line":153,"end_character":46},"in_reply_to":"5a74a57a_e7dafd16","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"An alternative for naming this new REST resource as Tags in previous proposal."},{"line_number":171,"context_line":"But currently, there is a validation for the standard traits from the"},{"line_number":172,"context_line":"\u0027os-traits\u0027 library. The API needs to distingish the standard traits and"},{"line_number":173,"context_line":"user-defined traits, they won\u0027t be some generic tags anymore. So \u0027Traits\u0027 is"},{"line_number":174,"context_line":"the correct term."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_67342d4a","line":172,"range":{"start_line":172,"start_character":38,"end_line":172,"end_character":48},"updated":"2016-11-30 13:05:19.000000000","message":"distinguish","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"An alternative for naming this new REST resource as Tags in previous proposal."},{"line_number":171,"context_line":"But currently, there is a validation for the standard traits from the"},{"line_number":172,"context_line":"\u0027os-traits\u0027 library. The API needs to distingish the standard traits and"},{"line_number":173,"context_line":"user-defined traits, they won\u0027t be some generic tags anymore. So \u0027Traits\u0027 is"},{"line_number":174,"context_line":"the correct term."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_0e288332","line":172,"range":{"start_line":172,"start_character":38,"end_line":172,"end_character":48},"in_reply_to":"5a74a57a_67342d4a","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":196,"context_line":"One more alternative which inspired by above idea is about use"},{"line_number":197,"context_line":"ResourceProviderTraits instead of ResourceClass. The reason is ResourceClass"},{"line_number":198,"context_line":"and Traits are very similar, both of them are string. Actually we just need an"},{"line_number":199,"context_line":"indication for the management of quantative and qualitative. With this way, we"},{"line_number":200,"context_line":"can achieve the goal of above alternative idea, and without the infinite"},{"line_number":201,"context_line":"inventory. The more explanation about this is at mail-list `Use"},{"line_number":202,"context_line":"ResourceProviderTraits instead of ResourceClass`_."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_871069aa","line":199,"range":{"start_line":199,"start_character":33,"end_line":199,"end_character":43},"updated":"2016-11-30 13:05:19.000000000","message":"quantitative","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":230,"context_line":"`/resource_providers/{uuid}/traits`."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* `/traits`: This is used to manage the traits in the cloud, and this is also"},{"line_number":233,"context_line":"  the only place to query the valid and associated traits in the cloud. it"},{"line_number":234,"context_line":"  helps the traits be consistent across all the services in the cloud. The"},{"line_number":235,"context_line":"  traits can be read by all users and can only be modified by admin users."},{"line_number":236,"context_line":"* `/resource_providers/{uuid}/traits`: This is used to query/edit the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_071d39bd","line":233,"range":{"start_line":233,"start_character":72,"end_line":233,"end_character":74},"updated":"2016-11-30 13:05:19.000000000","message":"It","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":256,"context_line":"* `GET` a list of traits of a specific resource provider"},{"line_number":257,"context_line":"* `PUT` a list of traits to a specific resource provider"},{"line_number":258,"context_line":"* `DELETE` all the trait associations of a specific resource provider"},{"line_number":259,"context_line":"* `GET` a trait to check whether it is associated with a specifice provider"},{"line_number":260,"context_line":"* `PUT` a trait to associate it with the specified provider"},{"line_number":261,"context_line":"* `DELETE` a trait to deassociate it with the specified provider"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_67826dca","line":259,"range":{"start_line":259,"start_character":57,"end_line":259,"end_character":66},"updated":"2016-11-30 13:05:19.000000000","message":"specific","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":256,"context_line":"* `GET` a list of traits of a specific resource provider"},{"line_number":257,"context_line":"* `PUT` a list of traits to a specific resource provider"},{"line_number":258,"context_line":"* `DELETE` all the trait associations of a specific resource provider"},{"line_number":259,"context_line":"* `GET` a trait to check whether it is associated with a specifice provider"},{"line_number":260,"context_line":"* `PUT` a trait to associate it with the specified provider"},{"line_number":261,"context_line":"* `DELETE` a trait to deassociate it with the specified provider"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_2e21bf4d","line":259,"range":{"start_line":259,"start_character":57,"end_line":259,"end_character":66},"in_reply_to":"5a74a57a_67826dca","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":338,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":339,"context_line":"`traits` to validate traits by the below example::"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:invalid_feature"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Its response::"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_40b708f5","line":341,"updated":"2016-11-30 17:23:35.000000000","message":"Is the use of commas the norm for this kind of thing? Would\n\n    ?traits\u003dhw:cpu:x86:avx\u0026traits\u003dhw:cpu:x86:sse\u0026traits\u003dhw:cpu:x86:invalid_feature\n\nBe the same thing?","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":338,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":339,"context_line":"`traits` to validate traits by the below example::"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    GET /traits?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse,hw:cpu:x86:invalid_feature"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Its response::"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_cebf6bce","line":341,"in_reply_to":"5a74a57a_40b708f5","updated":"2016-12-12 03:58:04.000000000","message":"We can use \"?trait\u003dhw:cpu:x86:avx\u0026trait\u003dhw:cpu:x86:sse\" or \"?traits\u003dhw:cpu:x86:avx,hw:cpu:x86:sse\"\n\nNot sure we should support them both. Just one of them is enough.\n\nI more like the way you said, it is better then we define custom list format in the query parameters.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"* `200 OK` if successfully updated."},{"line_number":399,"context_line":"* `409 Conflict` if any trait name conflicts with standard trait names."},{"line_number":400,"context_line":"* `409 Confilct` if any trait to delete has associations with any"},{"line_number":401,"context_line":"  ResourceProvider."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_e7a91d26","line":400,"range":{"start_line":400,"start_character":7,"end_line":400,"end_character":15},"updated":"2016-11-30 13:05:19.000000000","message":"Conflict","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"* `200 OK` if successfully updated."},{"line_number":399,"context_line":"* `409 Conflict` if any trait name conflicts with standard trait names."},{"line_number":400,"context_line":"* `409 Confilct` if any trait to delete has associations with any"},{"line_number":401,"context_line":"  ResourceProvider."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_eeb0a7ff","line":400,"range":{"start_line":400,"start_character":7,"end_line":400,"end_character":15},"in_reply_to":"5a74a57a_e7a91d26","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":416,"context_line":"The returned response will be one of the following:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":419,"context_line":"* `409 Confilct` if any trait to delete has associations with ResourceProvider."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"`GET` /traits/{trait_name}"},{"line_number":422,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_877149e3","line":419,"range":{"start_line":419,"start_character":7,"end_line":419,"end_character":15},"updated":"2016-11-30 13:05:19.000000000","message":"Conflict again","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":416,"context_line":"The returned response will be one of the following:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":419,"context_line":"* `409 Confilct` if any trait to delete has associations with ResourceProvider."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"`GET` /traits/{trait_name}"},{"line_number":422,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_0eb6c3f8","line":419,"range":{"start_line":419,"start_character":7,"end_line":419,"end_character":15},"in_reply_to":"5a74a57a_877149e3","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":448,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":449,"context_line":"*****************************"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"This API is to delete the the specified user-defined traits. The"},{"line_number":452,"context_line":"standard traits are read-only, they can\u0027t be deleted."},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"The returned response will be one of the following:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_2748742d","line":451,"range":{"start_line":451,"start_character":22,"end_line":451,"end_character":29},"updated":"2016-11-30 13:05:19.000000000","message":"without \"the the\" might be fine","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":448,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":449,"context_line":"*****************************"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"This API is to delete the the specified user-defined traits. The"},{"line_number":452,"context_line":"standard traits are read-only, they can\u0027t be deleted."},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"The returned response will be one of the following:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_2ecfff7f","line":451,"range":{"start_line":451,"start_character":22,"end_line":451,"end_character":29},"in_reply_to":"5a74a57a_2748742d","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":625,"context_line":"---------------------"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"* Deployers will need to set the traits for resource which isn\u0027t managed by"},{"line_number":628,"context_line":"  openstack. Such as the shared storage pools which used by compute node"},{"line_number":629,"context_line":"  ephemeral storage, as this will not be done automatically by any OpenStack"},{"line_number":630,"context_line":"  service."},{"line_number":631,"context_line":"* Deployers will need to start using traits instead of aggregate metadata for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_67c50c5a","line":628,"range":{"start_line":628,"start_character":2,"end_line":628,"end_character":11},"updated":"2016-11-30 13:05:19.000000000","message":"OpenStack","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":625,"context_line":"---------------------"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"* Deployers will need to set the traits for resource which isn\u0027t managed by"},{"line_number":628,"context_line":"  openstack. Such as the shared storage pools which used by compute node"},{"line_number":629,"context_line":"  ephemeral storage, as this will not be done automatically by any OpenStack"},{"line_number":630,"context_line":"  service."},{"line_number":631,"context_line":"* Deployers will need to start using traits instead of aggregate metadata for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_cea68bc0","line":628,"range":{"start_line":628,"start_character":2,"end_line":628,"end_character":11},"in_reply_to":"5a74a57a_67c50c5a","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"edbc1be6231f386e6d0d5a61e69f22dd5728dd06","unresolved":false,"context_lines":[{"line_number":632,"context_line":"  managing qualitative information in anticipation of aggregate metadata being"},{"line_number":633,"context_line":"  deprecated."},{"line_number":634,"context_line":"* The `os-traits` library in the placement service needs to be the latest"},{"line_number":635,"context_line":"  version in the cloud, otherwise the new traits reported from other openstack"},{"line_number":636,"context_line":"  services won\u0027t be recognized by Placement service. So when upgrade the cloud"},{"line_number":637,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":638,"context_line":"  need to be upgraded first."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_e7af5c92","line":635,"range":{"start_line":635,"start_character":69,"end_line":635,"end_character":78},"updated":"2016-11-30 13:05:19.000000000","message":"Ditto","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":632,"context_line":"  managing qualitative information in anticipation of aggregate metadata being"},{"line_number":633,"context_line":"  deprecated."},{"line_number":634,"context_line":"* The `os-traits` library in the placement service needs to be the latest"},{"line_number":635,"context_line":"  version in the cloud, otherwise the new traits reported from other openstack"},{"line_number":636,"context_line":"  services won\u0027t be recognized by Placement service. So when upgrade the cloud"},{"line_number":637,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":638,"context_line":"  need to be upgraded first."}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_2e961f4c","line":635,"range":{"start_line":635,"start_character":69,"end_line":635,"end_character":78},"in_reply_to":"5a74a57a_e7af5c92","updated":"2016-12-12 03:58:04.000000000","message":"Done","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d5fa9b5715697eea012729a01faf4d12488953d7","unresolved":false,"context_lines":[{"line_number":663,"context_line":""},{"line_number":664,"context_line":"* Add DB Schema for Traits"},{"line_number":665,"context_line":"* Add Traits related object"},{"line_number":666,"context_line":"* Implement the Traits API in placement API"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"Dependencies"},{"line_number":669,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5a74a57a_2083eccd","line":666,"updated":"2016-11-30 17:23:35.000000000","message":"The current representation of a single resource provider includes a list of links associated with the resource provider (aggregates, inventories). the /resource_providers/{uuid}/traits link should be added to that list.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4392e14c1e59d885132c52eacb51ad9af9e621ad","unresolved":false,"context_lines":[{"line_number":663,"context_line":""},{"line_number":664,"context_line":"* Add DB Schema for Traits"},{"line_number":665,"context_line":"* Add Traits related object"},{"line_number":666,"context_line":"* Implement the Traits API in placement API"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"Dependencies"},{"line_number":669,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3a71b18c_8ed573e6","line":666,"in_reply_to":"5a74a57a_2083eccd","updated":"2016-12-12 03:58:04.000000000","message":"Thanks, I will add that.","commit_id":"6b95f71984cb3384fc068cc9256c2a66ae57c62b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e9631e60c6abe1a9c06224295a28bae93f7d120f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"The Traits API - Manage Traits with ResourceProvider"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/resource-provider-traits"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The ResourceProvider has a collection of of Inventory and Allocation objects to"},{"line_number":14,"context_line":"manage the *quantitative* aspects of a boot request: When an instance uses"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba5201f7_2a91f799","line":11,"range":{"start_line":11,"start_character":62,"end_line":11,"end_character":68},"updated":"2017-01-11 02:37:46.000000000","message":"s/traits/tags/","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":40,"context_line":"* Many traits are defined in a standard way by OpenStack, such as the Intel"},{"line_number":41,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":42,"context_line":"  consistent across all OpenStack clouds. However, the deployer may have some"},{"line_number":43,"context_line":"  other traits that placement service need to support, aka user-defined traits."},{"line_number":44,"context_line":"* In the future some resource providers may be managed by independent scripts"},{"line_number":45,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":46,"context_line":"  handle them all."}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_fcb47dd2","line":43,"range":{"start_line":43,"start_character":59,"end_line":43,"end_character":78},"updated":"2016-12-12 16:02:15.000000000","message":"We have been using the term \u0027custom\u0027 to distinguish those ResourceClasses that are standard across OpenStack from those defined for a particular deployment. Perhaps \u0027custom traits\u0027 would be better for consistency.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"* Many traits are defined in a standard way by OpenStack, such as the Intel"},{"line_number":41,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":42,"context_line":"  consistent across all OpenStack clouds. However, the deployer may have some"},{"line_number":43,"context_line":"  other traits that placement service need to support, aka user-defined traits."},{"line_number":44,"context_line":"* In the future some resource providers may be managed by independent scripts"},{"line_number":45,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":46,"context_line":"  handle them all."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_bd0542c3","line":43,"range":{"start_line":43,"start_character":59,"end_line":43,"end_character":78},"in_reply_to":"1a6eadb0_fcb47dd2","updated":"2017-02-13 08:13:11.000000000","message":"Done","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e9631e60c6abe1a9c06224295a28bae93f7d120f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":46,"context_line":"  handle them all."},{"line_number":47,"context_line":"  (This spec is focused on the implementation of qualitative information of"},{"line_number":48,"context_line":"   resource providers used by Nova, however this design should not preclude"},{"line_number":49,"context_line":"   handling of qualitative information for resource providers related of other"},{"line_number":50,"context_line":"   OpenStack services.)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Use Cases"},{"line_number":53,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba5201f7_0ae35306","line":50,"range":{"start_line":48,"start_character":0,"end_line":50,"end_character":23},"updated":"2017-01-11 02:37:46.000000000","message":"Indent","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":130,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_1c269916","line":132,"range":{"start_line":132,"start_character":34,"end_line":132,"end_character":66},"updated":"2016-12-12 16:02:15.000000000","message":"You should add namespacing to distinguish a deployer-created trait from a standard trait. For example, a deployer might add a trait called \u0027foo\u0027, and then later a different trait with the same name is added to the os-traits library.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":130,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"4) The cloud deployer defines the user-defined trait `STORAGE_SSD`::"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_3d279213","line":132,"range":{"start_line":132,"start_character":34,"end_line":132,"end_character":66},"in_reply_to":"1a6eadb0_1c269916","updated":"2017-02-13 08:13:11.000000000","message":"yes, I will add \u0027CUSTOM:\" prefix for all the custom traits","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":336,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":337,"context_line":"`traits` to validate traits by the below example::"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    GET /traits?trait\u003dhw:cpu:x86:avx\u0026trait\u003dhw:cpu:x86:sse\u0026trait\u003dhw:cpu:x86:invalid_feature"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Its response::"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_dcd0a1cc","line":339,"range":{"start_line":339,"start_character":16,"end_line":339,"end_character":90},"updated":"2016-12-12 16:02:15.000000000","message":"I don\u0027t like the repetition of the \u0027trait\u0027 label. The original proposed form in the heading seems best.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"df5388a524df2105df5ee8283148924e79abb0d5","unresolved":false,"context_lines":[{"line_number":336,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":337,"context_line":"`traits` to validate traits by the below example::"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    GET /traits?trait\u003dhw:cpu:x86:avx\u0026trait\u003dhw:cpu:x86:sse\u0026trait\u003dhw:cpu:x86:invalid_feature"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Its response::"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_f3432711","line":339,"in_reply_to":"1a6eadb0_dcd0a1cc","updated":"2016-12-15 13:33:10.000000000","message":"Yeah, my suggestion was probably wrong as I had forgotten that we\u0027ve established a precedent elsewhere in nova that filters default to being an AND.\n\nSo it could be that the right thing here is\n\n    /traits/?traits\u003din:a,b,c\n\nand the returned list include a and c, which are valid, and not b because it doesn\u0027t exist. The 400 that Ed suggests might also be valid, but the use of \u0027in\u0027 implies that a shortened list is reasonable.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":336,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":337,"context_line":"`traits` to validate traits by the below example::"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    GET /traits?trait\u003dhw:cpu:x86:avx\u0026trait\u003dhw:cpu:x86:sse\u0026trait\u003dhw:cpu:x86:invalid_feature"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Its response::"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_60787d2c","line":339,"in_reply_to":"1a6eadb0_f3432711","updated":"2017-02-13 08:13:11.000000000","message":"Emm...if there isn\u0027t any other operation, \"in\" looks like unnecessary. @Chris, does that make sense?","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":352,"context_line":""},{"line_number":353,"context_line":".. note::"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it won\u0027t"},{"line_number":356,"context_line":"    be included in the response. Nova can thus be aware of invalid traits and"},{"line_number":357,"context_line":"    provide an informative response to users."},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"`PUT` /traits"},{"line_number":360,"context_line":"*************"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_fcec7d91","line":357,"range":{"start_line":355,"start_character":0,"end_line":357,"end_character":45},"updated":"2016-12-12 16:02:15.000000000","message":"This really doesn\u0027t feel right for an API. I would prefer that if all the traits are good, return a 200. Otherwise, raise a 400 and list the bad traits.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":352,"context_line":""},{"line_number":353,"context_line":".. note::"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    `hw:cpu:x86:invalid_feature` isn\u0027t a valid trait in the cloud, so it won\u0027t"},{"line_number":356,"context_line":"    be included in the response. Nova can thus be aware of invalid traits and"},{"line_number":357,"context_line":"    provide an informative response to users."},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"`PUT` /traits"},{"line_number":360,"context_line":"*************"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_5bf52ec9","line":357,"range":{"start_line":355,"start_character":0,"end_line":357,"end_character":45},"in_reply_to":"1a6eadb0_fcec7d91","updated":"2017-02-13 08:13:11.000000000","message":"This API can be used to validate whether user input a list of valid traits. If we return 400 for the bad traits, the user only can know there are invalid traits. But the user can\u0027t know which are invalid.\n\nIf we just return all the valid traits and ignore the invalid traits, then the user compare the list to know the invalid.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":414,"context_line":"The returned response will be one of the following:"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":417,"context_line":"* `409 Conflict` if any trait to delete has associations with ResourceProvider."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"`GET` /traits/{trait_name}"},{"line_number":420,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_dc9ee106","line":417,"range":{"start_line":417,"start_character":3,"end_line":417,"end_character":15},"updated":"2016-12-12 16:02:15.000000000","message":"You should also include the case of attempting to delete a standard trait, which should return a 403 Forbidden (or possibly a 409).","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":414,"context_line":"The returned response will be one of the following:"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":417,"context_line":"* `409 Conflict` if any trait to delete has associations with ResourceProvider."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"`GET` /traits/{trait_name}"},{"line_number":420,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_fbb422f3","line":417,"in_reply_to":"1a6eadb0_b3644fb9","updated":"2017-02-13 08:13:11.000000000","message":"This is action about delete all. So the API behaviour is just remove all the custom traits and keep all the standard traits.\n\nAPI `DELETE` /traits/{trait_name} will consider this case","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"df5388a524df2105df5ee8283148924e79abb0d5","unresolved":false,"context_lines":[{"line_number":414,"context_line":"The returned response will be one of the following:"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":417,"context_line":"* `409 Conflict` if any trait to delete has associations with ResourceProvider."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"`GET` /traits/{trait_name}"},{"line_number":420,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_b3644fb9","line":417,"in_reply_to":"1a6eadb0_dc9ee106","updated":"2016-12-15 13:33:10.000000000","message":"I\u0027d say 403 is probably right: you are forbidden to delete a standard trait has the correct semantics.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":419,"context_line":"`GET` /traits/{trait_name}"},{"line_number":420,"context_line":"**************************"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"This API is to check if a trait name is valid or not."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"The returned response will be one of the following:"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_3cad1532","line":422,"range":{"start_line":422,"start_character":0,"end_line":422,"end_character":53},"updated":"2016-12-12 16:02:15.000000000","message":"This seems like a duplication of GET /traits?traits\u003d{trait_name}\nWhy is it necessary to treat a single trait differently than a multiple trait query?","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":419,"context_line":"`GET` /traits/{trait_name}"},{"line_number":420,"context_line":"**************************"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"This API is to check if a trait name is valid or not."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"The returned response will be one of the following:"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_5b9fee4f","line":422,"range":{"start_line":422,"start_character":0,"end_line":422,"end_character":53},"in_reply_to":"1a6eadb0_3cad1532","updated":"2017-02-13 08:13:11.000000000","message":"emm....yea, agree with you. I guess I keep it at here just for completeness. We already have PUT and DELETE for single trait.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":452,"context_line":"The returned response will be one of the following:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":455,"context_line":"* `409 Confilct` if the name to delete is standard trait."},{"line_number":456,"context_line":"* `409 Confilct` if the name to delete has associations with any"},{"line_number":457,"context_line":"  ResourceProvider."},{"line_number":458,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_fc71dde1","line":455,"range":{"start_line":455,"start_character":3,"end_line":455,"end_character":15},"updated":"2016-12-12 16:02:15.000000000","message":"As noted above, 403 might be more appropriate here.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":452,"context_line":"The returned response will be one of the following:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":455,"context_line":"* `409 Confilct` if the name to delete is standard trait."},{"line_number":456,"context_line":"* `409 Confilct` if the name to delete has associations with any"},{"line_number":457,"context_line":"  ResourceProvider."},{"line_number":458,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_3b7dda1c","line":455,"range":{"start_line":455,"start_character":3,"end_line":455,"end_character":15},"in_reply_to":"1a6eadb0_fc71dde1","updated":"2017-02-13 08:13:11.000000000","message":"And for custom-resource-class return 400 for removing standard resource-class, should we just keep consistent? https://github.com/openstack/nova/blob/master/nova/api/openstack/placement/handlers/resource_class.py#L107","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":528,"context_line":"`GET` /resource_providers/{uuid}/traits/{trait_name}"},{"line_number":529,"context_line":"****************************************************"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"This API is to check if a trait is associated to the specified resource"},{"line_number":532,"context_line":"provider."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"The returned response will be one of the following:"},{"line_number":535,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_dc3a61e7","line":532,"range":{"start_line":531,"start_character":0,"end_line":532,"end_character":9},"updated":"2016-12-12 16:02:15.000000000","message":"Again, I would prefer a single way to validate traits, whether single or multiple:\n\n    GET /resource_providers/{uuid}/traits?trait\u003dfoo[,bar[,baz]]","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"df5388a524df2105df5ee8283148924e79abb0d5","unresolved":false,"context_lines":[{"line_number":529,"context_line":"****************************************************"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"This API is to check if a trait is associated to the specified resource"},{"line_number":532,"context_line":"provider."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"The returned response will be one of the following:"},{"line_number":535,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_f3dfa737","line":532,"in_reply_to":"1a6eadb0_dc3a61e7","updated":"2016-12-15 13:33:10.000000000","message":"If it is possible to PUT or DELETE /resource_providers/{uuid}/traits/{trait_name} then it should be possible to GET it as well.\n\nSo I would think the question is: why do we think it is important to not make multiple GET requests? If the answer to that is reasonable then the the /traits?trait\u003d... form _might_ be reasonable.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0db68cf2db3e033254c7a278b8b9284ba4b6c66d","unresolved":false,"context_lines":[{"line_number":529,"context_line":"****************************************************"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"This API is to check if a trait is associated to the specified resource"},{"line_number":532,"context_line":"provider."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"The returned response will be one of the following:"},{"line_number":535,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa31d9ce_fbd182ce","line":532,"in_reply_to":"1a6eadb0_f3dfa737","updated":"2017-02-13 08:13:11.000000000","message":"From the PoC, I didn\u0027t use the API which operates single trait with ResourceProvider. So I guess we can remove all of those single trait with resource provider operations?","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cff98baf0e774aa4a5474fdd7c983d0a9e14e239","unresolved":false,"context_lines":[{"line_number":534,"context_line":"The returned response will be one of the following:"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"* `204 No Content` if the trait is associated to the specified provider."},{"line_number":537,"context_line":"* `404 Not Found` if the trait is not associated with the specified provider."},{"line_number":538,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"`PUT` /resource_providers/{uuid}/traits/{trait_name}"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1a6eadb0_7c030d10","line":537,"updated":"2016-12-12 16:02:15.000000000","message":"If we allow multiple traits to be queried with this, it would be better to return 400 and have the invalid traits in the response.","commit_id":"79eeb470a399b3aa7a808041b3623744064d0d7e"}],"specs/pike/approved/resource-provider-traits.rst":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":20,"context_line":"resource `traits` in placement API to manage the qualitative parts of"},{"line_number":21,"context_line":"ResourceProviders. Using Traits API, the placement service can manage the"},{"line_number":22,"context_line":"characteristics of resource providers by Traits, and then help scheduler make"},{"line_number":23,"context_line":"better placement decisions that match the boot requests."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_a54c9977","line":23,"updated":"2017-02-28 16:45:57.000000000","message":"nit: maybe a 2 -line summary for that BP is just needed, given you paraphrase it in the next section.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_49020f40","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":65},"updated":"2017-02-28 22:08:53.000000000","message":"A resource provider is neither quantitative nor qualitative, IMHO. Inventories and allocations are quantitative. Traits are qualitative.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_6236e104","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":65},"in_reply_to":"ba2be162_2737b8b1","updated":"2017-03-01 23:20:39.000000000","message":"Yup, agreed with Dan. Actually, you probably could just copy the summary paragraph to here. The summary paragraph nicely encapsulates the difference between quantitative stuff and qualitative stuff.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_2737b8b1","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":65},"in_reply_to":"ba2be162_49020f40","updated":"2017-03-01 08:54:27.000000000","message":"Yes. This sentence is about the time when we haven\u0027t any clear plan for the qualitative in the ResourceProvider proposal, but yes, I can remove it now.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_786d9497","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":65},"in_reply_to":"ba2be162_6236e104","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"},{"line_number":32,"context_line":"disk from different providers: a user may request 80GB of disk space for an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_89fc0740","line":29,"range":{"start_line":29,"start_character":46,"end_line":29,"end_character":55},"updated":"2017-02-28 22:08:53.000000000","message":"s/different// to avoid the repetition","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ResourceProviders are designed to manage quantitative information about the"},{"line_number":29,"context_line":"cloud resources that they represent. However, different ResourceProviders have"},{"line_number":30,"context_line":"different *qualitative* information, users also need to specify"},{"line_number":31,"context_line":"ResourceProvider traits from boot requests. The classic example is requesting"},{"line_number":32,"context_line":"disk from different providers: a user may request 80GB of disk space for an"},{"line_number":33,"context_line":"instance (quantitative), but may also expect that the disk be SSD instead of"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_100acc21","line":30,"updated":"2017-03-01 23:20:39.000000000","message":"s/information, users also need/information. Users need to be able/","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"instance (quantitative), but may also expect that the disk be SSD instead of"},{"line_number":34,"context_line":"spinning disk (qualitative). Having a way to mark that a storage provider (it"},{"line_number":35,"context_line":"can be a shared storage or compute node\u0027s attached storage) is SSD or spinning"},{"line_number":36,"context_line":"is what we are concerned with."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Traits management has to take into account the following:"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_1021ec9f","line":36,"updated":"2017-03-01 23:20:39.000000000","message":"good.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"* Many traits are defined in a standard way by OpenStack, such as the Intel"},{"line_number":41,"context_line":"  instruction set extensions. These are reported programmatically, and will be"},{"line_number":42,"context_line":"  consistent across all OpenStack clouds. However, the deployer may have some"},{"line_number":43,"context_line":"  other traits that placement service need to support, aka custom traits."},{"line_number":44,"context_line":"* In the future some resource providers may be managed by independent scripts"},{"line_number":45,"context_line":"  or other OpenStack services, we need to be able to be flexible enough to"},{"line_number":46,"context_line":"  handle them all."}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_29bb1b74","line":43,"range":{"start_line":43,"start_character":38,"end_line":43,"end_character":42},"updated":"2017-02-28 22:08:53.000000000","message":"\"needs\"","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  (This spec is focused on the implementation of qualitative information of"},{"line_number":48,"context_line":"   resource providers used by Nova, however this design should not preclude"},{"line_number":49,"context_line":"   handling of qualitative information for resource providers related of other"},{"line_number":50,"context_line":"   OpenStack services.)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Use Cases"},{"line_number":53,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_70c0687d","line":50,"updated":"2017-03-01 23:20:39.000000000","message":"I would recommend cutting the above two bullet points and the \"Traits management has to take into account the following\" line and replacing it with just this:\n\n\"Many traits are defined in a standard way by OpenStack, such as the Intel CPU instruction set extensions. These are reported programmatically, and will be consistent across all OpenStack clouds. However, the deployer may have some other custom traits that placement service needs to support.\"","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  (This spec is focused on the implementation of qualitative information of"},{"line_number":48,"context_line":"   resource providers used by Nova, however this design should not preclude"},{"line_number":49,"context_line":"   handling of qualitative information for resource providers related of other"},{"line_number":50,"context_line":"   OpenStack services.)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Use Cases"},{"line_number":53,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_58f530c9","line":50,"in_reply_to":"ba2be162_70c0687d","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"* Other OpenStack services want to know whether user input traits are valid in"},{"line_number":57,"context_line":"  the cloud."},{"line_number":58,"context_line":"* Other OpenStack services want a way to indicate the traits of the"},{"line_number":59,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"},{"line_number":60,"context_line":"  to indicate which cpu features a compute node provides)"},{"line_number":61,"context_line":"* A cloud provider admin wants a way to indicate the traits of resource"},{"line_number":62,"context_line":"  providers. (For example, a cloud provider admin wants to indicate that some"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_d004b47f","line":59,"updated":"2017-03-01 23:20:39.000000000","message":"s/which are managed by themselves//","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":56,"context_line":"* Other OpenStack services want to know whether user input traits are valid in"},{"line_number":57,"context_line":"  the cloud."},{"line_number":58,"context_line":"* Other OpenStack services want a way to indicate the traits of the"},{"line_number":59,"context_line":"  ResourceProviders which are managed by themselves. (For example, Nova wants"},{"line_number":60,"context_line":"  to indicate which cpu features a compute node provides)"},{"line_number":61,"context_line":"* A cloud provider admin wants a way to indicate the traits of resource"},{"line_number":62,"context_line":"  providers. (For example, a cloud provider admin wants to indicate that some"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_38cf9c80","line":59,"in_reply_to":"ba2be162_d004b47f","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"There are two kinds of Traits: The standard traits and the custom traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"The standard traits are interoperatable across different Openstack cloud"},{"line_number":75,"context_line":"deployments. The definition of standard traits comes from `os-traits` library."},{"line_number":76,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":77,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_29723be6","line":74,"range":{"start_line":74,"start_character":24,"end_line":74,"end_character":39},"updated":"2017-02-28 22:08:53.000000000","message":"\"interoperable\"","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":77,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":78,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"},{"line_number":79,"context_line":"examples below are for demonstration purposes only."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders. The admin user can define the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_05464523","line":79,"updated":"2017-02-28 16:45:57.000000000","message":"you should explain that os-traits would provide namespaces for all the traits, given you\u0027re explaining below that custom traits need to prefix by CUSTOM:","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":77,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":78,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"},{"line_number":79,"context_line":"examples below are for demonstration purposes only."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders. The admin user can define the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_692273bb","line":79,"in_reply_to":"ba2be162_05464523","updated":"2017-02-28 22:08:53.000000000","message":"What do you mean? Standard traits (i.e. the ones from os-traits) are un-namespaced, right?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":77,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":78,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"},{"line_number":79,"context_line":"examples below are for demonstration purposes only."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders. The admin user can define the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_c7925c57","line":79,"in_reply_to":"ba2be162_692273bb","updated":"2017-03-01 08:54:27.000000000","message":"@Sylvain, yea, I will mention that.\n@Dan, actually we have namespace for standard traits. They are defined in the os-traits library https://github.com/openstack/os-traits/blob/master/os_traits/const.py#L70\n\n\"CUSTOM:\" is defined in the os-traits library also, I will submit a patch later.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e19080ba808c6d73016c261bb26b1b848b1f09f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":77,"context_line":"can\u0027t modify any standard traits through API. The definition of traits in"},{"line_number":78,"context_line":"`os-traits` will be discussed in a separate proposal. All the traits used in"},{"line_number":79,"context_line":"examples below are for demonstration purposes only."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders. The admin user can define the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_2e65cc44","line":79,"in_reply_to":"ba2be162_c7925c57","updated":"2017-03-01 09:35:28.000000000","message":"I just wanted here to make sure we clearly explain that namespaces directly come from os-traits, and given os-traits provide a CUSTOM: namespace, there is consequently room for custom traits managed by the Placement API.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"a92a61f4ed092d69af0901ae679f5d6f88195468","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders. The admin user can define the"},{"line_number":83,"context_line":"custom traits from the placement API. The custom trait must prefixes with"},{"line_number":84,"context_line":"`CUSTOM:`."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The users can only use valid traits in the request. The valid traits include"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa31d9ce_91b5c532","line":83,"range":{"start_line":83,"start_character":60,"end_line":83,"end_character":68},"updated":"2017-02-13 08:55:38.000000000","message":"prefix","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":94,"context_line":"In this scenario, Nova creates one ResourceProvider for each compute node."},{"line_number":95,"context_line":"Each compute node then reports its qualitative information, which are tagged"},{"line_number":96,"context_line":"with a set of Traits. This will be updated regularly, although we don\u0027t expect"},{"line_number":97,"context_line":"a resource provider\u0027s qualitative information to change very often."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":100,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_456f5d92","line":97,"updated":"2017-02-28 16:45:57.000000000","message":"how do you manage the fact that compute nodes can have different versions, including different os-traits library version ?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":94,"context_line":"In this scenario, Nova creates one ResourceProvider for each compute node."},{"line_number":95,"context_line":"Each compute node then reports its qualitative information, which are tagged"},{"line_number":96,"context_line":"with a set of Traits. This will be updated regularly, although we don\u0027t expect"},{"line_number":97,"context_line":"a resource provider\u0027s qualitative information to change very often."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":100,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_24deb23f","line":97,"in_reply_to":"ba2be162_2aff7f02","updated":"2017-03-01 23:20:39.000000000","message":"yes, what alex_xu said.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"In this scenario, Nova creates one ResourceProvider for each compute node."},{"line_number":95,"context_line":"Each compute node then reports its qualitative information, which are tagged"},{"line_number":96,"context_line":"with a set of Traits. This will be updated regularly, although we don\u0027t expect"},{"line_number":97,"context_line":"a resource provider\u0027s qualitative information to change very often."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":100,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_69099331","line":97,"in_reply_to":"ba2be162_456f5d92","updated":"2017-02-28 22:08:53.000000000","message":"By calling to placement to validate traits it expects to use I believe. That\u0027s the point of the trait discovery API.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":94,"context_line":"In this scenario, Nova creates one ResourceProvider for each compute node."},{"line_number":95,"context_line":"Each compute node then reports its qualitative information, which are tagged"},{"line_number":96,"context_line":"with a set of Traits. This will be updated regularly, although we don\u0027t expect"},{"line_number":97,"context_line":"a resource provider\u0027s qualitative information to change very often."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":100,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_2aff7f02","line":97,"in_reply_to":"ba2be162_69099331","updated":"2017-03-01 08:54:27.000000000","message":"yes, the placement is the central place to validate the traits.\n\nIn the case of compute-node reports the traits, if there is any trait unknown by placement API, then placement API will return fault. And compute-node should skip to report those unknown traits.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":131,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"4) The cloud deployer defines the custom trait `CUSTOM:STORAGE:SSD`::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    openstack trait add CUSTOM:STORAGE:SSD"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_44864614","line":133,"updated":"2017-03-01 23:20:39.000000000","message":"There should be a standard trait called STORAGE_SSD in os-traits.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":131,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"4) The cloud deployer defines the custom trait `CUSTOM:STORAGE:SSD`::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    openstack trait add CUSTOM:STORAGE:SSD"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_b8d38c37","line":133,"in_reply_to":"ba2be162_44864614","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":161,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"},{"line_number":162,"context_line":"be deprecated. Of course, aggregates themselves will remain, as they are used"},{"line_number":163,"context_line":"for much more than metadata purposes. The deprecation of aggregate metadata"},{"line_number":164,"context_line":"will be discussed in a separate spec."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Alternatives"},{"line_number":167,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_0499ae1f","line":164,"updated":"2017-03-01 23:20:39.000000000","message":"++ (in that separate spec we can consider tying some \"default traits\" to an aggregate that would populate a resource provider\u0027s traits when the provider was associated with an aggregate).","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":180,"context_line":"system-generated and custom traits. Yet another potential use is define"},{"line_number":181,"context_line":"classes of traits, such as user-queryable. So while this simplifies some things"},{"line_number":182,"context_line":"by making these aspects of traits queryable, it means that we have to treat a"},{"line_number":183,"context_line":"trait as an object, and not just a simple string."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Another alternative to the use of traits is to create a special ResourceClass"},{"line_number":186,"context_line":"for each capability that has infinite inventory. In this approach, a request"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_a5b579d1","line":183,"updated":"2017-02-28 16:45:57.000000000","message":"I\u0027m personnally in favor of having clear object model for Traits internally that would use namespaces as an attribute, but would just have a representation prefixing those.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":180,"context_line":"system-generated and custom traits. Yet another potential use is define"},{"line_number":181,"context_line":"classes of traits, such as user-queryable. So while this simplifies some things"},{"line_number":182,"context_line":"by making these aspects of traits queryable, it means that we have to treat a"},{"line_number":183,"context_line":"trait as an object, and not just a simple string."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Another alternative to the use of traits is to create a special ResourceClass"},{"line_number":186,"context_line":"for each capability that has infinite inventory. In this approach, a request"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_aa952f41","line":183,"in_reply_to":"ba2be162_a5b579d1","updated":"2017-03-01 08:54:27.000000000","message":"You mean have an attributes in Trait object https://review.openstack.org/#/c/376199/14/nova/objects/resource_provider.py@1482\n\nWhy we need that? When we implement \"GET /traits?namespace\u003dxxx\", actually we will filter on the DB directly https://review.openstack.org/#/c/376199/14/nova/objects/resource_provider.py@1584. I\u0027m not sure why we need an attribute in the object model.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":180,"context_line":"system-generated and custom traits. Yet another potential use is define"},{"line_number":181,"context_line":"classes of traits, such as user-queryable. So while this simplifies some things"},{"line_number":182,"context_line":"by making these aspects of traits queryable, it means that we have to treat a"},{"line_number":183,"context_line":"trait as an object, and not just a simple string."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Another alternative to the use of traits is to create a special ResourceClass"},{"line_number":186,"context_line":"for each capability that has infinite inventory. In this approach, a request"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_645fca41","line":183,"in_reply_to":"ba2be162_aa952f41","updated":"2017-03-01 23:20:39.000000000","message":"Yeah, the simple string with prefix/namespace is perfectly reasonable. I don\u0027t see any reason to have a full object model for representing a trait.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":204,"context_line":"-----------------"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The new table will be added to API Database. For the database schema, the"},{"line_number":207,"context_line":"following tables would suffice::"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_e58211c8","line":207,"updated":"2017-02-28 16:45:57.000000000","message":"how do you manage the synchronization between os-traits library and the API DB ?\nAlso, how do you manage the fact that services reporting to the Placement API would have different versions of that library?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":204,"context_line":"-----------------"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The new table will be added to API Database. For the database schema, the"},{"line_number":207,"context_line":"following tables would suffice::"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_8a886be9","line":207,"in_reply_to":"ba2be162_147caa71","updated":"2017-03-01 08:54:27.000000000","message":"yes, the proposal is \u0027placement-manage os-traits sync\u0027 to do the sync.\n\nPlacement API only needs to fetch traits from the DB.\n\nBut I just got a problem about \"namespace\", I need to implement \"GET /traits/namespaces\" and \"GET /traits?namespace\u003d***\", and I want to validate the namespace is valid or not. Probably we need a discussion whether we need to sync the namespace into the DB or not.\n\nIf we didn\u0027t sync the namespace into the DB, we still need the placement API import the os-traits library.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e19080ba808c6d73016c261bb26b1b848b1f09f","unresolved":false,"context_lines":[{"line_number":204,"context_line":"-----------------"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The new table will be added to API Database. For the database schema, the"},{"line_number":207,"context_line":"following tables would suffice::"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_ee03b40d","line":207,"in_reply_to":"ba2be162_8a886be9","updated":"2017-03-01 09:35:28.000000000","message":"@Dan, sure I remember the discussed we had at PTG related to the sync command but tbc, I don\u0027t see any of that in THAT spec. I\u0027d love to explicitly have this written.\n\nFor the second point about Placement API being authoritative, that\u0027s a reasonable assertion that I\u0027d love to see it clearly defined in the os-traits documentation.\nI mean, I\u0027m fine with clients using that library for providing traits to the Placement API, but the Placement API version of os-traits should only be the single source of truth. \nThat is also not stated in that spec and I\u0027d love to.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":204,"context_line":"-----------------"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The new table will be added to API Database. For the database schema, the"},{"line_number":207,"context_line":"following tables would suffice::"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_147caa71","line":207,"in_reply_to":"ba2be162_e58211c8","updated":"2017-02-28 22:08:53.000000000","message":"For the first, I think we discussed this at the PTG. Something in nova-manage (eventually placement-manage) can do that during upgrade or when requested.\n\nFor the second, I think we also discussed that the placement engine\u0027s list is authoritative, exposed via the /traits API, and the clients will check that they can use a thing before they do.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"},{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_25db49ef","line":211,"updated":"2017-02-28 16:45:57.000000000","message":"Just to be clear, os-traits will then NEVER accept to change a name for an existing trait, but rather deprecate that trait and use another ID for that renamed trait ?\n\nThat\u0027s particularly important given we say we could prefix those names by some namespace.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"},{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_74c16680","line":211,"in_reply_to":"ba2be162_25db49ef","updated":"2017-02-28 22:08:53.000000000","message":"I\u0027m not sure what you mean here, but generally a distributed enum (which is what os-traits is) would never-reuse names or ids that have been deprecated. There are plenty of numbers, fear not :)","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"},{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_3ff79bf6","line":211,"in_reply_to":"ba2be162_4a9af315","updated":"2017-03-01 23:20:39.000000000","message":"@alex_xu: Actually, yes, we discussed this at some point in the past. The plan is to put a restriction into os-traits that once a trait string is committed and in a release of the os-traits library, it shall never be changed.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e19080ba808c6d73016c261bb26b1b848b1f09f","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"},{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_012c5949","line":211,"in_reply_to":"ba2be162_4a9af315","updated":"2017-03-01 09:35:28.000000000","message":"Yeah, Alex, that\u0027s my point : given it\u0027s a set of strings with possible prefixes, a trait ID is directly mapping to a string in the Placement API.\n\nHere, my concern is mostly about the huge explosion of possible traits that the library would propose, which means by some inflection point, os-traits cores would want to deprecate traits that are no longer in use. But maybe it\u0027s a nit for now, and we could discuss that later.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"  CREATE TABLE traits ("},{"line_number":210,"context_line":"    id INT NOT NULL,"},{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_4a9af315","line":211,"in_reply_to":"ba2be162_74c16680","updated":"2017-03-01 08:54:27.000000000","message":"Emm...just to be clear, in the os-traits is just a set of strings. there isn\u0027t any enum. That is different than ResourceClass.\n\nYou can reference from here https://github.com/openstack/os-traits/blob/master/os_traits/const.py\n\nThe \"id\" is generated by the DB when we insert the trait into the DB.\n\nI guess Sylvain want to talk about how to deprecate or rename a trait? I\u0027m not sure we have very clear plan for that. And do we have those plan for resource class?\n\nProbably we can have note when os-traits release about which traits are deprecated. And waiting for all the services stop using the deprecated trait, then we remove that trait... And it should be same with rename.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"  CREATE TABLE resource_provider_traits ("},{"line_number":217,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_e5e771aa","line":214,"updated":"2017-02-28 16:45:57.000000000","message":"That also means that we make the assumption that the Placement API will always have the *latest* version of os-traits in order to make sure it can understand all the consumers of that REST API.\n\nIn other words, during an upgrade process, upgrading placement becomes first in order to make rolling upgrades ? That\u0027s seriously a big assumption.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"  CREATE TABLE resource_provider_traits ("},{"line_number":217,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_ea2f279f","line":214,"in_reply_to":"ba2be162_b452fedb","updated":"2017-03-01 08:54:27.000000000","message":"yes, just as Dan said. The compute nodes can ignore the unknown traits when report.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"  CREATE TABLE resource_provider_traits ("},{"line_number":217,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_b452fedb","line":214,"in_reply_to":"ba2be162_e5e771aa","updated":"2017-02-28 22:08:53.000000000","message":"Why? Currently we upgrade control services (including scheduler) before compute nodes, and I think most everyone upgrades all downstream services before nova. Note that this is called out in Deployer Impact below.\n\nEither way, as I said above, I think the compute nodes can probably gracefully handle traits that are not supported by placement since the traits exposed by placement are discoverable.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e19080ba808c6d73016c261bb26b1b848b1f09f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    name VARCHAR(255) NOT NULL,"},{"line_number":212,"context_line":"    PRIMARY KEY (id),"},{"line_number":213,"context_line":"    UNIQUE INDEX (name)"},{"line_number":214,"context_line":"  );"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"  CREATE TABLE resource_provider_traits ("},{"line_number":217,"context_line":"    resource_provider_id INT NOT NULL"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_c1f161cf","line":214,"in_reply_to":"ba2be162_ea2f279f","updated":"2017-03-01 09:35:28.000000000","message":"Okay for now, given only compute nodes would report traits. But IIRC, we have the plan to have both Cinder, Neutron and other services that would *also* report traits, right? In that case, it would mean that Placement engine would need to be upgraded first, hence my comment.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    resource_provider_id INT NOT NULL"},{"line_number":218,"context_line":"    trait_id INT NOT NULL,"},{"line_number":219,"context_line":"    PRIMARY KEY (resource_provider_id, trait_id),"},{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_818ae5bd","line":220,"updated":"2017-03-01 23:20:39.000000000","message":"meh, remove the above line, since it\u0027s redundant if you respin.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    PRIMARY KEY (resource_provider_id, trait_id),"},{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_c5d7cd21","line":222,"updated":"2017-02-28 16:45:57.000000000","message":"Given the top-priority we agreed during PTG to first merge the data model, I think we should split this spec into 2 different blueprints, so we could first accept the very simple and straightforward DB implementation, while we would need more time for discussing about the REST API","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    PRIMARY KEY (resource_provider_id, trait_id),"},{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_617171e0","line":222,"in_reply_to":"ba2be162_c5d7cd21","updated":"2017-03-01 23:20:39.000000000","message":"I don\u0027t think that\u0027s necessary. We\u0027ve gone through this spec a few times already and I think we should push through on it.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_053ac536","line":223,"updated":"2017-02-28 16:45:57.000000000","message":"Given the above alternative about namespacing, I\u0027d like to discuss more about the object model, and what could be a Trait object.\n\nWhile I understand the data model impact, I\u0027d love also to see how we can have a good object layer for providing us both backwards compatibility between traits having different versions (particularly given n-cpus can have different versions) and also namespacing usage","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_d4d21234","line":223,"in_reply_to":"ba2be162_053ac536","updated":"2017-02-28 22:08:53.000000000","message":"A trait is a string. I\u0027m not sure what the major modeling need is here, nor why the version of the compute node has anything to do with how we store it. Can you elaborate?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_ed1d8167","line":223,"in_reply_to":"ba2be162_d4d21234","updated":"2017-03-01 08:54:27.000000000","message":"yea, actually we filter the traits by namespace from the DB directly. So i\u0027m not sure why we need to put an attributes for namespace in the object model.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_413c6de2","line":223,"in_reply_to":"ba2be162_e1c5855b","updated":"2017-03-01 23:20:39.000000000","message":"yeah, agree that a flat string with string prefix \"namespaces\" is perfectly reasonable.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e19080ba808c6d73016c261bb26b1b848b1f09f","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    INDEX (resource_provider_id, trait_id)"},{"line_number":221,"context_line":"  );"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"REST API impact"},{"line_number":225,"context_line":"---------------"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_e1c5855b","line":223,"in_reply_to":"ba2be162_ed1d8167","updated":"2017-03-01 09:35:28.000000000","message":"Okay, fair enough, I don\u0027t want to nitpick on that. I just think a flat model is maybe not rich enough, but I have nothing in mind yet for justifying me on that.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    \"pattern\": \"^[A-Z0-9_:]+$\""},{"line_number":245,"context_line":"  }"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"The custom trait must prefiexes with `CUSTOM:`, the json-schema is as below::"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"  CUSTOM_TRAIT \u003d {"},{"line_number":250,"context_line":"    \"type\": \"string\","}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_1c03ba0e","line":247,"updated":"2017-03-01 23:20:39.000000000","message":"s/prefiexes/prefixed/","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"  CUSTOM_TRAIT \u003d {"},{"line_number":250,"context_line":"    \"type\": \"string\","},{"line_number":251,"context_line":"    \u0027minLength\u0027: 1, \u0027maxLength\u0027: 255,"},{"line_number":252,"context_line":"    \"pattern\": \"^CUSTOM:[A-Z0-9_:]+$\""},{"line_number":253,"context_line":"  }"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"The added API endpoints are:"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_5c0d3236","line":252,"updated":"2017-03-01 23:20:39.000000000","message":"replace : with _ and this should align nicely with the resource class naming standards. ++","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":249,"context_line":"  CUSTOM_TRAIT \u003d {"},{"line_number":250,"context_line":"    \"type\": \"string\","},{"line_number":251,"context_line":"    \u0027minLength\u0027: 1, \u0027maxLength\u0027: 255,"},{"line_number":252,"context_line":"    \"pattern\": \"^CUSTOM:[A-Z0-9_:]+$\""},{"line_number":253,"context_line":"  }"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"The added API endpoints are:"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_6ef22ed4","line":252,"in_reply_to":"ba2be162_5c0d3236","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":255,"context_line":"The added API endpoints are:"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_74924659","line":258,"updated":"2017-02-28 22:08:53.000000000","message":"This seems not that useful and potentially dangerous, but I\u0027m not overly concerned. Just.. saying.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":255,"context_line":"The added API endpoints are:"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_ed34a1df","line":258,"in_reply_to":"ba2be162_74924659","updated":"2017-03-01 08:54:27.000000000","message":"yea...a little dangerous. Initial I just thought it is convenient. I\u0027m ok to remove it if anyone have strong concern on it.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"},{"line_number":262,"context_line":"* `PUT /traits/{trait}` a new custom trait to placement service"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_bc354edb","line":259,"updated":"2017-03-01 23:20:39.000000000","message":"Recommend removing this REST API endpoint. Too dangerous and not really useful IMHO.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"},{"line_number":262,"context_line":"* `PUT /traits/{trait}` a new custom trait to placement service"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_b8262cb8","line":259,"in_reply_to":"ba2be162_bc354edb","updated":"2017-03-02 07:58:36.000000000","message":"OK, so I think I can remove `PUT /traits` and `GET /traits`","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"},{"line_number":262,"context_line":"* `PUT /traits/{trait}` a new custom trait to placement service"},{"line_number":263,"context_line":"* `DELETE /traits/{trait}` a custom trait from placement service"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_1c2ada7e","line":260,"updated":"2017-03-01 23:20:39.000000000","message":"Remove the above per our discussion this morning.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":257,"context_line":"* `GET /traits` a list of valid trait strings"},{"line_number":258,"context_line":"* `PUT /traits` a list of traits to update all the custom traits"},{"line_number":259,"context_line":"* `DELETE /traits` all the custom traits"},{"line_number":260,"context_line":"* `GET /traits/namespaces` list all the namespaces"},{"line_number":261,"context_line":"* `GET /traits/{trait}` a trait to check whether it is valid in cloud"},{"line_number":262,"context_line":"* `PUT /traits/{trait}` a new custom trait to placement service"},{"line_number":263,"context_line":"* `DELETE /traits/{trait}` a custom trait from placement service"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_6e04eebf","line":260,"in_reply_to":"ba2be162_1c2ada7e","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8b6972d180c49d46b28a86728500b57f322b132","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    {"},{"line_number":303,"context_line":"        \"traits\": ["},{"line_number":304,"context_line":"            \"HW:CPU:X86:3DNOW\","},{"line_number":305,"context_line":"            \"HW:CPU:X86:ABM\","},{"line_number":306,"context_line":"            ..."},{"line_number":307,"context_line":"            \"CUSTOM:TRAIT:1\","},{"line_number":308,"context_line":"            \"CUSTOM:TRAIT:2\""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_e56cd10a","line":305,"updated":"2017-02-28 16:45:57.000000000","message":"so, say Placement understand os-traits-1.1, a new trait given in 1.2 wouldn\u0027t be shown ?\n\nHow can also os-traits can signal some deprecated trait ? I\u0027m a bit afraid of the number of possible traits showing up in the future if we don\u0027t have a way to stop using traits we no longer think useful.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    {"},{"line_number":303,"context_line":"        \"traits\": ["},{"line_number":304,"context_line":"            \"HW:CPU:X86:3DNOW\","},{"line_number":305,"context_line":"            \"HW:CPU:X86:ABM\","},{"line_number":306,"context_line":"            ..."},{"line_number":307,"context_line":"            \"CUSTOM:TRAIT:1\","},{"line_number":308,"context_line":"            \"CUSTOM:TRAIT:2\""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_ad962992","line":305,"in_reply_to":"ba2be162_94adfa8a","updated":"2017-03-01 08:54:27.000000000","message":"yes. There should be a process of trait deprecating for os-traits library. To note people a trait is depreciated, then waiting for nobody using that trait, and then remove it from the os-traits.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    {"},{"line_number":303,"context_line":"        \"traits\": ["},{"line_number":304,"context_line":"            \"HW:CPU:X86:3DNOW\","},{"line_number":305,"context_line":"            \"HW:CPU:X86:ABM\","},{"line_number":306,"context_line":"            ..."},{"line_number":307,"context_line":"            \"CUSTOM:TRAIT:1\","},{"line_number":308,"context_line":"            \"CUSTOM:TRAIT:2\""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_94adfa8a","line":305,"in_reply_to":"ba2be162_e56cd10a","updated":"2017-02-28 22:08:53.000000000","message":"Why do we have to hide traits from 1.2?\n\nI\u0027m not sure what the concern is over deprecated traits. Placement merely knows about traits, and I would expect there is no reason for it to ever forget about a trait (or not until long after it has gone out of use). The important piece of deprecating a traits would be having things no longer expose it, not having placement remove it from this list, right?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"Example::"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    GET /traits?namespace\u003dCUSTOM:"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"The response::"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_b4c11e31","line":324,"range":{"start_line":324,"start_character":32,"end_line":324,"end_character":33},"updated":"2017-02-28 22:08:53.000000000","message":"Do we need to pass the trailing colon? Also, presumably this is really a prefix operation, right? Such that we can ask for:\n\n ?namespace\u003dCUSTOM:GPUS:\n\nand get:\n\n CUSTOM:GPUS:NVIDIA\n CUSTOM:GPUS:RADEON\n\nright?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"Example::"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    GET /traits?namespace\u003dCUSTOM:"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"The response::"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_fce9861b","line":324,"range":{"start_line":324,"start_character":32,"end_line":324,"end_character":33},"in_reply_to":"ba2be162_180131af","updated":"2017-03-01 23:20:39.000000000","message":"Per the discussion on IRC this morning, let\u0027s go with:\n\nGET /traits?name\u003dstarts_with:$PREFIX","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"Example::"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    GET /traits?namespace\u003dCUSTOM:"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"The response::"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_180131af","line":324,"range":{"start_line":324,"start_character":32,"end_line":324,"end_character":33},"in_reply_to":"ba2be162_b4c11e31","updated":"2017-03-01 08:54:27.000000000","message":"The trailing colon was added by os-traits https://github.com/openstack/os-traits/blob/master/os_traits/const.py#L70\n\nI guess, it means the traits is just a string. The namespace actually is a prefix. The prefix includes the trailing colon.\n\nActually, I want to validate the namespace whether valid or not. We also have API \"GET /traits/namespaces\". And all the valid namespaces are coming from os-traits https://github.com/openstack/os-traits/blob/master/os_traits/const.py#L70. You can see what would you got in line 370\n\nSo \"CUSTOM:GPUS\" won\u0027t be supported, as os-traits didn\u0027t know about it.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":338,"context_line":"`GET` /traits?associated\u003d{True|False}"},{"line_number":339,"context_line":"*************************************"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"To query the traits that have been associated with resource provider in the"},{"line_number":342,"context_line":"placement service, use the parameter `associated` to filter them out."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"`GET` /traits?traits\u003da,b,c"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_74cec65b","line":341,"range":{"start_line":341,"start_character":35,"end_line":341,"end_character":68},"updated":"2017-02-28 22:08:53.000000000","message":"Did you mean \"associated with ANY resource providers\"  here?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":338,"context_line":"`GET` /traits?associated\u003d{True|False}"},{"line_number":339,"context_line":"*************************************"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"To query the traits that have been associated with resource provider in the"},{"line_number":342,"context_line":"placement service, use the parameter `associated` to filter them out."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"`GET` /traits?traits\u003da,b,c"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_382c354a","line":341,"range":{"start_line":341,"start_character":35,"end_line":341,"end_character":68},"in_reply_to":"ba2be162_74cec65b","updated":"2017-03-01 08:54:27.000000000","message":"yes","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":345,"context_line":"**************************"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":348,"context_line":"`traits` to validate traits by the below example::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    GET /traits?traits\u003dHW:CPU:X76:AVX,HW:CPU:X86:SSE,HW:CPU:X86:INVALID_FEATURE"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_34036e75","line":348,"updated":"2017-02-28 22:08:53.000000000","message":"Not only this, but compute nodes can use this on startup to validate the traits they are about to expose, right? To address Sylvain\u0027s concern above, we can check for traits from later versions of the library if needed to be graceful about things we expose?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":345,"context_line":"**************************"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":348,"context_line":"`traits` to validate traits by the below example::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    GET /traits?traits\u003dHW:CPU:X76:AVX,HW:CPU:X86:SSE,HW:CPU:X86:INVALID_FEATURE"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_8d49658e","line":348,"in_reply_to":"ba2be162_34036e75","updated":"2017-03-01 08:54:27.000000000","message":"Yes, this is the API used to validate the valid traits.\n\nInitially, I thought we validate the traits before report the traits, probably at https://review.openstack.org/#/c/417288/5/nova/scheduler/client/report.py\n\nBecause the traits are collected from virt-driver or other modules from compute node, there isn\u0027t central place to register traits.\n\nBut yes, validating the traits in each report sounds waste. Anyway for where we validate the traits in the compute nodes should be another proposal.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c92798f87509f587a605f8f3dd37c6e9ffb86a5","unresolved":false,"context_lines":[{"line_number":347,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":348,"context_line":"`traits` to validate traits by the below example::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    GET /traits?traits\u003dHW:CPU:X76:AVX,HW:CPU:X86:SSE,HW:CPU:X86:INVALID_FEATURE"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"Its response::"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_dce1229c","line":350,"updated":"2017-03-01 23:20:39.000000000","message":"per discussion this morning on IRC, I\u0027d like to see this as:\n\n GET /traits?name\u003din:HW_CPU_X86_AVX,HW_CPU_X86_SSE\n\nfor the \"any of these\" query.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4bce9c967f690351696e105262b3951c7c9a93","unresolved":false,"context_lines":[{"line_number":347,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":348,"context_line":"`traits` to validate traits by the below example::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    GET /traits?traits\u003dHW:CPU:X76:AVX,HW:CPU:X86:SSE,HW:CPU:X86:INVALID_FEATURE"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"Its response::"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_6e1b0e1c","line":350,"in_reply_to":"ba2be162_dce1229c","updated":"2017-03-02 07:58:36.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"a92a61f4ed092d69af0901ae679f5d6f88195468","unresolved":false,"context_lines":[{"line_number":423,"context_line":"* `200 OK` if successfully updated."},{"line_number":424,"context_line":"* `400 BadRequest` if any trait name conflicts with standard trait names."},{"line_number":425,"context_line":"* `409 Conflict` if any trait to delete has associations with any"},{"line_number":426,"context_line":"  ResourceProvider."},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"`DELETE` /traits"},{"line_number":429,"context_line":"****************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa31d9ce_96a69b51","line":426,"updated":"2017-02-13 08:55:38.000000000","message":"report error if the trait name is not under \"CUSTOM:\" namespace.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":423,"context_line":"* `200 OK` if successfully updated."},{"line_number":424,"context_line":"* `400 BadRequest` if any trait name conflicts with standard trait names."},{"line_number":425,"context_line":"* `409 Conflict` if any trait to delete has associations with any"},{"line_number":426,"context_line":"  ResourceProvider."},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"`DELETE` /traits"},{"line_number":429,"context_line":"****************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_4d368d04","line":426,"in_reply_to":"fa31d9ce_96a69b51","updated":"2017-03-01 08:54:27.000000000","message":"yea","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"a92a61f4ed092d69af0901ae679f5d6f88195468","unresolved":false,"context_lines":[{"line_number":451,"context_line":"`PUT` /traits/{trait_name}"},{"line_number":452,"context_line":"**************************"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"This API is to insert a single trait without having to send the entire trait"},{"line_number":455,"context_line":"list::"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    PUT /traits/CUSTOM:TRAIT_1"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa31d9ce_d64d739a","line":454,"range":{"start_line":454,"start_character":22,"end_line":454,"end_character":30},"updated":"2017-02-13 08:55:38.000000000","message":"a single custom","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":451,"context_line":"`PUT` /traits/{trait_name}"},{"line_number":452,"context_line":"**************************"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"This API is to insert a single trait without having to send the entire trait"},{"line_number":455,"context_line":"list::"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    PUT /traits/CUSTOM:TRAIT_1"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_2d187984","line":454,"range":{"start_line":454,"start_character":22,"end_line":454,"end_character":30},"in_reply_to":"fa31d9ce_d64d739a","updated":"2017-03-01 08:54:27.000000000","message":"yes, \u0027custom\u0027","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"a92a61f4ed092d69af0901ae679f5d6f88195468","unresolved":false,"context_lines":[{"line_number":463,"context_line":"The returned response will be one of the following:"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":466,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":469,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa31d9ce_36788fc4","line":466,"updated":"2017-02-13 08:55:38.000000000","message":"report error if the trait name is not under \"CUSTOM:\" namespace.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":463,"context_line":"The returned response will be one of the following:"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":466,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":469,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_8d17a550","line":466,"in_reply_to":"ba2be162_94f25a99","updated":"2017-03-01 08:54:27.000000000","message":"Done","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":463,"context_line":"The returned response will be one of the following:"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":466,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":469,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_94f25a99","line":466,"in_reply_to":"fa31d9ce_36788fc4","updated":"2017-02-28 22:08:53.000000000","message":"+1","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":477,"context_line":"* `400 BadRequest` if the name to delete is standard trait."},{"line_number":478,"context_line":"* `409 Confilct` if the name to delete has associations with any"},{"line_number":479,"context_line":"  ResourceProvider."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"`GET` /resource_providers/{uuid}/traits"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_d42a12e7","line":478,"range":{"start_line":478,"start_character":7,"end_line":478,"end_character":15},"updated":"2017-02-28 22:08:53.000000000","message":"\"Conflict\"","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":476,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":477,"context_line":"* `400 BadRequest` if the name to delete is standard trait."},{"line_number":478,"context_line":"* `409 Confilct` if the name to delete has associations with any"},{"line_number":479,"context_line":"  ResourceProvider."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"`GET` /resource_providers/{uuid}/traits"},{"line_number":482,"context_line":"***************************************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_14358a45","line":479,"updated":"2017-02-28 22:08:53.000000000","message":"404 if no such trait exists?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":476,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":477,"context_line":"* `400 BadRequest` if the name to delete is standard trait."},{"line_number":478,"context_line":"* `409 Confilct` if the name to delete has associations with any"},{"line_number":479,"context_line":"  ResourceProvider."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"`GET` /resource_providers/{uuid}/traits"},{"line_number":482,"context_line":"***************************************"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_38ffd502","line":479,"in_reply_to":"ba2be162_14358a45","updated":"2017-03-01 08:54:27.000000000","message":"yes","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":636,"context_line":""},{"line_number":637,"context_line":"* Add DB Schema for Traits"},{"line_number":638,"context_line":"* Add Traits related object"},{"line_number":639,"context_line":"* Implement the Traits API in placement API"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"Dependencies"},{"line_number":642,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_944edabf","line":639,"updated":"2017-02-28 22:08:53.000000000","message":"I wouldn\u0027t nit over this, but you might want to break this up into:\n\n * API for setting traits on resource providers\n * API for managing custom traits\n\nOr even maybe more fine-grained, just to call out what we discussed at PTG around rushing the first bit so we can tag compute nodes accordingly.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":636,"context_line":""},{"line_number":637,"context_line":"* Add DB Schema for Traits"},{"line_number":638,"context_line":"* Add Traits related object"},{"line_number":639,"context_line":"* Implement the Traits API in placement API"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"Dependencies"},{"line_number":642,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_582ba982","line":639,"in_reply_to":"ba2be162_944edabf","updated":"2017-03-01 08:54:27.000000000","message":"yes, actually the POC separates the task like that https://review.openstack.org/#/q/topic:bp/resource-provider-tags, I will update the list.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3dcbf705d4c7607f4631b2d37ff2bfd230db6bdb","unresolved":false,"context_lines":[{"line_number":647,"context_line":"Testing"},{"line_number":648,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"Unit and functional tests should be added to ensure the Traits API works."},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"Documentation Impact"},{"line_number":653,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_54db82ed","line":650,"updated":"2017-02-28 22:08:53.000000000","message":"Hopefully we\u0027re growing some placement tests in tempest at some point?","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f0eb42de5ee20b6c6a7a9a34cfec99201476114","unresolved":false,"context_lines":[{"line_number":647,"context_line":"Testing"},{"line_number":648,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"Unit and functional tests should be added to ensure the Traits API works."},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"Documentation Impact"},{"line_number":653,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ba2be162_b83ae5cb","line":650,"in_reply_to":"ba2be162_54db82ed","updated":"2017-03-01 08:54:27.000000000","message":"yes, but I guess Jay and Chris can give some answer at here.","commit_id":"e10ae24271d6b0dc2052dccf0e26b79e3b31f4ee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c9a55247b8f0c86bf2f5205501d817cf513c0c6e","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    be included in the response. Nova can thus be aware of invalid traits and"},{"line_number":381,"context_line":"    provide an informative response to users."},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"`GET /traits/namespaces`"},{"line_number":384,"context_line":"************************"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"This lists all the valid namespaces."}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba2be162_50744e34","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":24},"updated":"2017-03-01 14:10:55.000000000","message":"This API leads to placement API still need to import os-traits API. And may return different result when different placement API node installed different version of os-traits.\n\nSo....should we sync the namespace into the placement db also?","commit_id":"daa016fdab5b82387842c9b486902765c9f17793"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":60,"context_line":"There are two kinds of Traits: The standard traits and the custom traits."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The standard traits are interoperable across different Openstack cloud"},{"line_number":63,"context_line":"deployments. The definition of standard traits comes from `os-traits` library."},{"line_number":64,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":65,"context_line":"can\u0027t modify any standard traits through API. All the traits are classified"},{"line_number":66,"context_line":"into different namespace. The namespace is defined by `os-traits` also."}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_1e653d1d","line":63,"updated":"2017-03-02 17:20:29.000000000","message":"s/from/from the/","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The standard traits are interoperable across different Openstack cloud"},{"line_number":63,"context_line":"deployments. The definition of standard traits comes from `os-traits` library."},{"line_number":64,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":65,"context_line":"can\u0027t modify any standard traits through API. All the traits are classified"},{"line_number":66,"context_line":"into different namespace. The namespace is defined by `os-traits` also."},{"line_number":67,"context_line":"The definition of traits in `os-traits` will be discussed in a separate"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_be76f1d4","line":64,"updated":"2017-03-02 17:20:29.000000000","message":"The standard traits are read-only in the placement API which means that the user...","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":63,"context_line":"deployments. The definition of standard traits comes from `os-traits` library."},{"line_number":64,"context_line":"The standard trait is read-only in the placement API which means that user"},{"line_number":65,"context_line":"can\u0027t modify any standard traits through API. All the traits are classified"},{"line_number":66,"context_line":"into different namespace. The namespace is defined by `os-traits` also."},{"line_number":67,"context_line":"The definition of traits in `os-traits` will be discussed in a separate"},{"line_number":68,"context_line":"proposal. All the traits used in examples below are for demonstration purposes"},{"line_number":69,"context_line":"only."}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_3e3841ef","line":66,"updated":"2017-03-02 17:20:29.000000000","message":"into different namespaces. The namespaces are also defined by `os-traits`.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":65,"context_line":"can\u0027t modify any standard traits through API. All the traits are classified"},{"line_number":66,"context_line":"into different namespace. The namespace is defined by `os-traits` also."},{"line_number":67,"context_line":"The definition of traits in `os-traits` will be discussed in a separate"},{"line_number":68,"context_line":"proposal. All the traits used in examples below are for demonstration purposes"},{"line_number":69,"context_line":"only."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"The custom traits are used by admin users to manage the non-standard"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_be2431c5","line":68,"updated":"2017-03-02 17:20:29.000000000","message":"the examples","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":121,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4) The cloud deployer defines the custom trait `STORAGE_SSD`::"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_505152d7","line":123,"range":{"start_line":123,"start_character":3,"end_line":123,"end_character":60},"updated":"2017-03-02 23:12:33.000000000","message":"So does this mean that we will automatically add the \u0027CUSTOM_\u0027 prefix? And if they search for a trait, they can specify either \u0027CUSTOM_STORAGE_SSD\u0027 or \u0027STORAGE_SSD\u0027, and get the same result?\n\nI think that this is going to be a problem, since something like \u0027STORAGE_SSD\u0027 might someday be added as a standard trait to os-traits, and now there is confusion as to which one is meant. If they are going to add custom traits, they should be specified with the namespace prefix.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        --min-unit\u003d50 --max-unit\u003d10000 --step-size\u003d10 \\"},{"line_number":121,"context_line":"        --allocation-ratio\u003d1.0"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4) The cloud deployer defines the custom trait `STORAGE_SSD`::"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    openstack trait add STORAGE_SSD"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_aa2da447","line":123,"range":{"start_line":123,"start_character":3,"end_line":123,"end_character":60},"in_reply_to":"ba2be162_505152d7","updated":"2017-03-03 14:01:46.000000000","message":"ah, actually Jay are thinking put the \u0027STORAGE_SSD\u0027 into os-traits. So I removed the \u0027CUSTOM_\u0027 prefix at here. So I forget to remove this step, as \u0027STORAGE_SSD\u0027 becomes a standard trait.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"90183e22584daeb57c18c6b324198fd5178427ad","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    openstack resource-provider trait add $RP_UUD STORAGE_SSD"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Sync the os-traits into Placement"},{"line_number":134,"context_line":"---------------------------------"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The placement API is the single central place to validate the valid traits in"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_78ebb178","line":133,"range":{"start_line":133,"start_character":5,"end_line":133,"end_character":9},"updated":"2017-03-02 16:37:19.000000000","message":"s/^.*$/Sync os-traits values into Placement DB","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"90183e22584daeb57c18c6b324198fd5178427ad","unresolved":false,"context_lines":[{"line_number":133,"context_line":"Sync the os-traits into Placement"},{"line_number":134,"context_line":"---------------------------------"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The placement API is the single central place to validate the valid traits in"},{"line_number":137,"context_line":"the deployment. This avoid to have upgrade isuess when multiple different"},{"line_number":138,"context_line":"version `os_traits` are in the deployment."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"The new command `placement-manage os-traits sync` will be added. It is used to"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_1b762fa4","line":137,"range":{"start_line":136,"start_character":14,"end_line":137,"end_character":15},"updated":"2017-03-02 16:37:19.000000000","message":"The Placement API is designed to be the single source of truth for validing which traits are available for a specific deployment. There is no hard dependency chain for upgrading services, but operators have to keep in mind that only Placement API os-traits version will be the master version for all the deployment.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":133,"context_line":"Sync the os-traits into Placement"},{"line_number":134,"context_line":"---------------------------------"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The placement API is the single central place to validate the valid traits in"},{"line_number":137,"context_line":"the deployment. This avoid to have upgrade isuess when multiple different"},{"line_number":138,"context_line":"version `os_traits` are in the deployment."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"The new command `placement-manage os-traits sync` will be added. It is used to"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_aa892428","line":137,"range":{"start_line":136,"start_character":14,"end_line":137,"end_character":15},"in_reply_to":"ba2be162_1b762fa4","updated":"2017-03-03 14:01:46.000000000","message":"Thanks.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":312,"context_line":"`GET` /traits?name\u003dstarts_with:{prefix}"},{"line_number":313,"context_line":"***************************************"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"The query parameter `namespace` is used to filter traits based on the"},{"line_number":316,"context_line":"namespace. For example, you can filter the custom traits with namespace"},{"line_number":317,"context_line":"`CUSTOM_`."},{"line_number":318,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_210744cb","line":315,"updated":"2017-03-02 17:20:29.000000000","message":"You use a literal `namespace` here but it is `name` above and in the examples below. Looks like this needs to be updated to reflect the change to just name.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":312,"context_line":"`GET` /traits?name\u003dstarts_with:{prefix}"},{"line_number":313,"context_line":"***************************************"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"The query parameter `namespace` is used to filter traits based on the"},{"line_number":316,"context_line":"namespace. For example, you can filter the custom traits with namespace"},{"line_number":317,"context_line":"`CUSTOM_`."},{"line_number":318,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_340bd92b","line":315,"in_reply_to":"ba2be162_210744cb","updated":"2017-03-03 14:01:46.000000000","message":"yea, thanks","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Example::"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    GET /traits?name\u003dstarts_with:CUSTOM"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"The response::"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_a1fb34c0","line":321,"updated":"2017-03-02 17:20:29.000000000","message":"To be explicitly correct presumably this should be `starts_with:CUSTOM_`?","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Example::"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    GET /traits?name\u003dstarts_with:CUSTOM"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"The response::"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_6f49fe5f","line":321,"in_reply_to":"ba2be162_a1fb34c0","updated":"2017-03-03 14:01:46.000000000","message":"yes, to match line 317. but to be clear, we support filter by \"CU\", \"CUST\", or \"CUSTOM_GPU\". The valid value didn\u0027t limit to the namespace defined by os-traits anymore","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":336,"context_line":"*************************************"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"To query the traits that have been associated with any resource provider in the"},{"line_number":339,"context_line":"placement service, use the parameter `associated` to filter them out."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"`GET` /traits?name\u003din:a,b,c"},{"line_number":342,"context_line":"***************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_413358ab","line":339,"updated":"2017-03-02 17:20:29.000000000","message":"You may wish to explain this a bit more to say that this returns those traits which are available in this cloud.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":336,"context_line":"*************************************"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"To query the traits that have been associated with any resource provider in the"},{"line_number":339,"context_line":"placement service, use the parameter `associated` to filter them out."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"`GET` /traits?name\u003din:a,b,c"},{"line_number":342,"context_line":"***************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_af3856a1","line":339,"in_reply_to":"ba2be162_413358ab","updated":"2017-03-03 14:01:46.000000000","message":"I remember we have a discussion on the Barcelona Summit about \u0027available\u0027. The \u0027available\u0027 is confuse. The cloud may have the resource with specific trait, but there is no more such resource can be allocated anymore. It is hard to say that is \u0027available\u0027.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":342,"context_line":"***************************"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":345,"context_line":"`traits` to validate traits by the below example::"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    GET /traits?name\u003din:HW_CPU_X86_AVX,HW_CPU_X86_SSE,HW_CPU_X86_INVALID_FEATURE"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_01ede0ee","line":345,"updated":"2017-03-02 17:20:29.000000000","message":"This description and the example and title don\u0027t correspond.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":342,"context_line":"***************************"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"When admin-user creates flavor specifing trait strings. Nova can use parameter"},{"line_number":345,"context_line":"`traits` to validate traits by the below example::"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    GET /traits?name\u003din:HW_CPU_X86_AVX,HW_CPU_X86_SSE,HW_CPU_X86_INVALID_FEATURE"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_4f4a7a27","line":345,"in_reply_to":"ba2be162_01ede0ee","updated":"2017-03-03 14:01:46.000000000","message":"Actually this is a use-case. This API is used to valid the traits whether valid in the cloud.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":403,"context_line":"* `200 OK` if successfully updated."},{"line_number":404,"context_line":"* `400 BadRequest` if any trait name conflicts with standard trait names or the"},{"line_number":405,"context_line":"   trait name isn\u0027t prefix with `CUSTOM_` namespace."},{"line_number":406,"context_line":"* `409 Conflict` if any trait to delete has associations with any"},{"line_number":407,"context_line":"  ResourceProvider."},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"`DELETE` /traits"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_019b2073","line":406,"updated":"2017-03-02 17:20:29.000000000","message":"\"if any trait that would be removed as a result of all traits being replaced has associations with any\"\n\nAs written it sounds like some traits are being explicitly deleted which is not quite the case.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":403,"context_line":"* `200 OK` if successfully updated."},{"line_number":404,"context_line":"* `400 BadRequest` if any trait name conflicts with standard trait names or the"},{"line_number":405,"context_line":"   trait name isn\u0027t prefix with `CUSTOM_` namespace."},{"line_number":406,"context_line":"* `409 Conflict` if any trait to delete has associations with any"},{"line_number":407,"context_line":"  ResourceProvider."},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"`DELETE` /traits"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_7014969f","line":406,"in_reply_to":"ba2be162_019b2073","updated":"2017-03-02 23:12:33.000000000","message":"Yes, this needs to be much more clearly stated, as this PUT is a destructive call.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":403,"context_line":"* `200 OK` if successfully updated."},{"line_number":404,"context_line":"* `400 BadRequest` if any trait name conflicts with standard trait names or the"},{"line_number":405,"context_line":"   trait name isn\u0027t prefix with `CUSTOM_` namespace."},{"line_number":406,"context_line":"* `409 Conflict` if any trait to delete has associations with any"},{"line_number":407,"context_line":"  ResourceProvider."},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"`DELETE` /traits"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_e5fb4d79","line":406,"in_reply_to":"ba2be162_7014969f","updated":"2017-03-03 14:01:46.000000000","message":"thanks. a little complex sentence. Try to understand it by \"If any trait [that would be removed as a result of all traits being replaced] has associations with any\"","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":417,"context_line":"The returned response will be one of the following:"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":420,"context_line":"* `409 Conflict` if any trait to delete has associations with ResourceProvider."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"`GET` /traits/{trait_name}"},{"line_number":423,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_90f58a58","line":420,"range":{"start_line":420,"start_character":17,"end_line":420,"end_character":39},"updated":"2017-03-02 23:12:33.000000000","message":"Will this take a query parameter? IOW, if I just want to delete some traits, would DELETE /traits?name\u003din:foo,bar be allowed to just delete the foo and bar traits?","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":417,"context_line":"The returned response will be one of the following:"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"* `204 No Content` if the removal is successful."},{"line_number":420,"context_line":"* `409 Conflict` if any trait to delete has associations with ResourceProvider."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"`GET` /traits/{trait_name}"},{"line_number":423,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_0f5b22f7","line":420,"range":{"start_line":420,"start_character":17,"end_line":420,"end_character":39},"in_reply_to":"ba2be162_90f58a58","updated":"2017-03-03 14:01:46.000000000","message":"oops, this API is deleted as Jay\u0027s comment, he think this API is too dangerous","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":422,"context_line":"`GET` /traits/{trait_name}"},{"line_number":423,"context_line":"**************************"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"This API is to check if a trait name is valid or not."},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"The returned response will be one of the following:"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_d0a2a24a","line":425,"range":{"start_line":425,"start_character":37,"end_line":425,"end_character":46},"updated":"2017-03-02 23:12:33.000000000","message":"It\u0027s not checking validity; it\u0027s checking if it exists.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":422,"context_line":"`GET` /traits/{trait_name}"},{"line_number":423,"context_line":"**************************"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"This API is to check if a trait name is valid or not."},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"The returned response will be one of the following:"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_6f6ade82","line":425,"range":{"start_line":425,"start_character":37,"end_line":425,"end_character":46},"in_reply_to":"ba2be162_d0a2a24a","updated":"2017-03-03 14:01:46.000000000","message":"ah, yea, thanks","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"90183e22584daeb57c18c6b324198fd5178427ad","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":447,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":448,"context_line":"  the trait name isn\u0027t prefix with `CUSTOM_` prefix."},{"line_number":449,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"`DELETE` /traits/{trait_name}"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_1b9d4fbc","line":448,"range":{"start_line":448,"start_character":23,"end_line":448,"end_character":29},"updated":"2017-03-02 16:37:19.000000000","message":"prefixed","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":446,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":447,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":448,"context_line":"  the trait name isn\u0027t prefix with `CUSTOM_` prefix."},{"line_number":449,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":452,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_818630d9","line":449,"updated":"2017-03-02 17:20:29.000000000","message":"You mean if it already exists in this deployment? I think a 204 would make more sense and be more idempotent. It should be legit to `PUT /traits/CUSTOM_TRAIT_1` over and over again and for things to work just fine.\n\nIn fact you might consider 204 to be the only success response, and never return 201.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":446,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":447,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":448,"context_line":"  the trait name isn\u0027t prefix with `CUSTOM_` prefix."},{"line_number":449,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":452,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_d0b9c27a","line":449,"in_reply_to":"ba2be162_818630d9","updated":"2017-03-02 23:12:33.000000000","message":"Agree. Also, it seems odd to get the exact same location in a header. Location headers are for POST, where you don\u0027t know the resource path ahead of time.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":446,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":447,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":448,"context_line":"  the trait name isn\u0027t prefix with `CUSTOM_` prefix."},{"line_number":449,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":452,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_60b74b3a","line":449,"in_reply_to":"ba2be162_d0b9c27a","updated":"2017-03-03 14:01:46.000000000","message":"Emm... we use 409 for resource class API","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":491,"context_line":"* `200 OK` if query is successful."},{"line_number":492,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"`PUT` /resource_providers/{uuid}/traits"},{"line_number":495,"context_line":"***************************************"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"This API is to associate traits with specified resource provider. All the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_93d7544a","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":39},"updated":"2017-03-02 23:12:33.000000000","message":"At the root level there is both:\nPUT /traits (for the full list)\n-and-\nPUT /traits/TRAIT_NAME (to add a single trait)\n\nAre we going to allow that at this level too? IOW:\nPUT /resource_providers/{uuid}/traits (full list)\n-and-\nPUT /resource_providers/{uuid}/traits/TRAIT_NAME (to add a single trait to a RP)","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":491,"context_line":"* `200 OK` if query is successful."},{"line_number":492,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"`PUT` /resource_providers/{uuid}/traits"},{"line_number":495,"context_line":"***************************************"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"This API is to associate traits with specified resource provider. All the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_204d533e","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":39},"in_reply_to":"ba2be162_93d7544a","updated":"2017-03-03 14:01:46.000000000","message":"When I wrote PoC, i d \"PUT /resource_providers/{uuid}/traits/TRAIT_NAME\",  I didi\u0027t have clear cas\nat here.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":535,"context_line":"* `200 OK` if the update is successful."},{"line_number":536,"context_line":"* `400 Bad Request` if any of the specified traits are not valid. The valid"},{"line_number":537,"context_line":"  traits can be queried by `GET /traits`."},{"line_number":538,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":541,"context_line":"******************************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_e14c4cca","line":538,"updated":"2017-03-02 17:20:29.000000000","message":"Since you\u0027re sending the resource_provider_generation, is it going to be validated? If so, then allowance needs to be made for a 409 being returned when the generation is not aligned.","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9455152882b25ed34a9e3d68966298b80288f459","unresolved":false,"context_lines":[{"line_number":535,"context_line":"* `200 OK` if the update is successful."},{"line_number":536,"context_line":"* `400 Bad Request` if any of the specified traits are not valid. The valid"},{"line_number":537,"context_line":"  traits can be queried by `GET /traits`."},{"line_number":538,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":541,"context_line":"******************************************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_604cabc8","line":538,"in_reply_to":"ba2be162_e14c4cca","updated":"2017-03-03 14:01:46.000000000","message":"yes","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"27b16efe55862665ba2570f402401d3e3c778d87","unresolved":false,"context_lines":[{"line_number":540,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":541,"context_line":"******************************************"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"This API is to deassociate all the traits with the specific resource provider."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"The returned response will be one of the following:"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_61cf7c29","line":543,"updated":"2017-03-02 17:20:29.000000000","message":"disassociate?","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f75f25398208c3958e46d798c81f809ff220f99d","unresolved":false,"context_lines":[{"line_number":540,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":541,"context_line":"******************************************"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"This API is to deassociate all the traits with the specific resource provider."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"The returned response will be one of the following:"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_b30d38ea","line":543,"in_reply_to":"ba2be162_61cf7c29","updated":"2017-03-02 23:12:33.000000000","message":"Or dissociate? (super nitpicky)","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"90183e22584daeb57c18c6b324198fd5178427ad","unresolved":false,"context_lines":[{"line_number":592,"context_line":"  services won\u0027t be recognized by Placement service. So when upgrade the cloud"},{"line_number":593,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":594,"context_line":"  need to be upgraded first."},{"line_number":595,"context_line":"* The deployer need to run command `placement-manage os-trait sync` before"},{"line_number":596,"context_line":"  start the placement or new `os-traits` released to ensure the new traits"},{"line_number":597,"context_line":"  are imported into the placement DB."},{"line_number":598,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_5b7a6778","line":595,"range":{"start_line":595,"start_character":15,"end_line":595,"end_character":19},"updated":"2017-03-02 16:37:19.000000000","message":"needs","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"90183e22584daeb57c18c6b324198fd5178427ad","unresolved":false,"context_lines":[{"line_number":593,"context_line":"  to involve the new traits, the `os-traits` library in the placement service"},{"line_number":594,"context_line":"  need to be upgraded first."},{"line_number":595,"context_line":"* The deployer need to run command `placement-manage os-trait sync` before"},{"line_number":596,"context_line":"  start the placement or new `os-traits` released to ensure the new traits"},{"line_number":597,"context_line":"  are imported into the placement DB."},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba2be162_fb8b1b66","line":596,"range":{"start_line":596,"start_character":2,"end_line":596,"end_character":7},"updated":"2017-03-02 16:37:19.000000000","message":"starting Placement API service","commit_id":"d60f13a3fe069794e39d3ecbfcb178b561d8be8b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ba511cfb2e49a7d8a900a56f9b3c63334d64dce5","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_fe61ecd3","line":436,"updated":"2017-03-05 18:17:04.000000000","message":"See my comment on an earlier patchset. I think this is a bad idea. PUT /traits/{name} should create a trait and respond 204. If it already exists, it should still respond 204.\n\nThis makes the request idempotent and removes the need to return a 409 if for some reason something tries to create it again.\n\nWith regard to the precedent already set on creating resource classes see my comments at https://review.openstack.org/#/c/437602/10/nova/scheduler/client/report.py@755 where I suggest we probably got that wrong there too.","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b20699403d382a8deecf2b9d70e0ed92bc61e4e7","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_e2521c12","line":436,"in_reply_to":"ba2be162_b1db1e7b","updated":"2017-03-06 12:02:17.000000000","message":"yes, that would be fine","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1dab6e4444a6d0b3ce9b83687285bc0f6df6fc5c","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_a38ae661","line":436,"in_reply_to":"ba2be162_c2019806","updated":"2017-03-06 13:01:40.000000000","message":"thanks, I got it.","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e77fc76b7ae8e3aa9b00969eab8267cdfdd2ec3d","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_b1db1e7b","line":436,"in_reply_to":"ba2be162_d605e813","updated":"2017-03-06 05:54:58.000000000","message":"And I guess you want to say 201 returned when a new trait created, 204 returned when a trait already existed? I will be cool with that","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b20699403d382a8deecf2b9d70e0ed92bc61e4e7","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_c2019806","line":436,"in_reply_to":"ba2be162_d605e813","updated":"2017-03-06 12:02:17.000000000","message":"The GET is at line 737 in client/report.py and the process there is \"check for existing of the resource class, if it doesn\u0027t exist, create it\" which means there is at least one and sometimes two requests. If instead an idempotent PUT was done, then there would only ever be one request and the code on the client side could be simplified.","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"19594d27fee3b3ff23f45fd3ebb0fd52acc9c4f7","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":434,"context_line":"* `400 BadRequest` if trait name conflicts with standard trait name or"},{"line_number":435,"context_line":"  the trait name isn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":436,"context_line":"* `409 Conflict` if the name is already valid in the placement service."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":439,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_d605e813","line":436,"in_reply_to":"ba2be162_fe61ecd3","updated":"2017-03-06 05:44:03.000000000","message":"Chris, I didn\u0027t get this word \"If we did that, this method can just be a single PUT rather than a GET and a POST.\", I saw there is only one POST at https://review.openstack.org/#/c/437602/10/nova/scheduler/client/report.py@767\n\nWhat is the \"GET\" you pointed to?\n\nFrom the HTTP specifical, yes, the PUT method should be idempotent.\nBut I\u0027m still trying to understand the benefit we got from your suggestion.","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ba511cfb2e49a7d8a900a56f9b3c63334d64dce5","unresolved":false,"context_lines":[{"line_number":522,"context_line":"* `200 OK` if the update is successful."},{"line_number":523,"context_line":"* `400 Bad Request` if any of the specified traits are not valid. The valid"},{"line_number":524,"context_line":"  traits can be queried by `GET /traits`."},{"line_number":525,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":528,"context_line":"******************************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_5ea118f7","line":525,"updated":"2017-03-05 18:17:04.000000000","message":"If the resource provider generation does not match with the server side, this would also send a 409.","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"19594d27fee3b3ff23f45fd3ebb0fd52acc9c4f7","unresolved":false,"context_lines":[{"line_number":522,"context_line":"* `200 OK` if the update is successful."},{"line_number":523,"context_line":"* `400 Bad Request` if any of the specified traits are not valid. The valid"},{"line_number":524,"context_line":"  traits can be queried by `GET /traits`."},{"line_number":525,"context_line":"* `404 Not Found` if the resource provider identified by `{uuid}` is not found."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"`DELETE` /resource_providers/{uuid}/traits"},{"line_number":528,"context_line":"******************************************"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba2be162_f6a4ac4b","line":525,"in_reply_to":"ba2be162_5ea118f7","updated":"2017-03-06 05:44:03.000000000","message":"Done","commit_id":"76e8bd52ef9ac67bd40723ad616a4178a0182cfd"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f61db2342b7cd621e03bd60f91303b613d85b1db","unresolved":false,"context_lines":[{"line_number":226,"context_line":"`/resource_providers/{uuid}/traits`."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"* `/traits`: This is used to manage the traits in the cloud, and this is also"},{"line_number":229,"context_line":"  the only place to query the existed and associated traits in the cloud. It"},{"line_number":230,"context_line":"  helps the traits be consistent across all the services in the cloud. The"},{"line_number":231,"context_line":"  traits can be read by all users and can only be modified by admin users."},{"line_number":232,"context_line":"* `/resource_providers/{uuid}/traits`: This is used to query/edit the"}],"source_content_type":"text/x-rst","patch_set":22,"id":"ba2be162_de7cfaed","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":37},"updated":"2017-03-06 21:07:46.000000000","message":"s/existed/existing","commit_id":"dfbc1a21c95656d60767173f7ea9172e3cd5e0a5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa71864b2407aa6b23de77f7193decdf7fd04024","unresolved":false,"context_lines":[{"line_number":24,"context_line":"resources from a ResourceProvider, the corresponding resource amounts of"},{"line_number":25,"context_line":"Inventories are subtracted by its Allocations. Despite the quantitative"},{"line_number":26,"context_line":"aspects, the ResourceProvider also needs non-consumable *qualitative* aspects"},{"line_number":27,"context_line":"to differenitiate their characteristics from each other."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The classic example is requesting disk from different providers: a user may"},{"line_number":30,"context_line":"request 80GB of disk space for an instance (quantitative), but may also expect"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_23ed85ef","line":27,"updated":"2017-03-09 15:58:53.000000000","message":"good paragraph, ++\n\ns/differenitiate/differentiate/","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa71864b2407aa6b23de77f7193decdf7fd04024","unresolved":false,"context_lines":[{"line_number":71,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":72,"context_line":"qualitative information of ResourceProviders. The admin user can define the"},{"line_number":73,"context_line":"custom traits from the placement API. The custom trait must prefix with"},{"line_number":74,"context_line":"the namespace `CUSTOM_`. The namespace `CUSTOM_` is defined in `os-traits`."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The users can only use valid traits in the request. The valid traits include"},{"line_number":77,"context_line":"the standard traits and the custom traits."}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_03c32139","line":74,"updated":"2017-03-09 15:58:53.000000000","message":"++ good.","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c136494b287579149797e071c3e2185f564b3ea8","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Scenario 2: Shared Storage Resource Provider"},{"line_number":90,"context_line":"--------------------------------------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":93,"context_line":"provider as having SSD trait so that they are only used by flavors that specify"},{"line_number":94,"context_line":"SSD trait."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_f975daf9","line":92,"range":{"start_line":92,"start_character":63,"end_line":92,"end_character":66},"updated":"2017-03-09 16:07:09.000000000","message":"\"tag a\"","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c136494b287579149797e071c3e2185f564b3ea8","unresolved":false,"context_lines":[{"line_number":90,"context_line":"--------------------------------------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Using shared storage in this example, the cloud admin can then tag certain"},{"line_number":93,"context_line":"provider as having SSD trait so that they are only used by flavors that specify"},{"line_number":94,"context_line":"SSD trait."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The first three steps are the same as in:"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_39c93227","line":93,"range":{"start_line":93,"start_character":12,"end_line":93,"end_character":18},"updated":"2017-03-09 16:07:09.000000000","message":"\"having the\" or \"having an\"","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa71864b2407aa6b23de77f7193decdf7fd04024","unresolved":false,"context_lines":[{"line_number":129,"context_line":"Sync os-traits values into Placement"},{"line_number":130,"context_line":"------------------------------------"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The placement API is designed to be the single source of truth for validing"},{"line_number":133,"context_line":"which traits are valid in the deployment. There is no hard dependency chain"},{"line_number":134,"context_line":"for upgrading services, but operators have to keep in mind that only Placement"},{"line_number":135,"context_line":"API os-traits version will be the master in the deployment."}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_56515535","line":132,"updated":"2017-03-09 15:58:53.000000000","message":"s/validing/validating/","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa71864b2407aa6b23de77f7193decdf7fd04024","unresolved":false,"context_lines":[{"line_number":153,"context_line":"works for compute nodes, not all potential resource providers."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The proposed `traits` REST API endpoint will replace the use of aggregates to"},{"line_number":156,"context_line":"track and manage qualitative information. The traits for a given host will be"},{"line_number":157,"context_line":"a flat list, and is straightforward to manage through the API."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Once the use of Traits API is in place, the use of aggregate metadata will"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_d9ae56e5","line":156,"updated":"2017-03-09 15:58:53.000000000","message":"s/host/resource provider/","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa71864b2407aa6b23de77f7193decdf7fd04024","unresolved":false,"context_lines":[{"line_number":309,"context_line":"`GET` /traits?name\u003dstarts_with:{prefix}"},{"line_number":310,"context_line":"***************************************"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"To query the traits whose name begines with a specific prefix, use"},{"line_number":313,"context_line":"`starts_with` operator with the query parameter `name`. For example, you can"},{"line_number":314,"context_line":"query all the custom traits by filtering the traits with `CUSTOM` prefix."},{"line_number":315,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_590c26ed","line":312,"updated":"2017-03-09 15:58:53.000000000","message":"s/begines/begins/","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c136494b287579149797e071c3e2185f564b3ea8","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":393,"context_line":"* `204 No Content` if the trait already exists."},{"line_number":394,"context_line":"* `400 BadRequest` if trait name sn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":395,"context_line":"* `409 Conflict` if trait name conflicts with standard trait name."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"`DELETE` /traits/{trait_name}"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_b9b28292","line":394,"range":{"start_line":394,"start_character":33,"end_line":394,"end_character":37},"updated":"2017-03-09 16:07:09.000000000","message":"\"isn\u0027t\"","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4d8ed8ce71958b409aa252a0f099cc80de157ad","unresolved":false,"context_lines":[{"line_number":392,"context_line":"* `201 Created` if the insertion is successful."},{"line_number":393,"context_line":"* `204 No Content` if the trait already exists."},{"line_number":394,"context_line":"* `400 BadRequest` if trait name sn\u0027t prefixed with `CUSTOM_` prefix."},{"line_number":395,"context_line":"* `409 Conflict` if trait name conflicts with standard trait name."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"`DELETE` /traits/{trait_name}"},{"line_number":398,"context_line":"*****************************"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_b1fab2bb","line":395,"updated":"2017-03-09 05:24:15.000000000","message":"Actually, this never happen. Due to we already enforce the input trait with `CUSTOM_` prefix. So for any request with standard trait, it will get a 400 first.","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b8013492b482dd8cb33da9857774d0c80cf0d5b3","unresolved":false,"context_lines":[{"line_number":562,"context_line":"----------"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"* Add DB Schema for Traits"},{"line_number":565,"context_line":"* Refactor the ResourceClassCache to be utilized by Traits"},{"line_number":566,"context_line":"* Add Traits related object"},{"line_number":567,"context_line":"* Implement the API for managing custom traits"},{"line_number":568,"context_line":"* Enable to attach traits to the resource provider in object"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_f6b9d7ed","line":565,"updated":"2017-03-08 12:13:45.000000000","message":"I can\u0027t find any other reference to \"cache\" in this document so it is not clear why we need this. If all the traits are going to be in the database (custom and standard), why do we need a cache? The reason for the Resource Class cache is because they are spread around in different media.\n\nI\u0027ve also commented on https://review.openstack.org/#/c/441829/ about this, but I think we should avoid a cache until we need a cache.","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"cc2f751d4eb693e0814bde2afde0d7b979a9ee74","unresolved":false,"context_lines":[{"line_number":562,"context_line":"----------"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"* Add DB Schema for Traits"},{"line_number":565,"context_line":"* Refactor the ResourceClassCache to be utilized by Traits"},{"line_number":566,"context_line":"* Add Traits related object"},{"line_number":567,"context_line":"* Implement the API for managing custom traits"},{"line_number":568,"context_line":"* Enable to attach traits to the resource provider in object"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a30ddce_3a36a9e6","line":565,"in_reply_to":"9a30ddce_f6b9d7ed","updated":"2017-03-08 18:50:20.000000000","message":"Agree that this is not needed to get this working, and may not be needed at all. But let\u0027s not hold up the spec for this.","commit_id":"7585c7574a215c8e7c0e66e8038db5c1a17f182d"}]}
