)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"processing, including processing in different nova-compute"},{"line_number":14,"context_line":"processes."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The `generation` concept in the placement service providers a tool"},{"line_number":17,"context_line":"for managing these kind of concurrent operations: a write request"},{"line_number":18,"context_line":"that includes a generation has that generation compared against the"},{"line_number":19,"context_line":"value on the server. If there is a match the request and can go"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_b7fe4803","line":16,"range":{"start_line":16,"start_character":50,"end_line":16,"end_character":59},"updated":"2018-02-05 17:05:28.000000000","message":"provides","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"processes."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The `generation` concept in the placement service providers a tool"},{"line_number":17,"context_line":"for managing these kind of concurrent operations: a write request"},{"line_number":18,"context_line":"that includes a generation has that generation compared against the"},{"line_number":19,"context_line":"value on the server. If there is a match the request and can go"},{"line_number":20,"context_line":"ahead, otherwise a ``409 Conflict`` response is returned."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_62ffa067","line":17,"range":{"start_line":17,"start_character":19,"end_line":17,"end_character":23},"updated":"2018-02-05 17:05:28.000000000","message":"kinds","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"The `generation` concept in the placement service providers a tool"},{"line_number":17,"context_line":"for managing these kind of concurrent operations: a write request"},{"line_number":18,"context_line":"that includes a generation has that generation compared against the"},{"line_number":19,"context_line":"value on the server. If there is a match the request and can go"},{"line_number":20,"context_line":"ahead, otherwise a ``409 Conflict`` response is returned."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This functionality is not present when associating a resource"},{"line_number":23,"context_line":"provider with one or more aggregate uuids. For virt drivers that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_78218cb4","line":20,"range":{"start_line":19,"start_character":21,"end_line":20,"end_character":57},"updated":"2018-02-05 17:56:59.000000000","message":"technically it\u0027s a little more complicated than this (from the transactional/view marker perspective), but this is fine for describing the concept.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ff04a7d2c84678781afcc5ebbdd36982c030ba51","unresolved":false,"context_lines":[{"line_number":16,"context_line":"The `generation` concept in the placement service providers a tool"},{"line_number":17,"context_line":"for managing these kind of concurrent operations: a write request"},{"line_number":18,"context_line":"that includes a generation has that generation compared against the"},{"line_number":19,"context_line":"value on the server. If there is a match the request and can go"},{"line_number":20,"context_line":"ahead, otherwise a ``409 Conflict`` response is returned."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This functionality is not present when associating a resource"},{"line_number":23,"context_line":"provider with one or more aggregate uuids. For virt drivers that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_8b5be485","line":20,"range":{"start_line":19,"start_character":21,"end_line":20,"end_character":57},"in_reply_to":"3fa0c359_78218cb4","updated":"2018-02-05 18:17:25.000000000","message":"I wanted to keep it simple and from the perspective of the API caller, who is unaware (happily so) that there is an RDBMS behind the curtain.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ahead, otherwise a ``409 Conflict`` response is returned."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This functionality is not present when associating a resource"},{"line_number":23,"context_line":"provider with one or more aggregate uuids. For virt drivers that"},{"line_number":24,"context_line":"wish to manage aggregate associations safely, this is necessary."},{"line_number":25,"context_line":"This spec describes the changes necessary to add the functionality."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_580db03c","line":23,"updated":"2018-02-05 17:56:59.000000000","message":"nor disassociating those relationships.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ff04a7d2c84678781afcc5ebbdd36982c030ba51","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ahead, otherwise a ``409 Conflict`` response is returned."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This functionality is not present when associating a resource"},{"line_number":23,"context_line":"provider with one or more aggregate uuids. For virt drivers that"},{"line_number":24,"context_line":"wish to manage aggregate associations safely, this is necessary."},{"line_number":25,"context_line":"This spec describes the changes necessary to add the functionality."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa0c359_4b55dc4f","line":23,"in_reply_to":"3fa0c359_580db03c","updated":"2018-02-05 18:17:25.000000000","message":"ack","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"}],"specs/rocky/approved/placement-aggregate-generation.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"drivers may wish to manage a complex collection of interrelated resource"},{"line_number":15,"context_line":"providers, resource class, traits and aggregates. Some of those entities"},{"line_number":16,"context_line":"may be need to be managed by multiple threads of processing, including"},{"line_number":17,"context_line":"processing in different nova-compute processes."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The `generation` concept in the placement service providers a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write request that includes a generation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_82b66cd9","line":17,"updated":"2018-02-05 17:05:28.000000000","message":"a veritable procession of process processing","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"drivers may wish to manage a complex collection of interrelated resource"},{"line_number":15,"context_line":"providers, resource class, traits and aggregates. Some of those entities"},{"line_number":16,"context_line":"may be need to be managed by multiple threads of processing, including"},{"line_number":17,"context_line":"processing in different nova-compute processes."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The `generation` concept in the placement service providers a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write request that includes a generation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_2b197078","line":17,"in_reply_to":"3fa0c359_82b66cd9","updated":"2018-02-05 17:56:59.000000000","message":"Verily, this vichyssoise of verbiage veers most verbose","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"may be need to be managed by multiple threads of processing, including"},{"line_number":17,"context_line":"processing in different nova-compute processes."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The `generation` concept in the placement service providers a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write request that includes a generation"},{"line_number":21,"context_line":"has that generation compared against the value on the server. If there is a"},{"line_number":22,"context_line":"match the request and can go ahead, otherwise a ``409 Conflict`` response is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_42c86454","line":19,"range":{"start_line":19,"start_character":50,"end_line":19,"end_character":59},"updated":"2018-02-05 17:05:28.000000000","message":"provides","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"processing in different nova-compute processes."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The `generation` concept in the placement service providers a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write request that includes a generation"},{"line_number":21,"context_line":"has that generation compared against the value on the server. If there is a"},{"line_number":22,"context_line":"match the request and can go ahead, otherwise a ``409 Conflict`` response is"},{"line_number":23,"context_line":"returned."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_a205a87c","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":10},"updated":"2018-02-05 17:05:28.000000000","message":"kinds","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d698de7e7d9eb0f599fc2530e934cc06a9ee9e12","unresolved":false,"context_lines":[{"line_number":17,"context_line":"processing in different nova-compute processes."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The `generation` concept in the placement service providers a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write request that includes a generation"},{"line_number":21,"context_line":"has that generation compared against the value on the server. If there is a"},{"line_number":22,"context_line":"match the request and can go ahead, otherwise a ``409 Conflict`` response is"},{"line_number":23,"context_line":"returned."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_c3d7c14a","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":10},"in_reply_to":"3fa0c359_a205a87c","updated":"2018-02-13 21:22:47.000000000","message":"Done via https://review.openstack.org/544092","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"match the request and can go ahead, otherwise a ``409 Conflict`` response is"},{"line_number":23,"context_line":"returned."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This functionality is not present when associating a resource provider with one"},{"line_number":26,"context_line":"or more aggregate uuids. For virt drivers that wish to manage aggregate"},{"line_number":27,"context_line":"associations safely, this is necessary. This spec describes the changes"},{"line_number":28,"context_line":"necessary to add the functionality."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_4b407c36","line":25,"updated":"2018-02-05 17:56:59.000000000","message":"or disassociating","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"associations in a thread-safe fashion. Since aggregate association does not"},{"line_number":35,"context_line":"currently use the `generation` mechanism for managing concurrency, this is not"},{"line_number":36,"context_line":"possible. The main concern is with accidentally removing an aggregate that some"},{"line_number":37,"context_line":"other thread B has set when setting aggregates from thread A."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Use Cases"},{"line_number":40,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_e24730bc","line":37,"updated":"2018-02-05 17:05:28.000000000","message":"or, for completeness, re-adding one that thread B removed.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"When processing a ``PUT`` request, if the `generation` does not match the"},{"line_number":58,"context_line":"current (server-side) generation of the resource provider, the request will be"},{"line_number":59,"context_line":"reject with a ``409 Conflict`` response."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Details of representation changes can be found below."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_eb9f08b2","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":6},"updated":"2018-02-05 17:56:59.000000000","message":"rejected","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"We can consider doing nothing. Initially we didn\u0027t think we would need this"},{"line_number":67,"context_line":"functionality because the expectation was that there wouldn\u0027t be multiple"},{"line_number":68,"context_line":"threads attempting to manage the aggregate associations for a single resource"},{"line_number":69,"context_line":"provider. We still haven\u0027t seen this requirement in a real use case yet, but we"},{"line_number":70,"context_line":"expect it to happen. It also remains unclear what the caller is suppose to do"},{"line_number":71,"context_line":"when it receive a conflict, other than incorporate the new data, and retry the"},{"line_number":72,"context_line":"PUT. Is that sufficient?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_03733e17","line":69,"range":{"start_line":69,"start_character":10,"end_line":69,"end_character":71},"updated":"2018-02-05 17:05:28.000000000","message":"To be fair, we haven\u0027t seen it because it hasn\u0027t been possible yet.  I can describe the real use case for PowerVM shared storage pools (SSPs):\n\nThe compute service runs in a special VM (called the NovaLink partition) on a compute host.  Instances consume CPU and memory resources from the host (not the NovaLink).  Another special VM called the Virtual I/O Server (VIOS) brokers storage and network resources.\n\nIn the case of SSP, VIOSes on multiple compute hosts are members of a cluster.  Each VIOS is attached to and capable of serving storage from the same chunk of SAN.\n\nAbsent a higher power (operator intervention, or some orchestrator outside of nova), we would like the PowerVM compute driver to be able to manage the resource provider representation of this shared storage pool.  This means multiple instances of the compute driver - running in separate n-cpu processes on separate compute hosts, potentially even in separate cells or under separate conductors - are all going to be trying to write the same SSP\u0027s inventories and aggregate associations at the same time.\n\nHope this helps.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"functionality because the expectation was that there wouldn\u0027t be multiple"},{"line_number":68,"context_line":"threads attempting to manage the aggregate associations for a single resource"},{"line_number":69,"context_line":"provider. We still haven\u0027t seen this requirement in a real use case yet, but we"},{"line_number":70,"context_line":"expect it to happen. It also remains unclear what the caller is suppose to do"},{"line_number":71,"context_line":"when it receive a conflict, other than incorporate the new data, and retry the"},{"line_number":72,"context_line":"PUT. Is that sufficient?"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_6b94588c","line":70,"range":{"start_line":70,"start_character":64,"end_line":70,"end_character":71},"updated":"2018-02-05 17:56:59.000000000","message":"supposed","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"threads attempting to manage the aggregate associations for a single resource"},{"line_number":69,"context_line":"provider. We still haven\u0027t seen this requirement in a real use case yet, but we"},{"line_number":70,"context_line":"expect it to happen. It also remains unclear what the caller is suppose to do"},{"line_number":71,"context_line":"when it receive a conflict, other than incorporate the new data, and retry the"},{"line_number":72,"context_line":"PUT. Is that sufficient?"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_021edcb9","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":15},"updated":"2018-02-05 17:05:28.000000000","message":"receives","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"provider. We still haven\u0027t seen this requirement in a real use case yet, but we"},{"line_number":70,"context_line":"expect it to happen. It also remains unclear what the caller is suppose to do"},{"line_number":71,"context_line":"when it receive a conflict, other than incorporate the new data, and retry the"},{"line_number":72,"context_line":"PUT. Is that sufficient?"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_8860cd34","line":72,"updated":"2018-02-05 17:05:28.000000000","message":"We provide the conflict detection mechanism at the API level.  It\u0027s up to the caller to decide on a case-by-case basis what the conflict resolution should be.\n\nBut usually, yes, the resolution will be as you describe; and usually, yes, that will be sufficient.  I suggest we not try to engineer anything deeper until/unless we see a use case that might require it.  Since we would likely have to do the same thing for all the other generation-y APIs, that would be a separate and much broader effort.  This blueprint should just be about achieving parity for the aggs API.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"846b3d5aa594ee6dbe1113ae9274db7c722a4c7f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"provider. We still haven\u0027t seen this requirement in a real use case yet, but we"},{"line_number":70,"context_line":"expect it to happen. It also remains unclear what the caller is suppose to do"},{"line_number":71,"context_line":"when it receive a conflict, other than incorporate the new data, and retry the"},{"line_number":72,"context_line":"PUT. Is that sufficient?"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_4bdcfc73","line":72,"in_reply_to":"3fa0c359_8860cd34","updated":"2018-02-05 17:56:59.000000000","message":"It will depend on the caller I think. Most callers will likely just want to re-evaluate the conditions that brought it to want to make some change to state and, if those conditions are still met, retry the state change.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The format for ``PUT /resource_providers/{uuid}/aggregates`` will be identical"},{"line_number":101,"context_line":"to the GET format (above). This is different from the `previous put format`_ in"},{"line_number":102,"context_line":"that now, instead of a bare list of UUUIDs there is an object with two fields:"},{"line_number":103,"context_line":"``aggregates`` (taking a list of UUIDs), and ``resource_provider_generation``"},{"line_number":104,"context_line":"(taking a positive integer).  JSON Schema will be updated to reflect these"},{"line_number":105,"context_line":"requirements."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_63456270","line":102,"range":{"start_line":102,"start_character":36,"end_line":102,"end_character":42},"updated":"2018-02-05 17:05:28.000000000","message":"UUIDs","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"to the GET format (above). This is different from the `previous put format`_ in"},{"line_number":102,"context_line":"that now, instead of a bare list of UUUIDs there is an object with two fields:"},{"line_number":103,"context_line":"``aggregates`` (taking a list of UUIDs), and ``resource_provider_generation``"},{"line_number":104,"context_line":"(taking a positive integer).  JSON Schema will be updated to reflect these"},{"line_number":105,"context_line":"requirements."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"In addition to the existing 200, 400 and 404 response codes currently possible"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_833f4ed5","line":104,"range":{"start_line":104,"start_character":10,"end_line":104,"end_character":18},"updated":"2018-02-05 17:05:28.000000000","message":"nonnegative","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"Work Items"},{"line_number":162,"context_line":"----------"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"* Create JSON Schema for `PUT /resource_providers/{uuid}/aggregates`."},{"line_number":165,"context_line":"* Add new micro-versioned handlers to support the new formats for GET and PUT"},{"line_number":166,"context_line":"  with gabbi-driven tests."},{"line_number":167,"context_line":"* Adjust the ``ResourceProvider.set_aggregates`` method to `optionally` use"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_9598e16a","line":164,"updated":"2018-02-05 17:05:28.000000000","message":"Create a new JSON schema for the new microversion, that is.  We have a schema for the existing (flat list) payload: nova/api/openstack/placement/schemas/aggregate.py","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69d082511649891167f8d9a433956bc43c19699c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* `previous get format`_"},{"line_number":195,"context_line":"* `previous put format`_"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":".. _previous get format: https://developer.openstack.org/api-ref/placement/#list-resource-provider-aggregates"},{"line_number":198,"context_line":".. _previous put format: https://developer.openstack.org/api-ref/placement/#update-resource-provider-aggregates"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa0c359_b504fd7c","line":198,"range":{"start_line":197,"start_character":0,"end_line":198,"end_character":111},"updated":"2018-02-05 17:05:28.000000000","message":"Guess there\u0027s no way to make these links survive the implementation of this blueprint, for posterity.\n\nThough the doc enhancements will leave the old version there as pre-this-microversion behavior.  So maybe somewhere in this document we should state that the \"old\" behavior is at least as of microversion x.yz.","commit_id":"944555936d66d948e82ee8921f08600d0cd508c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"130df885bd28440c91cc05b8bfe6df58e3c988e8","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As resource provider handling has evolved, it has become clear that virt"},{"line_number":14,"context_line":"drivers may wish to manage a complex collection of interrelated resource"},{"line_number":15,"context_line":"providers, resource class, traits and aggregates. Some of those entities"},{"line_number":16,"context_line":"may need to be managed by multiple threads of processing, including"},{"line_number":17,"context_line":"different nova-compute processes."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa0c359_eec2b6e9","line":15,"range":{"start_line":15,"start_character":20,"end_line":15,"end_character":25},"updated":"2018-02-05 18:58:08.000000000","message":"classes","commit_id":"bab7bdaebca4a43d67520743cba2596c57982748"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"130df885bd28440c91cc05b8bfe6df58e3c988e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"The `generation` concept in the placement service provides a tool for managing"},{"line_number":20,"context_line":"these kind of concurrent operations: a write API request that includes a"},{"line_number":21,"context_line":"generation has that generation compared against the value on the server. If"},{"line_number":22,"context_line":"there is a match the request and can go ahead, otherwise a ``409 Conflict``"},{"line_number":23,"context_line":"response is returned."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This functionality is not present when associating or disassociating a resource"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa0c359_0e9282f7","line":22,"range":{"start_line":22,"start_character":28,"end_line":22,"end_character":32},"updated":"2018-02-05 18:58:08.000000000","message":"s/ and/","commit_id":"bab7bdaebca4a43d67520743cba2596c57982748"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42eaa18f415ec579d2c958298caec758e6c219b4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"In addition to the existing 200, 400 and 404 response codes currently possible"},{"line_number":111,"context_line":"when calling ``PUT /resource_providers/{uuid}/aggregates``, a ``409 Conflict``"},{"line_number":112,"context_line":"response code will be returned when the ``resource_provider_generation`` field"},{"line_number":113,"context_line":"does not match the server-side value."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Security impact"},{"line_number":116,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa0c359_881c7878","line":113,"updated":"2018-02-13 21:03:47.000000000","message":"And what about when an older microversion is used? Presumably we\u0027ll just take the path that we would have if they had provided the correct generation?","commit_id":"4617e0c86159653f6fe15b655626bf60ab77ea31"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd99e87393fded3e45ad0e50a72939beea7bd870","unresolved":false,"context_lines":[{"line_number":110,"context_line":"In addition to the existing 200, 400 and 404 response codes currently possible"},{"line_number":111,"context_line":"when calling ``PUT /resource_providers/{uuid}/aggregates``, a ``409 Conflict``"},{"line_number":112,"context_line":"response code will be returned when the ``resource_provider_generation`` field"},{"line_number":113,"context_line":"does not match the server-side value."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Security impact"},{"line_number":116,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa0c359_c3526113","line":113,"in_reply_to":"3fa0c359_4310914e","updated":"2018-02-13 21:07:48.000000000","message":"I just want to make sure we wouldn\u0027t intentionally or accidentally take the \"generation doesn\u0027t match\" path in that case.\n\nMaybe we can follow-up with a single-sentence to clarify that we thought about it?","commit_id":"4617e0c86159653f6fe15b655626bf60ab77ea31"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d6d678c94cf6e56a9b86cfe4746e6f0c5a52c634","unresolved":false,"context_lines":[{"line_number":110,"context_line":"In addition to the existing 200, 400 and 404 response codes currently possible"},{"line_number":111,"context_line":"when calling ``PUT /resource_providers/{uuid}/aggregates``, a ``409 Conflict``"},{"line_number":112,"context_line":"response code will be returned when the ``resource_provider_generation`` field"},{"line_number":113,"context_line":"does not match the server-side value."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Security impact"},{"line_number":116,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa0c359_4310914e","line":113,"in_reply_to":"3fa0c359_881c7878","updated":"2018-02-13 21:06:00.000000000","message":"Well, yeah, basically we do what we\u0027re doing today, which is to replace whatever\u0027s there and not check generations at all.  The effect is as if they had provided the correct generation, though I would say the \"intent\" isn\u0027t quite the same.","commit_id":"4617e0c86159653f6fe15b655626bf60ab77ea31"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d698de7e7d9eb0f599fc2530e934cc06a9ee9e12","unresolved":false,"context_lines":[{"line_number":110,"context_line":"In addition to the existing 200, 400 and 404 response codes currently possible"},{"line_number":111,"context_line":"when calling ``PUT /resource_providers/{uuid}/aggregates``, a ``409 Conflict``"},{"line_number":112,"context_line":"response code will be returned when the ``resource_provider_generation`` field"},{"line_number":113,"context_line":"does not match the server-side value."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Security impact"},{"line_number":116,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa0c359_23d30506","line":113,"in_reply_to":"3fa0c359_c3526113","updated":"2018-02-13 21:22:47.000000000","message":"https://review.openstack.org/544092","commit_id":"4617e0c86159653f6fe15b655626bf60ab77ea31"}]}
