)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8441,"name":"Tomoko Inoue","email":"inouetmko@gmail.com","username":"inoue-tomoko"},"change_message_id":"e7b7ff08ada59d600906b03741431cccc5dc02c7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With this blueprint, using client token, Nova can guarantee"},{"line_number":10,"context_line":"idempotence of Nova POST request."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint idempotentcy-client-token"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I37904158131e7bd35e305050048f18a130ac2ecf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_6166e4bc","line":12,"updated":"2014-06-12 07:50:21.000000000","message":"LP can\u0027t search for the idempotency BP. Why?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8441,"name":"Tomoko Inoue","email":"inouetmko@gmail.com","username":"inoue-tomoko"},"change_message_id":"89bb4b7338e8107f3cbb450f64705f26050ba9e1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With this blueprint, using client token, Nova can guarantee"},{"line_number":10,"context_line":"idempotence of Nova POST request."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint idempotentcy-client-token"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I37904158131e7bd35e305050048f18a130ac2ecf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_61d504e4","line":12,"in_reply_to":"1ae5cdf2_217a1c24","updated":"2014-06-12 07:58:51.000000000","message":"ok. thanks:-)","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"8598bdd797283c98fa9c2de812f97dfa57b7eea3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With this blueprint, using client token, Nova can guarantee"},{"line_number":10,"context_line":"idempotence of Nova POST request."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint idempotentcy-client-token"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I37904158131e7bd35e305050048f18a130ac2ecf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_217a1c24","line":12,"in_reply_to":"1ae5cdf2_6166e4bc","updated":"2014-06-12 07:56:03.000000000","message":"Because that BP is Superseded Definition.\nCould you watch here?\n\nhttps://blueprints.launchpad.net/nova/+spec/idempotentcy-client-token\n\nThanks.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"}],"specs/juno/idempotentcy-client-token.rst":[{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  - https://bugs.launchpad.net/nova/+bug/1188327"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  - https://review.openstack.org/#/c/32060/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* There is no reason to ClientToken is limited to only the run_instance."},{"line_number":28,"context_line":"  I suggest implementation of ClientToken to other Openstack API."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_781fc65b","line":25,"updated":"2014-06-17 19:45:21.000000000","message":"That patch implements less than the functionality outlined for AWS.  In particular, that patch does not throw IdempotentParameterMismatch in any case.  Also I wonder: does that patch really have effect for at least 24 hours --- even in the case where the instance is deleted quickly?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  - https://bugs.launchpad.net/nova/+bug/1188327"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  - https://review.openstack.org/#/c/32060/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* There is no reason to ClientToken is limited to only the run_instance."},{"line_number":28,"context_line":"  I suggest implementation of ClientToken to other Openstack API."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_fd98116c","line":25,"in_reply_to":"1ae5cdf2_781fc65b","updated":"2014-06-18 10:46:49.000000000","message":"Thank you for your comment.\n\nYes I think that implementation is not enough to compare with AWS\u0027s client token.\n\nI am going to implement like AWS.\nSuch as IdempotentParameterMismatch.\n\nAnd, however life time of Client Token is now I use with memchached, it will be better to put in DB.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  - https://review.openstack.org/#/c/32060/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* There is no reason to ClientToken is limited to only the run_instance."},{"line_number":28,"context_line":"  I suggest implementation of ClientToken to other Openstack API."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Use case for End User"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_b83f8eb4","line":28,"updated":"2014-06-17 19:45:21.000000000","message":"We do not need it for all APIs.  We DO need it for APIs that allocate IDs.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  - https://review.openstack.org/#/c/32060/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* There is no reason to ClientToken is limited to only the run_instance."},{"line_number":28,"context_line":"  I suggest implementation of ClientToken to other Openstack API."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Use case for End User"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_ddb8b5c9","line":28,"in_reply_to":"1ae5cdf2_b83f8eb4","updated":"2014-06-18 10:46:49.000000000","message":"Oh... my writing is not enough.\nThat is the same as my understanding.\n\nIt is needed for creating new resource or operation with generating new IDs.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f2baf15d91e3c12e393d9582b1766f25fd08be1a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"* For billing purpose, users need to create as many servers as they want."},{"line_number":39,"context_line":"  But there is a possibility that the overage charges for two servers."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* So users need to way how is his server, how is his request."},{"line_number":42,"context_line":"  In this case, idempotency client token is so useful."},{"line_number":43,"context_line":"  To specify the client token by users, users can track his request."},{"line_number":44,"context_line":"  Even if how many times users requests POST method, it is guaranteed that"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_351e4a64","line":41,"updated":"2014-07-02 05:13:39.000000000","message":"s/to/the/","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f2baf15d91e3c12e393d9582b1766f25fd08be1a","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* So users need to way how is his server, how is his request."},{"line_number":42,"context_line":"  In this case, idempotency client token is so useful."},{"line_number":43,"context_line":"  To specify the client token by users, users can track his request."},{"line_number":44,"context_line":"  Even if how many times users requests POST method, it is guaranteed that"},{"line_number":45,"context_line":"  the state of the POST request which was same with return of"},{"line_number":46,"context_line":"  user\u0027s first POST request."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_35356ada","line":43,"updated":"2014-07-02 05:13:39.000000000","message":"s/To specify/By specifying/ ?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f2baf15d91e3c12e393d9582b1766f25fd08be1a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"* So users need to way how is his server, how is his request."},{"line_number":42,"context_line":"  In this case, idempotency client token is so useful."},{"line_number":43,"context_line":"  To specify the client token by users, users can track his request."},{"line_number":44,"context_line":"  Even if how many times users requests POST method, it is guaranteed that"},{"line_number":45,"context_line":"  the state of the POST request which was same with return of"},{"line_number":46,"context_line":"  user\u0027s first POST request."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_75752297","line":44,"updated":"2014-07-02 05:13:39.000000000","message":"Even if repeating requests for the same purpose,","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f2baf15d91e3c12e393d9582b1766f25fd08be1a","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Proposed change"},{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"In curl command, you add header of request \u0027X-Client-Token: foo\u0027."},{"line_number":56,"context_line":"X-Client-Token should be uuid or any strings."},{"line_number":57,"context_line":"In this name, I already implemented python-novaclient implementation."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_356d6a99","line":54,"updated":"2014-07-02 05:13:39.000000000","message":"I feel here should represent API behavior at first.\n\nIf the first request failed (a server did not create) and receiving the second request with the same ClientToken, should Nova try a server creation again? or shouldn\u0027t Nova do anything?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"In curl command, you add header of request \u0027X-Client-Token: foo\u0027."},{"line_number":56,"context_line":"X-Client-Token should be uuid or any strings."},{"line_number":57,"context_line":"In this name, I already implemented python-novaclient implementation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"So, you can put request like below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_d8a8dadb","line":56,"updated":"2014-06-17 19:45:21.000000000","message":"Is there a length or content restriction?  AWS limits to 64 ASCII characters.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f2baf15d91e3c12e393d9582b1766f25fd08be1a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"In curl command, you add header of request \u0027X-Client-Token: foo\u0027."},{"line_number":56,"context_line":"X-Client-Token should be uuid or any strings."},{"line_number":57,"context_line":"In this name, I already implemented python-novaclient implementation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"So, you can put request like below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_b5f41af3","line":56,"in_reply_to":"1ae5cdf2_1de05df9","updated":"2014-07-02 05:13:39.000000000","message":"similar question:\n\nWill the token be case-sensitive string like AWS?\n\nanyway, better to describe them clearly on this spec to get some feedback.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"In curl command, you add header of request \u0027X-Client-Token: foo\u0027."},{"line_number":56,"context_line":"X-Client-Token should be uuid or any strings."},{"line_number":57,"context_line":"In this name, I already implemented python-novaclient implementation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"So, you can put request like below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_1de05df9","line":56,"in_reply_to":"1ae5cdf2_d8a8dadb","updated":"2014-06-18 10:46:49.000000000","message":"Yes.\n\nAs possible, I want make this similar to AWS.\nSo I am going to set X-Client-Token as 64 char.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"cd972a07e05ce1a495727ce7bcedadf0fa09b072","unresolved":false,"context_lines":[{"line_number":61,"context_line":"If you have good name instead of \u0027X-Client-Token\u0027, please tell me."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"After, if you retry same request parameter and same X-Client-Token,"},{"line_number":64,"context_line":"now OpenStack returns GET response of instance."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"You can correctly know instance\u0027s status and don\u0027t happen to boot"},{"line_number":67,"context_line":"needless instance."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_73ae2d31","line":64,"updated":"2014-06-17 06:55:41.000000000","message":"Is the X-Client-Token unique to a tenant or unique to a user which has the appropriate role in the tenant? Across a tenant would seem to be rather broad I think","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":61,"context_line":"If you have good name instead of \u0027X-Client-Token\u0027, please tell me."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"After, if you retry same request parameter and same X-Client-Token,"},{"line_number":64,"context_line":"now OpenStack returns GET response of instance."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"You can correctly know instance\u0027s status and don\u0027t happen to boot"},{"line_number":67,"context_line":"needless instance."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_58076ac9","line":64,"in_reply_to":"1ae5cdf2_73ae2d31","updated":"2014-06-17 19:45:21.000000000","message":"Across a tenant seems fine to me.  Consider the following use case.  A tenant has an ops team.  Ops team member A asks heat to create a stack from a given template.  Eventually the heat engine gets around to asking Nova to create an Instance for that stack.  During that create there is a timeout or communication hiccup and the stack goes into failed state.  This is after ops team member A has gone to lunch.  While he is out, ops team member B discovers the problem and asks Heat to recover.  The Heat engine will (after we make some improvements) retry that Nova Instance create operation, and idempotency should apply here.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":64,"context_line":"now OpenStack returns GET response of instance."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"You can correctly know instance\u0027s status and don\u0027t happen to boot"},{"line_number":67,"context_line":"needless instance."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"* Now, I target at CreateServer as first."},{"line_number":70,"context_line":"* And I will implement this to any POST API in Nova in time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_78dc2647","line":67,"updated":"2014-06-17 19:45:21.000000000","message":"Does this mean you propose a query operation, in addition to qualifying the create operation?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":64,"context_line":"now OpenStack returns GET response of instance."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"You can correctly know instance\u0027s status and don\u0027t happen to boot"},{"line_number":67,"context_line":"needless instance."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"* Now, I target at CreateServer as first."},{"line_number":70,"context_line":"* And I will implement this to any POST API in Nova in time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_b5113db1","line":67,"in_reply_to":"1ae5cdf2_78dc2647","updated":"2014-06-18 10:46:49.000000000","message":"Oops.\nMy writing might have confused you.\n\nI do give unique concept to create oeration, and just keeping idempotency the request.\nNot for query operation.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  https://blueprints.launchpad.net/nova/+spec/tag-instances"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  This is add tag to instance not request."},{"line_number":91,"context_line":"  To prevent any needless request, it is needed to add tag for request."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Data model impact"},{"line_number":94,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_f87f56a9","line":91,"updated":"2014-06-17 19:45:21.000000000","message":"Tagging instances is good enough, modulo timing splinters, right?  And https://review.openstack.org/#/c/32060 has some timing splinters, right?\n\nI would prefer to do it right, with zero timing splinters.  So, yeah, tagging instances is not good enough.  Not even for the AWS-compatible API.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  https://blueprints.launchpad.net/nova/+spec/tag-instances"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  This is add tag to instance not request."},{"line_number":91,"context_line":"  To prevent any needless request, it is needed to add tag for request."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Data model impact"},{"line_number":94,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_61f0d7c9","line":91,"in_reply_to":"1ae5cdf2_f87f56a9","updated":"2014-06-18 10:46:49.000000000","message":"I couldn\u0027t consider this timing problem yet.\nThanks for your pointing out.\n\nWith next implementation, I catch up this problem\nand I would appriciate if you tell me good way any ideas you have.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"cd972a07e05ce1a495727ce7bcedadf0fa09b072","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* Now, second POST request returns GET result with schema for GET,"},{"line_number":123,"context_line":"  in the near future, I want to return POST schema with"},{"line_number":124,"context_line":"  GET response content."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"See concrete example below of this link:"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_73d9cdf3","line":124,"updated":"2014-06-17 06:55:41.000000000","message":"Could you please expand on this a bit? I\u0027m not sure I understand what you\u0027re saying here","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* Now, second POST request returns GET result with schema for GET,"},{"line_number":123,"context_line":"  in the near future, I want to return POST schema with"},{"line_number":124,"context_line":"  GET response content."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"See concrete example below of this link:"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_e8592c8f","line":124,"in_reply_to":"1ae5cdf2_73d9cdf3","updated":"2014-06-18 10:46:49.000000000","message":"First, in this implementation, with same client token and same request with second time, this returns GET response however user do POST request.\n\nThere is difference in responce body of v3\u0027s POST and V3\u0027s GET.\n(Of course, also there is difference with v2.)\n\nIn particular, GET doesn\u0027t have \"admin_password\" and \"os-security-groups:security_groups\",\nhowever POST has them.\n\nEven for idempotency implementation, this implementation returns GET by second POST request.\nIs it appropriate as REST API? \nHow do you think?\n\nv3 POST\n{\n    \"server\": {\n        \"admin_password\": \"bBzrNLD24qrF\", \n        \"id\": \"71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n        \"links\": [\n            {\n                \"href\": \"http://192.168.26.171:8774/v3/servers/71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n                \"rel\": \"self\"\n            }, \n            {\n                \"href\": \"http://192.168.26.171:8774/servers/71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n                \"rel\": \"bookmark\"\n            }\n        ], \n        \"os-access-ips:access_ip_v4\": \"\", \n        \"os-access-ips:access_ip_v6\": \"\", \n        \"os-security-groups:security_groups\": [\n            {\n                \"name\": \"default\"\n            }\n        ]\n    }\n}\n\nv3 GET\n{\n    \"server\": {\n        \"addresses\": {}, \n        \"created\": \"2014-06-18T16:28:42Z\", \n        \"flavor\": {\n            \"id\": \"1\", \n            \"links\": [\n                {\n                    \"href\": \"http://192.168.26.171:8774/flavors/1\", \n                    \"rel\": \"bookmark\"\n                }\n            ]\n        }, \n        \"host_id\": \"\", \n        \"id\": \"71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n        \"image\": {\n            \"id\": \"1172a739-50fe-48b3-9b17-58c40b62cd91\", \n            \"links\": [\n                {\n                    \"href\": \"http://192.168.26.171:9292/images/1172a739-50fe-48b3-9b17-58c40b62cd91\", \n                    \"rel\": \"bookmark\"\n                }\n            ]\n        }, \n        \"key_name\": null, \n        \"links\": [\n            {\n                \"href\": \"http://192.168.26.171:8774/v3/servers/71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n                \"rel\": \"self\"\n            }, \n            {\n                \"href\": \"http://192.168.26.171:8774/servers/71f9f761-23ed-46d2-b0b2-2a933bb1f06f\", \n                \"rel\": \"bookmark\"\n            }\n        ], \n        \"metadata\": {}, \n        \"name\": \"vm-001\", \n        \"os-access-ips:access_ip_v4\": \"\", \n        \"os-access-ips:access_ip_v6\": \"\", \n        \"os-config-drive:config_drive\": \"\", \n        \"os-extended-availability-zone:availability_zone\": \"nova\", \n        \"os-extended-server-attributes:host\": null, \n        \"os-extended-server-attributes:hypervisor_hostname\": null, \n        \"os-extended-server-attributes:instance_name\": \"instance-00000051\", \n        \"os-extended-status:locked_by\": null, \n        \"os-extended-status:power_state\": 0, \n        \"os-extended-status:task_state\": \"scheduling\", \n        \"os-extended-status:vm_state\": \"building\", \n        \"os-extended-volumes:volumes_attached\": [], \n        \"os-pci:pci_devices\": [], \n        \"os-server-usage:launched_at\": null, \n        \"os-server-usage:terminated_at\": null, \n        \"progress\": 0, \n        \"status\": \"BUILD\", \n        \"tenant_id\": \"22f64ee208d54203a8e49085318f5208\", \n        \"updated\": \"2014-06-18T16:34:29Z\", \n        \"user_id\": \"88fe6166a8e24fa888672d7ace3cff23\"\n    }\n}","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8328,"name":"Mike Spreitzer","email":"mspreitz@us.ibm.com","username":"mspreitz"},"change_message_id":"e9ae3fac76946f269a608f6945d899a4b89ba765","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"See concrete example below of this link:"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"https://github.com/ntt-sic/nova/commit/c9bc157b122907d7bd7e98b364137b7ecd47bd0f"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_b3db317c","line":128,"updated":"2014-06-17 19:45:21.000000000","message":"That has a timing splinter: what if the second request comes in while the first is still working (e.g., at line 148)?","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"4900e40023ac7cbba7623ac87c0ceffeac46a265","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"See concrete example below of this link:"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"https://github.com/ntt-sic/nova/commit/c9bc157b122907d7bd7e98b364137b7ecd47bd0f"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_a103bf74","line":128,"in_reply_to":"1ae5cdf2_b3db317c","updated":"2014-06-18 10:46:49.000000000","message":"I really understad that you worry about this timing problem.\n\nAnd I feel also this now.\n\nSo I am going to imeplement new way and operate this feature over and over.","commit_id":"97fcdf3886b4450fc6a33480c10f563891567b39"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9f5ce582c91546ca3fdec0140980c51b8e4f1062","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" Main behavior for normal case."},{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" User requests same create server request with another ClientToken,"},{"line_number":74,"context_line":" nova returns server information with just attacking nova show() api"},{"line_number":75,"context_line":" internal."},{"line_number":76,"context_line":" In this case, nova don\u0027t retry to create server anymore even if first"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_a8a01ca0","line":73,"updated":"2014-07-02 23:42:42.000000000","message":"s/User/After that, if user/\n\ns/ClientToken/ClientToken again/\n\ns/another/the same/","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"6934b52c375e0d02d330778ed585d64767a404c9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" Main behavior for normal case."},{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" User requests same create server request with another ClientToken,"},{"line_number":74,"context_line":" nova returns server information with just attacking nova show() api"},{"line_number":75,"context_line":" internal."},{"line_number":76,"context_line":" In this case, nova don\u0027t retry to create server anymore even if first"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_913540dc","line":73,"in_reply_to":"baada198_a8a01ca0","updated":"2014-07-03 00:27:34.000000000","message":"Thanks for your comment.","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9f5ce582c91546ca3fdec0140980c51b8e4f1062","unresolved":false,"context_lines":[{"line_number":73,"context_line":" User requests same create server request with another ClientToken,"},{"line_number":74,"context_line":" nova returns server information with just attacking nova show() api"},{"line_number":75,"context_line":" internal."},{"line_number":76,"context_line":" In this case, nova don\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_687d241c","line":76,"updated":"2014-07-02 23:42:42.000000000","message":"s/don\u0027t/doesn\u0027t/","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"6934b52c375e0d02d330778ed585d64767a404c9","unresolved":false,"context_lines":[{"line_number":73,"context_line":" User requests same create server request with another ClientToken,"},{"line_number":74,"context_line":" nova returns server information with just attacking nova show() api"},{"line_number":75,"context_line":" internal."},{"line_number":76,"context_line":" In this case, nova don\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_7136ece8","line":76,"in_reply_to":"baada198_687d241c","updated":"2014-07-03 00:27:34.000000000","message":"Thanks for your comment!!","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9f5ce582c91546ca3fdec0140980c51b8e4f1062","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":" - 64 length"},{"line_number":89,"context_line":" - ASCII characters (^[a-zA-Z0-9\\.,-])"},{"line_number":90,"context_line":" - case-sensitive"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":" If you have good name instead of \u0027X-Client-Token\u0027, please tell me."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_48d6a0c6","line":90,"updated":"2014-07-02 23:42:42.000000000","message":"How can we generate ClientToken?\n\nIf user can specify preferable characters as ClientToken, the duplications would happen many times in production environments. So is there any generating feature for ClientToken?","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8f002589846ba265b9dd5cb981ae9fe2a0b1eb35","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":" - 64 length"},{"line_number":89,"context_line":" - ASCII characters (^[a-zA-Z0-9\\.,-])"},{"line_number":90,"context_line":" - case-sensitive"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":" If you have good name instead of \u0027X-Client-Token\u0027, please tell me."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_31ec74c7","line":90,"in_reply_to":"baada198_312554ab","updated":"2014-07-03 01:07:13.000000000","message":"Thank you for your explanation, I got it.\nThat has been already mentioned at line 169, sorry I missed that.\n\nI think the scope is important point and better to write it here with the above your explanation.(\"basically user and heat or other external system have to generate unique ClientToken at their own risk.\")","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"6934b52c375e0d02d330778ed585d64767a404c9","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":" - 64 length"},{"line_number":89,"context_line":" - ASCII characters (^[a-zA-Z0-9\\.,-])"},{"line_number":90,"context_line":" - case-sensitive"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":" If you have good name instead of \u0027X-Client-Token\u0027, please tell me."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_312554ab","line":90,"in_reply_to":"baada198_48d6a0c6","updated":"2014-07-03 00:27:34.000000000","message":"ClientToken does not be generated automatically by this feature .\n\nUser and Heat or other external management system specify own ClientToken.\n\nThis feature can check duplication of ClientToken in each tenant, but basically user and heat or other external system have to generate unique ClientToken at their own risk.","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8f002589846ba265b9dd5cb981ae9fe2a0b1eb35","unresolved":false,"context_lines":[{"line_number":167,"context_line":"---------------"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"\u0027X-Client-Token\u0027 is unique in tenant scope."},{"line_number":170,"context_line":"So users can specify same \u0027X-Client-Token\u0027 if their tenant is differ."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Notifications impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_31039474","line":170,"updated":"2014-07-03 01:07:13.000000000","message":"s/their tenant is differ/their tenants are different/","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8f002589846ba265b9dd5cb981ae9fe2a0b1eb35","unresolved":false,"context_lines":[{"line_number":258,"context_line":"First, new request header is added."},{"line_number":259,"context_line":"Users can use this if they want."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"Second, response of POST request is differ from how many times request."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_f164bc4a","line":261,"updated":"2014-07-03 01:07:13.000000000","message":"s/differ/different/","commit_id":"3de13229725f75bb3064392336f9f191e3992ca2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":48,"context_line":" 1. User requested create server to OpenStack."},{"line_number":49,"context_line":" 2. Unfortunately, the client has gone down."},{"line_number":50,"context_line":" 3. There is no way to know how was his server for user."},{"line_number":51,"context_line":" 4. User thought that creating server was fauilure(even if it went well),"},{"line_number":52,"context_line":"    so user requested creat a new server with same param as 1."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* This may cause unnecessary and disused resource consumption."}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_e4312eee","line":51,"updated":"2014-07-04 01:15:44.000000000","message":"s/fauilure/failed/","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":48,"context_line":" 1. User requested create server to OpenStack."},{"line_number":49,"context_line":" 2. Unfortunately, the client has gone down."},{"line_number":50,"context_line":" 3. There is no way to know how was his server for user."},{"line_number":51,"context_line":" 4. User thought that creating server was fauilure(even if it went well),"},{"line_number":52,"context_line":"    so user requested creat a new server with same param as 1."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* This may cause unnecessary and disused resource consumption."}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_677a8078","line":51,"in_reply_to":"baada198_e4312eee","updated":"2014-07-04 02:05:13.000000000","message":"Thank you for your review.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_26e6cde8","line":75,"updated":"2014-07-04 01:15:44.000000000","message":"This description (\"with just attacking nova show() api internal\") might mislead the direction of this feature.\nThe response of \"create a server\" API is different from the one of \"show a server\" API.\n\nIf the response of the second request with the same ClientToken is different from the one of the first, that seems non-idempotency. I feel idempotent API should return the same response even if repeating the same requests.\n\nSo how about just changing \n\n with just attacking nova show() api internal\n\nto\n\n as the same as the first request.\n\n?\n\nor if you need only server status like AWS[1], here should describe it clearly.\n\n[1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\n\n The only information that might vary in the response\n is the state of the instance.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_e773f04b","line":75,"in_reply_to":"baada198_26e6cde8","updated":"2014-07-04 02:05:13.000000000","message":"Yes.\nResponse of create server and show server are different.\nThese response schemes are different.\nIt is one topic how I should implement.\nI just want to show server\u0027s status.\nSo I called show() method. \n\n\u003e I feel idempotent API should return the same response even if repeating the same requests.\n\nYes, I agree with you.\nI couldn\u0027t have good idea to implement this, except call show server().\n\nAnd if you do this(your opinion), you may create duplicate instance.\n\nBut I just want to track instance in one way or another, with something user can pass, but not instance_id.\n\nBecause there is a case that client(user or heat etc...) fail to get instance_id from OpenStack some disconnection.\n\n\"The only information that might vary in the response is the state of the instance.\"\nThanks. I use this explanation.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"7c8fc1c036a34e20cba281d1737c57a57d3d717f","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_6db42182","line":75,"in_reply_to":"baada198_2a4ccf9d","updated":"2014-07-04 04:02:02.000000000","message":"Sorry for more comments.\n\nYour this first point out is truth and hit the nail on the head.\n\n\u003e This description (\"with just attacking nova show() api internal\") might mislead the direction of this feature. \n\nI want to return POST.\n\nIt\u0027s OK if can\u0027t get vm status, but user and heat(mainly heat) sould be able to retry. So in the worst case, able to get http response code is enough without vm state.\n\nSo how should be POST response or how should be GET response is another issue as Nova API.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"35c5c9e453f507618db4f6be884111207a854250","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_addc79e5","line":75,"in_reply_to":"baada198_2a4ccf9d","updated":"2014-07-04 03:56:51.000000000","message":"tanizawa-san,\n\n \u003e v3\u0027s POST return null first as vm state?\n\noh, a nice point.\nnova-api creates a DB record with \u0027building\u0027 first, so the vm status of first response will be \u0027building\u0027 as you said.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"1721b63f22e3e00c030b7fe7fbd727cf0ef97b73","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_78421d69","line":75,"in_reply_to":"baada198_382d05ff","updated":"2014-07-04 05:02:06.000000000","message":"Yes.\n\nThank you for your understanding.\n\n\u003e but it is not so important thing, and you might think we can remove server status from \"create a server\" response now. I guess. Is that right?\n\nYes. Client(user and Heat etc...) wants to know that request reached Nova or not. So the vm state is not necessarily.\n\nOf course, i don\u0027t intend to remove vm state.\n\nidempotency-client-token implemeatation compliant to\nv3 POST schemes.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5bd24363989e04a711dc98b3570ea0d68dbb2c19","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_ca499332","line":75,"in_reply_to":"baada198_6a7a4778","updated":"2014-07-04 02:54:23.000000000","message":"tanizawa-san,\n\nI got your point.\nHow about describing\n\n Nova returns server information which includes server status(\"ACTIVE\", \"ERROR\", etc)\n\n?\n\nI think you need server status(\"ACTIVE\", etc.) only for this feature, and the other \"show a server\" API parameters(which don\u0027t exist in \"create a server\" API response) are not necessary, right?\n\nI feel it is better to keep API response parameter schema consistent as possible between conditions, and it is better to describe necessary parameter only.\n\nJust one idea for making response schema consistent:\n\nThis feature is for Nova v3 API.\nNova v3 API is experimental now, so we can change its interfaces now. So how about returning server status in every cases of \"create a server\" API?\nIn normal cases(meaning without this feature or the first request), server status is *null*. and in the second request case, server status might be \"ACTIVE\" or something.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dae00c96dce71363a38c6025f26d4093751a4a6","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_382d05ff","line":75,"in_reply_to":"baada198_6db42182","updated":"2014-07-04 04:46:35.000000000","message":"Thanks for your explanation, I agree with you here.\n\nThe points of this feature are\n\n * clients can know nova receives a request successfully.\n * nova does not create another servers if nova has already created it with the same ClientToken.\n\nThis feature is based on AWS feature and AWS one returns a response including server status.\nbut it is not so important thing, and you might think we can remove server status from \"create a server\" response now. I guess. Is that right?","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"1a4bdd1723baec50e8f1ee205d11ffac3be2e68e","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_6a7a4778","line":75,"in_reply_to":"baada198_a72658cc","updated":"2014-07-04 02:33:16.000000000","message":"\u003e This description(\"I couldn\u0027t have good idea to implement this, except call show server().\") is written about implementation.\n\nOK. Thanks. I agree.\n\n\n\"return the same response even if repeating the same requests.\"\n\nTo say precisely, no.\n\"return the same result even if repeating the same request.\"\nIn here, same result means same instance\u0027s information.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"8d499348e749c784ace99ad6c6605ba4d2140d26","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_2a4ccf9d","line":75,"in_reply_to":"baada198_ca499332","updated":"2014-07-04 03:11:43.000000000","message":"Exactly. \n\n\u003eI feel it is better to keep API response parameter schema consistent as possible between conditions, and it is better to describe necessary parameter only.\n\nThank you so much.\n\nv3\u0027s POST return null first as vm state? Sorry, i didn\u0027t know that.\n(v2 returns \u0027building\u0027 or something as vm state afaik.)\n\n\u003e So how about returning server status in every cases of \"create a server\" API?\n\nIt is so ideal implementation.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":148,"name":"Takahiro Shida","email":"shida@intellilink.co.jp","username":"shida"},"change_message_id":"31ca153ca53f5f01499bdcf7ba3c1bf08bd4cae0","unresolved":false,"context_lines":[{"line_number":72,"context_line":" User requests create server with ClientToken as request header."},{"line_number":73,"context_line":" After that, if user requests same create server request with"},{"line_number":74,"context_line":" the same ClientToken again, nova returns server information with"},{"line_number":75,"context_line":" just attacking nova show() api internal."},{"line_number":76,"context_line":" In this case, nova doesn\u0027t retry to create server anymore even if first"},{"line_number":77,"context_line":" create server request failed."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a72658cc","line":75,"in_reply_to":"baada198_e773f04b","updated":"2014-07-04 02:22:19.000000000","message":"This description(\"I couldn\u0027t have good idea to implement this, except call show server().\") is written about implementation.\n\nI think the spec is (\"return the same response even if repeating the same requests.\") rights? So, you should not mention about implementation here.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"},{"line_number":80,"context_line":" nova returns such as \u0027That ClientToken request is already accepted\u0027 as"},{"line_number":81,"context_line":" IdempotentParameterMismatch or something DuplicateError."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Detail"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_865dd949","line":81,"updated":"2014-07-04 01:15:44.000000000","message":"I\u0027m not sure IdempotentParameterMismatch or DuplicateError here. It is necessary to describe common HTTP error response such as HTTP409(Conflict) or something suitable.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5bd24363989e04a711dc98b3570ea0d68dbb2c19","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"},{"line_number":80,"context_line":" nova returns such as \u0027That ClientToken request is already accepted\u0027 as"},{"line_number":81,"context_line":" IdempotentParameterMismatch or something DuplicateError."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Detail"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_ea8d777d","line":81,"in_reply_to":"baada198_670a807a","updated":"2014-07-04 02:54:23.000000000","message":"Thanks for your explanation, I got it.\n\nAccording to line 151, you have already defined Conflict(409) for this case. So it is better to describe Conflict(409) here.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"},{"line_number":80,"context_line":" nova returns such as \u0027That ClientToken request is already accepted\u0027 as"},{"line_number":81,"context_line":" IdempotentParameterMismatch or something DuplicateError."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Detail"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_670a807a","line":81,"in_reply_to":"baada198_865dd949","updated":"2014-07-04 02:05:13.000000000","message":"IdempotentParameterMismatch\u0027s means is BadRequest(400). The token is not appropriate compare to token specification. Same as validation error.\n\nDuplicateError\u0027s mean is Conflict(409). The token is already used in another request.\n\nDoes it make sense to you?","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"8d499348e749c784ace99ad6c6605ba4d2140d26","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":" If user requests create server with same ClientToken and different parameter,"},{"line_number":80,"context_line":" nova returns such as \u0027That ClientToken request is already accepted\u0027 as"},{"line_number":81,"context_line":" IdempotentParameterMismatch or something DuplicateError."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Detail"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_cad993f4","line":81,"in_reply_to":"baada198_ea8d777d","updated":"2014-07-04 03:11:43.000000000","message":"Thanks.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":" - 64 length"},{"line_number":89,"context_line":" - ASCII characters (^[a-zA-Z0-9\\.,-])"},{"line_number":90,"context_line":" - case-sensitive"},{"line_number":91,"context_line":" - user and heat or other external system generate unique ClientToken"},{"line_number":92,"context_line":"   at their own risk"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_0620e9aa","line":90,"updated":"2014-07-04 01:15:44.000000000","message":"how about adding\n\n - unique in each tenant\n\nfor clear spec?","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":" - 64 length"},{"line_number":89,"context_line":" - ASCII characters (^[a-zA-Z0-9\\.,-])"},{"line_number":90,"context_line":" - case-sensitive"},{"line_number":91,"context_line":" - user and heat or other external system generate unique ClientToken"},{"line_number":92,"context_line":"   at their own risk"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a7149844","line":90,"in_reply_to":"baada198_0620e9aa","updated":"2014-07-04 02:05:13.000000000","message":"Yep. Thanks.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Second POST request, with same \u0027X-Client-Token\u0027 and same"},{"line_number":146,"context_line":"  request parameter, it also returns 202 but response content"},{"line_number":147,"context_line":"  is same as GET response."},{"line_number":148,"context_line":"  There is no admin_password and os-security-groups:security_groups in GET"},{"line_number":149,"context_line":"  but exist in POST response."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a4a496a6","line":147,"updated":"2014-07-04 01:15:44.000000000","message":"Here is related to the point of line 75.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Second POST request, with same \u0027X-Client-Token\u0027 and same"},{"line_number":146,"context_line":"  request parameter, it also returns 202 but response content"},{"line_number":147,"context_line":"  is same as GET response."},{"line_number":148,"context_line":"  There is no admin_password and os-security-groups:security_groups in GET"},{"line_number":149,"context_line":"  but exist in POST response."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_c7242c0f","line":147,"in_reply_to":"baada198_a4a496a6","updated":"2014-07-04 02:05:13.000000000","message":"Please see above.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Again, I had to resolve these challege in implementation."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Scope of ClientToken"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Race condition and timing splinters"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_c4c8aa57","line":157,"updated":"2014-07-04 01:15:44.000000000","message":"I guess the scope has become already clear because of your previous comment.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Again, I had to resolve these challege in implementation."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Scope of ClientToken"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Race condition and timing splinters"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_277b28f6","line":157,"in_reply_to":"baada198_c4c8aa57","updated":"2014-07-04 02:05:13.000000000","message":"Yes sir.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"321a84cccff1c5a0798ef118077ba60971d431a2","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Race condition and timing splinters"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Way to save related information"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"See concrete example below of this link(POC):"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_8401526c","line":161,"updated":"2014-07-04 01:15:44.000000000","message":"This might be written at \"Data model impact\" section.","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"3b118e8e538ce0b9513fb2a192b989838bf7288a","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* Race condition and timing splinters"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Way to save related information"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"See concrete example below of this link(POC):"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_8786b4d9","line":161,"in_reply_to":"baada198_8401526c","updated":"2014-07-04 02:05:13.000000000","message":"Yes sir.\n\nI think if we could discuss all about this nova-specs in Japanese, how easy :-)","commit_id":"594e758c297920319b892010eb6b788e1bfcefff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Also see below GoogleDocs:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"http://goo.gl/5GK9Nl"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_10a8f18b","line":19,"updated":"2014-07-07 04:49:05.000000000","message":"My browser(Firefox) cannot open this url due to the untrusted site. Is this link necessary?\n\nMany spec links make heavy review workload, so it is better to describe just necessary summary on this spec without these links for easy review and clear description.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":130,"context_line":"I made POC as decorator, so if you want to idempotent, you set this"},{"line_number":131,"context_line":"decorator any APIs you want."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* It should be considered that way to save related information"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"* In POC, every data related to this blueprint stored in memcached."},{"line_number":136,"context_line":"  But I re-implement this to put in DB."}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_b0e4a5ac","line":133,"updated":"2014-07-07 04:49:05.000000000","message":"What is your concern here?\nthe memcached usage or something?","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":136,"context_line":"  But I re-implement this to put in DB."},{"line_number":137,"context_line":"  Anyway it is needed to keep below data."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  client token, url, body, tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_70fbed78","line":139,"updated":"2014-07-07 04:49:05.000000000","message":"s/client token/ClientToken/ for the doc consistency.\n\nMethod(POST, PUT, etc) also is necessary for this feature because line 43 seems to support PUT method also.\n\nand how long is this ClientToken record lifetime?\nIf the lifetime of ClientToken record is forever, the researching time would be long even if implementing it with nosql.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  request parameter, it also returns 202 but response content"},{"line_number":151,"context_line":"  is same as GET response."},{"line_number":152,"context_line":"  There is no admin_password and os-security-groups:security_groups in GET"},{"line_number":153,"context_line":"  but exist in POST response."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"* Second POST request, with same \u0027X-Client-Token\u0027 and different"},{"line_number":156,"context_line":"  request parameter, it returns 409 because that \u0027X-Client-Token\u0027 is"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_5070a9db","line":153,"updated":"2014-07-07 04:49:05.000000000","message":"line 149-153 seems based on your PoC implementation, but that does not seem its purpose.\n\nI guess we have an idea for returning the same response after the first response. For example, if the response is stored into the DB record with the other info(line 135)  when the first response is generated, Nova can return the same info when 2nd response also.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Again, I had to resolve these challege in implementation."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Race condition and timing splinters"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Way to save related information"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_1067114e","line":161,"updated":"2014-07-07 04:49:05.000000000","message":"necessary to describe this \"race condition\" meaning.\n\nI guess this means that the same requests come at the same time. If so, that is common thing in OpenStack and I feel we don\u0027t consider it in this feature because of the scope.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Race condition and timing splinters"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Way to save related information"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"See concrete example below of this link(POC):"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_109c710e","line":163,"updated":"2014-07-07 04:49:05.000000000","message":"here is related to line 133 comment.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f00e021def1036dec4d8d469f85c6f2a910687bd","unresolved":false,"context_lines":[{"line_number":262,"context_line":"First, new request header is added."},{"line_number":263,"context_line":"Users can use this if they want."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"Second, response of POST request is different from how many times request."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_4b6e3eca","line":265,"updated":"2014-07-07 04:49:05.000000000","message":"here is related to line 153 comment.","commit_id":"4bc796024439e86dd4defab54a06c5d2a3dba7f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f12fc458d0d909f114cc193444b5ec1772b2a5a5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"In order to avoid such scenarios, this blueprint introduces the idempotency"},{"line_number":19,"context_line":"feature to OpenStack Nova API."},{"line_number":20,"context_line":"Thereby, regardless of those unintended API requests made by user retries, user"},{"line_number":21,"context_line":"can obtains the same result as the initial API request and it prevents the"},{"line_number":22,"context_line":"creation of unnecessary resource."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_f7f23e05","line":21,"updated":"2014-07-09 04:20:06.000000000","message":"nit s/obtains/obtain/","commit_id":"ce47ed2b974973d74e201f59c80ecd96ba580306"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f12fc458d0d909f114cc193444b5ec1772b2a5a5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"Therefore, resource can be identified by the created API request."},{"line_number":92,"context_line":"Meanwhile, current resource specification depends on API response."},{"line_number":93,"context_line":"In other words, those API executions are identifiable and the client could"},{"line_number":94,"context_line":"traced the errors or  check whether the API request has executed"},{"line_number":95,"context_line":"successfully or not."},{"line_number":96,"context_line":"Similar feature has been implemented as \"ClientToken\" on Amazon EC2."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_57c04a7c","line":94,"updated":"2014-07-09 04:20:06.000000000","message":"nit: s/traced/trace/","commit_id":"ce47ed2b974973d74e201f59c80ecd96ba580306"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f12fc458d0d909f114cc193444b5ec1772b2a5a5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"The Amazon EC2 cloud side will behave as:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    * If a target API request has NOT been received, then the server executes"},{"line_number":105,"context_line":"      API and response the result."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    * If a target API request has been received, then the server skip"},{"line_number":108,"context_line":"      execution and response the result."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_37711678","line":105,"updated":"2014-07-09 04:20:06.000000000","message":"nit: s/response/returns/","commit_id":"ce47ed2b974973d74e201f59c80ecd96ba580306"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f12fc458d0d909f114cc193444b5ec1772b2a5a5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    * If a target API request has NOT been received, then the server executes"},{"line_number":105,"context_line":"      API and response the result."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    * If a target API request has been received, then the server skip"},{"line_number":108,"context_line":"      execution and response the result."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Therefore, appending of ClientToken makes the response same if the client"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_d709bade","line":107,"updated":"2014-07-09 04:20:06.000000000","message":"nit s/skip/skips/","commit_id":"ce47ed2b974973d74e201f59c80ecd96ba580306"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f12fc458d0d909f114cc193444b5ec1772b2a5a5","unresolved":false,"context_lines":[{"line_number":105,"context_line":"      API and response the result."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    * If a target API request has been received, then the server skip"},{"line_number":108,"context_line":"      execution and response the result."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Therefore, appending of ClientToken makes the response same if the client"},{"line_number":111,"context_line":"calls duplicate requests(retries)."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_b70446c7","line":108,"updated":"2014-07-09 04:20:06.000000000","message":"nit: s/response/returns/","commit_id":"ce47ed2b974973d74e201f59c80ecd96ba580306"}]}
