)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5a3fc5d16d1dc594808aec752456670c3208403a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"matter of the API reference."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Links are included from the updated descriptions for the two affected"},{"line_number":21,"context_line":"allocations operations. Future commits can add links from other"},{"line_number":22,"context_line":"appropriate sections of the reference (e.g. the parameters.yaml entries"},{"line_number":23,"context_line":"for resource provider and consumer generation fields). Future commits"},{"line_number":24,"context_line":"could also enhance the descriptions of error codes for other operations"},{"line_number":25,"context_line":"to (at least) the level of detail at which these have ended up."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] https://developer.openstack.org/api-ref/placement/?expanded\u003dmanage-allocations-detail#manage-allocations"},{"line_number":28,"context_line":"[2] https://developer.openstack.org/api-ref/placement/?expanded\u003dupdate-allocations-detail#update-allocations"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7faddb67_e341010d","line":25,"range":{"start_line":21,"start_character":24,"end_line":25,"end_character":63},"updated":"2019-07-10 22:33:49.000000000","message":"@Chris, these are for those hoped-for future contributors :*","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e2fa9ae0919a88b20012968c44876ac466fd46e2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"matter of the API reference."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Links are included from the updated descriptions for the two affected"},{"line_number":21,"context_line":"allocations operations. Future commits can add links from other"},{"line_number":22,"context_line":"appropriate sections of the reference (e.g. the parameters.yaml entries"},{"line_number":23,"context_line":"for resource provider and consumer generation fields). Future commits"},{"line_number":24,"context_line":"could also enhance the descriptions of error codes for other operations"},{"line_number":25,"context_line":"to (at least) the level of detail at which these have ended up."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] https://developer.openstack.org/api-ref/placement/?expanded\u003dmanage-allocations-detail#manage-allocations"},{"line_number":28,"context_line":"[2] https://developer.openstack.org/api-ref/placement/?expanded\u003dupdate-allocations-detail#update-allocations"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7faddb67_e9179f50","line":25,"range":{"start_line":21,"start_character":24,"end_line":25,"end_character":63},"in_reply_to":"7faddb67_e341010d","updated":"2019-07-11 09:11:05.000000000","message":"Man, you try to write some hugging face emoji to gerrit and it 500s. Where\u0027s the love...","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"}],"api-ref/source/allocations.inc":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4fcad7695f83c10c0455351cee78c38bc8746389","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* `409 Conflict` if there is no available inventory in any of the"},{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_b6d5a2e7","line":33,"range":{"start_line":33,"start_character":51,"end_line":33,"end_character":62},"updated":"2019-07-09 22:17:28.000000000","message":"\"...for the(/a) specified consumer\" ?","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"529320f8ea8ffd70432bac7e76ec5356dc7616ca","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* `409 Conflict` if there is no available inventory in any of the"},{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_f1224401","line":33,"range":{"start_line":33,"start_character":51,"end_line":33,"end_character":62},"in_reply_to":"7faddb67_b6d5a2e7","updated":"2019-07-10 00:54:06.000000000","message":"\"for the specified consumer\" makes sense to me since the 1.28 is on the consumer generation specifically. I was going to say maybe that\u0027s implied but POST /allocations has potentially multiple consumers so maybe it\u0027s fine to spell it out.","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"197eb23fb7573ca8452f27955ac0bc6bf31c31c1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* `409 Conflict` if there is no available inventory in any of the"},{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_7c14e8a0","line":33,"range":{"start_line":33,"start_character":51,"end_line":33,"end_character":62},"in_reply_to":"7faddb67_f1224401","updated":"2019-07-10 07:31:37.000000000","message":"yes","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"529320f8ea8ffd70432bac7e76ec5356dc7616ca","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"},{"line_number":37,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_5179d8f9","line":34,"updated":"2019-07-10 00:54:06.000000000","message":"This is sufficiently generic but doesn\u0027t necessarily imply to me that the problem is related to consumer generation, i.e. that I passed consumer_generation\u003dNone expecting there was no allocations for the consumer but there now is, or that I passed a consumer generation but the allocations are now gone (I\u0027m not sure that latter case is covered by the \"created or updated\" generic-ness of what\u0027s here).\n\nHaving said all that, I don\u0027t know that I have better words here, so will leave this open to see if others have ideas.\n\nAlso, I\u0027d probably say \"request\" instead of \"thread\".","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"197eb23fb7573ca8452f27955ac0bc6bf31c31c1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"},{"line_number":37,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_5c5fac71","line":34,"in_reply_to":"7faddb67_5179d8f9","updated":"2019-07-10 07:31:37.000000000","message":"Yeah, I think it is worth mentioning the consumer generation. Also please don\u0027t use thread in the api-ref as it suggests both more and less than is really happening. Request is better. How about:\n\n\u003e `409 Conflict` at microversion 1.28 or higher if allocations for the specified consumer have been created, updated, or removed using a consumer generation that is out of sync with the server because some other request has created, updated, or removed allocations for the same consumer.\n\nI think it is okay for us to be explicit about the generation because we require that the caller be explicit about the generation in the request.","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"20b78b9322c96d53d4c1776cf552bfe08a0f0957","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":32,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":33,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":34,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"},{"line_number":37,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_e37021a8","line":34,"in_reply_to":"7faddb67_5c5fac71","updated":"2019-07-10 22:28:01.000000000","message":"\u003e request vs thread\n\nWas copying L32. I\u0027ll change both (all four) in the next rev.\n\n \u003e \u003e `409 Conflict` at microversion 1.28 or higher if allocations for\n \u003e the specified consumer have been created, updated, or removed using\n \u003e a consumer generation that is out of sync with the server because\n \u003e some other request has created, updated, or removed allocations for\n \u003e the same consumer.\n\nWhile very specific and correct, IMO this is too mealy to be easily comprehended.","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"197eb23fb7573ca8452f27955ac0bc6bf31c31c1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  resource providers for any specified resource classes or inventories"},{"line_number":128,"context_line":"  are updated by another thread while attempting the operation."},{"line_number":129,"context_line":"* `409 Conflict` at microversion 1.28 or higher if allocations have been"},{"line_number":130,"context_line":"  (created or) updated by another thread while attempting the operation."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Request (microversions 1.12 - )"},{"line_number":133,"context_line":"-------------------------------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7faddb67_bc4fc0bb","line":130,"updated":"2019-07-10 07:31:37.000000000","message":"See above.","commit_id":"2b3009f496c67297029717388e150b999f527021"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"13e5ded5576293909e9280dcf1216744f1208cb7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"* `409 Conflict`  with `error code \u003cerror_codes_\u003e`_"},{"line_number":36,"context_line":"  ``placement.concurrent_update`` at microversion 1.28 or higher if allocations"},{"line_number":37,"context_line":"  for a specified consumer have been created, updated, or removed by another"},{"line_number":38,"context_line":"  request while attempting the operation. See :ref:`generations`."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Request"},{"line_number":41,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"7faddb67_f1ba0f6c","line":38,"range":{"start_line":38,"start_character":46,"end_line":38,"end_character":64},"updated":"2019-07-12 14:18:06.000000000","message":"nit: Any reason to not use \u0027:doc:\u0027 instead?","commit_id":"a09defd661bb3ae57ef92bd49989c45c12b7aabd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9573b4efa4b880ca6ce026f0f88bcbf946946862","unresolved":false,"context_lines":[{"line_number":35,"context_line":"* `409 Conflict`  with `error code \u003cerror_codes_\u003e`_"},{"line_number":36,"context_line":"  ``placement.concurrent_update`` at microversion 1.28 or higher if allocations"},{"line_number":37,"context_line":"  for a specified consumer have been created, updated, or removed by another"},{"line_number":38,"context_line":"  request while attempting the operation. See :ref:`generations`."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Request"},{"line_number":41,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"7faddb67_e7f56dee","line":38,"range":{"start_line":38,"start_character":46,"end_line":38,"end_character":64},"in_reply_to":"7faddb67_f1ba0f6c","updated":"2019-07-12 16:15:08.000000000","message":"Hm, I\u0027m sure I meant :doc: -- I *always* get that wrong -- but this is working. What would be different if I used :doc:?\n\n[Later] Okay, I tried it and got \n\n api-ref/source/allocations.inc:32:unknown document: generations\n\nSo :ref:`foo` is for a\n\n .. _foo:\n\nanywhere in the current build space, and :doc:`/path/to/foo` is for an actual top-level document called */source/path/to/foo.rst (*/build/html/path/to/foo.html)\n\nIn this case, generations.inc isn\u0027t generations.rst, so it doesn\u0027t work?","commit_id":"a09defd661bb3ae57ef92bd49989c45c12b7aabd"}],"api-ref/source/generations.inc":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e2fa9ae0919a88b20012968c44876ac466fd46e2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":"Placement handles concurrent requests against the same object by maintaining a"},{"line_number":7,"context_line":"**generation** for resource providers and consumers. The generation is an"},{"line_number":8,"context_line":"opaque value that is updated every time its object is successfully changed on"},{"line_number":9,"context_line":"the server."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"At appropriate microversions, the generation is returned in responses involving"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_f4ff76fe","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":50},"updated":"2019-07-11 09:11:05.000000000","message":"resource","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"869504a51535f78b90a05b0decf3358bb2d09eec","unresolved":false,"context_lines":[{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":"Placement handles concurrent requests against the same object by maintaining a"},{"line_number":7,"context_line":"**generation** for resource providers and consumers. The generation is an"},{"line_number":8,"context_line":"opaque value that is updated every time its object is successfully changed on"},{"line_number":9,"context_line":"the server."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"At appropriate microversions, the generation is returned in responses involving"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_7b684e20","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":50},"in_reply_to":"7faddb67_f4ff76fe","updated":"2019-07-11 17:33:01.000000000","message":"see below","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e2fa9ae0919a88b20012968c44876ac466fd46e2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"``placement.concurrent_update``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_d4259aac","line":21,"range":{"start_line":21,"start_character":21,"end_line":21,"end_character":27},"updated":"2019-07-11 09:11:05.000000000","message":"resource\n\n(because we\u0027re in HTTP)","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"07ba6d256d4db6927a038967c37a6a650a686795","unresolved":false,"context_lines":[{"line_number":18,"context_line":"``placement.concurrent_update``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_d1bcc1dd","line":21,"range":{"start_line":21,"start_character":21,"end_line":21,"end_character":27},"in_reply_to":"7faddb67_bb5fa670","updated":"2019-07-11 18:55:49.000000000","message":"If you don\u0027t want \"resource\" or \"resources\" then \"entity\" and \"collection\" are reasonable substitutes. I really don\u0027t like \"object\" as it implies a too strong connection to the underlying implementation, which we don\u0027t care about at the HTTP layer.","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4532f3ccfebb2bdd4fb4f07ff51e9a7a5097c8cb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"``placement.concurrent_update``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_b63d78de","line":21,"range":{"start_line":21,"start_character":21,"end_line":21,"end_character":27},"in_reply_to":"7faddb67_d1bcc1dd","updated":"2019-07-11 21:35:49.000000000","message":"\"entity\" works for me.\n\n(FWIW, I never thought of \"object\" in relation to any python or database object; I was thinking of it as a REST object. But I guess that\u0027s less REST-ese [1] than those other terms?)\n\nhttps://vignette.wikia.nocookie.net/worldofcarsdrivein/images/2/26/Pixar-Cars-Rusteze-logo-vector.png","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"869504a51535f78b90a05b0decf3358bb2d09eec","unresolved":false,"context_lines":[{"line_number":18,"context_line":"``placement.concurrent_update``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_bb5fa670","line":21,"range":{"start_line":21,"start_character":21,"end_line":21,"end_character":27},"in_reply_to":"7faddb67_d4259aac","updated":"2019-07-11 17:33:01.000000000","message":"Yeah, I started with \u0027resource\u0027 but I didn\u0027t want the reader to get confused with resources in the sense of resource providers and resource classes. To wit:\n\nA \u0027generation\u0027 field is supported on the resource provider and consumer (allocation) resources.\n\nIs there any other noun I could use instead?\n\n(This is a situation where IMO it\u0027s better to be understandable than technically correct.)","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e2fa9ae0919a88b20012968c44876ac466fd46e2","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"},{"line_number":25,"context_line":"     if(resp.status_code !\u003d 409) return False"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_34366ee8","line":22,"range":{"start_line":22,"start_character":30,"end_line":22,"end_character":41},"updated":"2019-07-11 09:11:05.000000000","message":"I\u0027d leave out the example, it feels too likely that people could cult this, and it is too simplistic.","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e2fa9ae0919a88b20012968c44876ac466fd46e2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"``placement.concurrent_update``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"},{"line_number":25,"context_line":"     if(resp.status_code !\u003d 409) return False"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_344bce59","line":22,"range":{"start_line":21,"start_character":31,"end_line":22,"end_character":8},"updated":"2019-07-11 09:11:05.000000000","message":"perhaps\n\nre-``GET`` the resource in question, evaluate the differences from desired state, and resubmit the request with the new payload if appropriate.\n\nThe difference I think is important here is the \"evaluate the differences\" but there is likely a better way to say that","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"869504a51535f78b90a05b0decf3358bb2d09eec","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"},{"line_number":25,"context_line":"     if(resp.status_code !\u003d 409) return False"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_f6021309","line":22,"range":{"start_line":22,"start_character":30,"end_line":22,"end_character":41},"in_reply_to":"7faddb67_34366ee8","updated":"2019-07-11 17:33:01.000000000","message":"\u003e it is too simplistic.\n\nBecause it doesn\u0027t deal with other error conditions? Because it retries forever?\n\n \u003e it feels too likely that people could\n \u003e cult this,\n\nI deliberately made it not-a-real-language to help the reader understand it\u0027s an example and not usable code, and to reduce the temptation to copy/paste it directly. (That said, other than additional error checking, I\u0027m not sure what would be problematic about using this exact algorithm to ensure a trait is on a provider.)\n\n \u003e I\u0027d leave out the example,\n\nDifferent people learn in different ways. It seems to me as though you learn very effectively through language. Some people (myself included) have a hard time grokking text, but grasp examples much more readily.\n\nIf the only reason is because we don\u0027t trust the reader to realize this isn\u0027t production-ready code, I\u0027d prefer to have that trust and keep the example.","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4532f3ccfebb2bdd4fb4f07ff51e9a7a5097c8cb","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"},{"line_number":25,"context_line":"     if(resp.status_code !\u003d 409) return False"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_3629889a","line":22,"range":{"start_line":22,"start_character":30,"end_line":22,"end_character":41},"in_reply_to":"7faddb67_f1a45dbb","updated":"2019-07-11 21:35:49.000000000","message":"I reworded the preamble slightly and added a prominent note reinforcing that this isn\u0027t for prod use.","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"07ba6d256d4db6927a038967c37a6a650a686795","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Depending on the usage scenario, an appropriate reaction to such an error may"},{"line_number":21,"context_line":"be to re-``GET`` the object in question, redrive the changes, and resubmit the"},{"line_number":22,"context_line":"request with the new payload. For example, consider the following pseudocode::"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":" function _is_concurrent_update(resp) {"},{"line_number":25,"context_line":"     if(resp.status_code !\u003d 409) return False"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"7faddb67_f1a45dbb","line":22,"range":{"start_line":22,"start_character":30,"end_line":22,"end_character":41},"in_reply_to":"7faddb67_f6021309","updated":"2019-07-11 18:55:49.000000000","message":"I\u0027m not going to block if you want to keep this code. \n\nWhile it is a reasonable algorithm, a cursory read could result in the conclusion \"I should just keep trying until it works\" and that is not at all what generations _mean_.","commit_id":"aef290c56a0e66dd62a483a424b2912fc2e05421"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"13e5ded5576293909e9280dcf1216744f1208cb7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Resource Provider and Consumer Generations"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":"Placement handles concurrent requests against the same entity by maintaining a"},{"line_number":7,"context_line":"**generation** for resource providers and consumers. The generation is an"},{"line_number":8,"context_line":"opaque value that is updated every time its entity is successfully changed on"},{"line_number":9,"context_line":"the server."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"7faddb67_b187b7b5","line":6,"updated":"2019-07-12 14:18:06.000000000","message":"nit: A newline before this would be nice","commit_id":"a09defd661bb3ae57ef92bd49989c45c12b7aabd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9573b4efa4b880ca6ce026f0f88bcbf946946862","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Resource Provider and Consumer Generations"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":"Placement handles concurrent requests against the same entity by maintaining a"},{"line_number":7,"context_line":"**generation** for resource providers and consumers. The generation is an"},{"line_number":8,"context_line":"opaque value that is updated every time its entity is successfully changed on"},{"line_number":9,"context_line":"the server."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"7faddb67_c20cdfed","line":6,"in_reply_to":"7faddb67_b187b7b5","updated":"2019-07-12 16:15:08.000000000","message":"Any reason beyond stylistic preference? (I prefer saving the vertical space, personally.)","commit_id":"a09defd661bb3ae57ef92bd49989c45c12b7aabd"}]}
