)]}'
{"specs/newton/approved/generic-resource-pools.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2c8125efb2a47bd7aaaf181052112fc9a58bd46b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Proposed change"},{"line_number":52,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"We propose a new RESTful placment API that allows the querying and management"},{"line_number":55,"context_line":"of resource providers, their inventory and allocation records, and their"},{"line_number":56,"context_line":"association to aggregates."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_7bd31639","line":54,"range":{"start_line":54,"start_character":25,"end_line":54,"end_character":33},"updated":"2016-06-06 15:27:07.000000000","message":"\"placement\"","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"40a80327a5972e429b53e5b5bfde461309b7c207","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Proposed change"},{"line_number":52,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"We propose a new RESTful placment API that allows the querying and management"},{"line_number":55,"context_line":"of resource providers, their inventory and allocation records, and their"},{"line_number":56,"context_line":"association to aggregates."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_b620f39c","line":54,"updated":"2016-06-06 15:31:41.000000000","message":"fixed.","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b847ff5259658ffbcd334aea64426924aed36219","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Proposed change"},{"line_number":52,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"We propose a new RESTful placment API that allows the querying and management"},{"line_number":55,"context_line":"of resource providers, their inventory and allocation records, and their"},{"line_number":56,"context_line":"association to aggregates."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_4030e501","line":54,"range":{"start_line":54,"start_character":25,"end_line":54,"end_character":33},"updated":"2016-06-06 15:25:52.000000000","message":"nit: placement*","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"40a80327a5972e429b53e5b5bfde461309b7c207","unresolved":false,"context_lines":[{"line_number":144,"context_line":".. note::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    Please note that the `--uuid` field in the `openstack resource-provider"},{"line_number":147,"context_line":"    create` call above is an optional argument to `openstack resource-preovider"},{"line_number":148,"context_line":"    create`. You may have noticed that in the first use case, we do not provide"},{"line_number":149,"context_line":"    a UUID when creating the resource provider."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_9625f7ac","line":147,"updated":"2016-06-06 15:31:41.000000000","message":"fixed.","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b847ff5259658ffbcd334aea64426924aed36219","unresolved":false,"context_lines":[{"line_number":144,"context_line":".. note::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    Please note that the `--uuid` field in the `openstack resource-provider"},{"line_number":147,"context_line":"    create` call above is an optional argument to `openstack resource-preovider"},{"line_number":148,"context_line":"    create`. You may have noticed that in the first use case, we do not provide"},{"line_number":149,"context_line":"    a UUID when creating the resource provider."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_2004b915","line":147,"range":{"start_line":147,"start_character":70,"end_line":147,"end_character":79},"updated":"2016-06-06 15:25:52.000000000","message":"nit: provider*","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b847ff5259658ffbcd334aea64426924aed36219","unresolved":false,"context_lines":[{"line_number":261,"context_line":"since these calls will be part of the split-out scheduler REST API.  There"},{"line_number":262,"context_line":"should be a wholly separate placement API endpoint, started on a different port"},{"line_number":263,"context_line":"than the Nova API, and served by a different service daemon defined in"},{"line_number":264,"context_line":"`/nova/cmd/placement-api.py`."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Microversion support shall be added to the new placement API from the start."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_9b7362b1","line":264,"updated":"2016-06-06 15:25:52.000000000","message":"okay, sorry for having created trouble on that, now it\u0027s clear why we need a new service deamon (with port) and not just a separate endpoint.","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"40a80327a5972e429b53e5b5bfde461309b7c207","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    will ensure that if another process has updated the state of the resource"},{"line_number":533,"context_line":"    provider\u0027s inventory or allocations in between the initial read of the"},{"line_number":534,"context_line":"    generation and the update of inventory, that a `409 Conflict` is returned,"},{"line_number":535,"context_line":"    allowing the caller to retry an operation."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"The returned HTTP response code will be one of the following:"},{"line_number":538,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_f63a7bcc","line":535,"updated":"2016-06-06 15:31:41.000000000","message":"Yes, precisely. The caller knows the generation because it is included in the returned response for GET /resource_providers, GET /resource_providers/{uuid}/inventories, etc. The generation represents to the caller the state of the resource provider the last time it read information about it and it supplies this generation as a marker for the server to check before updating any inventory/allocation information for that resource provider.","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b847ff5259658ffbcd334aea64426924aed36219","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    will ensure that if another process has updated the state of the resource"},{"line_number":533,"context_line":"    provider\u0027s inventory or allocations in between the initial read of the"},{"line_number":534,"context_line":"    generation and the update of inventory, that a `409 Conflict` is returned,"},{"line_number":535,"context_line":"    allowing the caller to retry an operation."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"The returned HTTP response code will be one of the following:"},{"line_number":538,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_db1dea10","line":535,"updated":"2016-06-06 15:25:52.000000000","message":"okay, now the generation bit is clearer to me. It\u0027s the caller\u0027s responsibility to keep metric of that generation bit before updating (or doing an atomic GET and PUT for updating the generation field ?)\n\nI was thinking we were originally assuming that the generation bit is hidden from the API consumers, and just something for making sure our updates were not conflicting, but internally.","commit_id":"3d8115472e6b1888bf9704fddebd9cde0102c3df"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"99bc389c971cb339327743f1e68192e7da5ec88c","unresolved":false,"context_lines":[{"line_number":527,"context_line":"Example::"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    POST /resource_pools/eaaf1c04-ced2-40e4-89a2-87edded06d64/inventories"},{"line_number":530,"context_line":"    Content-Type: application/json"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    {"},{"line_number":533,"context_line":"      \"resource_class\": \"DISK_GB\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_ace8a27d","side":"PARENT","line":530,"updated":"2016-06-06 16:10:20.000000000","message":"Since the resource_provider already exists at this point, do we need a generation here or, because we are _only_ adding one single inventory of a new class, we\u0027re okay?","commit_id":"2cc649e35a7a6e71c837a1703b4239a0eef6c1d2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fa67de70014c86eac0c42bd3b20521a6c40b7f23","unresolved":false,"context_lines":[{"line_number":527,"context_line":"Example::"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    POST /resource_pools/eaaf1c04-ced2-40e4-89a2-87edded06d64/inventories"},{"line_number":530,"context_line":"    Content-Type: application/json"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    {"},{"line_number":533,"context_line":"      \"resource_class\": \"DISK_GB\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_ddb89b2c","side":"PARENT","line":530,"updated":"2016-06-08 19:05:53.000000000","message":"Yes, we don\u0027t need the generation here because we are only adding a single inventory and therefore the server can read the existing inventory and resource provider generation, check to see that there existed no inventory record for the requested resource class, and then if no such resource class record existed, add a new one and update the generation to 1 + its view of the generation (with a WHERE clause that specified the generation is the original generation the server read.","commit_id":"2cc649e35a7a6e71c837a1703b4239a0eef6c1d2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fa67de70014c86eac0c42bd3b20521a6c40b7f23","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    The `generation` field in the above output is a consistent view marker. We"},{"line_number":363,"context_line":"    need to include this field in order for updaters of the inventory and"},{"line_number":364,"context_line":"    allocation information for a resource provider to indicate the state of the"},{"line_number":365,"context_line":"    resource provider when they initially read their information."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"`POST /resource_providers`"},{"line_number":368,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_7dad27e8","line":365,"updated":"2016-06-08 19:05:53.000000000","message":"@cdent, @johnthetubaguy: Just wrapping up this comment... sounds like after discussions on IRC the decision was to stick with specifying the generation in this fashion instead of using ETag, partly due to the inconsistent handling of ETags for collections of resources.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"285bd9cb15841c08161d66d2790933e3ed4f1a7d","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    The `generation` field in the above output is a consistent view marker. We"},{"line_number":363,"context_line":"    need to include this field in order for updaters of the inventory and"},{"line_number":364,"context_line":"    allocation information for a resource provider to indicate the state of the"},{"line_number":365,"context_line":"    resource provider when they initially read their information."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"`POST /resource_providers`"},{"line_number":368,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_4c365be8","line":365,"updated":"2016-06-06 16:44:13.000000000","message":"@cdent: totally agree with you about generation vs. ETag. You are correct. If you would like me to, I can remove the return of the generation and instead note that the ETag value will be the generation of the resource provider.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c73f8e1635908ddfc72d4fd6b395a5e721f0c153","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    The `generation` field in the above output is a consistent view marker. We"},{"line_number":363,"context_line":"    need to include this field in order for updaters of the inventory and"},{"line_number":364,"context_line":"    allocation information for a resource provider to indicate the state of the"},{"line_number":365,"context_line":"    resource provider when they initially read their information."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"`POST /resource_providers`"},{"line_number":368,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_0c49f65f","line":365,"updated":"2016-06-06 16:02:20.000000000","message":"I think this exposes a detail of the persistence layer over the wire. This kind of thing is what http-standard etags (which could have the exact same value as the generation) in the request and response headers are for. Jay\u0027s sentence \"The generation represents to the caller the state of the resource provider the last time it read information about it and it supplies this generation as a marker for the server to check before updating any inventory/allocation information for that resource provider.\" could have s/generation/etag/g run on it and it would still be correct.\n\nHowever, I don\u0027t want to quibble over that if it doesn\u0027t immediately make sense and since we seem to be nearing consensus on the already challenging enough concept of generation.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3df08e1caf9d69192440f5c28e0344f1f5c163cb","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    The `generation` field in the above output is a consistent view marker. We"},{"line_number":363,"context_line":"    need to include this field in order for updaters of the inventory and"},{"line_number":364,"context_line":"    allocation information for a resource provider to indicate the state of the"},{"line_number":365,"context_line":"    resource provider when they initially read their information."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"`POST /resource_providers`"},{"line_number":368,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_2c6e6f01","line":365,"in_reply_to":"7aa08908_4c365be8","updated":"2016-06-06 17:00:13.000000000","message":"@jaypipes, that does sound better actually.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fa67de70014c86eac0c42bd3b20521a6c40b7f23","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"Example::"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    DELETE /resource_providers/eaaf1c04-ced2-40e4-89a2-87edded06d64/inventories/DISK_GB"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"The body is empty."},{"line_number":693,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_bdb30f4c","line":690,"updated":"2016-06-08 19:05:53.000000000","message":"Same as for the \"add a single inventory record\" case. The server can read the current inventory and resource provider generation and then delete the inventory record specified (returning a 409 if the record no longer exists) and update the resource provider\u0027s generation right before committing the transaction.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ec9e7a49d2d9c2f087de8f5ac691d44ff3c3d1a0","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"Example::"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    DELETE /resource_providers/eaaf1c04-ced2-40e4-89a2-87edded06d64/inventories/DISK_GB"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"The body is empty."},{"line_number":693,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_380ca9ec","line":690,"updated":"2016-06-07 16:13:06.000000000","message":"With neither a generation nor an etag here it is possible to delete an Inventory without being certain that it is in the expected state. Do we care?","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fa67de70014c86eac0c42bd3b20521a6c40b7f23","unresolved":false,"context_lines":[{"line_number":735,"context_line":""},{"line_number":736,"context_line":"Example::"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    PUT /resource_providers/eaaf1c04-ced2-40e4-89a2-87edded06d64/aggregates"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    ["},{"line_number":741,"context_line":"        \"21d7c4aa-d0b6-41b1-8513-12a1eac17c0c\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_1d850359","line":738,"updated":"2016-06-08 19:05:53.000000000","message":"No. For aggregate associating/disassociating we don\u0027t care about concurrent threads adding or removing aggregate information. Last one in wins... it\u0027s not a concern like it is for inventory information.","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"99bc389c971cb339327743f1e68192e7da5ec88c","unresolved":false,"context_lines":[{"line_number":735,"context_line":""},{"line_number":736,"context_line":"Example::"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    PUT /resource_providers/eaaf1c04-ced2-40e4-89a2-87edded06d64/aggregates"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    ["},{"line_number":741,"context_line":"        \"21d7c4aa-d0b6-41b1-8513-12a1eac17c0c\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"7aa08908_ac126260","line":738,"updated":"2016-06-06 16:10:20.000000000","message":"Similar question about generation here.\n\nMy mental model is that we need a generation for any change?","commit_id":"e79a21c17bb0bcbcc81bbcec64ad8610df6e6d0c"}]}
