)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eric Fried \u003cefried@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-25 16:47:50 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a document for allcation candidates constraint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a document which has some case studies to explain"},{"line_number":10,"context_line":"how sharing providers, aggregates, and traits work if nested"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_ea683af5","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":28},"updated":"2018-09-26 12:30:06.000000000","message":"allocation","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"062bad820b58b723794007fbdb10784c59414c05","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tetsuro Nakamura \u003cnakamura.tetsuro@lab.ntt.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-22 02:32:26 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a document for allcation candidates constraint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a document which has some case studies to explain"},{"line_number":10,"context_line":"how sharing providers, aggregates, and traits work if nested"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_355c267c","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":28},"updated":"2018-09-27 13:36:15.000000000","message":"super nit: allocation","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"}],"doc/source/index.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":45,"context_line":"resource providers and the Placement service. Implementation details may have"},{"line_number":46,"context_line":"changed or be partially complete at this time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"For the overview of the features, see the :doc:`Placement Usage \u003cusage/index\u003e`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* `Generic Resource Pools \u003chttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/generic-resource-pools.html\u003e`_"},{"line_number":51,"context_line":"* `Compute Node Inventory \u003chttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/compute-node-inventory-newton.html\u003e`_"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e97c0c21","line":48,"range":{"start_line":48,"start_character":20,"end_line":48,"end_character":23},"updated":"2018-09-21 15:11:35.000000000","message":"Probably want to say \"some of the\"","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":45,"context_line":"resource providers and the Placement service. Implementation details may have"},{"line_number":46,"context_line":"changed or be partially complete at this time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"For the overview of the features, see the :doc:`Placement Usage \u003cusage/index\u003e`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* `Generic Resource Pools \u003chttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/generic-resource-pools.html\u003e`_"},{"line_number":51,"context_line":"* `Compute Node Inventory \u003chttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/compute-node-inventory-newton.html\u003e`_"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a999347a","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":7},"updated":"2018-09-21 15:11:35.000000000","message":"an","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c259bd2b7c11f85e5180c17093cf8314e5bdd616","unresolved":false,"context_lines":[{"line_number":45,"context_line":"resource providers and the Placement service. Implementation details may have"},{"line_number":46,"context_line":"changed or be partially complete at this time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"For an overview of some of the features, see the"},{"line_number":49,"context_line":":doc:`Placement Usage \u003cusage/index\u003e`."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* `Generic Resource Pools \u003chttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/generic-resource-pools.html\u003e`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_5ed4971f","line":48,"updated":"2018-09-25 16:47:24.000000000","message":"To fix the build failure, you also need to include this reference in a toctree. Based on how the rest of the doc is structured, you can put it...","commit_id":"7e67ccafa1c1391700874997029f127c24980cd9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c259bd2b7c11f85e5180c17093cf8314e5bdd616","unresolved":false,"context_lines":[{"line_number":364,"context_line":"   contributor/api-ref-guideline"},{"line_number":365,"context_line":"   install/controller-install-obs"},{"line_number":366,"context_line":"   install/controller-install-rdo"},{"line_number":367,"context_line":"   install/controller-install-ubuntu"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_1ede1f3e","line":367,"updated":"2018-09-25 16:47:24.000000000","message":"...down here in the hidden section.","commit_id":"7e67ccafa1c1391700874997029f127c24980cd9"}],"doc/source/usage/index.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f79a3b5_098388aa","updated":"2018-09-21 15:11:35.000000000","message":"Eventually I think this should be moved to a page dedicated to the topic of nested resource providers, and the usage/index would point to it (among other articles). Not sure if we want to set that up now?","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"4ca53aca79cb16491a6d055eb0f553efdb03dee2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f79a3b5_2e9ad46e","in_reply_to":"3f79a3b5_098388aa","updated":"2018-09-25 12:08:46.000000000","message":"I thought about the same idea when I wrote up this. But since I\u0027m not sure what to put in the usage/index, this can be a good start. Let\u0027s refactor when we want to add more contents in the usage section.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c259bd2b7c11f85e5180c17093cf8314e5bdd616","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f79a3b5_1e47ff79","in_reply_to":"3f79a3b5_2e9ad46e","updated":"2018-09-25 16:47:24.000000000","message":"okay","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Those projects can register/delete their own resources to/from placement"},{"line_number":23,"context_line":"via the placement REST API."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"In most cases, nova is the project who manages the main resources on compute"},{"line_number":26,"context_line":"hosts, such as virtual cpus, memories, and disk storage. The resources on"},{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c96d9067","line":25,"range":{"start_line":25,"start_character":35,"end_line":25,"end_character":38},"updated":"2018-09-21 15:11:35.000000000","message":"that","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":23,"context_line":"via the placement REST API."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"In most cases, nova is the project who manages the main resources on compute"},{"line_number":26,"context_line":"hosts, such as virtual cpus, memories, and disk storage. The resources on"},{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource providers, but it would be deleted by the nova resource"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_698ebc27","line":26,"range":{"start_line":26,"start_character":29,"end_line":26,"end_character":37},"updated":"2018-09-21 15:11:35.000000000","message":"memory","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":26,"context_line":"hosts, such as virtual cpus, memories, and disk storage. The resources on"},{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource providers, but it would be deleted by the nova resource"},{"line_number":30,"context_line":"tracker in shortly. In consequence, if other projects want to add their own"},{"line_number":31,"context_line":"resource to the compute host, they shall create their own resource provider as"},{"line_number":32,"context_line":"a child resource provider of a compute host resource provider and register"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4997403a","line":29,"range":{"start_line":29,"start_character":22,"end_line":29,"end_character":31},"updated":"2018-09-21 15:11:35.000000000","message":"provider","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource providers, but it would be deleted by the nova resource"},{"line_number":30,"context_line":"tracker in shortly. In consequence, if other projects want to add their own"},{"line_number":31,"context_line":"resource to the compute host, they shall create their own resource provider as"},{"line_number":32,"context_line":"a child resource provider of a compute host resource provider and register"},{"line_number":33,"context_line":"their own resource as an inventory of the child resource provider."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_099dc855","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":10},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource providers, but it would be deleted by the nova resource"},{"line_number":30,"context_line":"tracker in shortly. In consequence, if other projects want to add their own"},{"line_number":31,"context_line":"resource to the compute host, they shall create their own resource provider as"},{"line_number":32,"context_line":"a child resource provider of a compute host resource provider and register"},{"line_number":33,"context_line":"their own resource as an inventory of the child resource provider."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_49b0a0dc","line":31,"range":{"start_line":31,"start_character":35,"end_line":31,"end_character":40},"updated":"2018-09-21 15:11:35.000000000","message":"should","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While a parent provider can have multiple child providers, a child provider"},{"line_number":36,"context_line":"can belong to only one parent provider. Therefore, the whole architecture"},{"line_number":37,"context_line":"can be a \"tree\" structure. (See the `Nested Resource Providers`_ spec for"},{"line_number":38,"context_line":"details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be in one allocation request in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_29e204d5","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":8},"updated":"2018-09-21 15:11:35.000000000","message":"can be considered a","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":37,"context_line":"can be a \"tree\" structure. (See the `Nested Resource Providers`_ spec for"},{"line_number":38,"context_line":"details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be in one allocation request in the"},{"line_number":41,"context_line":"response of `GET /allocation_candidates API`_. This means that the placement"},{"line_number":42,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":43,"context_line":"*collectively* contain all of the requested resources."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a9d5b4e7","line":40,"range":{"start_line":40,"start_character":33,"end_line":40,"end_character":46},"updated":"2018-09-21 15:11:35.000000000","message":"can be returned in a single","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":38,"context_line":"details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be in one allocation request in the"},{"line_number":41,"context_line":"response of `GET /allocation_candidates API`_. This means that the placement"},{"line_number":42,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":43,"context_line":"*collectively* contain all of the requested resources."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_69055c79","line":41,"range":{"start_line":41,"start_character":9,"end_line":41,"end_character":11},"updated":"2018-09-21 15:11:35.000000000","message":"of the","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":38,"context_line":"details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be in one allocation request in the"},{"line_number":41,"context_line":"response of `GET /allocation_candidates API`_. This means that the placement"},{"line_number":42,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":43,"context_line":"*collectively* contain all of the requested resources."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e9cf2c54","line":41,"range":{"start_line":41,"start_character":40,"end_line":41,"end_character":43},"updated":"2018-09-21 15:11:35.000000000","message":"operation (throughout)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":40,"context_line":"The resource providers in a tree can be in one allocation request in the"},{"line_number":41,"context_line":"response of `GET /allocation_candidates API`_. This means that the placement"},{"line_number":42,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":43,"context_line":"*collectively* contain all of the requested resources."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This document serves some case studies to explain how sharing providers,"},{"line_number":46,"context_line":"aggregates, and traits work if nested provider trees are involved in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_49fe606a","line":43,"updated":"2018-09-21 15:11:35.000000000","message":"Nice.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":42,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":43,"context_line":"*collectively* contain all of the requested resources."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This document serves some case studies to explain how sharing providers,"},{"line_number":46,"context_line":"aggregates, and traits work if nested provider trees are involved in the"},{"line_number":47,"context_line":"`GET /allocation_candidates API`_."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e9f88c7c","line":45,"range":{"start_line":45,"start_character":14,"end_line":45,"end_character":20},"updated":"2018-09-21 15:11:35.000000000","message":"describes (\"provides\" is a better word, but that would be a lot of providing in this sentence...)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":43,"context_line":"*collectively* contain all of the requested resources."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This document serves some case studies to explain how sharing providers,"},{"line_number":46,"context_line":"aggregates, and traits work if nested provider trees are involved in the"},{"line_number":47,"context_line":"`GET /allocation_candidates API`_."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Sharing Resource Providers"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c9e910ab","line":46,"range":{"start_line":46,"start_character":31,"end_line":46,"end_character":37},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Resources on sharing resource providers can be shared by multiple resource"},{"line_number":53,"context_line":"provider trees. This means that a sharing provider can be in one allocation"},{"line_number":54,"context_line":"request with resource providers from a different tree in the response of the"},{"line_number":55,"context_line":"`GET /allocation_candidates API`_. Practically, this is used for shared"},{"line_number":56,"context_line":"storage that are connected to multiple compute hosts. Technically, a resource"},{"line_number":57,"context_line":"provider with ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a sharing resource"},{"line_number":58,"context_line":"provider and the resource on it is shared by other resource providers in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6978fcf6","line":55,"range":{"start_line":55,"start_character":35,"end_line":55,"end_character":60},"updated":"2018-09-21 15:11:35.000000000","message":"Let\u0027s go with \"is often used\", or perhaps, \"As an example, this may be used\"","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":53,"context_line":"provider trees. This means that a sharing provider can be in one allocation"},{"line_number":54,"context_line":"request with resource providers from a different tree in the response of the"},{"line_number":55,"context_line":"`GET /allocation_candidates API`_. Practically, this is used for shared"},{"line_number":56,"context_line":"storage that are connected to multiple compute hosts. Technically, a resource"},{"line_number":57,"context_line":"provider with ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a sharing resource"},{"line_number":58,"context_line":"provider and the resource on it is shared by other resource providers in the"},{"line_number":59,"context_line":"same aggregate."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_897b18f2","line":56,"range":{"start_line":56,"start_character":13,"end_line":56,"end_character":16},"updated":"2018-09-21 15:11:35.000000000","message":"is","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":54,"context_line":"request with resource providers from a different tree in the response of the"},{"line_number":55,"context_line":"`GET /allocation_candidates API`_. Practically, this is used for shared"},{"line_number":56,"context_line":"storage that are connected to multiple compute hosts. Technically, a resource"},{"line_number":57,"context_line":"provider with ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a sharing resource"},{"line_number":58,"context_line":"provider and the resource on it is shared by other resource providers in the"},{"line_number":59,"context_line":"same aggregate."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a971340f","line":57,"range":{"start_line":57,"start_character":9,"end_line":57,"end_character":13},"updated":"2018-09-21 15:11:35.000000000","message":"with the","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":55,"context_line":"`GET /allocation_candidates API`_. Practically, this is used for shared"},{"line_number":56,"context_line":"storage that are connected to multiple compute hosts. Technically, a resource"},{"line_number":57,"context_line":"provider with ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a sharing resource"},{"line_number":58,"context_line":"provider and the resource on it is shared by other resource providers in the"},{"line_number":59,"context_line":"same aggregate."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"For example, in the following environments::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c96cb034","line":58,"range":{"start_line":58,"start_character":17,"end_line":58,"end_character":34},"updated":"2018-09-21 15:11:35.000000000","message":"resources on it are","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":58,"context_line":"provider and the resource on it is shared by other resource providers in the"},{"line_number":59,"context_line":"same aggregate."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"For example, in the following environments::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"      +-------------------------------+   +-------------------------------+"},{"line_number":64,"context_line":"      | sharing storage (ss1)         |   | sharing storage (ss2)         |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e902cc3d","line":61,"range":{"start_line":61,"start_character":30,"end_line":61,"end_character":42},"updated":"2018-09-21 15:11:35.000000000","message":"environment","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"would return 3 combinations as the allocation candidates."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB)"},{"line_number":89,"context_line":"2. cn2 (VCPU, MEMORY_MB, DISK_GB)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6961dc38","line":86,"range":{"start_line":86,"start_character":13,"end_line":86,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"three (spell out numbers under 10)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":89,"context_line":"2. cn2 (VCPU, MEMORY_MB, DISK_GB)"},{"line_number":90,"context_line":"3. cn1 (VCPU, MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\"ss2\" is also a sharing provider, but not in the allocation candidate because"},{"line_number":93,"context_line":"it can\u0027t satisfy the resource itself and it isn\u0027t in any aggregate that it is"},{"line_number":94,"context_line":"not shared by any resource providers."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_495ae081","line":92,"range":{"start_line":92,"start_character":60,"end_line":92,"end_character":69},"updated":"2018-09-21 15:11:35.000000000","message":"candidates","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":90,"context_line":"3. cn1 (VCPU, MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\"ss2\" is also a sharing provider, but not in the allocation candidate because"},{"line_number":93,"context_line":"it can\u0027t satisfy the resource itself and it isn\u0027t in any aggregate that it is"},{"line_number":94,"context_line":"not shared by any resource providers."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"When a nested tree structure is present, sharing providers are shared by"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_69c6bc18","line":93,"range":{"start_line":93,"start_character":57,"end_line":93,"end_character":71},"updated":"2018-09-21 15:11:35.000000000","message":"aggregate, so","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":93,"context_line":"it can\u0027t satisfy the resource itself and it isn\u0027t in any aggregate that it is"},{"line_number":94,"context_line":"not shared by any resource providers."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"When a nested tree structure is present, sharing providers are shared by"},{"line_number":97,"context_line":"the whole tree if one of the resource provider from the tree is connected to"},{"line_number":98,"context_line":"the sharing provider via an aggregate."},{"line_number":99,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_89c9d825","line":96,"range":{"start_line":96,"start_character":7,"end_line":96,"end_character":13},"updated":"2018-09-21 15:11:35.000000000","message":"strike (\"nested tree\" is redundant)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":94,"context_line":"not shared by any resource providers."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"When a nested tree structure is present, sharing providers are shared by"},{"line_number":97,"context_line":"the whole tree if one of the resource provider from the tree is connected to"},{"line_number":98,"context_line":"the sharing provider via an aggregate."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"For example, in the following environments where numa resource providers"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_29cc4432","line":97,"range":{"start_line":97,"start_character":38,"end_line":97,"end_character":46},"updated":"2018-09-21 15:11:35.000000000","message":"providers","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the whole tree if one of the resource provider from the tree is connected to"},{"line_number":98,"context_line":"the sharing provider via an aggregate."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"For example, in the following environments where numa resource providers"},{"line_number":101,"context_line":"are child providers of the compute host resource providers::"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"      +------------------------------+"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_09fe2837","line":100,"range":{"start_line":100,"start_character":30,"end_line":100,"end_character":42},"updated":"2018-09-21 15:11:35.000000000","message":"environment","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"would return 4 combinations as the allocation candidates."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"1. numa1_1 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":142,"context_line":"2. numa1_2 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_891c7877","line":139,"range":{"start_line":139,"start_character":13,"end_line":139,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"four","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":141,"context_line":"1. numa1_1 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":142,"context_line":"2. numa1_2 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":143,"context_line":"3. numa2_1 (VCPU) + cn2 (MEMORY_MB) + ss2 (DISK_GB)"},{"line_number":144,"context_line":"4. numa2_2 (VCPU) + cn2 (MEMORY_MB) + ss2 (DISK_GB)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Note that \"numa1_1\" and \"ss1\", for example, are not in the same aggregate,"},{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_29e524a4","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":51},"updated":"2018-09-21 15:11:35.000000000","message":"Ouch, is this true? This doesn\u0027t seem correct to me.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3d62a66475c33641b307a87d4675f0032cd30423","unresolved":false,"context_lines":[{"line_number":141,"context_line":"1. numa1_1 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":142,"context_line":"2. numa1_2 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":143,"context_line":"3. numa2_1 (VCPU) + cn2 (MEMORY_MB) + ss2 (DISK_GB)"},{"line_number":144,"context_line":"4. numa2_2 (VCPU) + cn2 (MEMORY_MB) + ss2 (DISK_GB)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Note that \"numa1_1\" and \"ss1\", for example, are not in the same aggregate,"},{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ae9a6410","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":51},"in_reply_to":"3f79a3b5_29e524a4","updated":"2018-09-25 12:22:05.000000000","message":"TBH, I\u0027m not 100% confident about this allocation response. Let me create a test. But, yeah, I\u0027m now agreed if this is true, this is not correct.\n\nThat said, since \"numa2_2\" is not in the aggregate because of the \"aggregate on non-root doesn\u0027t span\" rule. It is not in the same aggregate as \"ss2\". Again, let me look into this more deeply.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Note that \"numa1_1\" and \"ss1\", for example, are not in the same aggregate,"},{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"},{"line_number":148,"context_line":"to \"ss1\" via aggregate A on \"cn1\". \"numa2_2\" and \"ss2\" can be also since the"},{"line_number":149,"context_line":"tree of \"cn1\" is connected to \"ss2\" via aggregate B on \"cn2\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Filtering Aggregates"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c9a1103c","line":148,"range":{"start_line":148,"start_character":55,"end_line":148,"end_character":66},"updated":"2018-09-21 15:11:35.000000000","message":"can also be in one allocation request","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":146,"context_line":"Note that \"numa1_1\" and \"ss1\", for example, are not in the same aggregate,"},{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"},{"line_number":148,"context_line":"to \"ss1\" via aggregate A on \"cn1\". \"numa2_2\" and \"ss2\" can be also since the"},{"line_number":149,"context_line":"tree of \"cn1\" is connected to \"ss2\" via aggregate B on \"cn2\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Filtering Aggregates"},{"line_number":152,"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":1,"id":"3f79a3b5_8965581f","line":149,"updated":"2018-09-21 15:11:35.000000000","message":"period","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"},{"line_number":148,"context_line":"to \"ss1\" via aggregate A on \"cn1\". \"numa2_2\" and \"ss2\" can be also since the"},{"line_number":149,"context_line":"tree of \"cn1\" is connected to \"ss2\" via aggregate B on \"cn2\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Filtering Aggregates"},{"line_number":152,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c94fd089","line":150,"updated":"2018-09-21 15:11:35.000000000","message":"This is the bit that doesn\u0027t seem right to me. If I\u0027ve associated ss2 with numa2_1 but not numa2_2, I would think that means I don\u0027t want candidates that provide from numa2_2 + ss2. Like, perhaps ss2 is cabled to a card that\u0027s affined to numa2_1.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c259bd2b7c11f85e5180c17093cf8314e5bdd616","unresolved":false,"context_lines":[{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"},{"line_number":148,"context_line":"to \"ss1\" via aggregate A on \"cn1\". \"numa2_2\" and \"ss2\" can be also since the"},{"line_number":149,"context_line":"tree of \"cn1\" is connected to \"ss2\" via aggregate B on \"cn2\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Filtering Aggregates"},{"line_number":152,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3eec3b91","line":150,"in_reply_to":"3f79a3b5_0e4ef86d","updated":"2018-09-25 16:47:24.000000000","message":"Yeah, that feels really weird, but again, thinking through the use cases, it\u0027s most likely to yield the *intended* result.\n\nNothing we should change about this patch, which I\u0027m guessing describes the current behavior correctly. But we may want to consider \"fixing\" that \"bug\" separately.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"4ca53aca79cb16491a6d055eb0f553efdb03dee2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"but they can be in one allocation request since the tree of \"cn1\" is connected"},{"line_number":148,"context_line":"to \"ss1\" via aggregate A on \"cn1\". \"numa2_2\" and \"ss2\" can be also since the"},{"line_number":149,"context_line":"tree of \"cn1\" is connected to \"ss2\" via aggregate B on \"cn2\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Filtering Aggregates"},{"line_number":152,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0e4ef86d","line":150,"in_reply_to":"3f79a3b5_c94fd089","updated":"2018-09-25 12:08:46.000000000","message":"So you want the rule to be; if a sharing provider is shared via root, it can be shared with all the providers in the tree, but if a sharing provider is shared via non-root, it is only shared with the non-root.\n\nWell, that sounds more consistent with the feature that \"an aggregate on root spans the whole tree but an aggregate on non-root does\u0027t.\" \nOkay, good point. Let me see this point more closely.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":152,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"What differs between the \"cn1\" and \"cn2\" in the example above emerges when you"},{"line_number":155,"context_line":"specify the aggregate explicitly in the `GET /allocation_candidates API`_ by"},{"line_number":156,"context_line":"the ``member_of`` query parameter. The ``member_of`` query accepts aggregate"},{"line_number":157,"context_line":"uuids and filters candidates to the resource providers in the given aggregate."},{"line_number":158,"context_line":"See the `Filtering by Aggregate Membership`_ spec for details."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6930fc07","line":155,"range":{"start_line":155,"start_character":74,"end_line":155,"end_character":76},"updated":"2018-09-21 15:11:35.000000000","message":"\"with\" or \"via\"","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"What differs between the \"cn1\" and \"cn2\" in the example above emerges when you"},{"line_number":155,"context_line":"specify the aggregate explicitly in the `GET /allocation_candidates API`_ by"},{"line_number":156,"context_line":"the ``member_of`` query parameter. The ``member_of`` query accepts aggregate"},{"line_number":157,"context_line":"uuids and filters candidates to the resource providers in the given aggregate."},{"line_number":158,"context_line":"See the `Filtering by Aggregate Membership`_ spec for details."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_29368403","line":156,"range":{"start_line":156,"start_character":53,"end_line":156,"end_character":58},"updated":"2018-09-21 15:11:35.000000000","message":"query parameter","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":158,"context_line":"See the `Filtering by Aggregate Membership`_ spec for details."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Note that the `GET /allocation_candidates API`_ assumes that \"an aggregate on"},{"line_number":161,"context_line":"a root provider spans on the whole tree, while an aggregate on a non-root"},{"line_number":162,"context_line":"provider does NOT span on the whole tree.\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"For example, in the environments above, the request::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_091f0870","line":161,"range":{"start_line":161,"start_character":22,"end_line":161,"end_character":24},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":161,"context_line":"a root provider spans on the whole tree, while an aggregate on a non-root"},{"line_number":162,"context_line":"provider does NOT span on the whole tree.\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"For example, in the environments above, the request::"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500\u0026member_of\u003d\u003caggA uuid\u003e"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c924b0c5","line":164,"range":{"start_line":164,"start_character":20,"end_line":164,"end_character":32},"updated":"2018-09-21 15:11:35.000000000","message":"environment","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500\u0026member_of\u003d\u003caggA uuid\u003e"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"would return 2 candidates,"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"1. numa1_1 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"},{"line_number":171,"context_line":"2. numa1_2 (VCPU) + cn1 (MEMORY_MB) + ss1 (DISK_GB)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4912e062","line":168,"range":{"start_line":168,"start_character":13,"end_line":168,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"two","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":179,"context_line":"1. numa2_1 (VCPU) + cn2 (MEMORY_MB) + ss2 (DISK_GB)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"This is because aggregate A is on the root provider \"cn1\", so the API assumes"},{"line_number":182,"context_line":"\"numa1-1\" and \"numa1_2\" are also in the aggregate, while it doesn\u0027t assume"},{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4c074e18","line":182,"range":{"start_line":182,"start_character":6,"end_line":182,"end_character":7},"updated":"2018-09-21 15:11:35.000000000","message":"_","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"This is because aggregate A is on the root provider \"cn1\", so the API assumes"},{"line_number":182,"context_line":"\"numa1-1\" and \"numa1_2\" are also in the aggregate, while it doesn\u0027t assume"},{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Filtering Traits"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ec117a54","line":183,"range":{"start_line":183,"start_character":6,"end_line":183,"end_character":7},"updated":"2018-09-21 15:11:35.000000000","message":"_","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"This is because aggregate A is on the root provider \"cn1\", so the API assumes"},{"line_number":182,"context_line":"\"numa1-1\" and \"numa1_2\" are also in the aggregate, while it doesn\u0027t assume"},{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Filtering Traits"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0c0dd633","line":183,"range":{"start_line":183,"start_character":10,"end_line":183,"end_character":12},"updated":"2018-09-21 15:11:35.000000000","message":"is in","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"This is because aggregate A is on the root provider \"cn1\", so the API assumes"},{"line_number":182,"context_line":"\"numa1-1\" and \"numa1_2\" are also in the aggregate, while it doesn\u0027t assume"},{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Filtering Traits"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6c27aab7","line":183,"range":{"start_line":183,"start_character":55,"end_line":183,"end_character":66},"updated":"2018-09-21 15:11:35.000000000","message":"the root, but is on the","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":181,"context_line":"This is because aggregate A is on the root provider \"cn1\", so the API assumes"},{"line_number":182,"context_line":"\"numa1-1\" and \"numa1_2\" are also in the aggregate, while it doesn\u0027t assume"},{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Filtering Traits"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2c1d3261","line":184,"range":{"start_line":184,"start_character":25,"end_line":184,"end_character":26},"updated":"2018-09-21 15:11:35.000000000","message":"_","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":183,"context_line":"\"numa2-2\" in aggregate B because aggregate B is not on root but on non-root"},{"line_number":184,"context_line":"resource provider, \"numa2-1\"."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Filtering Traits"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Traits are not only for the indicator of sharing providers. They are used"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ac3062ea","line":186,"range":{"start_line":186,"start_character":0,"end_line":186,"end_character":16},"updated":"2018-09-21 15:11:35.000000000","message":"Filtering By Traits","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":186,"context_line":"Filtering Traits"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Traits are not only for the indicator of sharing providers. They are used"},{"line_number":190,"context_line":"to decorate capability of resource providers. (See `The Traits API`_ spec for"},{"line_number":191,"context_line":"details.)"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4c550ef8","line":189,"range":{"start_line":189,"start_character":20,"end_line":189,"end_character":41},"updated":"2018-09-21 15:11:35.000000000","message":"used to indicate","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Traits are not only for the indicator of sharing providers. They are used"},{"line_number":190,"context_line":"to decorate capability of resource providers. (See `The Traits API`_ spec for"},{"line_number":191,"context_line":"details.)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Traits can be requested explicitly in the `GET /allocation_candidates API`_"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0c3b96c7","line":190,"range":{"start_line":190,"start_character":3,"end_line":190,"end_character":22},"updated":"2018-09-21 15:11:35.000000000","message":"denote capabilities","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":191,"context_line":"details.)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Traits can be requested explicitly in the `GET /allocation_candidates API`_"},{"line_number":194,"context_line":"as well as aggregate by ``required`` query parameter, but traits on resource"},{"line_number":195,"context_line":"providers never span on the other resource providers. If a trait is requested,"},{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2c6bf2b8","line":194,"range":{"start_line":194,"start_character":21,"end_line":194,"end_character":23},"updated":"2018-09-21 15:11:35.000000000","message":"\"with the\" or \"via the\"","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":191,"context_line":"details.)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Traits can be requested explicitly in the `GET /allocation_candidates API`_"},{"line_number":194,"context_line":"as well as aggregate by ``required`` query parameter, but traits on resource"},{"line_number":195,"context_line":"providers never span on the other resource providers. If a trait is requested,"},{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8c78068f","line":194,"range":{"start_line":194,"start_character":0,"end_line":194,"end_character":20},"updated":"2018-09-21 15:11:35.000000000","message":"I would remove this","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Traits can be requested explicitly in the `GET /allocation_candidates API`_"},{"line_number":194,"context_line":"as well as aggregate by ``required`` query parameter, but traits on resource"},{"line_number":195,"context_line":"providers never span on the other resource providers. If a trait is requested,"},{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ec689aba","line":195,"range":{"start_line":195,"start_character":21,"end_line":195,"end_character":27},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":193,"context_line":"Traits can be requested explicitly in the `GET /allocation_candidates API`_"},{"line_number":194,"context_line":"as well as aggregate by ``required`` query parameter, but traits on resource"},{"line_number":195,"context_line":"providers never span on the other resource providers. If a trait is requested,"},{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ac5e2210","line":196,"range":{"start_line":196,"start_character":20,"end_line":196,"end_character":28},"updated":"2018-09-21 15:11:35.000000000","message":"providers","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ccaefee2","line":199,"range":{"start_line":199,"start_character":69,"end_line":199,"end_character":72},"updated":"2018-09-21 15:11:35.000000000","message":"a","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":196,"context_line":"one of the resource provider that appears in the allocation candidate should"},{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4ca3ceff","line":199,"range":{"start_line":199,"start_character":30,"end_line":199,"end_character":42},"updated":"2018-09-21 15:11:35.000000000","message":"via the ``!`` prefix","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4c7c2e70","line":200,"range":{"start_line":200,"start_character":64,"end_line":200,"end_character":71},"updated":"2018-09-21 15:11:35.000000000","message":"appear","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6c832a57","line":200,"range":{"start_line":200,"start_character":30,"end_line":200,"end_character":33},"updated":"2018-09-21 15:11:35.000000000","message":"none","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":197,"context_line":"have the trait regardless of sharing or nested providers. See the"},{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2c79b280","line":200,"range":{"start_line":200,"start_character":50,"end_line":200,"end_character":58},"updated":"2018-09-21 15:11:35.000000000","message":"providers","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":198,"context_line":"`Request Traits`_ spec for details. The ``required`` query parameter also"},{"line_number":199,"context_line":"supports negative expression, ``!`` prefix, for forbidden traits. If the"},{"line_number":200,"context_line":"forbidden trait is specified, non of the resource provider that appears in the"},{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"For example, in the following environments::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0c92b69f","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":27},"updated":"2018-09-21 15:11:35.000000000","message":"may","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":201,"context_line":"allocation candidate should have that trait. See the `Forbidden Traits`_ spec"},{"line_number":202,"context_line":"for details."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"For example, in the following environments::"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"      +--------------------------------------------------+"},{"line_number":207,"context_line":"      | +----------------------------------------------+ |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cc87de5a","line":204,"range":{"start_line":204,"start_character":30,"end_line":204,"end_character":42},"updated":"2018-09-21 15:11:35.000000000","message":"environment","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":214,"context_line":"      | +----------+-----------+ +----------+----------+ |"},{"line_number":215,"context_line":"      | | nic1_1               | | nic1_2              | |"},{"line_number":216,"context_line":"      | |   resources:         | |   resources:        | |"},{"line_number":217,"context_line":"      | |     SR-IOV_VF:8      | |     SR-IOV_VF:8     | |"},{"line_number":218,"context_line":"      | |   trait:             | |   trait:            | |"},{"line_number":219,"context_line":"      | |    [HW_NIC_ACCEL_SSL]| |     []              | |"},{"line_number":220,"context_line":"      | +----------------------+ +---------------------+ |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ace1422d","line":217,"range":{"start_line":217,"start_character":14,"end_line":217,"end_character":23},"updated":"2018-09-21 15:11:35.000000000","message":"SRIOV_NET_VF (throughout)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"On the contrary, for forbidden traits::"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500,SR-IOV_VF:2"},{"line_number":235,"context_line":"                              \u0026required\u003d!HW_NIC_ACCEL_SSL"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2cc7729a","line":232,"range":{"start_line":232,"start_character":0,"end_line":232,"end_character":15},"updated":"2018-09-21 15:11:35.000000000","message":"In contrast","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_2 (SRIOV_VF)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"If the trait is not in the ``required`` parameter, that trait will be just"},{"line_number":242,"context_line":"ignored in the `GET /allocation_candidates API`_."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"For example::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ecc41a94","line":241,"range":{"start_line":241,"start_character":62,"end_line":241,"end_character":74},"updated":"2018-09-21 15:11:35.000000000","message":"will simply be","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500,SR-IOV_VF:2"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"would return 2 candidates."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF)"},{"line_number":251,"context_line":"2. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_2 (SRIOV_VF)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6c36cab6","line":248,"range":{"start_line":248,"start_character":13,"end_line":248,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"two","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":250,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF)"},{"line_number":251,"context_line":"2. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_2 (SRIOV_VF)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"In this point, a project can put their own project\u0027s traits to express the"},{"line_number":254,"context_line":"ownership of the resource provider."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Granular Resource Request"},{"line_number":257,"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"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0c45d614","line":254,"range":{"start_line":253,"start_character":0,"end_line":254,"end_character":35},"updated":"2018-09-21 15:11:35.000000000","message":"Let\u0027s remove this for now. We haven\u0027t finished discussing how this is going to work; and in any case it would require further explanation.","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":253,"context_line":"In this point, a project can put their own project\u0027s traits to express the"},{"line_number":254,"context_line":"ownership of the resource provider."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Granular Resource Request"},{"line_number":257,"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"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"If you want to get the same kind of resources from multiple resource providers"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ac4f0233","line":256,"range":{"start_line":256,"start_character":18,"end_line":256,"end_character":25},"updated":"2018-09-21 15:11:35.000000000","message":"Requests","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":257,"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"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"If you want to get the same kind of resources from multiple resource providers"},{"line_number":260,"context_line":"at once, or if you don\u0027t want to spread the trait/aggregate constraints to"},{"line_number":261,"context_line":"multiple resource providers, you can use `Granular Resource Request`_ feature."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"This feature is enabled by numbering the ``resources``, ``member_of`` and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6c5faae4","line":260,"range":{"start_line":260,"start_character":72,"end_line":260,"end_character":74},"updated":"2018-09-21 15:11:35.000000000","message":"across","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"If you want to get the same kind of resources from multiple resource providers"},{"line_number":260,"context_line":"at once, or if you don\u0027t want to spread the trait/aggregate constraints to"},{"line_number":261,"context_line":"multiple resource providers, you can use `Granular Resource Request`_ feature."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"This feature is enabled by numbering the ``resources``, ``member_of`` and"},{"line_number":264,"context_line":"``required`` parameters respectively."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4c58aef7","line":261,"range":{"start_line":261,"start_character":37,"end_line":261,"end_character":40},"updated":"2018-09-21 15:11:35.000000000","message":"use the","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":261,"context_line":"multiple resource providers, you can use `Granular Resource Request`_ feature."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"This feature is enabled by numbering the ``resources``, ``member_of`` and"},{"line_number":264,"context_line":"``required`` parameters respectively."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"For example, in the environment above, the request::"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0cf396e8","line":264,"range":{"start_line":264,"start_character":13,"end_line":264,"end_character":23},"updated":"2018-09-21 15:11:35.000000000","message":"query parameters","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                              \u0026resources2\u003dSRIOV_NET_VF:1"},{"line_number":271,"context_line":"                              \u0026group_policy\u003disolate"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"would return 1 candidate where 2 providers serve the same ``SRIOV_NET_VF``"},{"line_number":274,"context_line":"resource."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF:1) + nic1_2 (SRIOV_VF:1)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8c3006a0","line":273,"range":{"start_line":273,"start_character":13,"end_line":273,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"one","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                              \u0026resources2\u003dSRIOV_NET_VF:1"},{"line_number":271,"context_line":"                              \u0026group_policy\u003disolate"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"would return 1 candidate where 2 providers serve the same ``SRIOV_NET_VF``"},{"line_number":274,"context_line":"resource."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF:1) + nic1_2 (SRIOV_VF:1)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4cdbce4c","line":273,"range":{"start_line":273,"start_character":49,"end_line":273,"end_character":57},"updated":"2018-09-21 15:11:35.000000000","message":"strike (implies that they are the same VF)","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                              \u0026resources2\u003dSRIOV_NET_VF:1"},{"line_number":271,"context_line":"                              \u0026group_policy\u003disolate"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"would return 1 candidate where 2 providers serve the same ``SRIOV_NET_VF``"},{"line_number":274,"context_line":"resource."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF:1) + nic1_2 (SRIOV_VF:1)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2c23f259","line":273,"range":{"start_line":273,"start_character":31,"end_line":273,"end_character":32},"updated":"2018-09-21 15:11:35.000000000","message":"two","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":279,"context_line":"with the ``HW_NIC_ACCEL_SSL`` trait and the other is from *another* provider"},{"line_number":280,"context_line":"with no trait constraints."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"If the ``group_policy`` is set to ``none``, it allows you to get multiple"},{"line_number":283,"context_line":"granular requests to be served by one provider. Namely::"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cce6fe13","line":282,"range":{"start_line":282,"start_character":54,"end_line":282,"end_character":65},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                              \u0026resources2\u003dSRIOV_NET_VF:1"},{"line_number":288,"context_line":"                              \u0026group_policy\u003dnone"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"would return 2 candidates."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF:1) + nic1_2 (SRIOV_VF:1)"},{"line_number":293,"context_line":"2. cn1 (VCPU, MEMORY_MB, DISK_GB) + nic1_1 (SRIOV_VF:2)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8cbec6d1","line":290,"range":{"start_line":290,"start_character":13,"end_line":290,"end_character":14},"updated":"2018-09-21 15:11:35.000000000","message":"two","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":296,"context_line":"trait) and request 2 (with no trait constraints)."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Note that if ``member_of\u003cN\u003e`` is specified in granular requests, the API"},{"line_number":299,"context_line":"doesn\u0027t assume that \"an aggregate on a root provider spans on the whole tree.\""},{"line_number":300,"context_line":"It just sees whether the specified aggregate is directly associated to the"},{"line_number":301,"context_line":"resource provider looking up the candidates."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0ccab66c","line":299,"range":{"start_line":299,"start_character":59,"end_line":299,"end_character":61},"updated":"2018-09-21 15:11:35.000000000","message":"strike","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Note that if ``member_of\u003cN\u003e`` is specified in granular requests, the API"},{"line_number":299,"context_line":"doesn\u0027t assume that \"an aggregate on a root provider spans on the whole tree.\""},{"line_number":300,"context_line":"It just sees whether the specified aggregate is directly associated to the"},{"line_number":301,"context_line":"resource provider looking up the candidates."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":".. _`Nested Resource Providers`: https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/nested-resource-providers.html"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6ca00aa6","line":300,"range":{"start_line":300,"start_character":68,"end_line":300,"end_character":70},"updated":"2018-09-21 15:11:35.000000000","message":"with","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":298,"context_line":"Note that if ``member_of\u003cN\u003e`` is specified in granular requests, the API"},{"line_number":299,"context_line":"doesn\u0027t assume that \"an aggregate on a root provider spans on the whole tree.\""},{"line_number":300,"context_line":"It just sees whether the specified aggregate is directly associated to the"},{"line_number":301,"context_line":"resource provider looking up the candidates."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":".. _`Nested Resource Providers`: https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/nested-resource-providers.html"},{"line_number":304,"context_line":".. _`GET /allocation_candidates API`: https://developer.openstack.org/api-ref/placement/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8ca326b1","line":301,"range":{"start_line":301,"start_character":18,"end_line":301,"end_character":28},"updated":"2018-09-21 15:11:35.000000000","message":"when looking up","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"74ef81877fbb68f665728a4a5c74a8eef54f2524","unresolved":false,"context_lines":[{"line_number":306,"context_line":".. _`The Traits API`: http://specs.openstack.org/openstack/nova-specs/specs/pike/implemented/resource-provider-traits.html"},{"line_number":307,"context_line":".. _`Request Traits`: https://specs.openstack.org/openstack/nova-specs/specs/queens/implemented/request-traits-in-nova.html"},{"line_number":308,"context_line":".. _`Forbidden Traits`: https://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/placement-forbidden-traits.html"},{"line_number":309,"context_line":".. _`Granular Resource Request`: https://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/granular-resource-requests.html"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cc635eaa","line":309,"range":{"start_line":309,"start_character":3,"end_line":309,"end_character":31},"updated":"2018-09-21 15:11:35.000000000","message":"hm, weird that this doesn\u0027t conflict with the section header on L256","commit_id":"db2eb5158bacad1af84bf215f17ee5c75d53da70"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":" Placement Usage"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Overview"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f95008d8","line":15,"updated":"2018-09-26 12:30:06.000000000","message":"This document should probably be called \"Modeling with Provider Trees\" or something like that, since it\u0027s specific to how to use the placement service when the providers are modeled using a tree organization.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":" Placement Usage"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Overview"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_1f8fd276","line":15,"in_reply_to":"3f79a3b5_2d787abf","updated":"2018-09-27 09:02:12.000000000","message":"Okay, since I agree this document is too big and too specific for an index, let\u0027s separate this now. Done.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5240778431d36b69cc4da2356c49ff2a19fc6e6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":" Placement Usage"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Overview"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_2d787abf","line":15,"in_reply_to":"3f79a3b5_f95008d8","updated":"2018-09-26 14:53:56.000000000","message":"Agree, but we could also do that when we put this in its own document under usage/ and make the index an index.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Those projects can register/delete their own resources to/from placement"},{"line_number":23,"context_line":"via the placement REST API."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"In most cases, nova is the project that manages the main resources on compute"},{"line_number":26,"context_line":"hosts, such as virtual cpus, memory, and disk storage. The resources on"},{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource provider, but it would be deleted by the nova resource"},{"line_number":30,"context_line":"tracker shortly. In consequence, if other projects want to add their own"},{"line_number":31,"context_line":"resource to the compute host, they should create their own resource provider"},{"line_number":32,"context_line":"as a child resource provider of a compute host resource provider and register"},{"line_number":33,"context_line":"their own resource as an inventory of the child resource provider."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While a parent provider can have multiple child providers, a child provider"},{"line_number":36,"context_line":"can belong to only one parent provider. Therefore, the whole architecture"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_99ff9465","line":33,"range":{"start_line":25,"start_character":0,"end_line":33,"end_character":66},"updated":"2018-09-26 12:30:06.000000000","message":"I would recommend rewriting this paragraph like so:\n\nThe nova resource tracker is responsible for creating the resource provider record corresponding to the compute host on which the resource tracker runs. If other projects -- for example, Neutron or Cyborg -- wish to manage resources on a compute host, the should create resource providers as children of the compute host provider and register their own managed resources as inventory on those child providers.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Those projects can register/delete their own resources to/from placement"},{"line_number":23,"context_line":"via the placement REST API."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"In most cases, nova is the project that manages the main resources on compute"},{"line_number":26,"context_line":"hosts, such as virtual cpus, memory, and disk storage. The resources on"},{"line_number":27,"context_line":"compute host resource providers are periodically updated by the nova resource"},{"line_number":28,"context_line":"tracker. This means another project can add resources as inventory on a"},{"line_number":29,"context_line":"compute host resource provider, but it would be deleted by the nova resource"},{"line_number":30,"context_line":"tracker shortly. In consequence, if other projects want to add their own"},{"line_number":31,"context_line":"resource to the compute host, they should create their own resource provider"},{"line_number":32,"context_line":"as a child resource provider of a compute host resource provider and register"},{"line_number":33,"context_line":"their own resource as an inventory of the child resource provider."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While a parent provider can have multiple child providers, a child provider"},{"line_number":36,"context_line":"can belong to only one parent provider. Therefore, the whole architecture"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_cbec44f6","line":33,"range":{"start_line":25,"start_character":0,"end_line":33,"end_character":66},"in_reply_to":"3f79a3b5_99ff9465","updated":"2018-09-27 09:02:12.000000000","message":"Simple and understandable. ++","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":37,"context_line":"can be considered as a \"tree\" structure. (See the"},{"line_number":38,"context_line":"`Nested Resource Providers`_ spec for details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be returned in a single allocation"},{"line_number":41,"context_line":"request in the response of the `GET /allocation_candidates`_ operation."},{"line_number":42,"context_line":"This means that the placement service looks up a resource provider tree in"},{"line_number":43,"context_line":"which resource providers can *collectively* contain all of the requested"},{"line_number":44,"context_line":"resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_790ab879","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":71},"updated":"2018-09-26 12:30:06.000000000","message":"This sentence is misleading. It makes it sound like GET /allocation_candidates will only return resource providers from a single tree. I think what you meant to say here is that the response from GET /allocation_candidates will be a set of allocation requests, and the providers in each allocation request will come from the same provider tree.\n\nThough, that said, sharing providers may also be included in the allocation request, as you know...","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5240778431d36b69cc4da2356c49ff2a19fc6e6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"can be considered as a \"tree\" structure. (See the"},{"line_number":38,"context_line":"`Nested Resource Providers`_ spec for details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be returned in a single allocation"},{"line_number":41,"context_line":"request in the response of the `GET /allocation_candidates`_ operation."},{"line_number":42,"context_line":"This means that the placement service looks up a resource provider tree in"},{"line_number":43,"context_line":"which resource providers can *collectively* contain all of the requested"},{"line_number":44,"context_line":"resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_8d950e35","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":71},"in_reply_to":"3f79a3b5_790ab879","updated":"2018-09-26 14:53:56.000000000","message":"I had a similar reaction about sharing at first, but felt it would take a lot of words to get it right, and I felt it was cleared up by the next section.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"can be considered as a \"tree\" structure. (See the"},{"line_number":38,"context_line":"`Nested Resource Providers`_ spec for details.)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The resource providers in a tree can be returned in a single allocation"},{"line_number":41,"context_line":"request in the response of the `GET /allocation_candidates`_ operation."},{"line_number":42,"context_line":"This means that the placement service looks up a resource provider tree in"},{"line_number":43,"context_line":"which resource providers can *collectively* contain all of the requested"},{"line_number":44,"context_line":"resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_7fce06b8","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":71},"in_reply_to":"3f79a3b5_8d950e35","updated":"2018-09-27 09:02:12.000000000","message":"Amended a bit to include sharing providers.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":54,"context_line":"provider trees. This means that a sharing provider can be in one allocation"},{"line_number":55,"context_line":"request with resource providers from a different tree in the response of the"},{"line_number":56,"context_line":"`GET /allocation_candidates`_ operation. As an example, this may be used for"},{"line_number":57,"context_line":"shared storage that is connected to multiple compute hosts. Technically, a"},{"line_number":58,"context_line":"resource provider with the ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a"},{"line_number":59,"context_line":"sharing resource provider and the resources on it are shared by other resource"},{"line_number":60,"context_line":"providers in the same aggregate."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"For example, in the following environment::"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f9724812","line":60,"range":{"start_line":57,"start_character":59,"end_line":60,"end_character":32},"updated":"2018-09-26 12:30:06.000000000","message":"Consider carving this information out into a NOTE section, like so:\n\n .. note:: XXXXX","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"provider trees. This means that a sharing provider can be in one allocation"},{"line_number":55,"context_line":"request with resource providers from a different tree in the response of the"},{"line_number":56,"context_line":"`GET /allocation_candidates`_ operation. As an example, this may be used for"},{"line_number":57,"context_line":"shared storage that is connected to multiple compute hosts. Technically, a"},{"line_number":58,"context_line":"resource provider with the ``MISC_SHARES_VIA_AGGREGATE`` trait becomes a"},{"line_number":59,"context_line":"sharing resource provider and the resources on it are shared by other resource"},{"line_number":60,"context_line":"providers in the same aggregate."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"For example, in the following environment::"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9fd1a259","line":60,"range":{"start_line":57,"start_character":59,"end_line":60,"end_character":32},"in_reply_to":"3f79a3b5_f9724812","updated":"2018-09-27 09:02:12.000000000","message":"Done","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"would return three combinations as the allocation candidates."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB)"},{"line_number":90,"context_line":"2. cn2 (VCPU, MEMORY_MB, DISK_GB)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_995b1485","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":61},"updated":"2018-09-26 12:30:06.000000000","message":"I would prefix the above with:\n\n\"Assuming no allocations have yet been made against any of the resource providers\"\n\nsince we\u0027re kind of ignoring the fact that allocation candidates will only be returned if there is actual capacity for the requested resource amount on the providers in question.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:512,DISK_GB:500"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"would return three combinations as the allocation candidates."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"1. cn1 (VCPU, MEMORY_MB, DISK_GB)"},{"line_number":90,"context_line":"2. cn2 (VCPU, MEMORY_MB, DISK_GB)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_df64fab5","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":61},"in_reply_to":"3f79a3b5_995b1485","updated":"2018-09-27 09:02:12.000000000","message":"Done","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":98,"context_line":"the whole tree if one of the resource providers from the tree is connected to"},{"line_number":99,"context_line":"the sharing provider via an aggregate."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"For example, in the following environment where numa resource providers"},{"line_number":102,"context_line":"are child providers of the compute host resource providers::"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"      +------------------------------+"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_19dce4df","line":101,"range":{"start_line":101,"start_character":48,"end_line":101,"end_character":52},"updated":"2018-09-26 12:30:06.000000000","message":"here and throughout, please capitalize NUMA, since it is an acronym.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"the whole tree if one of the resource providers from the tree is connected to"},{"line_number":99,"context_line":"the sharing provider via an aggregate."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"For example, in the following environment where numa resource providers"},{"line_number":102,"context_line":"are child providers of the compute host resource providers::"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"      +------------------------------+"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_5f278a64","line":101,"range":{"start_line":101,"start_character":48,"end_line":101,"end_character":52},"in_reply_to":"3f79a3b5_19dce4df","updated":"2018-09-27 09:02:12.000000000","message":"Done. RP names (cn1, ss1 ...) are also capitalized.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f30e38fd323990ba8a6da4cc1b68ef76e87b303","unresolved":false,"context_lines":[{"line_number":120,"context_line":"      | +-----+------+ +----+------+ |  | +-----+------+ +----+------+ |"},{"line_number":121,"context_line":"      | | numa1_1    | | numa1_2   | |  | | numa2_1    | | numa2_2   | |"},{"line_number":122,"context_line":"      | |  VCPU: 8   | |  VCPU: 8  | |  | |  VCPU: 8   | |  VCPU: 8  | |"},{"line_number":123,"context_line":"      | |  agg:[]    | |  agg:[]   | |  | |  agg:[aggB]| |           | |"},{"line_number":124,"context_line":"      | +------------+ +-----------+ |  | +----+-------+ +-----------+ |"},{"line_number":125,"context_line":"      +------------------------------+  +------|-----------------------+"},{"line_number":126,"context_line":"                                               | aggB"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_19514431","line":123,"range":{"start_line":123,"start_character":45,"end_line":123,"end_character":54},"updated":"2018-09-26 12:30:06.000000000","message":"I really don\u0027t think we should be encouraging this kind of modeling, where a shared storage provider or DISK_GB is sharing with only a single NUMA node resource provider. I just don\u0027t think that\u0027s a realistic example and just makes this more difficult to follow.\n\nCan we think of a realistic example of where a *child provider* would be associated with an aggregate but the parent or root provider would *not* be associated with that aggregate? What is an example of a sharing provider that would share resources with only one NUMA resource provider but not the other NUMA resource provider on the same compute host? I can\u0027t think of any. However, if we change the NUMA resource providers to be SR-IOV PFs, then I can kind of see the use case of having a sharing provider of, say, network bandwidth only shared via an aggregate association with one of the SR-IOV PFs, based on the physical network segment that the sharing provider was modeling...","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5240778431d36b69cc4da2356c49ff2a19fc6e6","unresolved":false,"context_lines":[{"line_number":120,"context_line":"      | +-----+------+ +----+------+ |  | +-----+------+ +----+------+ |"},{"line_number":121,"context_line":"      | | numa1_1    | | numa1_2   | |  | | numa2_1    | | numa2_2   | |"},{"line_number":122,"context_line":"      | |  VCPU: 8   | |  VCPU: 8  | |  | |  VCPU: 8   | |  VCPU: 8  | |"},{"line_number":123,"context_line":"      | |  agg:[]    | |  agg:[]   | |  | |  agg:[aggB]| |           | |"},{"line_number":124,"context_line":"      | +------------+ +-----------+ |  | +----+-------+ +-----------+ |"},{"line_number":125,"context_line":"      +------------------------------+  +------|-----------------------+"},{"line_number":126,"context_line":"                                               | aggB"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_ad9eca03","line":123,"range":{"start_line":123,"start_character":45,"end_line":123,"end_character":54},"in_reply_to":"3f79a3b5_19514431","updated":"2018-09-26 14:53:56.000000000","message":"I was thinking like the FC adapter on which the storage is cabled would be affined with the NUMA node. Not that that would *stop* you from using it with the other node.\n\nIMO this is a fine example to illustrate a principle; it need not be especially realistic. And it uncovered an interesting side-effect (see PS1) which we ought to go figure out.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5475e4d01deab2988de95595a29dc73dfe72ecb2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"      | +-----+------+ +----+------+ |  | +-----+------+ +----+------+ |"},{"line_number":121,"context_line":"      | | numa1_1    | | numa1_2   | |  | | numa2_1    | | numa2_2   | |"},{"line_number":122,"context_line":"      | |  VCPU: 8   | |  VCPU: 8  | |  | |  VCPU: 8   | |  VCPU: 8  | |"},{"line_number":123,"context_line":"      | |  agg:[]    | |  agg:[]   | |  | |  agg:[aggB]| |           | |"},{"line_number":124,"context_line":"      | +------------+ +-----------+ |  | +----+-------+ +-----------+ |"},{"line_number":125,"context_line":"      +------------------------------+  +------|-----------------------+"},{"line_number":126,"context_line":"                                               | aggB"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_03fd3c6d","line":123,"range":{"start_line":123,"start_character":45,"end_line":123,"end_character":54},"in_reply_to":"3f79a3b5_ad9eca03","updated":"2018-09-27 09:02:12.000000000","message":"Hmm... I\u0027ve start to think we shouldn\u0027t officially document an example where we don\u0027t have the concrete use case. Plus as Eric and I discussed in PS1, it is not yet decided what\u0027s the ideal behavior of /alloc_cands API when non-root provider is associated to sharing provider, I updated the example not to include the case where non-root provider is associated to sharing provider.","commit_id":"e066b46b322570f218c1ae9276bb4603c6383c5b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3b9ee1528622ccbabd40ae6d62a3e1e89cfde34a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"The nova resource tracker is responsible for creating the resource provider"},{"line_number":26,"context_line":"record corresponding to the compute host on which the resource tracker runs."},{"line_number":27,"context_line":"If other projects -- for example, Neutron or Cyborg -- wish to manage resources"},{"line_number":28,"context_line":"on a compute host, the should create resource providers as children of the"},{"line_number":29,"context_line":"compute host provider and register their own managed resources as inventory on"},{"line_number":30,"context_line":"those child providers. For more information, see the"},{"line_number":31,"context_line":":doc:`Modeling with Provider Trees \u003cprovider-tree\u003e`."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_c76189d6","line":28,"range":{"start_line":28,"start_character":19,"end_line":28,"end_character":22},"updated":"2018-09-27 13:50:36.000000000","message":"they","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"}],"doc/source/usage/provider-tree.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fc864096e3221112ced518677952954d43c14cbb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"a child provider can belong to only one parent provider. Therefore, the whole"},{"line_number":24,"context_line":"architecture can be considered as a \"tree\" structure, and the resource provider"},{"line_number":25,"context_line":"on top of the \"tree\" is called a \"root provider\". (See the"},{"line_number":26,"context_line":"`Nested Resource Providers`_ spec for details.)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Modeling the relationship is done by specifying a parent provider via the"},{"line_number":29,"context_line":"`POST /resource_providers`_ operation when creating a resource provider."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_555d22ea","line":26,"updated":"2018-09-27 13:32:37.000000000","message":"++","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fc864096e3221112ced518677952954d43c14cbb","unresolved":false,"context_lines":[{"line_number":31,"context_line":".. note:: If the parent provider hasn\u0027t been set, you can also parent a"},{"line_number":32,"context_line":"          resource provider after the creation via the"},{"line_number":33,"context_line":"          `PUT /resource_providers/{uuid}`_ operation. But re-parenting a"},{"line_number":34,"context_line":"          resource provider is not supported."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"The resource providers in a tree -- and sharing providers as described in the"},{"line_number":37,"context_line":"next section -- can be returned in a single allocation request in the response"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_355ae6f1","line":34,"updated":"2018-09-27 13:32:37.000000000","message":"✓","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fc864096e3221112ced518677952954d43c14cbb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"          resource provider is not supported."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"The resource providers in a tree -- and sharing providers as described in the"},{"line_number":37,"context_line":"next section -- can be returned in a single allocation request in the response"},{"line_number":38,"context_line":"of the `GET /allocation_candidates`_ operation. This means that the placement"},{"line_number":39,"context_line":"service looks up a resource provider tree in which resource providers can"},{"line_number":40,"context_line":"*collectively* contain all of the requested resources."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_f56b0e83","line":37,"range":{"start_line":37,"start_character":31,"end_line":37,"end_character":62},"updated":"2018-09-27 13:32:37.000000000","message":"✓","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fc864096e3221112ced518677952954d43c14cbb","unresolved":false,"context_lines":[{"line_number":187,"context_line":"2. ``NUMA1_2`` (``VCPU``) + ``CN1`` (``MEMORY_MB``, ``DISK_GB``)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"This is because ``SS1`` is not in aggregate A, and because aggregate B on"},{"line_number":190,"context_line":"``NUMA2_1`` doesn\u0027t span the whole tree since it isn\u0027t a root resource"},{"line_number":191,"context_line":"provider."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Filtering by Traits"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_15da4a4a","line":190,"range":{"start_line":190,"start_character":46,"end_line":190,"end_character":48},"updated":"2018-09-27 13:32:37.000000000","message":"consider replacing \"it\" here with \"the NUMA2_1 resource provider\" to differentiate \"it\"\u0027s target. The way the above reads, \"it\" could refer to \"SS1\", \"aggregate B\" or \"NUMA2_1\".","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fc864096e3221112ced518677952954d43c14cbb","unresolved":false,"context_lines":[{"line_number":261,"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"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"If you want to get the same kind of resources from multiple resource providers"},{"line_number":264,"context_line":"at once, or if you don\u0027t want to spread the trait/aggregate constraints across"},{"line_number":265,"context_line":"multiple resource providers, you can use the `Granular Resource Request`_"},{"line_number":266,"context_line":"feature."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_7514de9f","line":264,"range":{"start_line":264,"start_character":12,"end_line":264,"end_character":71},"updated":"2018-09-27 13:32:37.000000000","message":"recommend reworking this to be a positive statement instead of a negative statement:\n\n\"or if you require a provider of a particular requested resource class to have a specific trait or aggregate membership, you can use...\"","commit_id":"111aa59869e6f4fae709e2cc8dd65770944eb5d7"}]}
