)]}'
{"specs/juno/v2-on-v3-api.rst":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3cbae42a44543dea34cdb92eded5675221a7b9ef","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"In order to reduce the long term maintenance costs of supporting both"},{"line_number":41,"context_line":"the V2 and V3 API we would implement the V2 API on top of the V3 API"},{"line_number":42,"context_line":"codebase primarily using decorators and JSON schema to translate V2"},{"line_number":43,"context_line":"API requests that can be understood by the V3 API. It would also"},{"line_number":44,"context_line":"translate V3 API responses into V2 API formatted ones."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wIE%3D","line":42,"updated":"2014-04-02 12:03:33.000000000","message":"\"JSON schema\" is not used in current implementation. That is an original definition.\n\nIt uses just dict for representing the differences between v2 and v3.\nhttps://review.openstack.org/#/c/84347/2/nova/api/openstack/compute/v2_v3_translation/access_ips.py is an easy sample.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b8b7c754f63e91d5b8664fe9d8605b921b1a71e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"In order to reduce the long term maintenance costs of supporting both"},{"line_number":41,"context_line":"the V2 and V3 API we would implement the V2 API on top of the V3 API"},{"line_number":42,"context_line":"codebase primarily using decorators and JSON schema to translate V2"},{"line_number":43,"context_line":"API requests that can be understood by the V3 API. It would also"},{"line_number":44,"context_line":"translate V3 API responses into V2 API formatted ones."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9pg0%3D","line":42,"in_reply_to":"AAAAWH%2F9wIE%3D","updated":"2014-04-03 04:21:52.000000000","message":"Done","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3cbae42a44543dea34cdb92eded5675221a7b9ef","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":88,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * An APIRouterV2.1 class which inherits from APIRouterV3 which can"},{"line_number":91,"context_line":"    be used by the api paste configuration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    * https://review.openstack.org/#/c/80198/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wE8%3D","line":90,"updated":"2014-04-02 12:03:33.000000000","message":"s/APIRouterV2.1/APIRouterV21/ or APIRouterV2_1?","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b8b7c754f63e91d5b8664fe9d8605b921b1a71e3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":88,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * An APIRouterV2.1 class which inherits from APIRouterV3 which can"},{"line_number":91,"context_line":"    be used by the api paste configuration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    * https://review.openstack.org/#/c/80198/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9pf0%3D","line":90,"in_reply_to":"AAAAWH%2F9wE8%3D","updated":"2014-04-03 04:21:52.000000000","message":"Done","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":105,"context_line":"  * The V2.1 needs to handle a project id in the URL path even though"},{"line_number":106,"context_line":"    it is not used."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    * https://review.openstack.org/#/c/77105/"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"In order to implement the V2.1 API on V3 we need to be handle the"},{"line_number":111,"context_line":"following various scenarios depending on exactly what ways the V2 API"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wLM%3D","line":108,"updated":"2014-04-02 11:57:42.000000000","message":"Generally trying to keep links to gerrit out of the specs, but I think these are useful.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3cbae42a44543dea34cdb92eded5675221a7b9ef","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* Need to translate incoming V2 API body requests or outgoing V3 API"},{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method with a json schema definition"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/77105/"},{"line_number":125,"context_line":"  * https://review.openstack.org/#/c/84347/ (see access_ips.py)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wCM%3D","line":122,"updated":"2014-04-02 12:03:33.000000000","message":"ditto: not json schema","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b8b7c754f63e91d5b8664fe9d8605b921b1a71e3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* Need to translate incoming V2 API body requests or outgoing V3 API"},{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method with a json schema definition"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/77105/"},{"line_number":125,"context_line":"  * https://review.openstack.org/#/c/84347/ (see access_ips.py)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9pfg%3D","line":122,"in_reply_to":"AAAAWH%2F9wCM%3D","updated":"2014-04-03 04:21:52.000000000","message":"Done","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3cbae42a44543dea34cdb92eded5675221a7b9ef","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  * A decorator on the V3 API method to change the response code when"},{"line_number":130,"context_line":"    in V2.1 mode"},{"line_number":131,"context_line":"  * https://review.openstack.org/#/c/77105/ "},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"},{"line_number":134,"context_line":"  "}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wBU%3D","line":131,"updated":"2014-04-02 12:03:33.000000000","message":"and https://review.openstack.org/#/c/84348/ also is a good sample.\n\n * https://review.openstack.org/#/c/84348/ (see agents.py)\n\nnit: unnecessary space.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  * https://review.openstack.org/#/c/77105/ "},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"},{"line_number":134,"context_line":"  "},{"line_number":135,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":136,"context_line":"    passed version information and it change the resource path for the"},{"line_number":137,"context_line":"    resource extension based upon this information"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wLI%3D","line":134,"updated":"2014-04-02 11:57:42.000000000","message":"micro nit, whitespace.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1076c797a8897e8f553287ff72f8a0180572ad34","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    access is automatically given to the tenant or not."},{"line_number":171,"context_line":"  * Another example is Location header generation differences"},{"line_number":172,"context_line":"  * This approach is the most intrusive but also the most flexible"},{"line_number":173,"context_line":"    able to handle the difficult cases."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* Difference in input validation for names"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9T0o%3D","line":173,"updated":"2014-04-07 07:52:11.000000000","message":"Chris, just a question about \u0027intrusive\u0027, how can I understand it? Why it sucks.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    access is automatically given to the tenant or not."},{"line_number":171,"context_line":"  * Another example is Location header generation differences"},{"line_number":172,"context_line":"  * This approach is the most intrusive but also the most flexible"},{"line_number":173,"context_line":"    able to handle the difficult cases."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* Difference in input validation for names"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wH8%3D","line":173,"updated":"2014-04-02 11:57:42.000000000","message":"Yeah, it sucks, but it feels like the best way.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    longer valid.  Further evaluation of whether this is a significant"},{"line_number":181,"context_line":"    issue or not is ongoing. In the worst case we could relax input"},{"line_number":182,"context_line":"    validation for names in some specific cases when the V3 API is"},{"line_number":183,"context_line":"    emulating the V2.1 API"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"The initial implementation of V2.1 will be configured to export the"},{"line_number":186,"context_line":"V2.1 API via /v2.1 rather than /v2. This will allow for cloud"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wH4%3D","line":183,"updated":"2014-04-02 11:57:42.000000000","message":"+1","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":196,"context_line":"line to the api-paste.ini file. Strictly speaking api-paste.ini is not"},{"line_number":197,"context_line":"a configuration file, but in this case it is the most straightforward"},{"line_number":198,"context_line":"way of being able to implement being able to swap the V2"},{"line_number":199,"context_line":"implementation for the V2.1."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":202,"context_line":"specific functionality from the V3 code whilst at the same time"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wEs%3D","line":199,"updated":"2014-04-02 11:57:42.000000000","message":"hair brain scheme... maybe (eventually) have a log only for v2.1 input validation. anyway, that doesn\u0027t block this.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b8b7c754f63e91d5b8664fe9d8605b921b1a71e3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"line to the api-paste.ini file. Strictly speaking api-paste.ini is not"},{"line_number":197,"context_line":"a configuration file, but in this case it is the most straightforward"},{"line_number":198,"context_line":"way of being able to implement being able to swap the V2"},{"line_number":199,"context_line":"implementation for the V2.1."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":202,"context_line":"specific functionality from the V3 code whilst at the same time"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9pfM%3D","line":199,"in_reply_to":"AAAAWH%2F9wEs%3D","updated":"2014-04-03 04:21:52.000000000","message":"I think its possible, but needs some consideration, possibly around security issues. I\u0027ll add a section around this.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":231,"context_line":"implementations into methods that both APIs can call. This would"},{"line_number":232,"context_line":"significantly reduce the amount of code that needs to be modified when"},{"line_number":233,"context_line":"internal changes are made. However it is not clear that this would be"},{"line_number":234,"context_line":"considered a sufficient reduction in maintenance overhead. "},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Also since we will be keeping the V2 API for a significant period of"},{"line_number":237,"context_line":"time it would be advantageous to move the V2 API to the V3 API"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wEc%3D","line":234,"updated":"2014-04-02 11:57:42.000000000","message":"nit, whitespace","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":253,"context_line":"---------------"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"The V2.1 REST API presented will be identical to the V2 API except as"},{"line_number":256,"context_line":"noted above."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wEM%3D","line":256,"updated":"2014-04-02 11:57:42.000000000","message":"Maybe add a note about not supporting XML.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":259,"context_line":"Security impact"},{"line_number":260,"context_line":"---------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Notifications impact"},{"line_number":265,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wD4%3D","line":262,"updated":"2014-04-02 11:57:42.000000000","message":"Catches bad input earlier, so that can only help things.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":272,"context_line":"Potentially it may be advantageous if python novaclient could talk to"},{"line_number":273,"context_line":"/v2.1 instead of /v2 but code changes may not be required to change"},{"line_number":274,"context_line":"this. It may be simpler just to do this through keystone"},{"line_number":275,"context_line":"configuration. The API itself remains identical."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"Performance Impact"},{"line_number":278,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wEI%3D","line":275,"updated":"2014-04-02 11:57:42.000000000","message":"+1","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3cbae42a44543dea34cdb92eded5675221a7b9ef","unresolved":false,"context_lines":[{"line_number":272,"context_line":"Potentially it may be advantageous if python novaclient could talk to"},{"line_number":273,"context_line":"/v2.1 instead of /v2 but code changes may not be required to change"},{"line_number":274,"context_line":"this. It may be simpler just to do this through keystone"},{"line_number":275,"context_line":"configuration. The API itself remains identical."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"Performance Impact"},{"line_number":278,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9v9Q%3D","line":275,"updated":"2014-04-02 12:03:33.000000000","message":"yes, right. we can use this only by setting endpoint of v2.1 instead of v2.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":361,"context_line":"* Infrastructure to support decorators which allow more generic"},{"line_number":362,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an "},{"line_number":365,"context_line":"  extension by extension basis."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wDg%3D","line":364,"updated":"2014-04-02 11:57:42.000000000","message":"nit","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":368,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":371,"context_line":"  the V2.1 API"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Testing"},{"line_number":374,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9wAI%3D","line":371,"updated":"2014-04-02 11:57:42.000000000","message":"Ideally link to this blueprint in launchpad.\n\nWhat about treating this like the glance proxy stuff?\n\nMaybe we just move it to v2.1, in the knowledge we keep v2.1 basically for ever. Thus, we have no proxing in v2.1\n\nI think we need to split nova-network out of nova if we keep it much longer.\n\nAnyway, the direction of that blueprint doesn\u0027t affect this blueprint, so not a bit deal in terms of this review.","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b23c1a0349f6d2ea4bc3136440063fdb40ef287","unresolved":false,"context_lines":[{"line_number":392,"context_line":"As part of ongoing V3 API development work where there are APIs which"},{"line_number":393,"context_line":"are not currently tested new tests are progressively being added for"},{"line_number":394,"context_line":"both the V2 and V3 APIs. The goal would be to have complete tempest"},{"line_number":395,"context_line":"coverage of the Nova API."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"Documentation Impact"},{"line_number":398,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F9v%2FU%3D","line":395,"updated":"2014-04-02 11:57:42.000000000","message":"sweet","commit_id":"2ccfeafc1950142a476d35331bc4419350247026"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"65a6af171e473357a3c596a9e751385559c5ad09","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":88,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * An APIRouterV2.1 class which inherits from APIRouterV3 which can"},{"line_number":91,"context_line":"    be used by the api paste configuration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    * https://review.openstack.org/#/c/80198/"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9v%2Bg%3D","line":90,"updated":"2014-04-02 12:00:21.000000000","message":"micro nit, this makes the bullets indent more than the bullets above, might want to remove this space.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":88,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * An APIRouterV2.1 class which inherits from APIRouterV3 which can"},{"line_number":91,"context_line":"    be used by the api paste configuration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    * https://review.openstack.org/#/c/80198/"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pcQ%3D","line":90,"in_reply_to":"AAAAWH%2F9v%2Bg%3D","updated":"2014-04-03 05:17:55.000000000","message":"Done","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  * A decorator on the V3 API method with a json schema definition"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/77105/"},{"line_number":125,"context_line":"  * https://review.openstack.org/#/c/84347/ (see access_ips.py)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* A success response code is different"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tVg%3D","line":125,"updated":"2014-04-02 17:01:15.000000000","message":"I think I would rather see something more static as examples here. At *least* a link to a specific patch set. Coming back to this spec in the future, it will be hard to tell which was the relative set of a change that may significantly evolve.\n\nAlso, I think we need some discussion directly in here about specific techniques to translate radically different interfaces. For example, assuming V3 server create returns a task, how is the v2.1 decorator going to convert that to a server? Yes, if the task includes the server, it\u0027s easy, but assuming we will have cases where we can\u0027t derive the thing we need from the new result, what\u0027s the plan? Does the decorator hit compute_api again, or call into other v3 REST code to get what it needs?","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  * A decorator on the V3 API method with a json schema definition"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/77105/"},{"line_number":125,"context_line":"  * https://review.openstack.org/#/c/84347/ (see access_ips.py)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* A success response code is different"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9paw%3D","line":125,"in_reply_to":"AAAAWH%2F9tVg%3D","updated":"2014-04-03 05:17:55.000000000","message":"I will change the links to be to specific files in the changeset. We\u0027ll need to relax the 80 character line limit though.\n\nSo the handling of radically different interfaces is handled below under \"REST API style changes or semantic behaviour changes\".\n\nThe overall design principle is to keep the simple cases look simple in the API. But for the rare but complicated cases have a tool which is still results in an implementation which is easy to maintain and clearly delineates between V2 and V3 behaviour (eg so we don\u0027t end up with a big if/else chunks embedded)\n\nWe would definitely want to avoid any situations where the compute api needs to be hit again and if that situation came up (I don\u0027t think we have any cases of this between V2 and V3 currently) there are alternatives available such as stashing data in the response objects that never actually makes it out to the user unless the decorator pulls it out.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":220,"context_line":"tree. However it has the following potential issues:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"* Can\u0027t easily handle semantic changes unless the V3 API methods had"},{"line_number":223,"context_line":"  flags added to be able to act in the V2 API manner."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"* Still need to support features not present in the V3 API such as"},{"line_number":226,"context_line":"  images or volumes so a subset of the V2 API code would need to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tUs%3D","line":223,"updated":"2014-04-02 17:01:15.000000000","message":"This could be a potential advantage of this approach, from the perspective of not making v3 methods have \"if old: else: new\" logic...","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":220,"context_line":"tree. However it has the following potential issues:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"* Can\u0027t easily handle semantic changes unless the V3 API methods had"},{"line_number":223,"context_line":"  flags added to be able to act in the V2 API manner."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"* Still need to support features not present in the V3 API such as"},{"line_number":226,"context_line":"  images or volumes so a subset of the V2 API code would need to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pYY%3D","line":223,"in_reply_to":"AAAAWH%2F9tUs%3D","updated":"2014-04-03 05:17:55.000000000","message":"Well if the v3 methods need to be modified to handle these extra flags then they essentially do have to have\n\nif flag: else: logic\n\nanyway. Also the API itself because more complicated and harder to understand for the simple cases.\n\nThis proposal explicitly avoids having cases of\n\nif v2:\n  v2_stuff()\nelse:\n  v3_stuff()\n\nEven in the worst case of needing this sort of behaviour we abstract it to\n\ncommon_stuff()\ndo_stuff()\ncommon_stuff2()\n\nwhere we have \n\n@wsgi.Controller.version(\u00272.1\u0027)\ndef do_stuff(self):\n\nand\n\n@wsgi.Controller.version(\u00273.0\u0027)\ndef do_stuff(self):\n\nwhere do_stuff is a minimalistic bit of stuff which is different between\nv2 and v3 behaviour\n\nto ensure it makes the API code as readable as possible but still be able to act differently depending on whether it is in v2 or v3 mode.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":231,"context_line":"implementations into methods that both APIs can call. This would"},{"line_number":232,"context_line":"significantly reduce the amount of code that needs to be modified when"},{"line_number":233,"context_line":"internal changes are made. However it is not clear that this would be"},{"line_number":234,"context_line":"considered a sufficient reduction in maintenance overhead."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Also since we will be keeping the V2 API for a significant period of"},{"line_number":237,"context_line":"time it would be advantageous to move the V2 API to the V3 API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tTw%3D","line":234,"updated":"2014-04-02 17:01:15.000000000","message":"Yeah. this is really what compute/api.py is supposed to be, and we see how much still needs to be duplicated between the two REST stacks due to name changes, etc.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":231,"context_line":"implementations into methods that both APIs can call. This would"},{"line_number":232,"context_line":"significantly reduce the amount of code that needs to be modified when"},{"line_number":233,"context_line":"internal changes are made. However it is not clear that this would be"},{"line_number":234,"context_line":"considered a sufficient reduction in maintenance overhead."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Also since we will be keeping the V2 API for a significant period of"},{"line_number":237,"context_line":"time it would be advantageous to move the V2 API to the V3 API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pYA%3D","line":234,"in_reply_to":"AAAAWH%2F9tTw%3D","updated":"2014-04-03 05:17:55.000000000","message":"yea so I\u0027m not sure if that has been really the goal of the compute api because to do this often you want some knowledge about wsgi/webob which we don\u0027t want the compute api to worry about. Also this sort of model implies that there would be some effort to keep the internal api exposed to the v2 or v3 api the same (eg do transformation work if required in these common functions) so neither the v2 nor v3 code would need to be modified.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The long term goal would be to deprecate and eventually remove the"},{"line_number":301,"context_line":"original V2 API code when deployers and users are satisfied that v2.1"},{"line_number":302,"context_line":"satisfies their requirements."},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Developer impact"},{"line_number":305,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tSs%3D","line":302,"updated":"2014-04-02 17:01:15.000000000","message":"Could we put some milestones in here for achieving consensus about removal? I\u0027d like to see specific deployers signed up to help do this testing. Otherwise, we have the potential to end up with *three* implementations and no clear criteria for when we can drop the old one.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The long term goal would be to deprecate and eventually remove the"},{"line_number":301,"context_line":"original V2 API code when deployers and users are satisfied that v2.1"},{"line_number":302,"context_line":"satisfies their requirements."},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Developer impact"},{"line_number":305,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pXw%3D","line":302,"in_reply_to":"AAAAWH%2F9tSs%3D","updated":"2014-04-03 05:17:55.000000000","message":"Done","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":318,"context_line":"  time minimising code duplication"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"In the short term while the old V2 API code exists there will still be"},{"line_number":321,"context_line":"a dual maintenance overhead."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Implementation"},{"line_number":324,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tR8%3D","line":321,"updated":"2014-04-02 17:01:15.000000000","message":"I think it\u0027s 2-3x the maintenance, right? We\u0027re expecting some of the 2.1 code to still need changes due to internal refactoring, if I understand correctly. Maybe just \"extra maintenance\" would be a safe description :)","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":318,"context_line":"  time minimising code duplication"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"In the short term while the old V2 API code exists there will still be"},{"line_number":321,"context_line":"a dual maintenance overhead."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Implementation"},{"line_number":324,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pVM%3D","line":321,"in_reply_to":"AAAAWH%2F9tR8%3D","updated":"2014-04-03 05:17:55.000000000","message":"So we currently have:\n\nNova V2 API\nNova V3 API\nEC2 API\n\nSo I agree saying dual or 2 or 3 times is probably a bit misleading.\n\nWe would be adding the V2.1 API. However I think the vast majority of the cases where there is just an input/output transformation any internal refactoring will require no changes to V2.1 code as it built on top of the stable V3 API (as long as it is stable). So any mangling which needs to be done as a result of internal refactoring will have to result in the same v3 API output and the V2 transformations will remain identical.\n\nIn the rarer non simple cases there may be some extra work depending on exactly what the change is.\n\nI think perhaps to get a better handle on this we need some example scenarios of what may change.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"65a6af171e473357a3c596a9e751385559c5ad09","unresolved":false,"context_lines":[{"line_number":364,"context_line":"* Infrastructure to support decorators which allow more generic"},{"line_number":365,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an "},{"line_number":368,"context_line":"  extension by extension basis."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9v%2Bw%3D","line":367,"updated":"2014-04-02 12:00:21.000000000","message":"micro nit.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"65a6af171e473357a3c596a9e751385559c5ad09","unresolved":false,"context_lines":[{"line_number":370,"context_line":"Dependencies"},{"line_number":371,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":374,"context_line":"  the V2.1 API"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9v%2Bc%3D","line":373,"updated":"2014-04-02 12:00:21.000000000","message":"ideally add a link to launchpad for this","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":370,"context_line":"Dependencies"},{"line_number":371,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":374,"context_line":"  the V2.1 API"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pUc%3D","line":373,"in_reply_to":"AAAAWH%2F9v%2Bc%3D","updated":"2014-04-03 05:17:55.000000000","message":"We don\u0027t yet have a blueprint for this. We have a v3-api-remove-nova-network but we should probably just throw that one away and start a new one since it has such a bad name now we\u0027re keeping nova network :-)","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d7eaadb8b756ef2876dbdf963fb449168ae9d5a","unresolved":false,"context_lines":[{"line_number":390,"context_line":"backwards compatible. A substantial number of patches have already"},{"line_number":391,"context_line":"merged or are in progress which adds verification of body"},{"line_number":392,"context_line":"responses. This helps keep an extra check on both the original V2 API"},{"line_number":393,"context_line":"codebase as well as the development of the V2.1 POC and the V3 API."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"As part of ongoing V3 API development work where there are APIs which"},{"line_number":396,"context_line":"are not currently tested new tests are progressively being added for"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9tRg%3D","line":393,"updated":"2014-04-02 17:01:15.000000000","message":"So are we thinking a separate tempest job that runs v2 tempest against /v2.1 non-voting until it works?","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e4913880029ff79d2bd9b433aad795edb813eba0","unresolved":false,"context_lines":[{"line_number":390,"context_line":"backwards compatible. A substantial number of patches have already"},{"line_number":391,"context_line":"merged or are in progress which adds verification of body"},{"line_number":392,"context_line":"responses. This helps keep an extra check on both the original V2 API"},{"line_number":393,"context_line":"codebase as well as the development of the V2.1 POC and the V3 API."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"As part of ongoing V3 API development work where there are APIs which"},{"line_number":396,"context_line":"are not currently tested new tests are progressively being added for"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pJE%3D","line":393,"in_reply_to":"AAAAWH%2F9pUI%3D","updated":"2014-04-03 05:56:23.000000000","message":"In Tempest, now positive tests and negative tests have been separated to each test file. Basically v2.1 API should pass all positive tests, but v2.1 API could not pass some negative tests due to line 73.\n\nSo I guess we need some Tempest option which can operate positive tests only for v2.1 API testing.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b7766eb7a674f9786b8b42b2c81c172bf8c79fac","unresolved":false,"context_lines":[{"line_number":390,"context_line":"backwards compatible. A substantial number of patches have already"},{"line_number":391,"context_line":"merged or are in progress which adds verification of body"},{"line_number":392,"context_line":"responses. This helps keep an extra check on both the original V2 API"},{"line_number":393,"context_line":"codebase as well as the development of the V2.1 POC and the V3 API."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"As part of ongoing V3 API development work where there are APIs which"},{"line_number":396,"context_line":"are not currently tested new tests are progressively being added for"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9pUI%3D","line":393,"in_reply_to":"AAAAWH%2F9tRg%3D","updated":"2014-04-03 05:17:55.000000000","message":"I think that\u0027ll be the easiest way to handle it longer term. \n\nWe can\u0027t really gate until we\u0027re pretty much complete unless we have an exception list. Perhaps a non voting job? I\u0027ll ask around about how reasonable that is.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3498e8ab5b7d6a6aa63a8fbdcfd28dacdb9fddc4","unresolved":false,"context_lines":[{"line_number":408,"context_line":"Longer term the improved infrastructure for input validation and the"},{"line_number":409,"context_line":"development of JSON schema for response validation will make it much"},{"line_number":410,"context_line":"easier to automate the generation of documentation for both the V2 and"},{"line_number":411,"context_line":"V3 APIs rather relying on the current mostly manual process."},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"References"},{"line_number":414,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F9v38%3D","line":411,"updated":"2014-04-02 12:18:53.000000000","message":"+100, that is the best situation I also expect.","commit_id":"7ae034dbbf10987419ef772ed6e5dba6ed10d652"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"60722aaee4239ac392c201ea015946f5240f7ac5","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"If the deployer wanted to export the API as /v2 rather than /v2.1 then"},{"line_number":308,"context_line":"they would need to modify the api-paste.ini file (a couple of line"},{"line_number":309,"context_line":"change to disable the original V2 API and use the APIRouterV2_1 as"},{"line_number":310,"context_line":"the /v2 API."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"The long term goal would be to deprecate and eventually remove the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F9pKU%3D","line":309,"updated":"2014-04-03 05:56:09.000000000","message":"s/APIRouterV2_1/APIRouterV21/ for line90.","commit_id":"a8b6eb167cb730f21369b991e9750c6a0a3144c8"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"http://ozlabs.org/~cyeoh/V3_API.html"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"However, there have been intensive discussions over the future of Nova"},{"line_number":31,"context_line":"the maintenance overhead implications from having to support two APIs"},{"line_number":32,"context_line":"such as v2 and v3 simultaneously for a long period of time. Out of"},{"line_number":33,"context_line":"these discussions came the idea that we could support a slightly"},{"line_number":34,"context_line":"modified V2 API built on top of the V3 API codebase."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2FkdM%3D","line":31,"updated":"2014-04-12 10:45:10.000000000","message":"s/the/and the/","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"http://ozlabs.org/~cyeoh/V3_API.html"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"However, there have been intensive discussions over the future of Nova"},{"line_number":31,"context_line":"the maintenance overhead implications from having to support two APIs"},{"line_number":32,"context_line":"such as v2 and v3 simultaneously for a long period of time. Out of"},{"line_number":33,"context_line":"these discussions came the idea that we could support a slightly"},{"line_number":34,"context_line":"modified V2 API built on top of the V3 API codebase."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_31885822","line":31,"in_reply_to":"AAAAW3%2F%2FkdM%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and so V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2FkdE%3D","line":64,"updated":"2014-04-12 10:45:10.000000000","message":"s/and so/and there for in the/","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and so V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_518de430","line":64,"in_reply_to":"AAAAW3%2F%2FkdE%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":137,"context_line":"    passed version information and it change the resource path for the"},{"line_number":138,"context_line":"    resource extension based upon this information"},{"line_number":139,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2Fkc8%3D","line":137,"updated":"2014-04-12 10:45:10.000000000","message":"s/change/changes/","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":137,"context_line":"    passed version information and it change the resource path for the"},{"line_number":138,"context_line":"    resource extension based upon this information"},{"line_number":139,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_91876c0f","line":137,"in_reply_to":"AAAAW3%2F%2Fkc8%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"1d91fbab23985f9e0af0d124a36bc1f8f4aae458","unresolved":false,"context_lines":[{"line_number":136,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":137,"context_line":"    passed version information and it change the resource path for the"},{"line_number":138,"context_line":"    resource extension based upon this information"},{"line_number":139,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2FmVQ%3D","line":139,"updated":"2014-04-11 21:18:48.000000000","message":"How will we document these renames?","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":137,"context_line":"    passed version information and it change the resource path for the"},{"line_number":138,"context_line":"    resource extension based upon this information"},{"line_number":139,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_b17b8828","line":139,"in_reply_to":"AAAAW3%2F%2Fkc4%3D","updated":"2014-05-24 07:39:53.000000000","message":"Yes, from the V2.1 API point of view nothing will change. The API formerly known as V3 (microversion) will have a changes document which lists the changes","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":137,"context_line":"    passed version information and it change the resource path for the"},{"line_number":138,"context_line":"    resource extension based upon this information"},{"line_number":139,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2Fkc4%3D","line":139,"in_reply_to":"AAAAW3%2F%2FmVQ%3D","updated":"2014-04-12 10:45:10.000000000","message":"These renames should be hidden from users though, right? The v2 API will be \"unchanged\" (translated) and the v3 name is as it has been since Icehouse.","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":206,"context_line":"V3 API code now assumes that input validation is done before it"},{"line_number":207,"context_line":"receives the user data. In this mode invalid input would most likely"},{"line_number":208,"context_line":"lead to an internal server error response. There would also need to be"},{"line_number":209,"context_line":"some careful consideration of any security. However this mode may be"},{"line_number":210,"context_line":"of interest to cloud providers so they can attempt to measure which"},{"line_number":211,"context_line":"users or apps are making invalid V2 API requests."},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2Fkcw%3D","line":209,"updated":"2014-04-12 10:45:10.000000000","message":"s/security/security implications this would have/","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":206,"context_line":"V3 API code now assumes that input validation is done before it"},{"line_number":207,"context_line":"receives the user data. In this mode invalid input would most likely"},{"line_number":208,"context_line":"lead to an internal server error response. There would also need to be"},{"line_number":209,"context_line":"some careful consideration of any security. However this mode may be"},{"line_number":210,"context_line":"of interest to cloud providers so they can attempt to measure which"},{"line_number":211,"context_line":"users or apps are making invalid V2 API requests."},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_d178142e","line":209,"in_reply_to":"AAAAW3%2F%2Fkcw%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"1d91fbab23985f9e0af0d124a36bc1f8f4aae458","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an"},{"line_number":398,"context_line":"  extension by extension basis."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"Dependencies"},{"line_number":401,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2FmUw%3D","line":398,"updated":"2014-04-11 21:18:48.000000000","message":"I absolutely consider these Work Items to be on this list in this spec.\n\n* Document the v2.1 reference listing and example request response JSON with WADL\n* Write a document describing the differences for end-users that we\u0027ll publish as part of the Compute API Reference","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an"},{"line_number":398,"context_line":"  extension by extension basis."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"Dependencies"},{"line_number":401,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_7199006e","line":398,"in_reply_to":"AAAAW3%2F%2Fkco%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1d6cbe2bbaed157e56798925d35929054e280bd7","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an"},{"line_number":398,"context_line":"  extension by extension basis."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"Dependencies"},{"line_number":401,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5adbc538_51940437","line":398,"in_reply_to":"AAAAW3%2F%2FmUw%3D","updated":"2014-05-24 07:39:53.000000000","message":"Done","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f6c8eae16f74e5b45ec1d9bd6b324d9fa3e0139a","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  handling of v2.1 vs v3 specific differences (the harder cases)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"* Use the infrastructure developed to implement the V2.1 on the V3 API on an"},{"line_number":398,"context_line":"  extension by extension basis."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"Dependencies"},{"line_number":401,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2Fkco%3D","line":398,"in_reply_to":"AAAAW3%2F%2FmUw%3D","updated":"2014-04-12 10:45:10.000000000","message":"These additions seem fair to me, with the addition of:\n\n* a section in the admin guide which describes how to configure the various API options and the implications of the various options.","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"1d91fbab23985f9e0af0d124a36bc1f8f4aae458","unresolved":false,"context_lines":[{"line_number":433,"context_line":"The documentation for the V2 API will essentially remain the same as"},{"line_number":434,"context_line":"the API will not change except for improvements in input"},{"line_number":435,"context_line":"validation. There will need to be some updates on possible error"},{"line_number":436,"context_line":"status codes."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Longer term the improved infrastructure for input validation and the"},{"line_number":439,"context_line":"development of JSON schema for response validation will make it much"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAW3%2F%2FmUo%3D","line":436,"updated":"2014-04-11 21:18:48.000000000","message":"See Work Items above.","commit_id":"07ed527ccc504201790641c1a7ed8e37e532c304"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ef27414b2c5d0c7617146f76fcf070c68a6f6a43","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    unaffected."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Some cases of less flexibility in what combination of extensions can"},{"line_number":58,"context_line":"  be deployed by a cloud operator"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"  * Part of the API V3 development involved consolidating the number"},{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_adaf5893","line":58,"updated":"2014-05-29 02:36:02.000000000","message":"Just come out a policy rule problem. how to mapping v3 policy rule to v2.1? Policy rule is named by extension name.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"7a5d7977e17a4b093a9791134fa09fec51da6f42","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    unaffected."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Some cases of less flexibility in what combination of extensions can"},{"line_number":58,"context_line":"  be deployed by a cloud operator"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"  * Part of the API V3 development involved consolidating the number"},{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_2cb4baf0","line":58,"in_reply_to":"3ae8d1ca_adaf5893","updated":"2014-06-05 05:05:16.000000000","message":"I think we will have to handle this through DocImpact/UpgradeImpact","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5dfa7dd64e747e6484f7ed6af749ac07d6fe5aaf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and therefore in the V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_09131567","line":64,"updated":"2014-05-27 21:13:51.000000000","message":"Hmm, I don\u0027t recall discussing this part. Does this mean that deployers can\u0027t turn off certain things in V2.1 that they could disable in V2? Why is it hard to continue to honor this?","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d8e9dbd4348377e69f262da1ac8ccdd72b8d7973","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and therefore in the V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_75bc5c6a","line":64,"in_reply_to":"3ae8d1ca_09131567","updated":"2014-05-28 07:31:06.000000000","message":"It does. A lot of the extensions are only extensions because it was the only way of adding new parameters etc. The V3 code collapsed a lot of \"if this extension is loaded\" logic because there was no question of whether the functionality is desired or not - it is - it just wasn\u0027t in the first version. Obviously it simplifies the code quite a bit.\n\nIf there are specific cases where a deployer thinks that some functionality is really not desired (and remember this sort of collapsing only really occurred where we didn\u0027t believe this was in anyway controversial) then we could put some logic in to honour this.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4769801201dcf7b8d35c023e38736c912ef45699","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and therefore in the V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_be9078ed","line":64,"in_reply_to":"3ae8d1ca_75bc5c6a","updated":"2014-05-28 13:45:43.000000000","message":"Hmm, okay. It just further distances ourselves from 2.1 being just like 2.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"7a5d7977e17a4b093a9791134fa09fec51da6f42","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    of extensions as many were only created in order to add missing"},{"line_number":62,"context_line":"    functionality in a backwards compatible way. As a result some"},{"line_number":63,"context_line":"    features which were optional in a V2 API extensions are always"},{"line_number":64,"context_line":"    enabled in the V3, and therefore in the V2.1 extension."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Operators define what extensions are enabled by their V3 API"},{"line_number":67,"context_line":"    extension equivalents rather than their V2 API names."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_ac9e0a61","line":64,"in_reply_to":"3ae8d1ca_be9078ed","updated":"2014-06-05 05:05:16.000000000","message":"From a deployer point of view that is true, from a user REST API point of view probably not. If there is a specific case which is really important then we can handle it through an artificial extension, but I don\u0027t believe that will be necessary given that extension removal was only done in the very obvious cases","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5dfa7dd64e747e6484f7ed6af749ac07d6fe5aaf","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":125,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":126,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_14588831","line":123,"updated":"2014-05-27 21:13:51.000000000","message":"Hmm, I was expecting that v2.1 would be merged down into the existing code and not just left as a decorator on top of V3. That will be important when we go forward to decide on and approve individual changes of V3 to be exposed as microversions. Perhaps this is just left over from the previous iterations of this document?","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d8e9dbd4348377e69f262da1ac8ccdd72b8d7973","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":125,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":126,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_983affcb","line":123,"in_reply_to":"3ae8d1ca_14588831","updated":"2014-05-28 07:31:06.000000000","message":"I don\u0027t think we should merging V2.1 down into the existing code. This would be an awful load of code churn on the v3 code base as well as tests for changes which we may well want to make in the future anyway (ie we\u0027d need to revert the merge down).\n\nSo what I would expect would happen is that on a case by case basis as we bump microversions to bring in V3 type functionality (or not) we either remove the transformation when the higher microversion is requested (eg we get the V3 version) or if we conclude we never will want the v3 behavior we change the v3 behaviour to match v2 and remove the transformation (because its no longer needed).","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"eca2511cd503fbe05884e6cf662378a9cb1aed3a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":125,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":126,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_9a7c9322","line":123,"in_reply_to":"3ae8d1ca_1e3c0ce2","updated":"2014-05-28 22:59:29.000000000","message":"So I think this is short vs long term thing. As I mention above on a case by case basis we\u0027ll either decide to expose the newer behaviour (I don\u0027t think for example that fixing success return codes is that controversial) via microversions or we\u0027ll say we\u0027ll never change a certain type of behaviour and do a merge down.\n\nBut for now it seems pointless to revert changes, cleanups and tests that have already been implemented when the translation layer is so simple. If nothing else we\u0027d simply lose a lot of the time and effort that has gone into working out what was the right thing to do in the first place.\n\nFor Juno I think our priority should be getting V2.1 up and running/verified and some examples of microversion examples (tasks plus minor non controversial backwards incompatible changes)\n\nBut yes, long term we won\u0027t want to have something we\u0027re never going to expose.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4769801201dcf7b8d35c023e38736c912ef45699","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":125,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":126,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_1e3c0ce2","line":123,"in_reply_to":"3ae8d1ca_983affcb","updated":"2014-05-28 13:45:43.000000000","message":"Hmm, this really runs counter to my understanding of the result of the summit discussion. Maybe it was post-session discussion, but I really think the expectation from multiple people was that we\u0027d merge down and not end up with a v2.1 decorator on top of v3 forever. If we\u0027re never going to expose v3 on its own, then it\u0027s a terrible method of organization to have our main API be a translation layer on top of something we\u0027re never going to expose.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"a3c9b7f9cb4e4f4a3c76b0b6626b8320dec450ac","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":123,"context_line":"    which defines the transformation required."},{"line_number":124,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":125,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":126,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_e4849e0c","line":123,"in_reply_to":"3ae8d1ca_9a7c9322","updated":"2014-06-05 13:14:42.000000000","message":"suggestion: So, I know it \u0027easy to say\u0027, but why cant we start making v2.1 \u003d\u003d v2, then start to apply all the changes in the micro-versioning fashion on top of that to reach v3 parity (not version itself but functionality). I guess that translate requests/responses when we\u0027re about to start micro-versioning (which will do pretty much the same as I see it) is unnecessary. \n\nFollowing that, IMHO, the \u0027only\u0027 work remaining here would be to take care of renamed resources, and how to deal with resources that no longer exist in v3 (keep them perfectly equal to v2 imho and \u0027lock\u0027 them to new changes), and adapt input validation to v2.1 initial stage (v2)","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5dfa7dd64e747e6484f7ed6af749ac07d6fe5aaf","unresolved":false,"context_lines":[{"line_number":128,"context_line":"* A success response code is different"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"  * A decorator on the V3 API method to change the response code when"},{"line_number":131,"context_line":"    in V2.1 mode"},{"line_number":132,"context_line":"  * https://review.openstack.org/#/c/84348/5/nova/api/openstack/compute/plugins/v3/agents.py"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_3474a498","line":131,"updated":"2014-05-27 21:13:51.000000000","message":"Same comment here.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5dfa7dd64e747e6484f7ed6af749ac07d6fe5aaf","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_74ac6cee","line":146,"updated":"2014-05-27 21:13:51.000000000","message":"This too. I think the expectation that came out of the summit discussion is that all of these sorts of changes would be proposed as a microversion on top of v2.1 after 2.1.0 (or whatever) was considered stable and acceptable.\n\nSee (what is currently) line 157 on:\n\nhttps://etherpad.openstack.org/p/juno-nova-v3-api\n\nwhich says:\n\n``Other \"v3 changes\" such as CamelCase changes, possibly split up into multiple microversions``\n\n\"Possibly\" in this case meaning \"we might apply some but not all\", according to my understanding.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"ba075d1d6ab97e89303e224bf01dd979ac41f9c5","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_41f5b4ec","line":146,"in_reply_to":"3ae8d1ca_2d734816","updated":"2014-05-29 10:23:31.000000000","message":"FYI: this is the link to the microversions nova spec \n\nhttps://review.openstack.org/#/c/96139/","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"7a5d7977e17a4b093a9791134fa09fec51da6f42","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_2c991a6e","line":146,"in_reply_to":"3ae8d1ca_74ac6cee","updated":"2014-06-05 05:05:16.000000000","message":"right, though by \"proposing\" would mean propose to remove the translation layer with a microversion bump. A consensus that we never want the change would result in a merge down changing the underlying v3 behaviour to match the v2 behaviour and removing any translation.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ecc3ec7d8b49cf6eb7a7a4e9811835c699009fa6","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_f1a5e304","line":146,"in_reply_to":"3ae8d1ca_74ac6cee","updated":"2014-05-28 04:14:16.000000000","message":"uh, my understanding of microversions means each API extension version, not whole version(v2, v2.1, etc.).\nOn v3 API, each extension is versioned like the following:\n\n$ nova --os-compute-api-version 3 extension-list\n\n +--------------------------+-----------------------------------------------------------------------+-------------------------------+---------+\n | Name                     | Summary                                                               | Alias                         | Version |\n +--------------------------+-----------------------------------------------------------------------+-------------------------------+---------+\n | Consoles                 | Consoles.                                                             | consoles                      | 1       |\n | Extensions               | Extension information.                                                | extensions                    | 1       |\n | FlavorAccess             | Flavor access support.                                                | flavor-access                 | 1       |\n | FlavorsExtraSpecs        | Flavors extra specs support.                                          | flavor-extra-specs            | 1       |\n | FlavorManage             | Flavor create/delete API support.                                     | flavor-manage                 | 1       |\n\njust IMO, v2.1 also use these API extension versions and when changing parameter name of\nsome API extension(such as CamelCase -\u003e snake_case), its extension version would be increased.\n\nBy separating extension versions from whole API version, we will not need to consider whole API version\nwhen changing API extension every time.\n\nIn addition, OpenStack distributor will be able to back port enhance patches(adds a new extension, etc.)\ninto their distributions more easily because extension versions are independent from whole API version.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4769801201dcf7b8d35c023e38736c912ef45699","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_f40ea031","line":146,"in_reply_to":"3ae8d1ca_f1a5e304","updated":"2014-05-28 13:45:43.000000000","message":"Whether or not we have a single monotonic microversion for the whole API or per-extension is still something we need to hash out. Personally, I would much prefer *not* having versions per extension for this purpose as it makes it far too easy for extensions to be optional, thus confusing what the surface of our API is when run by different vendors.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"74a6b10ade0a9a1fefbf52930711e0c57458651b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  * This is handled by adding an additional action decorator to the"},{"line_number":144,"context_line":"    method which specifies a different action name for a specific"},{"line_number":145,"context_line":"    version"},{"line_number":146,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/migrate_server.py"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* Interface does not exist in the V3 API"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3ae8d1ca_2d734816","line":146,"in_reply_to":"3ae8d1ca_f40ea031","updated":"2014-05-29 02:55:15.000000000","message":"\u003e Whether or not we have a single monotonic microversion for the whole API or per-extension is still something we need to hash out.\n\nYes, agree here.\n\n \u003e Personally, I would much prefer *not* having versions per extension for this purpose as it makes it far too easy for extensions to be optional, thus confusing what the surface of our API is when run by different vendors.\n\nIt depends on how to number a single monotonic microversion, but I guess a single monotonic microversion for the whole API cannot cover different vendors/deployers\u0027 OpenStack environments.\n\nThey don\u0027t need to use the raw trunk version of OpenStack and they would like to apply their own patches or the latest community\u0027s patch to their own OpenStack repos.\nOn some Linux distributions(RHEL, etc), the vendors are back-porting the latest patches of communities and applying their own patches to their own Linux distributions. As the result, the linux kernels are so different from the original ones.\nAnd the same things would happen in OpenStack distributions also.\n\nIf picking up some API extension patches of communities and applying them to their own OpenStack distributions without the other extension patches, a single monotonic microversion cannot show the features of the OpenStack environments like the following:\n\n community:\n  v2.1  original\n  v2.1.1 add API extension A\n  v2.1.2 add API extension B\n  v2.1.3 add API extension C\n\n vendors:\n  v2.1  original\n  v2.?? apply API extension B to v2.1 code without A\n\nbut API extension versions can show the features because API extension patches increase each extension version.","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"a3c9b7f9cb4e4f4a3c76b0b6626b8320dec450ac","unresolved":false,"context_lines":[{"line_number":160,"context_line":"  * Example"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    * V2: /os-hypervisors/[filters]/search"},{"line_number":163,"context_line":"    * V3: /os-hypervisors/search?query\u003d[filters]"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  * Decorator on controller internal methods which allows"},{"line_number":166,"context_line":"    specification whether it is for V2.1 or V3. Allows for multiple"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_84bf5a60","line":163,"updated":"2014-06-05 13:14:42.000000000","message":"qq: why this was changed?I can\u0027t remember \u003d/","commit_id":"426c981dcaea60c9ea72095172a36b999189d1c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"* A separate plugin namespace in setup.cfg for the V2.1 and V3 API"},{"line_number":108,"context_line":"  which allows deployers to have a different set of plugins loaded"},{"line_number":109,"context_line":"  between the V2.1 and V3 APIs when having both active."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  * https://review.openstack.org/#/c/84296/4"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e8aaa883","line":109,"updated":"2014-06-05 16:54:31.000000000","message":"We decided that we\u0027ll never expose v3 to the user as it is, right? So what is the point of having a separate plugin namespace for the two?","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"* A separate plugin namespace in setup.cfg for the V2.1 and V3 API"},{"line_number":108,"context_line":"  which allows deployers to have a different set of plugins loaded"},{"line_number":109,"context_line":"  between the V2.1 and V3 APIs when having both active."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  * https://review.openstack.org/#/c/84296/4"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_70959531","line":109,"in_reply_to":"1ae5cdf2_e8aaa883","updated":"2014-06-05 21:30:55.000000000","message":"That\u0027s true, we can probably drop this now","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  * https://review.openstack.org/#/c/84296/4"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* The ability to enable/disable only the V2.1 or V3 API selectively."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"  * https://review.openstack.org/#/c/84407/4/nova/api/openstack/__init__.py"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_a88b401d","line":113,"updated":"2014-06-05 16:54:31.000000000","message":"Is this just until we remove the ability to expose v3?","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  * https://review.openstack.org/#/c/84296/4"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* The ability to enable/disable only the V2.1 or V3 API selectively."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"  * https://review.openstack.org/#/c/84407/4/nova/api/openstack/__init__.py"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_10ac518b","line":113,"in_reply_to":"1ae5cdf2_a88b401d","updated":"2014-06-05 21:30:55.000000000","message":"yes, though we\u0027ll want to to keep the ability to expose v3 for a while so we can continue to regression test the code that we already have.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":140,"context_line":"* A success response code is different"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  * A decorator on the V3 API method to change the response code when"},{"line_number":143,"context_line":"    in V2.1 mode"},{"line_number":144,"context_line":"  * https://review.openstack.org/#/c/84348/5/nova/api/openstack/compute/plugins/v3/agents.py"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_c895ec33","line":143,"updated":"2014-06-05 16:54:31.000000000","message":"Might this require knowledge held only in the actual implementation, such that simple translation of 200-\u003e202 might not be possible in the out-of-body decorator case? This seems like a good reason to merge the decorator functions down...","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"* A success response code is different"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  * A decorator on the V3 API method to change the response code when"},{"line_number":143,"context_line":"    in V2.1 mode"},{"line_number":144,"context_line":"  * https://review.openstack.org/#/c/84348/5/nova/api/openstack/compute/plugins/v3/agents.py"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_b0e9ddb8","line":143,"in_reply_to":"1ae5cdf2_c895ec33","updated":"2014-06-05 21:30:55.000000000","message":"We haven\u0027t seen any cases where the required knowledge of translation is only known in the actual implementation (the V2 behaviour *has* to remain the same regardless because of backwards compatibility reasons anyway even if internals change now). If a really strange case turned up with have other slightly heavyweight alternatives that don\u0027t lead to if/else version spaghetti.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":149,"context_line":"    passed version information and it changes the resource path for the"},{"line_number":150,"context_line":"    resource extension based upon this information"},{"line_number":151,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_48c8fc54","line":150,"updated":"2014-06-05 16:54:31.000000000","message":"This seems like a lot of indirection. Why not just rename it in the v3 code so that it\u0027s in the same place, since we never care to expose v3 as it is? If we want to change where it\u0027s exposed later (not sure why we would, given the impact) then that\u0027s a microversion. Otherwise, we have a bunch of code that provides obscure indirection for /os-thing -\u003e /thing that then has to be proposed as a microversion, and if rejected, the code has to be cleaned up anyway.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":149,"context_line":"    passed version information and it changes the resource path for the"},{"line_number":150,"context_line":"    resource extension based upon this information"},{"line_number":151,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_f0236502","line":150,"in_reply_to":"1ae5cdf2_48c8fc54","updated":"2014-06-05 21:30:55.000000000","message":"Because the long term plan is to eventually expose this functionality through microversions. With the V3 code, we already have worked out the implementation, have input validation, regression tests (both unit and tempest). To throwaway all that work for something that we\u0027d already agreed we most likely want to do in the long term seems like a huge waste.\n\nThe indirection implementation is very lightweight compared to reworking the implementation and tests (unit and tempest) to look and behave like V2 temporarily just to have to try to revert it again later.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":177,"context_line":"  * Decorator on controller internal methods which allows"},{"line_number":178,"context_line":"    specification whether it is for V2.1 or V3. Allows for multiple"},{"line_number":179,"context_line":"    definitions of internal methods which are chosen dynamically"},{"line_number":180,"context_line":"    dependent on the API instantiated."},{"line_number":181,"context_line":"  * https://review.openstack.org/#/c/82301/11/nova/api/openstack/compute/plugins/v3/hypervisors.py"},{"line_number":182,"context_line":"  * Another example is difference in private flavor creation and whether"},{"line_number":183,"context_line":"    access is automatically given to the tenant or not."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_88ecc4bc","line":180,"updated":"2014-06-05 16:54:31.000000000","message":"Again, it seems like we\u0027re *adding* a bunch of internal if-else behavior to preserve the v3 version of the world, yet we\u0027ll never expose it. It seems like that adds *more* to maintain (and later clean up) than just merging down and then maybe reintroducing it later.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"  * Decorator on controller internal methods which allows"},{"line_number":178,"context_line":"    specification whether it is for V2.1 or V3. Allows for multiple"},{"line_number":179,"context_line":"    definitions of internal methods which are chosen dynamically"},{"line_number":180,"context_line":"    dependent on the API instantiated."},{"line_number":181,"context_line":"  * https://review.openstack.org/#/c/82301/11/nova/api/openstack/compute/plugins/v3/hypervisors.py"},{"line_number":182,"context_line":"  * Another example is difference in private flavor creation and whether"},{"line_number":183,"context_line":"    access is automatically given to the tenant or not."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_70c2f5e9","line":180,"in_reply_to":"1ae5cdf2_88ecc4bc","updated":"2014-06-05 21:30:55.000000000","message":"I disagree, there\u0027s actually a bunch more work to revert the behaviour,  potentially lose a bunch of knowledge about how to implement it properly in the meantime as well as all the regression tests, and then propose it again from scratch in a cycle or 2 time compared to leaving it in place and then on a case by case basis either exposing through microversions or merging down once we have v2.1 established. \n\nWe\u0027ll also have a good reference implementation for deployers/users of what API changes are potentially coming up which makes it much easier for them to judge what impact it will have for them compared to even say a theoretical spec proposal (they can even run against it if they really want to).","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":227,"context_line":"specific functionality from the V3 code whilst at the same time"},{"line_number":228,"context_line":"minimising the amount of duplicated code."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"The underlying changes made for the V3 API would remain at least in"},{"line_number":231,"context_line":"the short to medium term while V2.1 was validated as being functionaly"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_48247c0c","line":228,"updated":"2014-06-05 16:54:31.000000000","message":"I don\u0027t understand why this is. If we\u0027re never going to expose v3 as /v3, then why is it important to keep this separation, at the expense of complexity and obscurity?","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":227,"context_line":"specific functionality from the V3 code whilst at the same time"},{"line_number":228,"context_line":"minimising the amount of duplicated code."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"The underlying changes made for the V3 API would remain at least in"},{"line_number":231,"context_line":"the short to medium term while V2.1 was validated as being functionaly"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_d07909c9","line":228,"in_reply_to":"1ae5cdf2_48247c0c","updated":"2014-06-05 21:30:55.000000000","message":"I can reword this, but we\u0027re separating v2 API behavior from v2.1+microversions now. I really want the base implementation to be a clean implementation of the latest v2.1+microversions. Everything earlier is about compatibility.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"305620a022c1e5695a189e9e71e3d7e471ebd77c","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":227,"context_line":"specific functionality from the V3 code whilst at the same time"},{"line_number":228,"context_line":"minimising the amount of duplicated code."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"The underlying changes made for the V3 API would remain at least in"},{"line_number":231,"context_line":"the short to medium term while V2.1 was validated as being functionaly"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_3d0a8b21","line":228,"in_reply_to":"1ae5cdf2_ce368fb4","updated":"2014-06-10 13:50:14.000000000","message":"I think exposing the v2.1 will for the transition be very useful. In the main out of line comment I\u0027m suggesting some nomenclature changes which might help reduce confusion about what is being proposed here.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d572ce993e4f1ff3f90245f28d591d34f9790da2","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"A major design goal of the implementation is cleanly separate V2"},{"line_number":227,"context_line":"specific functionality from the V3 code whilst at the same time"},{"line_number":228,"context_line":"minimising the amount of duplicated code."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"The underlying changes made for the V3 API would remain at least in"},{"line_number":231,"context_line":"the short to medium term while V2.1 was validated as being functionaly"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_ce368fb4","line":228,"in_reply_to":"1ae5cdf2_d07909c9","updated":"2014-06-10 12:05:23.000000000","message":"Just one idea:\n\nHow about switching each v2 API to v2.1 API step by step?\nThat means we will remove current v2 API implementation when adding v2.1 API implementation and we will never expose v2.1 endpoint. If doing it, current Tempest can test v2.1 API always.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":239,"context_line":"version of the API. Earlier versions are implemented using translation"},{"line_number":240,"context_line":"techniques which where as much as is possible leave the underlying"},{"line_number":241,"context_line":"code as simple as possible without a complicated trail of logic"},{"line_number":242,"context_line":"dependent on what version is being supported."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":245,"context_line":"API will never be supported, the underlying implementation will be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_a8d3405e","line":242,"updated":"2014-06-05 16:54:31.000000000","message":"So just to be clear here, you\u0027re saying it would be something like this:\n\n @provide_v020100\n @provide_v020101\n @provide_v020102\n def do_thing(foo):\n     # provide v2.1.3\n\nIs that right? Assuming so, it seems like we\u0027ll just be stacking things on top forever, requiring a loooot of calls down the stack of decorators even for seriously minor changes which might\u0027ve been as simple as:\n\n if context.version \u003c 2.1.2 and retcode \u003d\u003d 200:\n     retcode \u003d 402","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":239,"context_line":"version of the API. Earlier versions are implemented using translation"},{"line_number":240,"context_line":"techniques which where as much as is possible leave the underlying"},{"line_number":241,"context_line":"code as simple as possible without a complicated trail of logic"},{"line_number":242,"context_line":"dependent on what version is being supported."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":245,"context_line":"API will never be supported, the underlying implementation will be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_d33cb3ca","line":242,"in_reply_to":"1ae5cdf2_a8d3405e","updated":"2014-06-05 21:30:55.000000000","message":"Along those lines, though it would probably something much leaner like:\n\n@wsgi.v2_response(v020103, 200)\n@wsgi.response(202)\ndef do_thing(foo):\n  \n\nwhere anything less than or equal to v020103 would get a 202 translated to a 200, otherwise a 202 would be returned.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":244,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":245,"context_line":"API will never be supported, the underlying implementation will be"},{"line_number":246,"context_line":"reverted to the V2.1 API behavior (eg input validation still"},{"line_number":247,"context_line":"supported) but without any translation required."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Alternatives"},{"line_number":250,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_28573059","line":247,"updated":"2014-06-05 16:54:31.000000000","message":"Okay, so this seems to imply that we\u0027ll add all this indirection code, and then maintain a list of things that need to be ack\u0027d or nak\u0027d, and _then_ we\u0027ll go back and remove the indirection for the nak\u0027d bits. Is that right?","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":245,"context_line":"API will never be supported, the underlying implementation will be"},{"line_number":246,"context_line":"reverted to the V2.1 API behavior (eg input validation still"},{"line_number":247,"context_line":"supported) but without any translation required."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Alternatives"},{"line_number":250,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_737aff88","line":247,"in_reply_to":"1ae5cdf2_28573059","updated":"2014-06-05 21:30:55.000000000","message":"yep, because the indrection code is in the vast majority of cases very lightweight. And its likely that some of the more controversial changes will be delayed to much higher microversion numbers. Others would be able to easily rolled in much earlier either by themselves or as part of a major change (such as the tasks api where everything around a resource point is changing anyway).","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d831764138a9a239b53b3e58db0924f14d213580","unresolved":false,"context_lines":[{"line_number":328,"context_line":"but I don\u0027t believe it will be significant or probably even big enough"},{"line_number":329,"context_line":"to be measurable. More stringent input validation also means more work"},{"line_number":330,"context_line":"that is needed to be done in the API layer but overall this is a good"},{"line_number":331,"context_line":"thing."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other deployer impact"},{"line_number":334,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_28057045","line":331,"updated":"2014-06-05 16:54:31.000000000","message":"Until we make the bottom implementation return something totally different. For example, if create server returns a task, and the decorators stacked above it have to change that to return a server, they likely have to go back to the database to fetch the associated instance object, as well as potential security groups, flavor data, etc.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a162b999c1796d90a19439f0803dba02685b652a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"but I don\u0027t believe it will be significant or probably even big enough"},{"line_number":329,"context_line":"to be measurable. More stringent input validation also means more work"},{"line_number":330,"context_line":"that is needed to be done in the API layer but overall this is a good"},{"line_number":331,"context_line":"thing."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other deployer impact"},{"line_number":334,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_13b8db28","line":331,"in_reply_to":"1ae5cdf2_28057045","updated":"2014-06-05 21:30:55.000000000","message":"For the really complicated cases I agree we\u0027ll need to look at the implementation - but we have the techniques listed about to optimise for performance if we have to.","commit_id":"a5f8fe893e7bebd8da939785bb3d1d07cced8a6b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1f430814fcca6082e37e7ff3d00a0791e76b1d28","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    the V2.1 API. However, consolidation was performed in cases where"},{"line_number":72,"context_line":"    it was obvious that a separate extension was only used because it"},{"line_number":73,"context_line":"    is the only mechanism of introducing even backwards compatible"},{"line_number":74,"context_line":"    changes. Reintrodcing an artificial split would not be impossible,"},{"line_number":75,"context_line":"    but unlikely to be required."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Users of the V2.1 still see the original V2 extensions in the V2"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_800a8625","line":74,"updated":"2014-06-17 05:03:27.000000000","message":"s/Reintrodcing/Reintroducing/","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    the V2.1 API. However, consolidation was performed in cases where"},{"line_number":72,"context_line":"    it was obvious that a separate extension was only used because it"},{"line_number":73,"context_line":"    is the only mechanism of introducing even backwards compatible"},{"line_number":74,"context_line":"    changes. Reintrodcing an artificial split would not be impossible,"},{"line_number":75,"context_line":"    but unlikely to be required."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Users of the V2.1 still see the original V2 extensions in the V2"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_bf9eaa05","line":74,"in_reply_to":"1ae5cdf2_800a8625","updated":"2014-06-17 13:55:24.000000000","message":"Done","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c88e20f80dceb41e507346c1d864e6ddba5264c7","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_5aa946de","line":196,"updated":"2014-06-17 04:43:50.000000000","message":"Some questions-\n1. Will these proxy interfaces be added permanently? I means in final V2.1microversion also. Or we are going to remove these proxy interfaces as we reach to final microversion.\n\n2. If yes then, does only strong input validation is needed in such interfaces? \nOr we need to fix other issues also (*if exist*) which we fixed for other API interfaces from V2 to V3? For example, success code, resource path etc *if needed*. (may be not needed as they just proxy for other component)","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3ad795c8f8aad52c68c08143b9cf0d6b7be6cf60","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_9d6d889c","line":196,"in_reply_to":"1ae5cdf2_5aa946de","updated":"2014-06-17 05:10:21.000000000","message":"@Ghanshyam\n\n \u003e 1. Will these proxy interfaces be added permanently?\n \u003e I means in final V2.1microversion also. Or we are going to\n \u003e remove these proxy interfaces as we reach to final\n \u003e microversion.\n\nI have the similar question on line498 and I guess we need to expose these proxy interfaces permanently because we need to support v2 compatible interfaces in long term.\n\n \u003e 2. If yes then, does only strong input validation is needed in\n \u003e such interfaces? Or we need to fix other issues also (*if exist*)\n \u003e which we fixed for other API interfaces from V2 to V3?\n \u003e For example, success code, resource path etc *if needed*.\n\nThat\u0027s a good point, and I think we need to fix/change these interfaces also if there are some inconsistencies with v2.1microversions.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_12e155fc","line":196,"in_reply_to":"1ae5cdf2_9d6d889c","updated":"2014-06-17 13:55:24.000000000","message":"The proxy interfaces will be required as long as:\n- we support the V2 API OR\n- a decision is made to never expose a v3 feature to v2.1 microversions (in which case we change the v3 implementation to match v2)\n\nAlso there is no \"final microversion\". microversions will be the method we use to make changes (both backwards compatible and incompatible ones)","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86328af025eca193d1f91267fc14aedcfba5507f","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_9de2e8ff","line":196,"in_reply_to":"1ae5cdf2_9d6d889c","updated":"2014-06-17 05:26:41.000000000","message":"We also need add decorator expected_errors for those interfaces. For resource path and success code, I think we can waiting for a time when we decide export those improvement in the microversion","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"88e390f84877ad3961f21f26b9910169ee8e1136","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_dd539037","line":196,"in_reply_to":"1ae5cdf2_9de2e8ff","updated":"2014-06-17 05:41:42.000000000","message":"@Alex\n\nThat\u0027s also a good point, I agree to need to add the decorator expected_errors for those interfaces also.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_f2a14996","line":196,"in_reply_to":"1ae5cdf2_9de2e8ff","updated":"2014-06-17 13:55:24.000000000","message":"Done","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    the V3 API."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":196,"context_line":"    * Add strong input validation"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_b2afc17c","line":196,"in_reply_to":"1ae5cdf2_dd539037","updated":"2014-06-17 13:55:24.000000000","message":"Done","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1f430814fcca6082e37e7ff3d00a0791e76b1d28","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"* Infrastructure to support decorators which use JSON schema"},{"line_number":466,"context_line":"  definitions to translate incoming V2 API requests and outgoing V3"},{"line_number":467,"context_line":"  API responses"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"* Infrastructure to support translation of response codes for the V2.1 API"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_fa869215","line":467,"updated":"2014-06-17 05:03:27.000000000","message":"The decorators don\u0027t use JSON schema as line162 said.\nSo here should be\n\n Infrastructure to support decorators which reference a dictionary\n definitions to translate incoming V2 API requests and outgoing V3\n API responses","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"* Infrastructure to support decorators which use JSON schema"},{"line_number":466,"context_line":"  definitions to translate incoming V2 API requests and outgoing V3"},{"line_number":467,"context_line":"  API responses"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"* Infrastructure to support translation of response codes for the V2.1 API"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_b234214b","line":467,"in_reply_to":"1ae5cdf2_fa869215","updated":"2014-06-17 13:55:24.000000000","message":"Done","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1f430814fcca6082e37e7ff3d00a0791e76b1d28","unresolved":false,"context_lines":[{"line_number":486,"context_line":"  JSON with WADL"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"* Write a document describing the differences for end-users that we\u0027ll"},{"line_number":489,"context_line":"  publish as part of the Compute API Reference"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"* Add a section in the admin guide which describes how to configure the various"},{"line_number":492,"context_line":"  API options and the implications of the various options."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_bafa4a41","line":489,"updated":"2014-06-17 05:03:27.000000000","message":"line486-489\n\nHow about separating working items related to document from this spec?\n\nThis spec has already a lot of working items and I guess we need a lot of time if covering document. and I feel it is not so critical if not making the doc in Juno cycle.\n\nI hope keeping the scope small and our effort concentrate.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"947752af6e0770d70d616e7469ce452bcfdfc9a7","unresolved":false,"context_lines":[{"line_number":486,"context_line":"  JSON with WADL"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"* Write a document describing the differences for end-users that we\u0027ll"},{"line_number":489,"context_line":"  publish as part of the Compute API Reference"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"* Add a section in the admin guide which describes how to configure the various"},{"line_number":492,"context_line":"  API options and the implications of the various options."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_52dc9474","line":489,"in_reply_to":"1ae5cdf2_321f31b9","updated":"2014-06-18 05:08:22.000000000","message":"I got it, I agree that the docs part is important for operators/deployers.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":486,"context_line":"  JSON with WADL"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"* Write a document describing the differences for end-users that we\u0027ll"},{"line_number":489,"context_line":"  publish as part of the Compute API Reference"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"* Add a section in the admin guide which describes how to configure the various"},{"line_number":492,"context_line":"  API options and the implications of the various options."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_321f31b9","line":489,"in_reply_to":"1ae5cdf2_bafa4a41","updated":"2014-06-17 13:55:24.000000000","message":"I think we really need to keep the doc part on the list even if we\u0027re not going to make it Juno. I think the list should be very small for v2 differences v2.1 - input validation can probably be fairly generic, but operator/deployer doc will be very important","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1f430814fcca6082e37e7ff3d00a0791e76b1d28","unresolved":false,"context_lines":[{"line_number":495,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":498,"context_line":"  the V2.1 API"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Testing"},{"line_number":501,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_3d1f145d","line":498,"updated":"2014-06-17 05:03:27.000000000","message":"I have a question about how to using v3 framework for v2.1 API.\n\nNow v3 framework directory is the following and the implementations of all extensions(including cores) are stored:\n\n ./nova/api/openstack/compute/plugins/v3/\n\nand on PoC of v2.1 API, we stored v2 extension implementations which don\u0027t exist in v3 implementation:\n\n ./nova/api/openstack/compute/plugins/v2/\n\nNow we have decided v3 API is never exposed as v3 API.\nSo I feel we don\u0027t need to separate these directories for v2 and v3.\n\nHow about moving ./nova/api/openstack/compute/plugins/v3/ to ./nova/api/openstack/compute/plugins/v2.1/ ?\n\nThat means we don\u0027t need to describe the separation between images/volumes APIs and nova-network API. (line 476 and line497)","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"947752af6e0770d70d616e7469ce452bcfdfc9a7","unresolved":false,"context_lines":[{"line_number":495,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":498,"context_line":"  the V2.1 API"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Testing"},{"line_number":501,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_f22e8041","line":498,"in_reply_to":"1ae5cdf2_32fbb148","updated":"2014-06-18 05:08:22.000000000","message":"\u003e I\u0027ve just changed it so we just port everything to the v3 directory.\n\u003e Can do the rename later if we want to. \n\nThat is a good idea. So it is OK to move here(line497-498) to line 476 because it is not necessary to distinguish them.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86328af025eca193d1f91267fc14aedcfba5507f","unresolved":false,"context_lines":[{"line_number":495,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":498,"context_line":"  the V2.1 API"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Testing"},{"line_number":501,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_fd868c15","line":498,"in_reply_to":"1ae5cdf2_3d1f145d","updated":"2014-06-17 05:26:41.000000000","message":"If we use micro-version, so we needn\u0027t version in the path? Maybe direct to ./nova/api/openstack/compute/plugins/?","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c84cc1b328f073bcdd4ab4fb0b8588cd6174be63","unresolved":false,"context_lines":[{"line_number":495,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":498,"context_line":"  the V2.1 API"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Testing"},{"line_number":501,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_d287c410","line":498,"in_reply_to":"1ae5cdf2_f22e8041","updated":"2014-06-18 05:15:00.000000000","message":"Sorry, the above my\n\n So it is OK to move here(line497-498) to line 476 because it is not necessary to distinguish them\n\nis wrong because nova-network API is not a proxy interface. so current description is already good for me.","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b034e240bd3134f398171d2279d16152d94f0bd5","unresolved":false,"context_lines":[{"line_number":495,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":498,"context_line":"  the V2.1 API"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Testing"},{"line_number":501,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_32fbb148","line":498,"in_reply_to":"1ae5cdf2_fd868c15","updated":"2014-06-17 13:55:24.000000000","message":"so I\u0027m a bit loathe to remove the versioning from the path for the moment, because its very hard to undo. \n\nA big v3-\u003ev2.1 rename is possible, but I\u0027m a concerned about that being a huge patch (eg all the import path unittests). So for the moment I\u0027ve just changed it so we just port everything to the v3 directory. Can do the rename later if we want to. \n\nI can perhaps be convinced otherwise though if people think the directory rename is worth it (perhaps I\u0027m overestimating how big the patch is).","commit_id":"607221b2dc27c74f8369bfac614540588b497e72"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a66102bb5b3ae43ba9b56457d0ffdb5a0d161f9d","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":499,"context_line":"  the V2.1 API"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"Testing"},{"line_number":502,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_701a91c7","line":500,"updated":"2014-06-17 14:38:27.000000000","message":"I think that since the microversions work is called out in a separate spec, that it needs to be listed here as a dependency. It\u0027s not strictly required for work to begin on this, but we\u0027ve already agreed that we\u0027re not going to consider v2.1 usable until we have that figured out.","commit_id":"fd62139a7eeae99e05cd3392ffbb40b7acddec2f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"c35a4f008b706456cb64cf008b76fd1df53bfb83","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"* Nova-network support ported to the V3 API so it can be exposed in"},{"line_number":499,"context_line":"  the V2.1 API"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"Testing"},{"line_number":502,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_63f8f1c4","line":500,"in_reply_to":"1ae5cdf2_701a91c7","updated":"2014-06-17 22:23:11.000000000","message":"I have added a reference and explanation here to the microversions spec","commit_id":"fd62139a7eeae99e05cd3392ffbb40b7acddec2f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d969a15daf264c3dbbcc100322fd892d498ce4ca","unresolved":false,"context_lines":[{"line_number":502,"context_line":"  evolve the V2 API with both backwards compatible and incompatible"},{"line_number":503,"context_line":"  changes. https://blueprints.launchpad.net/nova/+spec/api-microversions."},{"line_number":504,"context_line":"  Whilst we don\u0027t need to implement microversions support in V2.1 in"},{"line_number":505,"context_line":"  order to verify that it is senantically equivalent to the V2 API, we"},{"line_number":506,"context_line":"  should ensure that the infrastructure is designed to handle a"},{"line_number":507,"context_line":"  microversions implementation. For example, the V2.1 on V3 API"},{"line_number":508,"context_line":"  implementation already needs to handle acting as either V2.1 or V3"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_526734ea","line":505,"updated":"2014-06-18 05:15:40.000000000","message":"s/senantically/semantically/","commit_id":"998fed1b0bf9c752467a721072557194a0707eea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"549f901205bcf57ab67fcdf7dce88876d15ec4cb","unresolved":false,"context_lines":[{"line_number":502,"context_line":"  evolve the V2 API with both backwards compatible and incompatible"},{"line_number":503,"context_line":"  changes. https://blueprints.launchpad.net/nova/+spec/api-microversions."},{"line_number":504,"context_line":"  Whilst we don\u0027t need to implement microversions support in V2.1 in"},{"line_number":505,"context_line":"  order to verify that it is senantically equivalent to the V2 API, we"},{"line_number":506,"context_line":"  should ensure that the infrastructure is designed to handle a"},{"line_number":507,"context_line":"  microversions implementation. For example, the V2.1 on V3 API"},{"line_number":508,"context_line":"  implementation already needs to handle acting as either V2.1 or V3"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_12e76ce5","line":505,"in_reply_to":"1ae5cdf2_526734ea","updated":"2014-06-18 05:18:36.000000000","message":"Done","commit_id":"998fed1b0bf9c752467a721072557194a0707eea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- Make it possible to evolve the API in an incremental manner, which"},{"line_number":39,"context_line":"  is our strength as a community."},{"line_number":40,"context_line":"- Provides backwards compatibility for consumers"},{"line_number":41,"context_line":"- Provides cleanliness in the code to make it less likely that we\u0027ll"},{"line_number":42,"context_line":"  do the wrong thing and break the world."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_9124b9b3","line":40,"updated":"2014-07-16 06:57:41.000000000","message":"nit: s/Provides/Provide/","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a7018fa3fbcb60e585cd312bb8294ccd9cf056a7","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- Make it possible to evolve the API in an incremental manner, which"},{"line_number":39,"context_line":"  is our strength as a community."},{"line_number":40,"context_line":"- Provides backwards compatibility for consumers"},{"line_number":41,"context_line":"- Provides cleanliness in the code to make it less likely that we\u0027ll"},{"line_number":42,"context_line":"  do the wrong thing and break the world."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_14f7b7d5","line":40,"in_reply_to":"baada198_9124b9b3","updated":"2014-07-16 07:22:49.000000000","message":"Done","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":38,"context_line":"- Make it possible to evolve the API in an incremental manner, which"},{"line_number":39,"context_line":"  is our strength as a community."},{"line_number":40,"context_line":"- Provides backwards compatibility for consumers"},{"line_number":41,"context_line":"- Provides cleanliness in the code to make it less likely that we\u0027ll"},{"line_number":42,"context_line":"  do the wrong thing and break the world."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"A great interface is one that goes out of it\u0027s way to make it hard to"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_d11e315f","line":41,"updated":"2014-07-16 06:57:41.000000000","message":"ditto: s/Provides/Provide/","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a7018fa3fbcb60e585cd312bb8294ccd9cf056a7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"- Make it possible to evolve the API in an incremental manner, which"},{"line_number":39,"context_line":"  is our strength as a community."},{"line_number":40,"context_line":"- Provides backwards compatibility for consumers"},{"line_number":41,"context_line":"- Provides cleanliness in the code to make it less likely that we\u0027ll"},{"line_number":42,"context_line":"  do the wrong thing and break the world."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"A great interface is one that goes out of it\u0027s way to make it hard to"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_54012fae","line":41,"in_reply_to":"baada198_d11e315f","updated":"2014-07-16 07:22:49.000000000","message":"Done","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_110a6927","line":317,"updated":"2014-07-16 06:57:41.000000000","message":"It is better to describe about the versioning detail here for avoiding the confusions.\nI guess the versioning rule will be like the following, right?\n\n * Each X version grows on its own versioning and each X has its own Y.Z.\n    e.g: possible to own three X versions at the same time\n      - 2.20.0\n      - 3.5.0\n      - 4.0.0\n * Each X is either \"CURRENT\" or \"EXPERIMENTAL\".\n * If the biggest X is \"EXPERIMENTAL\" at the time we can use the X for backwards\n    incompatible changes without its incrementation.\n * The versioning does not depend on the release boundary(Juno, etc.).","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a7018fa3fbcb60e585cd312bb8294ccd9cf056a7","unresolved":false,"context_lines":[{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_14a17795","line":317,"in_reply_to":"baada198_110a6927","updated":"2014-07-16 07:22:49.000000000","message":"So I don\u0027t think that under this proposal any of the X versions would be experimental. The only way to get experimental code would be to pass the experimental flag in the client header. The combination of X.y.z and experimental flag would define which experimental extensions are exposed to the user","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"45dafeed4507d8acafc0555e69a43c1c17162604","unresolved":false,"context_lines":[{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_67b4c735","line":317,"in_reply_to":"baada198_14a17795","updated":"2014-07-16 07:35:36.000000000","message":"Does it mean the microversion will be \"100.0.0\" if there are 100 backwards incompatible changes between v2 and v3 and expose v3 changes for consistent interfaces?\n\nor is it OK to expose them at the one step as the microversion \"3.0.0\" ?","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"42bb6a0a42ef1bf0b5e94b4e4a9705264fc797a2","unresolved":false,"context_lines":[{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_7dc60f6a","line":317,"in_reply_to":"baada198_67b4c735","updated":"2014-07-16 11:03:50.000000000","message":"There\u0027s nothing top stopping us from bunching up a series of backwards incompatible changes into one version bump, but in practice I think we\u0027d keep them separate. And we wouldn\u0027t have 100 of them in one release either as we still want to be cautious about backwards incompatible changes","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a608db23f16970b09507b060c448f54c261d0088","unresolved":false,"context_lines":[{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_488859c6","line":317,"in_reply_to":"baada198_7dc60f6a","updated":"2014-07-18 00:50:56.000000000","message":"Thanks for your explanation, Chris. Now I agree with this microversioning. That allows we change APIs better when we find inconsistent APIs in the future. That is really nice.","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.0\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_51ef81e9","line":327,"updated":"2014-07-16 06:57:41.000000000","message":"I guess this id should be \"v2.1\".","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a7018fa3fbcb60e585cd312bb8294ccd9cf056a7","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.0\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_94b4a7d5","line":327,"in_reply_to":"baada198_51ef81e9","updated":"2014-07-16 07:22:49.000000000","message":"yes, at this stage I think id would be more of a label than anything else. I wonder if we need it at all?","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                ],"},{"line_number":334,"context_line":"                \"status\": \"CURRENT\","},{"line_number":335,"context_line":"                \"version\": \"2.115\""},{"line_number":336,"context_line":"                \"min_version\": \"2.0\""},{"line_number":337,"context_line":"            },"},{"line_number":338,"context_line":"       ]"},{"line_number":339,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_5118611e","line":336,"updated":"2014-07-16 06:57:41.000000000","message":"ditto: min_version should be \"2.1\" at the first.","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a7018fa3fbcb60e585cd312bb8294ccd9cf056a7","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                ],"},{"line_number":334,"context_line":"                \"status\": \"CURRENT\","},{"line_number":335,"context_line":"                \"version\": \"2.115\""},{"line_number":336,"context_line":"                \"min_version\": \"2.0\""},{"line_number":337,"context_line":"            },"},{"line_number":338,"context_line":"       ]"},{"line_number":339,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_d4ae1f81","line":336,"in_reply_to":"baada198_5118611e","updated":"2014-07-16 07:22:49.000000000","message":"yea although its v2.0 behaviour perhaps because it has strong input validation we should just start at 2.1","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dc95a5fd7abbd699d08bdfb5f8873db24b27a65","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":397,"context_line":"  the codebase"},{"line_number":398,"context_line":"- ensure that that the latest version of the API code is clean and easy"},{"line_number":399,"context_line":"  to understand (eg no maze of version switching code)."},{"line_number":400,"context_line":""},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baada198_d1ae3181","line":398,"updated":"2014-07-16 06:57:41.000000000","message":"one \"that\" seems unnecessary.","commit_id":"09ee51347571b66f945d18b180e61bf9ecefc905"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f0fa80e0d7e76e2919a55d14de7ca0070a1424eb","unresolved":false,"context_lines":[{"line_number":349,"context_line":"A client specifies the version of the API they want via the following"},{"line_number":350,"context_line":"approach, a new header::"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"  X-OS-Compute-Version: 2.114, experimental, vendor:rax"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"This conceptually acts like the accept header, with some nuance.  We"},{"line_number":355,"context_line":"introduce 3 concepts here, global API version, experimental flag, and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"baada198_8ae0f097","line":352,"updated":"2014-07-16 14:54:25.000000000","message":"vendor is used here but vnd is used below.","commit_id":"a448e228a625f7b5256983362de60dfecc74e634"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"90cb3dd990a9e2b96c5282a48528a698397effa5","unresolved":false,"context_lines":[{"line_number":349,"context_line":"A client specifies the version of the API they want via the following"},{"line_number":350,"context_line":"approach, a new header::"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"  X-OS-Compute-Version: 2.114, experimental, vendor:rax"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"This conceptually acts like the accept header, with some nuance.  We"},{"line_number":355,"context_line":"introduce 3 concepts here, global API version, experimental flag, and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"baada198_e9496533","line":352,"in_reply_to":"baada198_8ae0f097","updated":"2014-07-17 00:41:28.000000000","message":"Done","commit_id":"a448e228a625f7b5256983362de60dfecc74e634"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f0fa80e0d7e76e2919a55d14de7ca0070a1424eb","unresolved":false,"context_lines":[{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"},{"line_number":374,"context_line":"or SDK will have to ask for something different."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Experimental and vendor, by being virtue of out of tree, do not"},{"line_number":377,"context_line":"benefit from versioning. It\u0027s an all or nothing affair. There are less"},{"line_number":378,"context_line":"unique snowflakes in the world than people think, and we actually want"},{"line_number":379,"context_line":"these things back in tree."}],"source_content_type":"text/x-rst","patch_set":14,"id":"baada198_2a7524cc","line":376,"updated":"2014-07-16 14:54:25.000000000","message":"vendor is out of tree, but my understanding was that experimental was in tree but not considered stable yet.  So maybe this could be worded slightly differently.","commit_id":"a448e228a625f7b5256983362de60dfecc74e634"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"90cb3dd990a9e2b96c5282a48528a698397effa5","unresolved":false,"context_lines":[{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"},{"line_number":374,"context_line":"or SDK will have to ask for something different."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Experimental and vendor, by being virtue of out of tree, do not"},{"line_number":377,"context_line":"benefit from versioning. It\u0027s an all or nothing affair. There are less"},{"line_number":378,"context_line":"unique snowflakes in the world than people think, and we actually want"},{"line_number":379,"context_line":"these things back in tree."}],"source_content_type":"text/x-rst","patch_set":14,"id":"baada198_e9524567","line":376,"in_reply_to":"baada198_2a7524cc","updated":"2014-07-17 00:41:28.000000000","message":"yep, experimental is definitely in-tree. I\u0027ll reword.","commit_id":"a448e228a625f7b5256983362de60dfecc74e634"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"873ef12d2978b88dacc63a2338de9a76c584375d","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_63be1e02","line":316,"updated":"2014-07-18 01:29:27.000000000","message":"For example, the current version is \u00272.115\u0027, and then there are incompatible and compatible change at same time. So the next version is \u00273.116\u0027 or \u00273.0\u0027?","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"45042dc9e4046450b182399bab5910ae6f53eab3","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_559d4d56","line":316,"in_reply_to":"baada198_63061e23","updated":"2014-07-18 02:18:40.000000000","message":"3.116 is also what I want. thanks for clarify","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"07eed55e073ed30248debf49af65581acb5c734e","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_a371160e","line":316,"in_reply_to":"baada198_63be1e02","updated":"2014-07-18 01:50:49.000000000","message":"I think the next *latest* version is \u00273.116\u0027 in this case.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"346427d36b8e4ca83ffc2ecaef2062031f627212","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"- X is incremented for backwards incompatible changes"},{"line_number":315,"context_line":"- Y is incremented for backwards compatible changes"},{"line_number":316,"context_line":"- Z is reserved for critical bug fixes on stable branches."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"A version response would look as follows"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_63061e23","line":316,"in_reply_to":"baada198_a371160e","updated":"2014-07-18 02:08:31.000000000","message":"I also think it is \u00273.116\u0027 so that it can explicitly state what all kind changes happened.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c6b1ee09fb807388e44808abfb4c477d45b6a8df","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_634e1ec4","line":327,"updated":"2014-07-18 01:44:33.000000000","message":"v2.1 is compatible with v2.0. Should we keep this as \u0027v2.0\u0027?","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c3f6d691edcd661b866da923acdfefad8f8fd834","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_75fb3147","line":327,"in_reply_to":"baada198_15b3d5e9","updated":"2014-07-18 02:35:55.000000000","message":"When POSTing / for creating a server, we can get version info instead:\n\n $  curl -i \u0027http://192.168.11.62:8774/b678e28fb3c14efa8675f2c5915da3b3/servers\u0027 -X POST [..] -d \u0027{\"server\": {\"min_count\":\n1, \"flavorRef\": \"42\", \"name\": \"vm03\", \"imageRef\": \"6734b2fa-9cd2-4270-aafd-c339690af04a\", \"max_count\": 1}}\u0027\n HTTP/1.1 300 Multiple Choices\n Content-Type: application/json\n Content-Length: 612\n Date: Fri, 18 Jul 2014 02:28:56 GMT\n\n {\"choices\": [{\"status\": \"EXPERIMENTAL\", \"media-types\": [{\"base\": \"application/json\", \"type\": \"application/vnd.openstack.compute+json;version\u003d3\"}], \"id\": \"v3.0\", \"links\": [{\"href\": \"http://192.168.11.62:8774/v3/b678e28fb3c14efa8675f2c5915da3b3/servers\", \"rel\": \"self\"}]}, {\"status\": \"CURRENT\", \"media-types\": [{\"base\": \"application/xml\", \"type\": \"application/vnd.openstack.compute+xml;version\u003d2\"}, {\"base\": \"application/json\", \"type\": \"application/vnd.openstack.compute+json;version\u003d2\"}], \"id\": \"v2.0\", \"links\": [{\"href\": \"http://192.168.11.62:8774/v2/b678e28fb3c14efa8675f2c5915da3b3/servers\", \"rel\": \"self\"}]}]}\n $ \n\nso v2.1 and v2.0 would not run in same endpoints.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"45042dc9e4046450b182399bab5910ae6f53eab3","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_15b3d5e9","line":327,"in_reply_to":"baada198_2347c678","updated":"2014-07-18 02:18:40.000000000","message":"[composite:osapi_compute]\nuse \u003d call:nova.api.openstack.urlmap:urlmap_factory\n/: oscomputeversions\n\nFor \u0027/\u0027, v2.1 and v2.0 run in same endpoints, If I understand correctly.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b5c3efcb85a0769f521c23b3e55f50742fc5b946","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_2347c678","line":327,"in_reply_to":"baada198_634e1ec4","updated":"2014-07-18 01:53:46.000000000","message":"When I start to expose v2.1, current v2.0 and v2.1 run in parallel with different endpoints. So we need to specify different IDs for both.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f8131a84492239f2a3b520f937abbef5f1629682","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_f8dc9848","line":327,"in_reply_to":"baada198_75fb3147","updated":"2014-07-18 03:05:48.000000000","message":"I\u0027m not \u0027id\u0027 is useful or useless before.\n\nIf \u0027id\u0027 is useful, we should return v2.1 and v2.0 in versions\u0027 response.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"925cec278347ecfe951c374b343a53661a92f9a4","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    {"},{"line_number":325,"context_line":"         \"versions\": ["},{"line_number":326,"context_line":"            {"},{"line_number":327,"context_line":"                \"id\": \"v2.1\","},{"line_number":328,"context_line":"                \"links\": ["},{"line_number":329,"context_line":"                      {"},{"line_number":330,"context_line":"                        \"href\": \"http://localhost:8774/v2/\","}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_383e102a","line":327,"in_reply_to":"baada198_f8dc9848","updated":"2014-07-18 03:16:24.000000000","message":"Yes, right. That is a good point.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"346427d36b8e4ca83ffc2ecaef2062031f627212","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    }"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"This specifies the min and max version that the server can"},{"line_number":342,"context_line":"understand. min_version will start at 2.0 representing the current 2.0"},{"line_number":343,"context_line":"API. It may eventually be uplifted if there are support burdens we"},{"line_number":344,"context_line":"don\u0027t feel are addequate to support."},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_d54f9d68","line":342,"updated":"2014-07-18 02:08:31.000000000","message":"min_version \u003d 2.0 -\u003e 2.1 ? as v2.1 id is exposed.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8419f9e970fb84a914fdc1389e6f7c20f2813189","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    }"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"This specifies the min and max version that the server can"},{"line_number":342,"context_line":"understand. min_version will start at 2.0 representing the current 2.0"},{"line_number":343,"context_line":"API. It may eventually be uplifted if there are support burdens we"},{"line_number":344,"context_line":"don\u0027t feel are addequate to support."},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_f58101fc","line":342,"in_reply_to":"baada198_d54f9d68","updated":"2014-07-18 02:14:05.000000000","message":"Nice catch.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"873ef12d2978b88dacc63a2338de9a76c584375d","unresolved":false,"context_lines":[{"line_number":341,"context_line":"This specifies the min and max version that the server can"},{"line_number":342,"context_line":"understand. min_version will start at 2.0 representing the current 2.0"},{"line_number":343,"context_line":"API. It may eventually be uplifted if there are support burdens we"},{"line_number":344,"context_line":"don\u0027t feel are addequate to support."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"Microversion Client Interaction"},{"line_number":347,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_e8976de9","line":344,"updated":"2014-07-18 01:29:27.000000000","message":"s/addequate/adequate","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"873ef12d2978b88dacc63a2338de9a76c584375d","unresolved":false,"context_lines":[{"line_number":365,"context_line":"- if X-OS-Compute-Version: latest (special keyword) return Max"},{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_4394ba43","line":368,"updated":"2014-07-18 01:29:27.000000000","message":"This sound like we only support new extension as experimental? not for new version as experimental?","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"07eed55e073ed30248debf49af65581acb5c734e","unresolved":false,"context_lines":[{"line_number":365,"context_line":"- if X-OS-Compute-Version: latest (special keyword) return Max"},{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_e3c94e26","line":368,"in_reply_to":"baada198_4394ba43","updated":"2014-07-18 01:50:49.000000000","message":"IIUC, we only support new extension as experimental. The monotonic microversion does not show experimental or not.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"45042dc9e4046450b182399bab5910ae6f53eab3","unresolved":false,"context_lines":[{"line_number":365,"context_line":"- if X-OS-Compute-Version: latest (special keyword) return Max"},{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_d5df9d0a","line":368,"in_reply_to":"baada198_e3c94e26","updated":"2014-07-18 02:18:40.000000000","message":"cool, I think new extension as experimental is make sense for me. thanks for clarify","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d36a5edca7f2c0522d36952640c12af13fec0a10","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_03fe426b","line":370,"updated":"2014-07-18 01:36:40.000000000","message":"can I enable multiple vendor?","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"07eed55e073ed30248debf49af65581acb5c734e","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_63aa9e1b","line":370,"in_reply_to":"baada198_03fe426b","updated":"2014-07-18 01:50:49.000000000","message":"I feel we can do it with specifying multiple vendor flags, but it is not necessary to specify them in most cases because the vendor which is received a request is a single.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"45042dc9e4046450b182399bab5910ae6f53eab3","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_95d525e7","line":370,"in_reply_to":"baada198_63aa9e1b","updated":"2014-07-18 02:18:40.000000000","message":"I think vendor extension also can add extend attributes to non-vendor api. So this case is existed.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c3f6d691edcd661b866da923acdfefad8f8fd834","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":15,"id":"baada198_157035db","line":370,"in_reply_to":"baada198_95d525e7","updated":"2014-07-18 02:35:55.000000000","message":"Sorry, I mislead this.\n\nI wanted to just say that I feel it is rare case to specify *multiple* vendors.","commit_id":"6d3be30433da4e092ce51b373605acdc56190721"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":165,"context_line":"    which defines the transformation required."},{"line_number":166,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":167,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":168,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_0e0c8deb","line":165,"updated":"2014-07-18 17:25:09.000000000","message":"How does this work going forward? The decorator converts the v3 behavior to v2.1 behavior, but when when it becomes time to change this for v2.1.14, what happens? Do we stack another decorator on top (-1) or somehow make the decorator ignore \u003e2.1.0 versions so that we can make the code change directly in the implementation?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  responses but the semantics of the operation remain the same."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"  * A decorator on the V3 API method which references a dictionary"},{"line_number":165,"context_line":"    which defines the transformation required."},{"line_number":166,"context_line":"  * https://review.openstack.org/#/c/84347/4/nova/api/openstack/compute/plugins/v3/access_ips.py"},{"line_number":167,"context_line":"  * More complicated cases where there is not a transformation"},{"line_number":168,"context_line":"    possible are handled below."}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_bfd734be","line":165,"in_reply_to":"baada198_0e0c8deb","updated":"2014-07-19 23:09:28.000000000","message":"I guess the decorator would support \"start\" and \"end\" arguments, and the translation would work for each microversion.\n\ne.g:\n @translate_microversion(start\u003d\"2.1.0\", end\u003d\"2.1.13\", gap\u003dgap_2_1_0)\n @translate_microversion(start\u003d\"2.1.14\", gap\u003dgap_2_1_14)\n def post(...)\n\nEach gap which is passed as \"gap\" argument would be difference between its microversion and the implementation(in the above case, post()). not differences between its microversion and the other microversion because we will be able to remove older microversion easily when we need it.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":170,"context_line":"* A success response code is different"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"  * A decorator on the V3 API method to change the response code when"},{"line_number":173,"context_line":"    in V2.1 mode"},{"line_number":174,"context_line":"  * https://review.openstack.org/#/c/84348/5/nova/api/openstack/compute/plugins/v3/agents.py"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* A resource path has changed. Eg /os-keypairs (V2) vs /keypairs (V3 API)"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_8e16ddf0","line":173,"updated":"2014-07-18 17:25:09.000000000","message":"Same question here, I guess.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":179,"context_line":"    passed version information and it changes the resource path for the"},{"line_number":180,"context_line":"    resource extension based upon this information"},{"line_number":181,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_0eb1ed00","line":180,"updated":"2014-07-18 17:25:09.000000000","message":"Presumably the other translations also handle the format differences if the extension, in its new home, also returns slightly different data?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"  * This is handled by the get_resources method in an extension being"},{"line_number":179,"context_line":"    passed version information and it changes the resource path for the"},{"line_number":180,"context_line":"    resource extension based upon this information"},{"line_number":181,"context_line":"  * https://review.openstack.org/#/c/80198/7/nova/api/openstack/compute/plugins/v3/keypairs.py"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* An action has changed name. Eg os-migrateLive -\u003e migrate_live"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_5fb29896","line":180,"in_reply_to":"baada198_0eb1ed00","updated":"2014-07-19 23:09:28.000000000","message":"Yes, right. It is possible/necessary to cover different path and different format with this feature.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":198,"context_line":"    * Add strong input validation"},{"line_number":199,"context_line":"    * Add expected_error decorators"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_ae6f215f","line":199,"updated":"2014-07-18 17:25:09.000000000","message":"Why do this in v2.1 if we\u0027re going to be bringing over existing code anyway? Seems like if we\u0027re going to proxy, we should proxy, using the same code we had before, and if we want to further add validation on top of the proxy interfaces, they should be microversioned too.\n\nI thought the reason we\u0027re making the concession about v2.1 requiring strict validation is because we\u0027ve got code and infrastructure that requires it and we don\u0027t want to retool that. Does that apply somehow to new code that needs to be brought over to proxy?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"32af46fe9816a2da9a809277066a6a5fa05d4118","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    * Only loaded by the V2.1 API so not visible in the V3 API"},{"line_number":198,"context_line":"    * Add strong input validation"},{"line_number":199,"context_line":"    * Add expected_error decorators"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* REST API style changes or semantic behaviour changes"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_c0e95d80","line":199,"in_reply_to":"baada198_ae6f215f","updated":"2014-07-21 04:18:31.000000000","message":"We don\u0027t stricly need to add strong input validation, but given that its happening in all the other areas I think it makes sense too. If thats something people really don\u0027t want for the proxying code we can drop it. \n\nEither way we need to copy the original proxying code across - we can\u0027t reuse it because of the different plugin framework","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":288,"context_line":"the revert (after most likely losing a lot of knowledge about exactly"},{"line_number":289,"context_line":"why and changes to make) and as well have to add translation code"},{"line_number":290,"context_line":"anyway (as we need to support the older V2 API even when we support"},{"line_number":291,"context_line":"V2.1.microversions) will be in comparison a huge amount of work."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Also having a concrete implementation that developers can see,"},{"line_number":294,"context_line":"deployers and users can actually run against before we roll it out as"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_2ed311d6","line":291,"updated":"2014-07-18 17:25:09.000000000","message":"This paragraph concerns me. We discussed at the summit that all features of v3 would be re-proposed as microversions to v2.1. The above sounds to me like we\u0027re saying \"yeah, we\u0027ll re-propose them, but basically we want them all.\" That definitely conflicts with my feeling about which of the v3 features we currently have are ones I would +2 to add back to the v2.1 API.\n\nThe more of this I see the more worried I am that we\u0027re approaching the same forest from the other side, expecting to find different dragons in the middle. Can we at least keep the first half of this paragraph where we acknowledge that things that we decide not to add to v2.1 get reverted in the core?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"32af46fe9816a2da9a809277066a6a5fa05d4118","unresolved":false,"context_lines":[{"line_number":288,"context_line":"the revert (after most likely losing a lot of knowledge about exactly"},{"line_number":289,"context_line":"why and changes to make) and as well have to add translation code"},{"line_number":290,"context_line":"anyway (as we need to support the older V2 API even when we support"},{"line_number":291,"context_line":"V2.1.microversions) will be in comparison a huge amount of work."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Also having a concrete implementation that developers can see,"},{"line_number":294,"context_line":"deployers and users can actually run against before we roll it out as"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_0086f5b8","line":291,"in_reply_to":"baada198_2ed311d6","updated":"2014-07-21 04:18:31.000000000","message":"Dan - if you what you\u0027re saying is that when something from v3 gets proposed to v2.1microversions and rejected then it should be removed from the underlying implementation then I totally agree and I don\u0027t think this spec says otherwise. The bit here is just trying to justify not spending a huge amount of time removing all the v3 features now just to spend more time re-proposing.\n\nThe priority is to get a v2.1 out and then we can start working on what v3 features we want to roll in (and when - as obviously big bang changes are not wanted) to v2.1 microversions in parallel with other backwards incompatible work such as the tasks api.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":288,"context_line":"the revert (after most likely losing a lot of knowledge about exactly"},{"line_number":289,"context_line":"why and changes to make) and as well have to add translation code"},{"line_number":290,"context_line":"anyway (as we need to support the older V2 API even when we support"},{"line_number":291,"context_line":"V2.1.microversions) will be in comparison a huge amount of work."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Also having a concrete implementation that developers can see,"},{"line_number":294,"context_line":"deployers and users can actually run against before we roll it out as"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_bae3c203","line":291,"in_reply_to":"baada198_2ed311d6","updated":"2014-07-19 23:09:28.000000000","message":"Sorry, I\u0027m not sure I understand the above comment.\n\nCan you clarify your feeling which conflict here?\nI guess you think we need to consider which changes of v3 should be exposed as microversions, and the above paragraph seems non-considering it, right?\n\n\"the first half of this paragraph\" means line277-284, right? sorry I\u0027m not native speaker and it is difficult to understand implication.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":365,"context_line":"- if X-OS-Compute-Version: latest (special keyword) return Max"},{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_0e41ed62","line":368,"updated":"2014-07-18 17:25:09.000000000","message":"This implies \"latest\" too, right?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":365,"context_line":"- if X-OS-Compute-Version: latest (special keyword) return Max"},{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_da187678","line":368,"in_reply_to":"baada198_0e41ed62","updated":"2014-07-19 23:09:28.000000000","message":"I think it is right.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_8e7dfdb4","line":370,"updated":"2014-07-18 17:25:09.000000000","message":"Just to be clear: we\u0027re saying only one vendor namespace at a time, right? I kinda think the vendor stuff is evil anyway, but you could have a product for one vendor running as a service from another vendor. Maybe that just means the service vendor wins and inherits the product\u0027s stuff into it\u0027s namespace.\n\nAnyway, just want to call it out here to make sure we\u0027re on the same page.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"},{"line_number":373,"context_line":"installation will return vanilla OpenStack responses at v2. The user"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_3a525213","line":370,"in_reply_to":"baada198_8e7dfdb4","updated":"2014-07-19 23:09:28.000000000","message":"I also think only one vendor namespace at a time, and that was a discussion at PS15. However I\u0027m not sure we need to make the check strict  technically for blocking multiple vendors here.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":374,"context_line":"or SDK will have to ask for something different."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are less unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_6e5b4954","line":377,"updated":"2014-07-18 17:25:09.000000000","message":"s/less/fewer/ :)","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":374,"context_line":"or SDK will have to ask for something different."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are less unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_7a584a31","line":377,"in_reply_to":"baada198_6e5b4954","updated":"2014-07-19 23:09:28.000000000","message":"Done","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":383,"context_line":"The initial implementation of v2.1 would only handle routing of"},{"line_number":384,"context_line":"behaviour between v2.1 and v3 as described in the initial"},{"line_number":385,"context_line":"section. This is to prioritize implementation and verification of the"},{"line_number":386,"context_line":"correctness of v2.1 in Juno."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"With the first microversion release, which may be a simple backwards"},{"line_number":389,"context_line":"compatible change the infrastructure which allows switching between"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_2e3dd1dd","line":386,"updated":"2014-07-18 17:25:09.000000000","message":"Just to be clear, the implementation won\u0027t have any version handling, but we _will_ be exposing a min and max version of 2.1.0 and 2.1.0 respectively, right? ...and we\u0027ll fail if someone requests v.2.1.1 with 406 (or whatever)?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0dbca07498a1b119c0ce97b736183f14bb45f843","unresolved":false,"context_lines":[{"line_number":383,"context_line":"The initial implementation of v2.1 would only handle routing of"},{"line_number":384,"context_line":"behaviour between v2.1 and v3 as described in the initial"},{"line_number":385,"context_line":"section. This is to prioritize implementation and verification of the"},{"line_number":386,"context_line":"correctness of v2.1 in Juno."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"With the first microversion release, which may be a simple backwards"},{"line_number":389,"context_line":"compatible change the infrastructure which allows switching between"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_5aef061d","line":386,"in_reply_to":"baada198_2e3dd1dd","updated":"2014-07-19 23:09:28.000000000","message":"That is a nice point, I think nova should return a failure response if someone requests out of range of the supported microversions.\nOn multiple OpenStack vendors environment, each OpenStacks will support different microversions and they will need to notify their own supported version and  deny a request if it is over.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa4e45389dd870e59569dec169a16f787ec75781","unresolved":false,"context_lines":[{"line_number":391,"context_line":"multiple microversions as well as v2.1, rather than just two"},{"line_number":392,"context_line":"alternatives. However the implementation will strongly follow the"},{"line_number":393,"context_line":"original criteria of an implementation such that"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_096ba7b9","line":394,"updated":"2014-07-18 17:25:09.000000000","message":"Aren\u0027t the two versions currently \"switched\" just by the top-level URL being requested? I don\u0027t really understand what about the existing code will be changed after our first release with v2.1. It seems like we need to have all the logic in place that the *client* will see in our first release with v2.1, even if we don\u0027t have plumbing in place to support more than one version internally. Maybe this is what you mean and I\u0027m just confused?","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"32af46fe9816a2da9a809277066a6a5fa05d4118","unresolved":false,"context_lines":[{"line_number":391,"context_line":"multiple microversions as well as v2.1, rather than just two"},{"line_number":392,"context_line":"alternatives. However the implementation will strongly follow the"},{"line_number":393,"context_line":"original criteria of an implementation such that"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"}],"source_content_type":"text/x-rst","patch_set":17,"id":"baada198_6063311a","line":394,"in_reply_to":"baada198_096ba7b9","updated":"2014-07-21 04:18:31.000000000","message":"With the first release of v2.1 as its meant to look exactly like v2, client side there\u0027s not much required at all. eg no client header is meant to return v2/v2.1 behaviour anyway.  eg the first release of v2.1 is purely about v3 versus v2.1 behaviour.\n\nOf course we will need more infrastructure in place when we have our first v2.1microversions release - because then we need to start interpreting the accept header and switching to the appropriate microversion behaviour for each plugin based on that.","commit_id":"df7b206a2912d30aa9a90fad37d2124c1f3e48fe"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  applied on case-by-case basis to v2.1microversions by removing any"},{"line_number":122,"context_line":"  v2.1 translation when the microversion client accept header is"},{"line_number":123,"context_line":"  appropriate. If the decision is made on specific cases of a v3"},{"line_number":124,"context_line":"  feature, it can be removed."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"In order to fully explore what is necessary and possible a POC is"},{"line_number":127,"context_line":"under development and for clarity patches have been referenced below"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_2b7daee7","line":124,"updated":"2014-07-25 12:29:47.000000000","message":"Can we be clearer and say that the v3 version will no longer be accessible to clients, if thats what we really want to do.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  applied on case-by-case basis to v2.1microversions by removing any"},{"line_number":122,"context_line":"  v2.1 translation when the microversion client accept header is"},{"line_number":123,"context_line":"  appropriate. If the decision is made on specific cases of a v3"},{"line_number":124,"context_line":"  feature, it can be removed."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"In order to fully explore what is necessary and possible a POC is"},{"line_number":127,"context_line":"under development and for clarity patches have been referenced below"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_a84d1974","line":124,"in_reply_to":"baada198_2b7daee7","updated":"2014-07-28 02:00:18.000000000","message":"the only reason for keeping it accessible is to continue to be able to regression test. We can make it very clear that no one should be using it though. Eventually it will shrink to the point where it just disappears.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d3f4b81c6ecfbba9502a5f74611b7e1f9b560285","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  applied on case-by-case basis to v2.1microversions by removing any"},{"line_number":122,"context_line":"  v2.1 translation when the microversion client accept header is"},{"line_number":123,"context_line":"  appropriate. If the decision is made on specific cases of a v3"},{"line_number":124,"context_line":"  feature, it can be removed."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"In order to fully explore what is necessary and possible a POC is"},{"line_number":127,"context_line":"under development and for clarity patches have been referenced below"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_b6ec962a","line":124,"in_reply_to":"baada198_a84d1974","updated":"2014-07-28 04:06:30.000000000","message":"@Chris\n\nThe endpoint of v2.1 and v2.1microversions will be /v2.1 at the end of Juno.\nand we cannot v3 consistent interfaces through /v2.1 at the time.\nright?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"2cf79d4d1372406973f47de96e76198de16154c0","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  applied on case-by-case basis to v2.1microversions by removing any"},{"line_number":122,"context_line":"  v2.1 translation when the microversion client accept header is"},{"line_number":123,"context_line":"  appropriate. If the decision is made on specific cases of a v3"},{"line_number":124,"context_line":"  feature, it can be removed."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"In order to fully explore what is necessary and possible a POC is"},{"line_number":127,"context_line":"under development and for clarity patches have been referenced below"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_96eeb289","line":124,"in_reply_to":"baada198_b6ec962a","updated":"2014-07-28 04:49:04.000000000","message":"yep that\u0027s correct. Can only get v2.1 through the /v2.1 interface.\n\nI was thinking we could leave the /v3 api paste config simply so we can continue to regression test though (which as it is now is disabled by default so no one except testing systems are running it).","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"to specific code examples."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":131,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* An APIRouterV21 class which inherits from APIRouterV3 which can"},{"line_number":134,"context_line":"  be used by the api paste configuration."}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_0f9ad661","line":131,"updated":"2014-07-25 11:19:16.000000000","message":"I wonder if we should just use the root resource path and drop the version number now it doesn\u0027t mean so much?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":128,"context_line":"to specific code examples."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":131,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* An APIRouterV21 class which inherits from APIRouterV3 which can"},{"line_number":134,"context_line":"  be used by the api paste configuration."}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_e8539113","line":131,"in_reply_to":"baada198_0f9ad661","updated":"2014-07-28 02:00:18.000000000","message":"Doing this is definitely what I\u0027d like to see in the long term. But for the short term (pre microversions) I think it just complicates matters. And need to think about some keystone interaction here too.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"to specific code examples."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":131,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* An APIRouterV21 class which inherits from APIRouterV3 which can"},{"line_number":134,"context_line":"  be used by the api paste configuration."}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_2b168ea7","line":131,"in_reply_to":"baada198_0f9ad661","updated":"2014-07-25 12:29:47.000000000","message":"I am not blocking on this, we can change this later.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":128,"context_line":"to specific code examples."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"The following API infrastructure changes are required in order for the"},{"line_number":131,"context_line":"V3 API codebase to be exported under a /v2 or /v2.1 resource path:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* An APIRouterV21 class which inherits from APIRouterV3 which can"},{"line_number":134,"context_line":"  be used by the api paste configuration."}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_ae3aac31","line":131,"in_reply_to":"baada198_0f9ad661","updated":"2014-07-25 13:17:38.000000000","message":"that seems one idea but it is difficult to decide it now because the main purpose of this v2.1 spec is just for providing v2 compatible API and it is better that this idea is out of scope now.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":252,"context_line":"some careful consideration of any security implications this would"},{"line_number":253,"context_line":"have. However this mode may be of interest to cloud providers so they"},{"line_number":254,"context_line":"can attempt to measure which users or apps are making invalid V2 API"},{"line_number":255,"context_line":"requests."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A major design goal of the implementation is to cleanly separate V2"},{"line_number":258,"context_line":"specific functionality from the V3 code whilst at the same time"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_d3f4ead0","line":255,"updated":"2014-07-25 11:19:16.000000000","message":"Nit / idea:\n\nI wonder if we can just ignore extra params, and log those violations, but still validate the \"expected\" params, and use that as a straight replacement for v2, right away, with v2.1 rejecting the \"unexpected\" params.\n\nThis would let us drop the v2 code sooner, but lets discuss this later.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":252,"context_line":"some careful consideration of any security implications this would"},{"line_number":253,"context_line":"have. However this mode may be of interest to cloud providers so they"},{"line_number":254,"context_line":"can attempt to measure which users or apps are making invalid V2 API"},{"line_number":255,"context_line":"requests."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A major design goal of the implementation is to cleanly separate V2"},{"line_number":258,"context_line":"specific functionality from the V3 code whilst at the same time"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_4b074270","line":255,"in_reply_to":"baada198_d3f4ead0","updated":"2014-07-25 12:29:47.000000000","message":"I am not blocking on this, we can change this later.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":252,"context_line":"some careful consideration of any security implications this would"},{"line_number":253,"context_line":"have. However this mode may be of interest to cloud providers so they"},{"line_number":254,"context_line":"can attempt to measure which users or apps are making invalid V2 API"},{"line_number":255,"context_line":"requests."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A major design goal of the implementation is to cleanly separate V2"},{"line_number":258,"context_line":"specific functionality from the V3 code whilst at the same time"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_212f8df7","line":255,"in_reply_to":"baada198_d3f4ead0","updated":"2014-07-25 13:17:38.000000000","message":"This seems a reasonable idea. Ideally, it is good to have an option for switching ENABLE/DISABLE of unexpected params validation.\nIt is not so difficult, it just searches \"additionalProperties\": False in each schema and replaces s/False/True based on the option.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":272,"context_line":"version of the API. Earlier versions are implemented using translation"},{"line_number":273,"context_line":"techniques which where as much as is possible leave the underlying"},{"line_number":274,"context_line":"code as simple as possible without a complicated trail of logic"},{"line_number":275,"context_line":"dependent on what version is being supported."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":278,"context_line":"API will never be supported, the underlying implementation will be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_73af9e9d","line":275,"updated":"2014-07-25 11:19:16.000000000","message":"What do we do with the version numbers if we want to add a new extra value into the request or response?\n\nDo we now force the new params to be v3.1, so the client will need to request the newer version to get v3.1, or do we add v2.2 and v3.1?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":272,"context_line":"version of the API. Earlier versions are implemented using translation"},{"line_number":273,"context_line":"techniques which where as much as is possible leave the underlying"},{"line_number":274,"context_line":"code as simple as possible without a complicated trail of logic"},{"line_number":275,"context_line":"dependent on what version is being supported."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":278,"context_line":"API will never be supported, the underlying implementation will be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_087c4570","line":275,"in_reply_to":"baada198_4e9af013","updated":"2014-07-28 02:00:18.000000000","message":"Kenichi - I think John is just talking about v3 in terms of an ordinary major version bump, not the \"v3 API\". Otherwise I agree with what you say :)","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":272,"context_line":"version of the API. Earlier versions are implemented using translation"},{"line_number":273,"context_line":"techniques which where as much as is possible leave the underlying"},{"line_number":274,"context_line":"code as simple as possible without a complicated trail of logic"},{"line_number":275,"context_line":"dependent on what version is being supported."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"Where a decision is made that a feature originally targeted for the V3"},{"line_number":278,"context_line":"API will never be supported, the underlying implementation will be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_4e9af013","line":275,"in_reply_to":"baada198_73af9e9d","updated":"2014-07-25 13:17:38.000000000","message":"Basically v3 is never exposed as v3, that is a consensus of Atlanta summit.\n\nThe addition of a new extra value into the request/response does not cause backwards incompatibility. So if the latest microversion is v2.1 at the time, the next microversion will be v2.2 based on line314 rule.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_3378c6f7","line":369,"updated":"2014-07-25 11:19:16.000000000","message":"I think we should drop this, can just make vendors add \"experimental\" to any out of tree things they create.\n\nBut we can leave this if people think we need it.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_4891dd98","line":369,"in_reply_to":"baada198_19f4b985","updated":"2014-07-28 02:00:18.000000000","message":"my preference would be to keep the vendor namespace mainly for the reason that Dan mentions. But I\u0027m not that fussed either way, though its probably easier to add a vendor namespace later than remove it.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_eb6e562b","line":369,"in_reply_to":"baada198_3378c6f7","updated":"2014-07-25 12:29:47.000000000","message":"I am not blocking on this.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_ee7824c3","line":369,"in_reply_to":"baada198_3378c6f7","updated":"2014-07-25 13:17:38.000000000","message":"To be honest, I don\u0027t have a strong opinion about this.\nI can see both ideas.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"84ece0ee56ff6e30064ec7d4740b72e0fe612685","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  Version response."},{"line_number":367,"context_line":"- if experimental is sent, return results with *all* experimental"},{"line_number":368,"context_line":"  extensions enabled."},{"line_number":369,"context_line":"- if vendor:VENDORNAMESPACE is sent, return results that include that"},{"line_number":370,"context_line":"  out of tree vendor extensions."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"This means out of the box, with an old client, an OpenStack"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_19f4b985","line":369,"in_reply_to":"baada198_ee7824c3","updated":"2014-07-25 16:08:44.000000000","message":"I think Sean had the first thought about the vendor namespace, so maybe we should get some feedback in here from him. In general, I want to discourage vendor API changes, so I\u0027m kinda okay with making them all experimental, but I can also see that potentially causing a dilution of what experimental means, if a client is always seeing a vast difference in the experimental API from a set of vendors. Potentially having them separate allows a client to say \"give me everything you\u0027ve got from openstack, but none of that $VENDOR stuff\" and be fairly consistent across vendors that are roughly at the same spot in the git tree, right?\n\nAgain, I\u0027m not sure if it\u0027s better to strive for keeping them separate or not.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_b3005636","line":378,"updated":"2014-07-25 11:19:16.000000000","message":"Can we clarify v2, I guess it would be something like:\n\nX-OS-Compute-Version: 3.164, experimental","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d3f4b81c6ecfbba9502a5f74611b7e1f9b560285","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_eb40eb60","line":378,"in_reply_to":"baada198_0858c5f7","updated":"2014-07-28 04:06:30.000000000","message":"@Chris\n\nFor the first Dan\u0027s question: In Juno(meaning this spec scope), I think we cannot get v3\u0027s features(consistent interfaces) even if requesting /v2.1 with +experimental, right?\n\nI think we cannot work on the microversion support in parallel through Juno due to the schedule and the human resource. and we need to concentrate V2/V2.1 equivalence in Juno.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"84ece0ee56ff6e30064ec7d4740b72e0fe612685","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_592711c7","line":378,"in_reply_to":"baada198_41c5618e","updated":"2014-07-25 16:08:44.000000000","message":"Just to be clear, if I request /v2.1 with +experimental, I do *not* get what is currently v3, right?\n\nI think what I see above is that we\u0027re going to expose /v2.1 as version 2.1.0 for quite a while as we get it to *actually* match v2\u0027s functionality completely, and then start incrementing the counter once we add anything to it that is not in v2, is that right?\n\nIs the expectation that we\u0027ll be able to have a fully-functional v2.1 by Juno such that we can start the counter on release day? That seems ambitious at this point, but this spec seems to imply it. Presumably as soon as we do that, we also have to completely freeze v2 and not add *anything* to it, right?\n\nAlso, if we don\u0027t have the *actual* version handling infrastructure done by the time we start the counter, we\u0027ve got to freeze both v2 and v2.1 for any changes so that they don\u0027t diverge in a way we can\u0027t express, right? That\u0027s what has me concerned about previous discussions that said we\u0027re going to focus on v2.1 parity with v2 and then work out the version infrastructure (in the actual code) later. Am I right about that, and does that not concern anyone else?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_0858c5f7","line":378,"in_reply_to":"baada198_592711c7","updated":"2014-07-28 02:00:18.000000000","message":"Given how late we are in the cycle now I don\u0027t think we can really expect v2.1 to be fully functional (meaning well tested and checked by multiple cloud providers) by the end of Juno. What we can achieve in Juno with a spec approved in April is quite different from what we can do with about a third of the development time.\n\nSo the priority for Juno will be to get v2.1 working equivalent to v2 with no need for any client header request. Emphasis on ensuring that v2.1 really does behave exactly the same as v2. \n\nDuring Kilo we\u0027ll keep  v2 and v2.1 in sync until we have agreement from enough people that they are in fact equivalent. We won\u0027t need to freeze v2 or v2.1 - the unlikely fallback solution for v2.1 implementing v2 is just a copy of the method (very worst case) so there is no possibility that there is a divergence we can\u0027t express.\n\nHowever this doesn\u0027t mean we can\u0027t work on the microversion support in parallel both through Juno and right from the start of Kilo so its up an running early in the Kilo cycle. Its just that V2/V2.1 equivalence is the priority.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3c4992dc9c4de219fdb081bf5d4d9bf0eca5b862","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_1141cc38","line":378,"in_reply_to":"baada198_766e7e2d","updated":"2014-07-28 05:08:06.000000000","message":"@Chris\n\nThanks, I got your opinion about re: microversions.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_41c5618e","line":378,"in_reply_to":"baada198_b3005636","updated":"2014-07-25 13:17:38.000000000","message":"I think we can specify it, that enables consistent interfaces(with backwards incompatibilities from \"X\":2) and experimental extensions.\n\nIf specifying extension is experimental, we can change its interfaces without  considering backward compatibility. However, it seems useful if we can specify both because a client does not need to switch microversions in a header by checking each extension is experimental or not.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_ebf3b66a","line":378,"in_reply_to":"baada198_b3005636","updated":"2014-07-25 12:29:47.000000000","message":"Sorry, I mean clarify v3.\n\nIf we are no longer allowing v3 to be accessed by clients, thats fine. We should describe that somewhere.\n\nI am just not clear on what client will request at the end of Juno, do they request v2.1 or v2.23 because each addition to v2 will keep bumping the version number?\n\nSo what do clients request?\n\nX-OS-Compute-Version: 2.1, experimental\n\nor \n\nX-OS-Compute-Version: 2.33\n\nor something else?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"2cf79d4d1372406973f47de96e76198de16154c0","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Neither experimental nor vendor benefit from versioning. It\u0027s an all"},{"line_number":377,"context_line":"or nothing affair. There are fewer unique snowflakes in the world than"},{"line_number":378,"context_line":"people think, and we actually want these things in tree."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Microversion Nova Tree"},{"line_number":381,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_766e7e2d","line":378,"in_reply_to":"baada198_eb40eb60","updated":"2014-07-28 04:49:04.000000000","message":"Re: experimental - that\u0027s correct, asking for experimental will NOT get v3 features\n\nI agree re: microversions - in practice priority is to v2.1 correctness because of time/resources/review bandwidth - I doubt someone will want to spend the time on the microversions implementation in Juno (but we won\u0027t stop them). And there\u0027s that quiet time between juno being closed and Kilo opening.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71a08f5091f7be798acc3a6f23065e5ad3f347e1","unresolved":false,"context_lines":[{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"},{"line_number":398,"context_line":"  to understand (eg no maze of version switching code)."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_53f29a6f","line":398,"updated":"2014-07-25 11:19:16.000000000","message":"It seems like we need to support versioning the additions to v2.x and v3.x? Are you saying we are not doing that in this initial version of the code?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fb38c4f04586258e51f26f331ced5f70638a32db","unresolved":false,"context_lines":[{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"},{"line_number":398,"context_line":"  to understand (eg no maze of version switching code)."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_a80519c3","line":398,"in_reply_to":"baada198_2b676e26","updated":"2014-07-28 02:00:18.000000000","message":"we just fix v2.1 till we make the first relelase - where \"fix\" here means \"make it equivalent to v2 - v2.1 is not \"ready nor released\" until it works exactly the same as v2.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42c5cad81160b21fba8acf9752f543dde6a8f858","unresolved":false,"context_lines":[{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"},{"line_number":398,"context_line":"  to understand (eg no maze of version switching code)."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_8193f95a","line":398,"in_reply_to":"baada198_53f29a6f","updated":"2014-07-25 13:17:38.000000000","message":"Are you saying here we need to support both v2 and v3 at the first v2.1?\nIf so, I think we don\u0027t need to support v3 in v2.1 as I mentioned at line 275.","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11f8ba6393f742f618941e83185365708d4595fd","unresolved":false,"context_lines":[{"line_number":395,"context_line":"- we minimise maintenance overhead of having multiple API versions in"},{"line_number":396,"context_line":"  the codebase"},{"line_number":397,"context_line":"- ensure that the latest version of the API code is clean and easy"},{"line_number":398,"context_line":"  to understand (eg no maze of version switching code)."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"baada198_2b676e26","line":398,"in_reply_to":"baada198_53f29a6f","updated":"2014-07-25 12:29:47.000000000","message":"OK, I guess this is more about what I said above, how do we make additions for v2.1 as people want to change the API?\n\nDo we just fix v2.1 till we make the first release, or do we keep increasing the version as we make changes?","commit_id":"676a20f8393c5fd5e37dae9a3c04fb6b075dfe63"}]}
