)]}'
{"doc/source/api_microversion_dev.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":29,"context_line":"----------------------------------"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"When evaluating your code which changes something at the API layer"},{"line_number":32,"context_line":"consider the following as linear set of considerations for if you need"},{"line_number":33,"context_line":"a new microversion."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* Did the request previously return a 500 Server Error and a stack"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_6a2b60ec","line":32,"updated":"2015-06-15 16:20:50.000000000","message":"s/as/as a/\n\ns/for if/for when/","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f433729ec5694428176b1f818614c5ce2f9791e9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  trace?"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  * Does the new code return a error code that was previously possible"},{"line_number":39,"context_line":"    to return from this call?"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    * NO - this is a bug, it can just be fixed"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1af86dd1_46632bb2","line":39,"updated":"2015-06-12 19:14:37.000000000","message":"This sentence doesn\u0027t quite track for me.  Perhaps:\n\n    * Does the new code return an error code that is already declared as a\n      possible error for this call?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2fff92183a3f0e2f92fcb6d29362e915a7b72ad6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  trace?"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  * Does the new code return a error code that was previously possible"},{"line_number":39,"context_line":"    to return from this call?"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    * NO - this is a bug, it can just be fixed"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_866d7806","line":39,"in_reply_to":"1af86dd1_46632bb2","updated":"2015-06-15 15:01:34.000000000","message":"++","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d9f6e2dfa647fd4fff3b36da413053f76caea66f","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":46,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":47,"context_line":"      error code to the method."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Did the request previously return success by quietly fail at doing"},{"line_number":50,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_1349d08b","line":47,"updated":"2015-06-14 06:37:37.000000000","message":"I didn\u0027t get the meaning of this branch.\n\nIs the case:\n\nPreviously return 409, but now return 500. Then we fixed it back to 409. Why there is another change to add new error code?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":46,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":47,"context_line":"      error code to the method."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Did the request previously return success by quietly fail at doing"},{"line_number":50,"context_line":"  the requested thing?"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_2a3b18ed","line":48,"updated":"2015-06-15 16:20:50.000000000","message":"I agree with Kevin and Alex that the above is confusing. It\u0027s confusing because the top-level bullet items are asking questions, but the \"NO\" isn\u0027t answering the question itself. It\u0027s answering the overall question \"Should you add a microversion\". This results in a cognitive mismatch for the reader.\n\nPerhaps rewrite the section like so?\n\n * The patch you are proposing changes server-side code to return a\n   standard 4XX error or 2XX success code where previously the server\n   was returning a 500 Internal Server Error.\n\n   - **No microversion is necessary**. This is considered\n     a standard bug fix.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f433729ec5694428176b1f818614c5ce2f9791e9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"      error code to the method."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Did the request previously return success by quietly fail at doing"},{"line_number":50,"context_line":"  the requested thing?"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":53,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1af86dd1_a66c1f9d","line":50,"updated":"2015-06-12 19:14:37.000000000","message":"s/by/but/","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b9b4c8317f302c0b7fc53ce388da51bd94c75aef","unresolved":false,"context_lines":[{"line_number":49,"context_line":"* Did the request previously return success by quietly fail at doing"},{"line_number":50,"context_line":"  the requested thing?"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":53,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"},{"line_number":54,"context_line":"    term maintenance."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1af86dd1_fa41843a","line":52,"updated":"2015-06-12 20:47:25.000000000","message":"I think https://review.openstack.org/#/c/164494/ is a test for this - it\u0027s not a change in the API extensions, it\u0027s a change in nova.compute.api where a thing that used to fail is now going to pass with v2 and v2.1 APIs.\n\nWe talked about this in IRC for awhile and I think we said it didn\u0027t require a microversion, but it\u0027s also kind of a feature filling a gap (backup with a volume-backed instance).  So what used to silently fail before should now work if you have Liberty compute nodes with the change (since there is an RPC API version bump for changes to the compute manager code).\n\nThe only argument for a microversion on this change was to be able to tell if different clouds had the support before you\u0027d try using it, but since the code is in nova.compute.api, we don\u0027t actually know what the microversion is on the request so we couldn\u0027t validate there, we\u0027d have to put some validation code into the REST API layer which is kind of gorpy (you\u0027d have to check if the instance is backed by a volume and then fail with a 400 if the correct microversion isn\u0027t passed in the request).","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d9f6e2dfa647fd4fff3b36da413053f76caea66f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"* Did the request previously return success by quietly fail at doing"},{"line_number":50,"context_line":"  the requested thing?"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":53,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"},{"line_number":54,"context_line":"    term maintenance."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_99bbc10e","line":52,"in_reply_to":"1af86dd1_fa41843a","updated":"2015-06-14 06:37:37.000000000","message":"Put down my thought...not sure it is right.\n\nThe fix which  without new microversion can be back-port also. So the old deployment can fix the bug. To make the API consistent between different deployment. As this is bug not in the contract\n\nThis fix can\u0027t be backport because the RPC API version bump? (If I understand this wrong...then ignore all the words below...)\n\nso we can fix the api return fault when execute on vol-backed instance first. Then back-port this fix.\n\nThen another fix enable snapshot vol-backed instance, and this need new microversion.\n\nAnother thought is choice fix without rpc version bump","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":53,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"},{"line_number":54,"context_line":"    term maintenance."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* Does the API now return a different status code for the same"},{"line_number":57,"context_line":"  operations?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_a9a16cab","line":54,"updated":"2015-06-15 16:20:50.000000000","message":"For the above, I would rewrite to the following:\n\n * Your patch changes the server-side code to return a 4XX error code\n   for an operation that previously returned a 2XX success code but the server\n   quietly failed to do the requested operation\n\n   - **No microversion is necessary**. This is considered\n     a standard bug fix.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"02c0195bd9418bc7ff7838406effa0a4b3fdb8bd","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":53,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"},{"line_number":54,"context_line":"    term maintenance."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* Does the API now return a different status code for the same"},{"line_number":57,"context_line":"  operations?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_cc0abed2","line":54,"in_reply_to":"fa32b979_a9a16cab","updated":"2015-06-15 16:30:49.000000000","message":"What about the case where you fix the code to actually *do* the requested thing (but where the current code hasn\u0027t done the requested thing for a long time).   An example of this might be the behaviour when specifying min/max count when booting instances, and some of them fail to schedule.\n\nIf we change the behaviour to make it act like it should have originally, do we need to bump the microversion?  Does the answer change depending on how long the existing behaviour has been there?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":57,"context_line":"  operations?"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":60,"context_line":"    microversion."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"* Does the API now return a different payload (an add or remove of any"},{"line_number":63,"context_line":"  fields in the json structure)?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_e949b4d1","line":60,"updated":"2015-06-15 16:20:50.000000000","message":"How about:\n\n * Your proposed patch changes the API\u0027s returned 4XX or 2XX status code for\n   an operation to a different 2XX or 4XX status code.\n\n   - **A microversion is necessary**. Your patch results in a change to the\n     API contract.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f433729ec5694428176b1f818614c5ce2f9791e9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":60,"context_line":"    microversion."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"* Does the API now return a different payload (an add or remove of any"},{"line_number":63,"context_line":"  fields in the json structure)?"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  * YES - this is a change in the contract, it should have a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1af86dd1_062bf331","line":62,"updated":"2015-06-12 19:14:37.000000000","message":"try:\n\n    * Does the API now return a different payload (e.g., adding or removing\n      any fields in the JSON structure)?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  fields in the json structure)?"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":66,"context_line":"    microversion."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* Does this change add or remove a REST resource?"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_e9777400","line":66,"updated":"2015-06-15 16:20:50.000000000","message":"How about:\n\n * Your proposed patch changes the response payload returned by the server\n   for a specific API operation.\n\n   - **A microversion is necessary**. Your patch results in a change to the\n     API contract.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":68,"context_line":"* Does this change add or remove a REST resource?"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":71,"context_line":"    microversion."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* Does the change add or remove a parameter passed on the request?"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_89ed888d","line":71,"updated":"2015-06-15 16:20:50.000000000","message":"How about:\n\n * Your proposed patch adds or removes a REST resource from the API.\n\n   - **A microversion is necessary**. Your patch results in a change to the\n     API contract.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f433729ec5694428176b1f818614c5ce2f9791e9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":71,"context_line":"    microversion."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* Does the change add or remove a parameter passed on the request?"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":76,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1af86dd1_86eec3ea","line":73,"updated":"2015-06-12 19:14:37.000000000","message":"try:\n\n    * Does the change add or remove a query parameter passed\n      to the request?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6158eddaf474e3108ef366503a515680d74d9800","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":71,"context_line":"    microversion."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* Does the change add or remove a parameter passed on the request?"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":76,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_4131b30a","line":73,"in_reply_to":"1af86dd1_86eec3ea","updated":"2015-06-15 04:06:15.000000000","message":"+1\n\nwe need to consider all add/remove(compatible/incompatible) changes of API require microversions.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":73,"context_line":"* Does the change add or remove a parameter passed on the request?"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":76,"context_line":"    microversion."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"* Does the change add a field by which things can be filtered or sorted on?"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_89bb4872","line":76,"updated":"2015-06-15 16:20:50.000000000","message":"How about:\n\n * Your proposed patch changes the format of a request body or a query\n   parameter for a specific API operation.\n\n   - **A microversion is necessary**. Your patch results in a change to the\n     API contract.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2fff92183a3f0e2f92fcb6d29362e915a7b72ad6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":76,"context_line":"    microversion."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"* Does the change add a field by which things can be filtered or sorted on?"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  Example: adding an ability to filter servers by ipv6 address."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_c137eaae","line":78,"updated":"2015-06-15 15:01:34.000000000","message":"this means [1] in\nhttp://lists.openstack.org/pipermail/openstack-dev/2015-June/066784.html\nshould be modified to add API microversion?","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  Example: adding an ability to filter servers by ipv6 address."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":83,"context_line":"    microversion. (Also see the \"The Backwards Compatibility Fallacy\""},{"line_number":84,"context_line":"    in"},{"line_number":85,"context_line":"    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_c96870f8","line":83,"updated":"2015-06-15 16:20:50.000000000","message":"How about:\n\n * Your proposed patch adds, removes, or modifies the fields that may be used\n   for sorting and pagination in an API call\n\n   - **A microversion is necessary**. Your patch results in a change to the\n     API contract.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6158eddaf474e3108ef366503a515680d74d9800","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":83,"context_line":"    microversion. (Also see the \"The Backwards Compatibility Fallacy\""},{"line_number":84,"context_line":"    in"},{"line_number":85,"context_line":"    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"In Code"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_e17487d0","line":85,"updated":"2015-06-15 04:06:15.000000000","message":"The above blog is great for explaining why new microversions are necessary for backwards compatible changes also. So I think this description should be put at the first for explaining it.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ccb0878cbeb76b43cdc081c28bc4494a563ffe82","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":83,"context_line":"    microversion. (Also see the \"The Backwards Compatibility Fallacy\""},{"line_number":84,"context_line":"    in"},{"line_number":85,"context_line":"    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"In Code"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa32b979_09a8981e","line":85,"in_reply_to":"fa32b979_e17487d0","updated":"2015-06-15 16:20:50.000000000","message":"agree with Ken.","commit_id":"10ab0f07ef8f9a2491c95fd5189e682484bbde92"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3480679c2cacae297c23270c6ab77b6415b6a93b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"* Did the request previously return a 500 Server Error and a stack"},{"line_number":36,"context_line":"  trace?"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  Ok, we\u0027re probably good without one. But we\u0027re going to need a to"},{"line_number":39,"context_line":"  decide what the correct status code is. Got one in mind?"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  * Will the request return a status code that was already in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_e35a2883","line":38,"updated":"2015-06-15 19:19:53.000000000","message":"\"need a\" what?  Probably need to s/ a//","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"a3f1808952c7413e0da53fc5dc0b5c887bc06b1e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    Example: instead of a 500 we will return a 400, other errors on"},{"line_number":45,"context_line":"    this resource returned 400 before."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    * NO - this is a bug, it can just be fixed"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  * If not:"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_2e9c77bf","line":47,"updated":"2015-06-15 21:40:21.000000000","message":"This is confusing, it makes it look like the \"NO\" is in response to the question above. Really what we\u0027re trying to say is that if the answer to the question above is \"yes\", then we don\u0027t need a microversion bump.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5eea03aeccee64173967eccae0cfc751555a9e4e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    Example: instead of a 500 we will return a 400, other errors on"},{"line_number":45,"context_line":"    this resource returned 400 before."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    * NO - this is a bug, it can just be fixed"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  * If not:"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_7f368f53","line":47,"in_reply_to":"fa32b979_2e9c77bf","updated":"2015-06-16 11:21:53.000000000","message":"Yes, that\u0027s exactly what I said in my previous comments on the prior patchset.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"1408297c7b78a58658b9c5f33c81f29ad509fbd0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    Example: instead of a 500 we will return a 400, other errors on"},{"line_number":45,"context_line":"    this resource returned 400 before."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    * NO - this is a bug, it can just be fixed"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  * If not:"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_bdd73c22","line":47,"in_reply_to":"fa32b979_7f368f53","updated":"2015-06-16 12:47:43.000000000","message":"Ok, gotcha, I didn\u0027t realize the context was lost there. Will think about wording.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3480679c2cacae297c23270c6ab77b6415b6a93b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    condition before, so this is a new status code."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_43f2f470","line":56,"updated":"2015-06-15 19:19:53.000000000","message":"s/ change//","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"186137b3aa84d6fbce00b97503b7998b83752f17","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_6fba680c","line":57,"updated":"2015-06-16 07:34:39.000000000","message":"I don\u0027t think the split into 2 changes makes sense, most of the time.  Changing the 500 into a previously known (but incorrect) error is just introducing a new bug which we then fix with a new microversion. Do both at once.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7c12bcb23f816e4999dbfef3e8f744e3ef2f2ff","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_401de30d","line":57,"in_reply_to":"fa32b979_001a7b6e","updated":"2015-06-16 13:02:27.000000000","message":"Emm....there one patch can validate this now https://review.openstack.org/#/c/192115/1/nova/api/openstack/compute/plugins/v3/quota_classes.py\n\nWhen validation failed, we return 403 first, then another version bump for correct 403 to 400...\n\nThe first step a little strange....","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"1408297c7b78a58658b9c5f33c81f29ad509fbd0","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_bd93bc4e","line":57,"in_reply_to":"fa32b979_25c5545a","updated":"2015-06-16 12:47:43.000000000","message":"Right exactly.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4020d4a597b0427f8b663c9b32aacf71536db84d","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_7be5ae06","line":57,"in_reply_to":"fa32b979_401de30d","updated":"2015-06-19 02:08:59.000000000","message":"Alex - That is nice example.\n\nSo here we meant as first step (for old deployment), we will change 500 to more close appropriate code which is from previously known code. In above example 403 is much better than 500 for invalid resource. \n\nThen in second step, that can be fixed as most appropriate code with microversion (in above case 403-\u003e400).\n\nI think Matthew concern is that what we will do when we do not have any close appropriate code from previously known one.\n\nI think that will be very rare but can be taken as exception case and we can skip first step and directly fix that with microversion? Because changing 500 to very inappropriate code can confuse user more.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8da726aab5a44a29b9e04e36c8fada0f4c311c82","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_25c5545a","line":57,"in_reply_to":"fa32b979_6fba680c","updated":"2015-06-16 12:03:06.000000000","message":"I guess Sean want to say the first fix is used to back-port.\n\nIf we only use one fix and with new microversion, that means the old version deployment always return 500, and that looks like a bug never get fixed.\n\nBut I\u0027m think when we get this case. The case I get is we introduce some new feature. And that feature add new microversion, but when implement this feature, we forget to process some error case, which lead to return 500.\n\nSo there should be specification for that version api, and define what correct return code for that error case. That sounds like a contract.\n\nSo I think we needn\u0027t new microversion for this fix. Because in the version when introduce microversion we have spec describe that and those should be part of our api reference(but yea...we didn\u0027t have such good api ref yet..)","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"697111dd8edc165aab776b93b6a6f73e352db809","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    * Consider splitting this into 2 changes, one to fix the 500 error"},{"line_number":56,"context_line":"      into a previously known error, and one to change add the new"},{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_001a7b6e","line":57,"in_reply_to":"fa32b979_bd93bc4e","updated":"2015-06-16 12:57:28.000000000","message":"OK so lets see if I understand right: 2 changes is better because even if the first one changes from 500 \u003d\u003e something-else-which-is-also-wrong, at least that one can be cherry-picked to stable branches.  It doesn\u0027t really fix the bug on the stable branches though, so I\u0027m not sure I understand 100%. Probably me being dim, though, but it would be nice to explain the reason for the 2-patch approach in the doc.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0653b4c2a9c72861fbcf6579ac2caa68b8a4efda","unresolved":false,"context_lines":[{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  Example: The BDM structure has particular required details to"},{"line_number":63,"context_line":"  work. If the user gives it something invalid the call pretends to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_307ef4ae","line":60,"updated":"2015-06-16 12:24:42.000000000","message":"We can add another case. It\u0027s narrow down the validation. If it is narrow down an invalid input case, it belongs to this case.\n\nIf it is narrow down an valid input, we need new microversion.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4020d4a597b0427f8b663c9b32aacf71536db84d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  Example: The BDM structure has particular required details to"},{"line_number":63,"context_line":"  work. If the user gives it something invalid the call pretends to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_fb945e37","line":60,"in_reply_to":"fa32b979_307ef4ae","updated":"2015-06-19 02:08:59.000000000","message":"+1","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb4a0186e96fdc7508f7e9e541f6e09e5491a5a2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"      error code to the method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Did the request previously return success but quietly fail at doing"},{"line_number":60,"context_line":"  the requested thing?"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  Example: The BDM structure has particular required details to"},{"line_number":63,"context_line":"  work. If the user gives it something invalid the call pretends to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_dff74d89","line":60,"in_reply_to":"fa32b979_307ef4ae","updated":"2015-06-17 18:20:40.000000000","message":"Where does this fall in?\n\nhttps://bugs.launchpad.net/nova/+bug/1464381","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0653b4c2a9c72861fbcf6579ac2caa68b8a4efda","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  work, then fails silently. A change to make the BDM call fail to the"},{"line_number":65,"context_line":"  user instead of fail silently is a bug fix. A contract of failing"},{"line_number":66,"context_line":"  silently is not one we wish to enforce unless it is highly likely to"},{"line_number":67,"context_line":"  break working client code."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  * NO (probably) - this is a bug. Encoding the buggy behavior of not"},{"line_number":70,"context_line":"    doing what\u0027s expected in the old API doesn\u0027t seem valid for long"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_d019c889","line":67,"updated":"2015-06-16 12:24:42.000000000","message":"I feel for those case, it more like we didn\u0027t wrote down the contract in the beginning.\n\nI read this bug today https://bugs.launchpad.net/nova/+bug/1465416\n\nIf we didn\u0027t allow it execute on shutdown instance anymore, that sounds like, in the beginning we have such functionality, but finally we found we can\u0027t implement it, then we change the api.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3480679c2cacae297c23270c6ab77b6415b6a93b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":81,"context_line":"    microversion."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Does the API now return a different payload (e.g. add or remove of"},{"line_number":84,"context_line":"  any fields in the json structure)?"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  Example: ``root_device`` name is added to the attributes when doing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_e3b6a889","line":83,"updated":"2015-06-15 19:19:53.000000000","message":"s/ of//","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"186137b3aa84d6fbce00b97503b7998b83752f17","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  any fields in the json structure)?"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  Example: ``root_device`` name is added to the attributes when doing"},{"line_number":87,"context_line":"  a GET server to support the EC2 out of tree implementation."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":90,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_efb758f3","line":87,"updated":"2015-06-16 07:34:39.000000000","message":"I probably missed an earlier discussion about this, but... Adding a field doesn\u0027t seem to be something that needs a microversion. We have defined no schemae for our output. I find it hard to believe that an external client is doing that given that it would not (AFAICT) get them anything other than fragility.\n\nRemoving or changing the type, of course.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"697111dd8edc165aab776b93b6a6f73e352db809","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  any fields in the json structure)?"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  Example: ``root_device`` name is added to the attributes when doing"},{"line_number":87,"context_line":"  a GET server to support the EC2 out of tree implementation."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":90,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_bdc09ce1","line":87,"in_reply_to":"fa32b979_1dd3c805","updated":"2015-06-16 12:57:28.000000000","message":"The backward compatibility fallacy you describe there works differently for extending *input* and *output* formats.  I still think *adding* a field to our *output* is safe.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4020d4a597b0427f8b663c9b32aacf71536db84d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  any fields in the json structure)?"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  Example: ``root_device`` name is added to the attributes when doing"},{"line_number":87,"context_line":"  a GET server to support the EC2 out of tree implementation."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":90,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_1e3330f7","line":87,"in_reply_to":"fa32b979_bdc09ce1","updated":"2015-06-19 02:08:59.000000000","message":"I thing even that does not fall under back incompatibility, we should microversion that to publish the extend of output, input.\n\nFor example - lock information in server show APIs - https://review.openstack.org/#/c/190487/","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"1408297c7b78a58658b9c5f33c81f29ad509fbd0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  any fields in the json structure)?"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  Example: ``root_device`` name is added to the attributes when doing"},{"line_number":87,"context_line":"  a GET server to support the EC2 out of tree implementation."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":90,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_1dd3c805","line":87,"in_reply_to":"fa32b979_efb758f3","updated":"2015-06-16 12:47:43.000000000","message":"(Also see the \"The Backwards Compatibility Fallacy\"\n    in\n    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"186137b3aa84d6fbce00b97503b7998b83752f17","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    microversion."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"* Does the change add or remove a query parameter passed to the"},{"line_number":98,"context_line":"  request?"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":101,"context_line":"    microversion."}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_afc63047","line":98,"updated":"2015-06-16 07:34:39.000000000","message":"Add or remove *or change the type of*, I guess, using the word \"type\" quite loosely. Something which could have been truthy or falsy becoming either a literal \"True\" or \"False\", for example.","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4020d4a597b0427f8b663c9b32aacf71536db84d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  * YES - this is a change in the contract, it should have a"},{"line_number":108,"context_line":"    microversion. (Also see the \"The Backwards Compatibility Fallacy\""},{"line_number":109,"context_line":"    in"},{"line_number":110,"context_line":"    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"In Code"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_3e5cf417","line":110,"updated":"2015-06-19 02:08:59.000000000","message":"Thanks Sean, really nice info in https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4020d4a597b0427f8b663c9b32aacf71536db84d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    in"},{"line_number":110,"context_line":"    https://dague.net/2015/06/05/the-nova-api-in-kilo-and-beyond-2/)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"In Code"},{"line_number":114,"context_line":"-------"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_7e703c72","line":112,"updated":"2015-06-19 02:08:59.000000000","message":"Whats about when error code changed to success code.\n\nCase - due to implementation bug, API returns error code and after bug fix it will return/process success. Example fixing option input parameter as optional.\n\nExample - https://bugs.launchpad.net/python-openstackclient/+bug/1434172 (https://review.openstack.org/#/c/183909/)","commit_id":"90c2449d791257be0ced2dfdef4cec03e05a8a50"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4e928c6cc2f7a647658e5d3cf9e2a45f5a549dc1","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Example: adding a new allowed ``status`` to servers/{ID}"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  - the list of allowed status codes allowed for a particular request"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    Example: an API previously could return 200, 400, 403, 404 and the"},{"line_number":66,"context_line":"    change would make the API now also be allowed to return 409."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_6566ae52","line":63,"updated":"2015-07-28 16:10:24.000000000","message":"nit: repetition of \"allowed\" isn\u0027t necessary:\n\n  - the list of allowed status codes for a particular request","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"15bbee1a3c7d45ce9223e3d9c2884df0f2427e51","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Example: adding a new allowed ``status`` to servers/{ID}"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  - the list of allowed status codes allowed for a particular request"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    Example: an API previously could return 200, 400, 403, 404 and the"},{"line_number":66,"context_line":"    change would make the API now also be allowed to return 409."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_cb69d3bf","line":63,"in_reply_to":"3a50d1a3_6566ae52","updated":"2015-07-28 16:33:19.000000000","message":"Done","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4e928c6cc2f7a647658e5d3cf9e2a45f5a549dc1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"[1] - When fixing 500 errors that previously caused stack traces, try"},{"line_number":130,"context_line":"to map the new error into the existing set of errors that API call"},{"line_number":131,"context_line":"could previously return (400 if nothing else is appropriate). Changing"},{"line_number":132,"context_line":"the set of allowed status codes from a request."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The reason why we are so strict on contract is that we\u0027d like"},{"line_number":135,"context_line":"application writers to be able to know, for sure, what the contract is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_c8147945","line":132,"updated":"2015-07-28 16:10:24.000000000","message":"This last sentence seems incomplete.  Did you mean to state, \"Changing the set of allowed status codes from a request does require a microversion\"?\n\nAnd actually, you may be able to account for this case by just adding one more decision to the flow chart: Are we mapping to an already allowed return code?","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"15bbee1a3c7d45ce9223e3d9c2884df0f2427e51","unresolved":false,"context_lines":[{"line_number":129,"context_line":"[1] - When fixing 500 errors that previously caused stack traces, try"},{"line_number":130,"context_line":"to map the new error into the existing set of errors that API call"},{"line_number":131,"context_line":"could previously return (400 if nothing else is appropriate). Changing"},{"line_number":132,"context_line":"the set of allowed status codes from a request."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The reason why we are so strict on contract is that we\u0027d like"},{"line_number":135,"context_line":"application writers to be able to know, for sure, what the contract is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_4b614338","line":132,"in_reply_to":"3a50d1a3_c8147945","updated":"2015-07-28 16:33:19.000000000","message":"Done","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4e928c6cc2f7a647658e5d3cf9e2a45f5a549dc1","unresolved":false,"context_lines":[{"line_number":139,"context_line":"If in doubt, consider how the client code would be written after this"},{"line_number":140,"context_line":"change has landed, and determine if it would work with no client side"},{"line_number":141,"context_line":"ambiguity handling against a Nova server before this change has"},{"line_number":142,"context_line":"landed. If the answer is No, you probably need a microversion."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"In Code"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_68d9a556","line":142,"updated":"2015-07-28 16:10:24.000000000","message":"This last paragraph isn\u0027t tracking for me.  How about this rewording:\n\n    If in doubt, consider how the client code would be written after the\n    change has landed.  If it would work with no client side changes on\n    both Nova versions, you probably don\u0027t need a microversion.  If, on\n    the other hand, there is any ambiguity, a microversion is probably\n    needed.","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"15bbee1a3c7d45ce9223e3d9c2884df0f2427e51","unresolved":false,"context_lines":[{"line_number":139,"context_line":"If in doubt, consider how the client code would be written after this"},{"line_number":140,"context_line":"change has landed, and determine if it would work with no client side"},{"line_number":141,"context_line":"ambiguity handling against a Nova server before this change has"},{"line_number":142,"context_line":"landed. If the answer is No, you probably need a microversion."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"In Code"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a50d1a3_6b667f52","line":142,"in_reply_to":"3a50d1a3_68d9a556","updated":"2015-07-28 16:33:19.000000000","message":"Done","commit_id":"ffa0b65e06ee7f76e25920f5197dc9fc1faf88b8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1a2dee28edec0cb0a1662f747cae53913ae17a82","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    Example: parameter filter_by takes a small set of constants/enums \"A\","},{"line_number":48,"context_line":"    \"B\", \"C\". Adding support for new enum \"D\"."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  - new headers accepted on a request"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- the Response"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a50d1a3_0bb3264e","line":50,"updated":"2015-07-29 01:29:04.000000000","message":"Why don\u0027t here contain additional attribute in a request body?","commit_id":"99da04b500a1c4f83ffddcf54e42a4e3cfde8304"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"56b4838b26e031b07412ac4aa779ff5409883b36","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  - changing a status code on a particular response"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    Example: changing the return code of an API from 501 to 400."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  - new headers returned on a response"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a50d1a3_c4e20bd5","line":70,"updated":"2015-07-29 03:31:29.000000000","message":"oops, you are implying what you want to do here as an example :)","commit_id":"99da04b500a1c4f83ffddcf54e42a4e3cfde8304"}]}
