)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0f0a3af143aec4d124147115c17cfdb4a7c1c78d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Cinder API v2 would be the default, and consumers of the API that wished to"},{"line_number":20,"context_line":"use a newer version could do so."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  Depends on Grenade Patch: https://review.openstack.org/#/c/264995/"},{"line_number":23,"context_line":"  Grenade fails due to changes in /etc/cinder/api-paste.ini"},{"line_number":24,"context_line":"   Fixing Grenade will require a Grendade patch and PTL approval."},{"line_number":25,"context_line":"  gate-cinder-pylint fails due to cinder/api/versions.py:112 (noqa does"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da6ed579_02affc81","line":22,"updated":"2016-01-13 14:10:51.000000000","message":"It should be:\nDepends-On: Ieff8f05c7abc453f89e802d5edb50aa0c32c51f5\nto pass CI","commit_id":"a4c6e26a998c0e7e16165c969234f198a9001a30"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"3e163885f2439bfea8b07ec74befe7c1c09e8d74","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"cinder-api-microversions code"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: Must add v3 endpoint for microversions"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Many changes to the Cinder REST API require changes to the consumers of the API."},{"line_number":12,"context_line":"For example, If we need to add a required parameter to a method that is called"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"3a57f1b5_e6189020","line":9,"updated":"2016-02-11 23:47:33.000000000","message":"Is this still WIP? whats left for the v3 endpoint?","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"4c1d9c8ec72a8486efac71669fca8d8e10415a7a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"cinder-api-microversions code"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: Must add v3 endpoint for microversions"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Many changes to the Cinder REST API require changes to the consumers of the API."},{"line_number":12,"context_line":"For example, If we need to add a required parameter to a method that is called"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"3a57f1b5_c5cd1f86","line":9,"in_reply_to":"3a57f1b5_e6189020","updated":"2016-02-12 18:17:17.000000000","message":"No, It\u0027s not WIP and v3 endpoint is ready. I\u0027ll remove next patch.","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"}],"cinder/api/__init__.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and will be removed in a \u0027"},{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_e8018105","line":31,"updated":"2015-12-10 16:12:30.000000000","message":"As decided at summit, we will not remove any existing API at all:(","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"28e8d2df9c38de7a2917e05337030225aa97162d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and will be removed in a \u0027"},{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_5bc3be57","line":31,"in_reply_to":"7a740942_e8018105","updated":"2015-12-10 17:14:55.000000000","message":"OK, I\u0027ll remove that part.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"},{"line_number":37,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_d1621fd8","line":35,"updated":"2015-12-10 23:06:46.000000000","message":"In the api-paste.ini file, we are still using \n/v2: openstack_volume_api_v2, but here we are saying V2 API is deprecated?  So we are still using V2 API but version is 2.1 and up with microversions?  Should probably specify it is V2.0 that will be deprecated and not 2.1.  Sounds confusing.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"},{"line_number":37,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_7f338214","line":35,"in_reply_to":"7a740942_d1621fd8","updated":"2015-12-14 13:20:51.000000000","message":"OK, I\u0027ll change this warning to V2.0 that is deprecated.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and will be removed in a \u0027"},{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_bf634241","line":33,"range":{"start_line":31,"start_character":25,"end_line":33,"end_character":73},"updated":"2016-02-08 01:30:22.000000000","message":"We joke about never being able to remove things... maybe we should just word this like it *might* be removed in a future release, and no new development is happening on it.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c50967a5f43f7500daa975e12e259e315de7102c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and will be removed in a \u0027"},{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_d2cff026","line":33,"range":{"start_line":31,"start_character":25,"end_line":33,"end_character":73},"in_reply_to":"5a5ae5dd_bf634241","updated":"2016-02-10 23:06:42.000000000","message":"While we may never actually remove it, this message is intended to be guidance to the operator, and that they should act as though the old version will be going away, so I like the more forceful language.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and will be removed in a \u0027"},{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_5d16a44c","line":33,"range":{"start_line":31,"start_character":25,"end_line":33,"end_character":73},"in_reply_to":"5a5ae5dd_bf634241","updated":"2016-02-08 22:10:31.000000000","message":"Yup, I\u0027ll reword it.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"},{"line_number":37,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_ff769a04","line":36,"range":{"start_line":35,"start_character":70,"end_line":36,"end_character":41},"updated":"2016-02-08 01:30:22.000000000","message":"s/the a/a/","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027future release. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v2_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and will be removed in the \u0027"},{"line_number":36,"context_line":"                        \u0027a future release. \u0027))"},{"line_number":37,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_3d172846","line":36,"range":{"start_line":35,"start_character":70,"end_line":36,"end_character":41},"in_reply_to":"5a5ae5dd_ff769a04","updated":"2016-02-08 22:10:31.000000000","message":"I\u0027ll fix.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e03ff3f28a2698fb881560d5852903fe42e4885d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and is not under active \u0027"},{"line_number":32,"context_line":"                        \u0027developement. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_38a3c601","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":37},"updated":"2016-02-17 22:27:16.000000000","message":"s/developement/development/","commit_id":"af255391861595520ab3a6788053f886f7bb4a9e"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"66a990751078a63a69c9c82c5a719c8361c9a33b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"def root_app_factory(loader, global_conf, **local_conf):"},{"line_number":30,"context_line":"    if CONF.enable_v1_api:"},{"line_number":31,"context_line":"        LOG.warning(_LW(\u0027The v1 api is deprecated and is not under active \u0027"},{"line_number":32,"context_line":"                        \u0027developement. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_53dcad72","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":37},"in_reply_to":"dae33548_38a3c601","updated":"2016-02-17 22:42:39.000000000","message":"Done","commit_id":"af255391861595520ab3a6788053f886f7bb4a9e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e03ff3f28a2698fb881560d5852903fe42e4885d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027developement. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_b8b7d638","line":36,"range":{"start_line":36,"start_character":25,"end_line":36,"end_character":37},"updated":"2016-02-17 22:27:16.000000000","message":"Same.","commit_id":"af255391861595520ab3a6788053f886f7bb4a9e"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"66a990751078a63a69c9c82c5a719c8361c9a33b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027developement. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_b3e53939","line":36,"range":{"start_line":36,"start_character":25,"end_line":36,"end_character":37},"in_reply_to":"dae33548_b8b7d638","updated":"2016-02-17 22:42:39.000000000","message":"Done","commit_id":"af255391861595520ab3a6788053f886f7bb4a9e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027development. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027development. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_37895127","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":76},"updated":"2016-02-22 19:13:15.000000000","message":"Is this really a good idea to have that warning? v2 will probably stay with us forever?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                        \u0027development. You should set enable_v1_api\u003dfalse \u0027"},{"line_number":33,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027development. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_760ab87a","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":76},"in_reply_to":"bae84128_37895127","updated":"2016-02-22 21:58:50.000000000","message":"Yes, according to a Tokyo cross-project discussion and, I believe, guidance from the TC, we cannot remove support for old API endpoints. Ever.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"5cf523715f816d1cb41d9747701b3992d72e0cde","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027development. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":35,"id":"bae84128_2f3403fa","line":37,"range":{"start_line":37,"start_character":29,"end_line":37,"end_character":42},"updated":"2016-02-24 07:58:51.000000000","message":"I\u0027m not sure we should be asking people to disable v2 right now, that will break just about everything. I think v2 is not going away, just frozen, and will be deployed by most people for significant amounts of the future","commit_id":"fa2ff14cef695fb6c4c96027de063afd0dddc5c9"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"63bd07dc40b918eaa7e92dc53376d505be272a1c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    if CONF.enable_v2_api:"},{"line_number":35,"context_line":"        LOG.warning(_LW(\u0027The v2 api is deprecated and is not under active \u0027"},{"line_number":36,"context_line":"                        \u0027development. You should set enable_v2_api\u003dfalse \u0027"},{"line_number":37,"context_line":"                        \u0027and enable_v3_api\u003dtrue in your cinder.conf file.\u0027))"},{"line_number":38,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":35,"id":"bae84128_d504ef15","line":37,"range":{"start_line":37,"start_character":29,"end_line":37,"end_character":42},"in_reply_to":"bae84128_2f3403fa","updated":"2016-02-24 13:51:32.000000000","message":"I\u0027ve removed this.","commit_id":"fa2ff14cef695fb6c4c96027de063afd0dddc5c9"}],"cinder/api/contrib/capabilities.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7ae7ba86f9c5f07079568a18b4bff40fb860f9a9","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    name \u003d \"Capabilities\""},{"line_number":52,"context_line":"    alias \u003d \"capabilities\""},{"line_number":53,"context_line":"    namespace \u003d \"http://docs.openstack.org/volume/ext/capabilities/api/v3\""},{"line_number":54,"context_line":"    updated \u003d \"2015-08-31T00:00:00+00:00\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_01fe8f36","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":74},"updated":"2016-02-22 18:04:45.000000000","message":"how do we know we need to change \"some\" of these namespaces and not others?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    name \u003d \"Capabilities\""},{"line_number":52,"context_line":"    alias \u003d \"capabilities\""},{"line_number":53,"context_line":"    namespace \u003d \"http://docs.openstack.org/volume/ext/capabilities/api/v3\""},{"line_number":54,"context_line":"    updated \u003d \"2015-08-31T00:00:00+00:00\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_a5124455","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":74},"in_reply_to":"bae84128_01fe8f36","updated":"2016-02-22 21:58:50.000000000","message":"Sorry, that was required when I was unit testing v3. Now that we are re-using /v2 code and tests, it is not necessary.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/api/openstack/api_version_request.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp."},{"line_number":2,"context_line":"# Copyright 2015 Clinton Knight"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_11de676d","line":2,"updated":"2015-12-10 23:06:46.000000000","message":"Are you not adding HPE here?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp."},{"line_number":2,"context_line":"# Copyright 2015 Clinton Knight"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_ff0e9239","line":2,"in_reply_to":"7a740942_11de676d","updated":"2015-12-14 13:20:51.000000000","message":"Good question. I\u0027ll double check whether I should add that. Thanks.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                raise exception.InvalidAPIVersionString(version\u003dversion_string)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __str__(self):"},{"line_number":98,"context_line":"        \"\"\"Debug/Logging representation of object.\"\"\""},{"line_number":99,"context_line":"        return (\"API Version Request Major: %(major)s, Minor: %(minor)s\""},{"line_number":100,"context_line":"                % {\u0027major\u0027: self._ver_major, \u0027minor\u0027: self._ver_minor})"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_346ef196","line":98,"updated":"2015-12-10 23:06:46.000000000","message":"I saw a unit test on this.  Probably should add a note here to say that this return message format should not be changed.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                raise exception.InvalidAPIVersionString(version\u003dversion_string)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __str__(self):"},{"line_number":98,"context_line":"        \"\"\"Debug/Logging representation of object.\"\"\""},{"line_number":99,"context_line":"        return (\"API Version Request Major: %(major)s, Minor: %(minor)s\""},{"line_number":100,"context_line":"                % {\u0027major\u0027: self._ver_major, \u0027minor\u0027: self._ver_minor})"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_9a043c15","line":98,"in_reply_to":"7a740942_346ef196","updated":"2015-12-14 13:20:51.000000000","message":"Will do.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"}],"cinder/api/openstack/versioned_method.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027name\u0027: self.name,"},{"line_number":41,"context_line":"            \u0027start\u0027: self.start_version,"},{"line_number":42,"context_line":"            \u0027end\u0027: self.end_version"},{"line_number":43,"context_line":"        }"},{"line_number":44,"context_line":"        return (\"Version Method %(name)s: min: %(start)s, max: %(end)s\" % args)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _cmpkey(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_54413d0a","line":43,"updated":"2015-12-10 23:06:46.000000000","message":"I saw a unit test on this.  Probably should add a note here to say the return message format should not be changed.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027name\u0027: self.name,"},{"line_number":41,"context_line":"            \u0027start\u0027: self.start_version,"},{"line_number":42,"context_line":"            \u0027end\u0027: self.end_version"},{"line_number":43,"context_line":"        }"},{"line_number":44,"context_line":"        return (\"Version Method %(name)s: min: %(start)s, max: %(end)s\" % args)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _cmpkey(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_1a112c52","line":43,"in_reply_to":"7a740942_54413d0a","updated":"2015-12-14 13:20:51.000000000","message":"Will do.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"}],"cinder/api/openstack/wsgi.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"},{"line_number":298,"context_line":"            # \u0027latest\u0027 is a special keyword which is equivalent to requesting"},{"line_number":299,"context_line":"            # the maximum version of the API supported"},{"line_number":300,"context_line":"            if hdr_string \u003d\u003d \u0027latest\u0027:"},{"line_number":301,"context_line":"                self.api_version_request \u003d api_version.max_api_version()"},{"line_number":302,"context_line":"            elif hdr_string \u003d\u003d api_version._LEGACY_API_VERSION:"},{"line_number":303,"context_line":"                self.api_version_request \u003d api_version.legacy_api_version()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_288b096a","line":300,"updated":"2015-12-10 16:12:30.000000000","message":"Should it be case insensitive?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"28e8d2df9c38de7a2917e05337030225aa97162d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"},{"line_number":298,"context_line":"            # \u0027latest\u0027 is a special keyword which is equivalent to requesting"},{"line_number":299,"context_line":"            # the maximum version of the API supported"},{"line_number":300,"context_line":"            if hdr_string \u003d\u003d \u0027latest\u0027:"},{"line_number":301,"context_line":"                self.api_version_request \u003d api_version.max_api_version()"},{"line_number":302,"context_line":"            elif hdr_string \u003d\u003d api_version._LEGACY_API_VERSION:"},{"line_number":303,"context_line":"                self.api_version_request \u003d api_version.legacy_api_version()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_fb870a10","line":300,"in_reply_to":"7a740942_288b096a","updated":"2015-12-10 17:14:55.000000000","message":"Probably. I\u0027ll fix.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def dispatch(self, *args, **kwargs):"},{"line_number":327,"context_line":"        \"\"\"Find and call local method.\"\"\""},{"line_number":328,"context_line":"        action \u003d kwargs.pop(\u0027action\u0027, \u0027default\u0027)"},{"line_number":329,"context_line":"        action_method \u003d getattr(self, six.text_type(action), self.default)"},{"line_number":330,"context_line":"        return action_method(*args, **kwargs)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def default(self, data):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_48dd356f","line":329,"updated":"2015-12-10 16:12:30.000000000","message":"Good catch!","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            return True"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        if isinstance(ex_value, exception.NotAuthorized):"},{"line_number":796,"context_line":"            msg \u003d six.text_type(ex_value)"},{"line_number":797,"context_line":"            raise Fault(webob.exc.HTTPForbidden(explanation\u003dmsg))"},{"line_number":798,"context_line":"        elif isinstance(ex_value, exception.VersionNotFoundForAPIMethod):"},{"line_number":799,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_31692326","line":796,"updated":"2015-12-10 23:06:46.000000000","message":"Can you move this before line 795 so msg can be reused?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            return True"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        if isinstance(ex_value, exception.NotAuthorized):"},{"line_number":796,"context_line":"            msg \u003d six.text_type(ex_value)"},{"line_number":797,"context_line":"            raise Fault(webob.exc.HTTPForbidden(explanation\u003dmsg))"},{"line_number":798,"context_line":"        elif isinstance(ex_value, exception.VersionNotFoundForAPIMethod):"},{"line_number":799,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_fa3c60c9","line":796,"in_reply_to":"7a740942_31692326","updated":"2015-12-14 13:20:51.000000000","message":"Yes.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"                except exception.VersionNotFoundForAPIMethod:"},{"line_number":1001,"context_line":"                    # If an attached extension (@wsgi.extends) for the"},{"line_number":1002,"context_line":"                    # method has no version match its not an error. We"},{"line_number":1003,"context_line":"                    # just don\u0027t run the extends code"},{"line_number":1004,"context_line":"                    continue"},{"line_number":1005,"context_line":"                except Fault as ex:"},{"line_number":1006,"context_line":"                    response \u003d ex"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_0803adb9","line":1003,"updated":"2015-12-10 16:12:30.000000000","message":"IMO, it will be useful to add some logging here","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"28e8d2df9c38de7a2917e05337030225aa97162d","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"                except exception.VersionNotFoundForAPIMethod:"},{"line_number":1001,"context_line":"                    # If an attached extension (@wsgi.extends) for the"},{"line_number":1002,"context_line":"                    # method has no version match its not an error. We"},{"line_number":1003,"context_line":"                    # just don\u0027t run the extends code"},{"line_number":1004,"context_line":"                    continue"},{"line_number":1005,"context_line":"                except Fault as ex:"},{"line_number":1006,"context_line":"                    response \u003d ex"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_5ba89e77","line":1003,"in_reply_to":"7a740942_0803adb9","updated":"2015-12-10 17:14:55.000000000","message":"ok, will do.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def set_api_version_request(self):"},{"line_number":288,"context_line":"        \"\"\"Set API version request based on the request header information."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        Microversions starts with /v3, so if a client sends a request for"},{"line_number":291,"context_line":"        version 1.0 or 2.0, then ignore the headers and request the legacy"},{"line_number":292,"context_line":"        API version."},{"line_number":293,"context_line":"        \"\"\""},{"line_number":294,"context_line":"        if API_VERSION_REQUEST_HEADER in self.headers:"},{"line_number":295,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_daa40cbb","line":292,"range":{"start_line":290,"start_character":8,"end_line":292,"end_character":20},"updated":"2016-02-08 01:30:22.000000000","message":"Does it make sense to just raise an exception earlier here if they request \u003c3.0 in the header?\n\nRight now in testing it looks like i can do a GET /v3/blah/volume api call and specify 1.0 in the headers and it still works, although it appears that its calling the v3 volume controller, which means we are ignoring the 1.0 request. That behavior seems inconsistent since we aren\u0027t giving what was requested (since we can\u0027t). Not sure if the issue is best fixed here, or in how we are determining if we have a method that matches that 1.0 version. Maybe we need to tag all of our v3 ones as starting in 3.0?","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def set_api_version_request(self):"},{"line_number":288,"context_line":"        \"\"\"Set API version request based on the request header information."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        Microversions starts with /v3, so if a client sends a request for"},{"line_number":291,"context_line":"        version 1.0 or 2.0, then ignore the headers and request the legacy"},{"line_number":292,"context_line":"        API version."},{"line_number":293,"context_line":"        \"\"\""},{"line_number":294,"context_line":"        if API_VERSION_REQUEST_HEADER in self.headers:"},{"line_number":295,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_c2ff1164","line":292,"range":{"start_line":290,"start_character":8,"end_line":292,"end_character":20},"in_reply_to":"5a5ae5dd_daa40cbb","updated":"2016-02-08 22:10:31.000000000","message":"I think you are right, asking for \u003c3.0 in the header does not make sense. The user should request /v1 or /v2 API endpoints if they want that, or /v3 with a microversion header if they expect the new behavior.\nI\u0027ll add a check and throw an exception for /v3 with \u003c3.0 microversion.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                        max_ver\u003dapi_version.max_api_version().get_string())"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        else:"},{"line_number":319,"context_line":"            self.api_version_request \u003d api_version.APIVersionRequest("},{"line_number":320,"context_line":"                api_version._MIN_API_VERSION)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"class ActionDispatcher(object):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_3fb4327e","line":320,"range":{"start_line":319,"start_character":12,"end_line":320,"end_character":45},"updated":"2016-02-08 01:30:22.000000000","message":"Looks like this can use the min_api_version() helper, right?\n\nIt also looks like we would set this to 3.0 for requests to like /v2 that (correctly) don\u0027t include a header. Doesn\u0027t look like it matters for how we handle the request, but in testing it looks like the v3.0 shows up on the response as a header for v2 or v1 requests. Maybe a bug here, or in how we build the response objects.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                        max_ver\u003dapi_version.max_api_version().get_string())"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        else:"},{"line_number":319,"context_line":"            self.api_version_request \u003d api_version.APIVersionRequest("},{"line_number":320,"context_line":"                api_version._MIN_API_VERSION)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"class ActionDispatcher(object):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_8287d9b3","line":320,"range":{"start_line":319,"start_character":12,"end_line":320,"end_character":45},"in_reply_to":"5a5ae5dd_3fb4327e","updated":"2016-02-08 22:10:31.000000000","message":"If the user sends a request to /v2, we could set the version to 3.0, which is identical, and that would be safe.\nBut it does seem like any request to /v1 or /v2 should have the appropriate version in the response. I\u0027ll figure out how to get that done.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":831,"context_line":"    Exceptions derived from webob.exc.HTTPException will be automatically"},{"line_number":832,"context_line":"    wrapped in Fault() to provide API friendly error responses."},{"line_number":833,"context_line":"    \"\"\""},{"line_number":834,"context_line":"    support_api_request_version \u003d True"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"    def __init__(self, controller, action_peek\u003dNone, **deserializers):"},{"line_number":837,"context_line":"        \"\"\"Initialize Resource."}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_3aa8c076","line":834,"updated":"2016-02-08 01:30:22.000000000","message":"Is this supposed to be enabled for all Resources? Seems like only the v3+ ones should have it.\n\nAs-is with testing if i put in a header like \"Openstack-Volume-Microversion: 3.2\" with a /v2 request I get an error back saying the max supported version is 3.0... I don\u0027t think we can do that since its technically an api change (if you squint at it just right).","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":831,"context_line":"    Exceptions derived from webob.exc.HTTPException will be automatically"},{"line_number":832,"context_line":"    wrapped in Fault() to provide API friendly error responses."},{"line_number":833,"context_line":"    \"\"\""},{"line_number":834,"context_line":"    support_api_request_version \u003d True"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"    def __init__(self, controller, action_peek\u003dNone, **deserializers):"},{"line_number":837,"context_line":"        \"\"\"Initialize Resource."}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_a239b5f3","line":834,"in_reply_to":"5a5ae5dd_3aa8c076","updated":"2016-02-08 22:10:31.000000000","message":"You\u0027re right. I\u0027ll fix that somehow.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0c384de9ea320539f4efa319bad547ddc8b916e5","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        if hasattr(response, \u0027headers\u0027):"},{"line_number":1152,"context_line":"            for hdr, val in response.headers.items():"},{"line_number":1153,"context_line":"                # Headers must be utf-8 strings"},{"line_number":1154,"context_line":"                response.headers[hdr] \u003d six.text_type(val)"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"            if not request.api_version_request.is_null():"},{"line_number":1157,"context_line":"                response.headers[API_VERSION_REQUEST_HEADER] \u003d ("}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_fcd27bff","line":1154,"updated":"2016-02-11 14:08:21.000000000","message":"It must be a sting in utf-8 encoding, not unicode type\nresponse.headers[hdr] \u003d six.text_type(val) \u003d\u003e response.headers[hdr] \u003d val.encode(\u0027utf-8\u0027)\n\nBecause of this, apache job failed","commit_id":"f065b68d734f6d143f9a839d3dde682acbe30f08"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"3e163885f2439bfea8b07ec74befe7c1c09e8d74","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Set API version request based on the request header information."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        Microversions starts with /v3, so if a client sends a request for"},{"line_number":291,"context_line":"        version 1.0 or 2.0, then ignore the headers and request the legacy"},{"line_number":292,"context_line":"        API version."},{"line_number":293,"context_line":"        \"\"\""},{"line_number":294,"context_line":"        if API_VERSION_REQUEST_HEADER in self.headers:"},{"line_number":295,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a57f1b5_e69170f2","line":292,"range":{"start_line":291,"start_character":28,"end_line":292,"end_character":20},"updated":"2016-02-11 23:47:33.000000000","message":"Probably should update this now that we throw an exception instead of just ignoring.","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"4c1d9c8ec72a8486efac71669fca8d8e10415a7a","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Set API version request based on the request header information."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        Microversions starts with /v3, so if a client sends a request for"},{"line_number":291,"context_line":"        version 1.0 or 2.0, then ignore the headers and request the legacy"},{"line_number":292,"context_line":"        API version."},{"line_number":293,"context_line":"        \"\"\""},{"line_number":294,"context_line":"        if API_VERSION_REQUEST_HEADER in self.headers:"},{"line_number":295,"context_line":"            hdr_string \u003d self.headers[API_VERSION_REQUEST_HEADER]"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a57f1b5_c2a74ebb","line":292,"range":{"start_line":291,"start_character":28,"end_line":292,"end_character":20},"in_reply_to":"3a57f1b5_e69170f2","updated":"2016-02-12 18:17:17.000000000","message":"yup, will do.","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"3e163885f2439bfea8b07ec74befe7c1c09e8d74","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        if hasattr(response, \u0027headers\u0027):"},{"line_number":1152,"context_line":"            for hdr, val in response.headers.items():"},{"line_number":1153,"context_line":"                # Headers must be utf-8 strings"},{"line_number":1154,"context_line":"                response.headers[hdr] \u003d val.encode(\u0027utf-8\u0027)"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"            if not request.api_version_request.is_null():"},{"line_number":1157,"context_line":"                response.headers[API_VERSION_REQUEST_HEADER] \u003d ("}],"source_content_type":"text/x-python","patch_set":26,"id":"3a57f1b5_0c02ad0b","line":1154,"updated":"2016-02-11 23:47:33.000000000","message":"looks like the py34 unit tests are blowing up on this since it thinks val is already a byte object.. I doesn\u0027t really understand the subtleties of python 2 vs 3 strings, but we may need a check before we do encode to avoid that kind of issue.","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"4c1d9c8ec72a8486efac71669fca8d8e10415a7a","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        if hasattr(response, \u0027headers\u0027):"},{"line_number":1152,"context_line":"            for hdr, val in response.headers.items():"},{"line_number":1153,"context_line":"                # Headers must be utf-8 strings"},{"line_number":1154,"context_line":"                response.headers[hdr] \u003d val.encode(\u0027utf-8\u0027)"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"            if not request.api_version_request.is_null():"},{"line_number":1157,"context_line":"                response.headers[API_VERSION_REQUEST_HEADER] \u003d ("}],"source_content_type":"text/x-python","patch_set":26,"id":"3a57f1b5_854407b7","line":1154,"in_reply_to":"3a57f1b5_0c02ad0b","updated":"2016-02-12 18:17:17.000000000","message":"Yeah, I was using \u0027six.text_type(val)\u0027 but that broke the Apache test (and nginx), so I switched and now it broke py34. \nI\u0027ve an ugly fix I\u0027m testing. I\u0027ll push it up if it works, regardless of it\u0027s homeliness.","commit_id":"f1ef29e510d3c09e912a28a67ba98b2699331743"}],"cinder/api/v1/router.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7ae7ba86f9c5f07079568a18b4bff40fb860f9a9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.resources[\u0027versions\u0027] \u003d versions.create_resource()"},{"line_number":44,"context_line":"        mapper.connect(\"versions\", \"/\","},{"line_number":45,"context_line":"                       controller\u003dself.resources[\u0027versions\u0027],"},{"line_number":46,"context_line":"                       action\u003d\u0027index\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        mapper.redirect(\"\", \"/\")"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_46642d21","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"updated":"2016-02-22 18:04:45.000000000","message":"isn\u0027t this a bug in the existing code then?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.resources[\u0027versions\u0027] \u003d versions.create_resource()"},{"line_number":44,"context_line":"        mapper.connect(\"versions\", \"/\","},{"line_number":45,"context_line":"                       controller\u003dself.resources[\u0027versions\u0027],"},{"line_number":46,"context_line":"                       action\u003d\u0027index\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        mapper.redirect(\"\", \"/\")"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_59e087fa","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"in_reply_to":"bae84128_46642d21","updated":"2016-02-22 21:58:50.000000000","message":"Well, index should be used for multiple resources, so when /v2 was added it probably \"should\" have been changed. But I\u0027m not sure if this has semantic meaning or is just a convention, i.e. show is for more details on a single resource, index is for multiple resources. But perhaps you can display whatever you want for either. Not sure.\n\nI don\u0027t think we\u0027ve seen any issues with it, and frankly I\u0027m not sure what subtleties there are between the 2 that might affect how we use it.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/api/v2/router.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7ae7ba86f9c5f07079568a18b4bff40fb860f9a9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.resources[\u0027versions\u0027] \u003d versions.create_resource()"},{"line_number":44,"context_line":"        mapper.connect(\"versions\", \"/\","},{"line_number":45,"context_line":"                       controller\u003dself.resources[\u0027versions\u0027],"},{"line_number":46,"context_line":"                       action\u003d\u0027index\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        mapper.redirect(\"\", \"/\")"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_86459571","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"updated":"2016-02-22 18:04:45.000000000","message":"same, if we wanted an index vs show is that a bug outside of this change?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.resources[\u0027versions\u0027] \u003d versions.create_resource()"},{"line_number":44,"context_line":"        mapper.connect(\"versions\", \"/\","},{"line_number":45,"context_line":"                       controller\u003dself.resources[\u0027versions\u0027],"},{"line_number":46,"context_line":"                       action\u003d\u0027index\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        mapper.redirect(\"\", \"/\")"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_a5408435","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"in_reply_to":"bae84128_86459571","updated":"2016-02-22 21:58:50.000000000","message":"please see other reply.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/api/v2/volumes.py":[{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"b1bca74b86d1ac1084432cf5766052e12e22dffd","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder import volume as cinder_volume"},{"line_number":35,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_b5920a9e","line":37,"updated":"2016-02-10 19:42:44.000000000","message":"query_volume_filters_opts is removed...but this is being used to find default allowed filter options for non admin user in below code snippet for \"cinder list\":\n\ndef _get_volume_filter_options(self):\n    \"\"\"Return volume search options allowed by non-admin.\"\"\"\n    return CONF.query_volume_filters","commit_id":"a261eec2caaa3116e7c65f31c34f8ded17013137"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"dc9d348ae4b192bed1f505cff8bfadb378121e03","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder import volume as cinder_volume"},{"line_number":35,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_5bc4125e","line":37,"in_reply_to":"3a57f1b5_a23087e9","updated":"2016-02-11 03:46:17.000000000","message":"Ok.","commit_id":"a261eec2caaa3116e7c65f31c34f8ded17013137"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fb2d214f1644f4cc86fd44b07ddfcf14cd348fdc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder import volume as cinder_volume"},{"line_number":35,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_a23087e9","line":37,"in_reply_to":"3a57f1b5_b5920a9e","updated":"2016-02-10 21:43:18.000000000","message":"It is not removed, just moved to here:\nhttps://review.openstack.org/#/c/224910/24/cinder/api/common.py","commit_id":"a261eec2caaa3116e7c65f31c34f8ded17013137"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7ae7ba86f9c5f07079568a18b4bff40fb860f9a9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027,"},{"line_number":42,"context_line":"                                                \u0027bootable\u0027],"},{"line_number":43,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":44,"context_line":"                                            \"non-admin user could use to \""},{"line_number":45,"context_line":"                                            \"query volumes. Default values \""},{"line_number":46,"context_line":"                                            \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":47,"context_line":"                                            \"\u0027metadata\u0027, \u0027availability_zone\u0027,\""},{"line_number":48,"context_line":"                                            \"\u0027bootable\u0027]\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"CONF.register_opt(query_volume_filters_opt)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_81f45ff2","side":"PARENT","line":48,"range":{"start_line":39,"start_character":0,"end_line":48,"end_character":58},"updated":"2016-02-22 18:04:45.000000000","message":"I\u0027m assuming moving this to common doesn\u0027t have any adverse impact on V1 support?","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027,"},{"line_number":42,"context_line":"                                                \u0027bootable\u0027],"},{"line_number":43,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":44,"context_line":"                                            \"non-admin user could use to \""},{"line_number":45,"context_line":"                                            \"query volumes. Default values \""},{"line_number":46,"context_line":"                                            \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":47,"context_line":"                                            \"\u0027metadata\u0027, \u0027availability_zone\u0027,\""},{"line_number":48,"context_line":"                                            \"\u0027bootable\u0027]\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"CONF.register_opt(query_volume_filters_opt)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_e4d612f0","side":"PARENT","line":48,"range":{"start_line":39,"start_character":0,"end_line":48,"end_character":58},"in_reply_to":"bae84128_379671f0","updated":"2016-02-22 21:58:50.000000000","message":"Right, it was added in /v2 with this commit:\n1d122d8152ac317ef976da6d446e8dd76a84adcd","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027,"},{"line_number":42,"context_line":"                                                \u0027bootable\u0027],"},{"line_number":43,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":44,"context_line":"                                            \"non-admin user could use to \""},{"line_number":45,"context_line":"                                            \"query volumes. Default values \""},{"line_number":46,"context_line":"                                            \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":47,"context_line":"                                            \"\u0027metadata\u0027, \u0027availability_zone\u0027,\""},{"line_number":48,"context_line":"                                            \"\u0027bootable\u0027]\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"CONF.register_opt(query_volume_filters_opt)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_379671f0","side":"PARENT","line":48,"range":{"start_line":39,"start_character":0,"end_line":48,"end_character":58},"in_reply_to":"bae84128_81f45ff2","updated":"2016-02-22 19:13:15.000000000","message":"I don\u0027t think this was ever present in V1.","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import volume_types"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027,"},{"line_number":42,"context_line":"                                                \u0027bootable\u0027],"},{"line_number":43,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":44,"context_line":"                                            \"non-admin user could use to \""},{"line_number":45,"context_line":"                                            \"query volumes. Default values \""},{"line_number":46,"context_line":"                                            \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":47,"context_line":"                                            \"\u0027metadata\u0027, \u0027availability_zone\u0027,\""},{"line_number":48,"context_line":"                                            \"\u0027bootable\u0027]\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"CONF.register_opt(query_volume_filters_opt)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_4406de86","side":"PARENT","line":48,"range":{"start_line":39,"start_character":0,"end_line":48,"end_character":58},"in_reply_to":"bae84128_81f45ff2","updated":"2016-02-22 21:58:50.000000000","message":"None that I\u0027ve found. I\u0027m able to filter in /v1 as expected.","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"}],"cinder/api/v3/router.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7892b1bf294ae6077a242c976484aa5633fb3114","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder.api import extensions"},{"line_number":25,"context_line":"import cinder.api.openstack"},{"line_number":26,"context_line":"from cinder.api.v3 import limits"},{"line_number":27,"context_line":"from cinder.api.v3 import snapshot_metadata"},{"line_number":28,"context_line":"from cinder.api.v3 import snapshots"},{"line_number":29,"context_line":"from cinder.api.v3 import types"},{"line_number":30,"context_line":"from cinder.api.v3 import volume_metadata"},{"line_number":31,"context_line":"from cinder.api.v3 import volumes"},{"line_number":32,"context_line":"from cinder.api import versions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_9a59b490","line":31,"range":{"start_line":26,"start_character":0,"end_line":31,"end_character":33},"updated":"2016-02-08 01:30:22.000000000","message":"We might be able to save a bunch of code duplication (not sure yet how bad the side effects are though).\n\nPlaying around with this if you change these imports to just import the v2 ones it seems like everything still works, but the /v3 urls are routed to the v2 api implementations. If we do that it saves from having all of these modules and their tests duplicated in the v3 directory. We could then just build new v3.1+ micro-versioned implementations off of those ones.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"fed28bfc690488a2afefc802b374ab96ae74544f","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder.api import extensions"},{"line_number":25,"context_line":"import cinder.api.openstack"},{"line_number":26,"context_line":"from cinder.api.v3 import limits"},{"line_number":27,"context_line":"from cinder.api.v3 import snapshot_metadata"},{"line_number":28,"context_line":"from cinder.api.v3 import snapshots"},{"line_number":29,"context_line":"from cinder.api.v3 import types"},{"line_number":30,"context_line":"from cinder.api.v3 import volume_metadata"},{"line_number":31,"context_line":"from cinder.api.v3 import volumes"},{"line_number":32,"context_line":"from cinder.api import versions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_42c24154","line":31,"range":{"start_line":26,"start_character":0,"end_line":31,"end_character":33},"in_reply_to":"5a5ae5dd_9a59b490","updated":"2016-02-08 22:10:31.000000000","message":"I think you are right. It looks like that\u0027s what Manila did when they added a /v2 endpoint (their first new endpoint, with microversions as the only original change).\nI\u0027m confirming with cknight and then waiting for some bugfixes to pass Jenkins, then I\u0027ll try this.","commit_id":"efa335265a966d7be3b40e23264290702966ddef"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4b62769f5e62abdd8dd72252ba40f5b6d49f33f4","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027],"},{"line_number":42,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":43,"context_line":"                                            \"non-admin user could use to \""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_80a97592","line":40,"updated":"2016-02-05 14:30:01.000000000","message":"The same param is regitered in cinder/api/v2/volumes.py too: query_volume_filters http://logs.openstack.org/10/224910/18/check/gate-tempest-dsvm-full/2cf9501/logs/screen-c-api.txt.gz?level\u003dTRACE#_2016-02-05_02_04_16_052","commit_id":"61c0d8e6471cbebd8af8e7bf88217b336835c794"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"f3f20f3a45c00339d384c019e632340aa0f13c06","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"query_volume_filters_opt \u003d cfg.ListOpt(\u0027query_volume_filters\u0027,"},{"line_number":40,"context_line":"                                       default\u003d[\u0027name\u0027, \u0027status\u0027, \u0027metadata\u0027,"},{"line_number":41,"context_line":"                                                \u0027availability_zone\u0027],"},{"line_number":42,"context_line":"                                       help\u003d\"Volume filter options which \""},{"line_number":43,"context_line":"                                            \"non-admin user could use to \""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_9b2328a7","line":40,"in_reply_to":"5a5ae5dd_80a97592","updated":"2016-02-05 14:43:13.000000000","message":"Thanks. I\u0027m going to push this fix:\ndiff --git a/cinder/opts.py b/cinder/opts.py\nindex 393422a..9026955 100644\n--- a/cinder/opts.py\n+++ b/cinder/opts.py\n@@ -17,7 +17,6 @@ import itertools\n from cinder.api import common as cinder_api_common\n from cinder.api.middleware import auth as cinder_api_middleware_auth\n from cinder.api.middleware import sizelimit as cinder_api_middleware_sizelimit\n-from cinder.api.v2 import volumes as cinder_api_v2_volumes\n from cinder.api.v3 import volumes as cinder_api_v3_volumes\n from cinder.api.views import versions as cinder_api_views_versions\n from cinder.backup import chunkeddriver as cinder_backup_chunkeddriver\n@@ -330,7 +329,6 @@ def list_opts():\n                 cinder_volume_drivers_hpe_hpe3parcommon.hpe3par_opts,\n                 cinder_volume_drivers_datera.d_opts,\n                 cinder_volume_drivers_blockdevice.volume_opts,\n-                [cinder_api_v2_volumes.query_volume_filters_opt],\n                 cinder_volume_drivers_quobyte.volume_opts,","commit_id":"61c0d8e6471cbebd8af8e7bf88217b336835c794"}],"cinder/api/versions.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        super(VersionsController, self).__init__(None)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(\u00271.0\u0027)"},{"line_number":103,"context_line":"    def index(self, req):"},{"line_number":104,"context_line":"        \"\"\"Return versions supported prior to the microversions epoch.\"\"\""},{"line_number":105,"context_line":"        builder \u003d views_versions.get_view_builder(req)"},{"line_number":106,"context_line":"        known_versions \u003d copy.deepcopy(_KNOWN_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_68d6f1c4","line":103,"updated":"2015-12-10 16:12:30.000000000","message":"Getting 3 index methods does\u0027t make code more readable. But I understand why it\u0027s done in such way now and won\u0027t block patch for it.\n\nCan we add TODO note about it?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6b6f4342d6f42e5cd16ab786e05224f45b8daece","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        super(VersionsController, self).__init__(None)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(\u00271.0\u0027)"},{"line_number":103,"context_line":"    def index(self, req):"},{"line_number":104,"context_line":"        \"\"\"Return versions supported prior to the microversions epoch.\"\"\""},{"line_number":105,"context_line":"        builder \u003d views_versions.get_view_builder(req)"},{"line_number":106,"context_line":"        known_versions \u003d copy.deepcopy(_KNOWN_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_8d0fa187","line":103,"in_reply_to":"7a740942_1b4d3699","updated":"2015-12-10 19:47:13.000000000","message":"\"Unfortunately, the use of microversions will probably lead to a lot of code like this...  don\u0027t know that this could ever be removed since we have to support these versions forever.\"\nThanks for the answer. Let leave it as is for now","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"28e8d2df9c38de7a2917e05337030225aa97162d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        super(VersionsController, self).__init__(None)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(\u00271.0\u0027)"},{"line_number":103,"context_line":"    def index(self, req):"},{"line_number":104,"context_line":"        \"\"\"Return versions supported prior to the microversions epoch.\"\"\""},{"line_number":105,"context_line":"        builder \u003d views_versions.get_view_builder(req)"},{"line_number":106,"context_line":"        known_versions \u003d copy.deepcopy(_KNOWN_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_1b4d3699","line":103,"in_reply_to":"7a740942_68d6f1c4","updated":"2015-12-10 17:14:55.000000000","message":"I might be able to pull out a helper function for the lines that are different. I\u0027ll experiment with that.\nUnfortunately, the use of microversions will probably lead to a lot of code like this.\nI\u0027m not sure what to put in a TODO comment? I don\u0027t know that this could ever be removed since we have to support these versions forever.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2798430db17cc86d36ed2ecb225a1c431040b116","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return builder.build_versions(known_versions)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027)  # noqa"},{"line_number":112,"context_line":"    def index(self, req):"},{"line_number":113,"context_line":"        \"\"\"Return versions supported prior to the microversions epoch.\"\"\""},{"line_number":114,"context_line":"        builder \u003d views_versions.get_view_builder(req)"},{"line_number":115,"context_line":"        known_versions \u003d copy.deepcopy(_KNOWN_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_07d517b8","line":112,"updated":"2016-01-26 16:08:10.000000000","message":"You need a pylint disable here too like for the 2.1 method below, this is currently failing the pylint gate.","commit_id":"fc8c7b36c800d44dacf05a3d5a0d881d49677b40"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"status\": \"SUPPORTED\","},{"line_number":66,"context_line":"        \"version\": \"\","},{"line_number":67,"context_line":"        \"min_version\": \"\","},{"line_number":68,"context_line":"        \"updated\": \"2014-06-28T12:20:21Z\","},{"line_number":69,"context_line":"        \"links\": _LINKS,"},{"line_number":70,"context_line":"        \"media-types\": _MEDIA_TYPES,"},{"line_number":71,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_374b1189","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":42},"updated":"2016-02-22 19:13:15.000000000","message":"Oh, we\u0027re supposed to keep this up to date?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"485dda6973962c5940aca395c3b276cd85d98f99","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"status\": \"SUPPORTED\","},{"line_number":66,"context_line":"        \"version\": \"\","},{"line_number":67,"context_line":"        \"min_version\": \"\","},{"line_number":68,"context_line":"        \"updated\": \"2014-06-28T12:20:21Z\","},{"line_number":69,"context_line":"        \"links\": _LINKS,"},{"line_number":70,"context_line":"        \"media-types\": _MEDIA_TYPES,"},{"line_number":71,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_f8405c36","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":42},"in_reply_to":"bae84128_24191ad8","updated":"2016-02-23 09:56:24.000000000","message":"Yeah, a little. Sorry for the confusion, I probably shouldn\u0027t include random thoughts in review. ;)","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"status\": \"SUPPORTED\","},{"line_number":66,"context_line":"        \"version\": \"\","},{"line_number":67,"context_line":"        \"min_version\": \"\","},{"line_number":68,"context_line":"        \"updated\": \"2014-06-28T12:20:21Z\","},{"line_number":69,"context_line":"        \"links\": _LINKS,"},{"line_number":70,"context_line":"        \"media-types\": _MEDIA_TYPES,"},{"line_number":71,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_24191ad8","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":42},"in_reply_to":"bae84128_374b1189","updated":"2016-02-22 21:58:50.000000000","message":"Is that sarcasm? :)","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/common/config.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":102,"context_line":"               default\u003d\u0027cinder-backup\u0027,"},{"line_number":103,"context_line":"               help\u003d\u0027The topic that volume backup nodes listen on\u0027),"},{"line_number":104,"context_line":"    cfg.BoolOpt(\u0027enable_v1_api\u0027,"},{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_48b0d58b","line":105,"updated":"2015-12-10 16:12:30.000000000","message":"Will it affect any other project?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"28e8d2df9c38de7a2917e05337030225aa97162d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"               default\u003d\u0027cinder-backup\u0027,"},{"line_number":103,"context_line":"               help\u003d\u0027The topic that volume backup nodes listen on\u0027),"},{"line_number":104,"context_line":"    cfg.BoolOpt(\u0027enable_v1_api\u0027,"},{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_9e0ef430","line":105,"in_reply_to":"7a740942_48b0d58b","updated":"2015-12-10 17:14:55.000000000","message":"Good question. You mean Glance, swift, etc?","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6b6f4342d6f42e5cd16ab786e05224f45b8daece","unresolved":false,"context_lines":[{"line_number":102,"context_line":"               default\u003d\u0027cinder-backup\u0027,"},{"line_number":103,"context_line":"               help\u003d\u0027The topic that volume backup nodes listen on\u0027),"},{"line_number":104,"context_line":"    cfg.BoolOpt(\u0027enable_v1_api\u0027,"},{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_ed4985d1","line":105,"in_reply_to":"7a740942_9e0ef430","updated":"2015-12-10 19:47:13.000000000","message":"Nova could be affected too. I\u0027ve got a lot of issues once I tried to remove v1 API in the past","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90b11dff028c472393f51fa377114aec09cdd8df","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":110,"context_line":"    cfg.BoolOpt(\u0027api_rate_limit\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_a86ff9fa","line":108,"updated":"2015-12-10 16:12:30.000000000","message":"The same as above.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ef7b5c386263b1a98bdaa204cd8045e9d1d7a10","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":110,"context_line":"    cfg.BoolOpt(\u0027api_rate_limit\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_b402e107","line":108,"in_reply_to":"7a740942_a86ff9fa","updated":"2015-12-10 23:06:46.000000000","message":"This may cause problems as V2 is still new and V1 is still not out yet:).","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"82ca056c568f6a6b0cc595356ee02ff87bbdfcdf","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":110,"context_line":"    cfg.BoolOpt(\u0027api_rate_limit\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_7a7630a5","line":108,"in_reply_to":"7a740942_b402e107","updated":"2015-12-14 13:20:51.000000000","message":"Yes. I\u0027ll test this, but perhaps the default for V2 should be True.","commit_id":"d0644f0176a27dc6adac45d1c4f74a24df9ad796"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e9963c596775a2b1cf9d61cbac9b5c8dfe295955","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v3_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d_(\"Deploy v3 of the Cinder API.\")),"},{"line_number":110,"context_line":"    cfg.BoolOpt(\u0027api_rate_limit\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_6041d937","line":108,"updated":"2016-02-05 14:22:03.000000000","message":"I\u0027m not sure that disable all versions by default is a good idea.","commit_id":"94650b38c3007e3798cef39445c7019217e27134"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"3680b4d27e3e077cb51436ee3217c4f2b1e896c6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                default\u003dFalse,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v3_api\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d_(\"Deploy v3 of the Cinder API.\")),"},{"line_number":110,"context_line":"    cfg.BoolOpt(\u0027api_rate_limit\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_db06801c","line":108,"in_reply_to":"5a5ae5dd_6041d937","updated":"2016-02-05 14:43:30.000000000","message":"You are right. I thought they were all False by default, but I was wrong on that. I\u0027ll fix with next patch.","commit_id":"94650b38c3007e3798cef39445c7019217e27134"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":104,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":105,"context_line":"                default\u003dTrue,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v3_api\u0027,"},{"line_number":108,"context_line":"                default\u003dTrue,"},{"line_number":109,"context_line":"                help\u003d_(\"Deploy v3 of the Cinder API.\")),"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_97081d2f","line":106,"range":{"start_line":106,"start_character":16,"end_line":106,"end_character":68},"updated":"2016-02-22 19:13:15.000000000","message":"Really \"deprecated\"? I thought we\u0027ll be supporting v2 forever?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v1 of the Cinder API.\")),"},{"line_number":104,"context_line":"    cfg.BoolOpt(\u0027enable_v2_api\u0027,"},{"line_number":105,"context_line":"                default\u003dTrue,"},{"line_number":106,"context_line":"                help\u003d_(\"DEPRECATED: Deploy v2 of the Cinder API.\")),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027enable_v3_api\u0027,"},{"line_number":108,"context_line":"                default\u003dTrue,"},{"line_number":109,"context_line":"                help\u003d_(\"Deploy v3 of the Cinder API.\")),"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_64d4c2bc","line":106,"range":{"start_line":106,"start_character":16,"end_line":106,"end_character":68},"in_reply_to":"bae84128_97081d2f","updated":"2016-02-22 21:58:50.000000000","message":"We are, and we are supporting v1 forever now as well.\nI think of deprecated as \"supported, but not recomended, since there is a newer version\".\nBut if there is an official meaning for \u0027deprecated\u0027 and I\u0027m using it incorrectly, I can change this.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/opts.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                cinder_volume_drivers_hpe_hpe3parcommon.hpe3par_opts,"},{"line_number":334,"context_line":"                cinder_volume_drivers_datera.d_opts,"},{"line_number":335,"context_line":"                cinder_volume_drivers_blockdevice.volume_opts,"},{"line_number":336,"context_line":"                [cinder_api_v2_volumes.query_volume_filters_opt],"},{"line_number":337,"context_line":"                cinder_volume_drivers_quobyte.volume_opts,"},{"line_number":338,"context_line":"                cinder_volume_drivers_vzstorage.vzstorage_opts,"},{"line_number":339,"context_line":"                cinder_volume_drivers_nfs.nfs_opts,"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_92366be5","side":"PARENT","line":336,"range":{"start_line":336,"start_character":16,"end_line":336,"end_character":65},"updated":"2016-02-22 19:13:15.000000000","message":"Shouldn\u0027t you add the one from common file here?","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                cinder_volume_drivers_hpe_hpe3parcommon.hpe3par_opts,"},{"line_number":334,"context_line":"                cinder_volume_drivers_datera.d_opts,"},{"line_number":335,"context_line":"                cinder_volume_drivers_blockdevice.volume_opts,"},{"line_number":336,"context_line":"                [cinder_api_v2_volumes.query_volume_filters_opt],"},{"line_number":337,"context_line":"                cinder_volume_drivers_quobyte.volume_opts,"},{"line_number":338,"context_line":"                cinder_volume_drivers_vzstorage.vzstorage_opts,"},{"line_number":339,"context_line":"                cinder_volume_drivers_nfs.nfs_opts,"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_0405f612","side":"PARENT","line":336,"range":{"start_line":336,"start_character":16,"end_line":336,"end_character":65},"in_reply_to":"bae84128_92366be5","updated":"2016-02-22 21:58:50.000000000","message":"Yes, good catch.","commit_id":"5e821cdb33f4a922bd60ed4eab09d553a80a082a"}],"cinder/tests/unit/api/test_versions.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"0e98269e0494f5dd4ad4d9032cf17cbe453b5844","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.assertEqual(400, response.status_int)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_versions_version_not_found(self):"},{"line_number":118,"context_line":"        api_version_request_3_0 \u003d api_version_request.APIVersionRequest(\u00273.0\u0027)"},{"line_number":119,"context_line":"        self.mock_object(api_version_request,"},{"line_number":120,"context_line":"                         \u0027max_api_version\u0027,"},{"line_number":121,"context_line":"                         mock.Mock(return_value\u003dapi_version_request_3_0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_1fa5ee02","line":118,"updated":"2015-09-22 23:02:13.000000000","message":"might be worth setting this version to a significantly higher version.  who knows when we\u0027ll get a 3.0 microversion, but if we did, then this test would start failing ?","commit_id":"92b7dea34aa83d8a897cfcae3a0da1d7348a0a05"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"c26c1562085d309cc1fcd5301467d76fb43961ac","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.assertEqual(400, response.status_int)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_versions_version_not_found(self):"},{"line_number":118,"context_line":"        api_version_request_3_0 \u003d api_version_request.APIVersionRequest(\u00273.0\u0027)"},{"line_number":119,"context_line":"        self.mock_object(api_version_request,"},{"line_number":120,"context_line":"                         \u0027max_api_version\u0027,"},{"line_number":121,"context_line":"                         mock.Mock(return_value\u003dapi_version_request_3_0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_2988abc4","line":118,"in_reply_to":"ba15a1d1_1fa5ee02","updated":"2015-09-23 12:38:04.000000000","message":"Good idea. I\u0027ll bump next patch set.","commit_id":"92b7dea34aa83d8a897cfcae3a0da1d7348a0a05"}],"cinder/tests/unit/api/v2/test_snapshots.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        \"\"\"Check a page of snapshots list.\"\"\""},{"line_number":407,"context_line":"        # Since we are accessing v2 api directly we don\u0027t need to specify"},{"line_number":408,"context_line":"        # v2 in the request path, if we did, we\u0027d get /v2/v2 links back"},{"line_number":409,"context_line":"        request_path \u003d \u0027/v2/%s/snapshots\u0027 % project"},{"line_number":410,"context_line":"        expected_path \u003d request_path"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        # Construct the query if there are kwargs"},{"line_number":413,"context_line":"        if kwargs:"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_727da76d","line":410,"range":{"start_line":409,"start_character":0,"end_line":410,"end_character":36},"updated":"2016-02-22 19:13:15.000000000","message":"We really need this change in this patch? I mean it doesn\u0027t hurt, but it\u0027s already a big patch and there\u0027s no need to grow it more.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        \"\"\"Check a page of snapshots list.\"\"\""},{"line_number":407,"context_line":"        # Since we are accessing v2 api directly we don\u0027t need to specify"},{"line_number":408,"context_line":"        # v2 in the request path, if we did, we\u0027d get /v2/v2 links back"},{"line_number":409,"context_line":"        request_path \u003d \u0027/v2/%s/snapshots\u0027 % project"},{"line_number":410,"context_line":"        expected_path \u003d request_path"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        # Construct the query if there are kwargs"},{"line_number":413,"context_line":"        if kwargs:"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_ea441bb8","line":410,"range":{"start_line":409,"start_character":0,"end_line":410,"end_character":36},"in_reply_to":"bae84128_727da76d","updated":"2016-02-22 21:58:50.000000000","message":"Yes, and the reason is referred to in the comment above on L#407, although I confess I don\u0027t know where in the inner workings of the framework the problem arises.\nBasically if you pass \u0027v2\u0027 or \u0027v3\u0027 in the request path, is shows up twice in the link:\n/v2/v2/snapshots.\nOriginally, this worked because of the way we created the default URL in cinder/tests/api/fakes.py:HTTPRequest()\nWe used a default URL if \u0027v1\u0027 was not in the endpoint, which was a hack.\nNow with the addition of /v3 endpoint, that hack won\u0027t work and I had to use the above change to make the fake request build properly.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"cinder/utils.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"0e98269e0494f5dd4ad4d9032cf17cbe453b5844","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        return False"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"class ComparableMixin(object):"},{"line_number":804,"context_line":"    def _compare(self, other, method):"},{"line_number":805,"context_line":"        try:"},{"line_number":806,"context_line":"            return method(self._cmpkey(), other._cmpkey())"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_3f0c723a","line":803,"updated":"2015-09-22 23:02:13.000000000","message":"would be nice to get some sort of description for the purpose of this guy, since it\u0027s not entirely obvious to me at least.","commit_id":"92b7dea34aa83d8a897cfcae3a0da1d7348a0a05"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"c26c1562085d309cc1fcd5301467d76fb43961ac","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        return False"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"class ComparableMixin(object):"},{"line_number":804,"context_line":"    def _compare(self, other, method):"},{"line_number":805,"context_line":"        try:"},{"line_number":806,"context_line":"            return method(self._cmpkey(), other._cmpkey())"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_54ad7282","line":803,"in_reply_to":"ba15a1d1_3f0c723a","updated":"2015-09-23 12:38:04.000000000","message":"Will do.","commit_id":"92b7dea34aa83d8a897cfcae3a0da1d7348a0a05"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"754eb0a9221cc6fcd09ba42da73e535b82156d6c","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        except (AttributeError, TypeError):"},{"line_number":780,"context_line":"            # _cmpkey not implemented, or return different type,"},{"line_number":781,"context_line":"            # so I can\u0027t compare with \"other\"."},{"line_number":782,"context_line":"            return NotImplemented"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def __lt__(self, other):"},{"line_number":785,"context_line":"        return self._compare(other, lambda s, o: s \u003c o)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_390a7526","line":782,"range":{"start_line":782,"start_character":19,"end_line":782,"end_character":33},"updated":"2016-02-24 14:59:21.000000000","message":"Should this be \u0027raise\u0027 not return? NotImplemented evaluates to True in booloean context","commit_id":"6b11d276d13cc866aea9b3cfa321b3b19ee13d55"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"912bbe59c386e4771bdeec6755e6fb4c7e494964","unresolved":false,"context_lines":[{"line_number":779,"context_line":"        except (AttributeError, TypeError):"},{"line_number":780,"context_line":"            # _cmpkey not implemented, or return different type,"},{"line_number":781,"context_line":"            # so I can\u0027t compare with \"other\"."},{"line_number":782,"context_line":"            return NotImplemented"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def __lt__(self, other):"},{"line_number":785,"context_line":"        return self._compare(other, lambda s, o: s \u003c o)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_050e22e4","line":782,"range":{"start_line":782,"start_character":19,"end_line":782,"end_character":33},"in_reply_to":"bae84128_390a7526","updated":"2016-02-24 15:22:44.000000000","message":"Ok, cknight explained this to me. See http://shahriar.svbtle.com/python-notimplemented-type and other places for details","commit_id":"6b11d276d13cc866aea9b3cfa321b3b19ee13d55"}],"doc/source/devref/api_microversion_dev.rst":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"4221439779852125e4697861909a3e5bd6aa310e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``X-OpenStack-Cinder-API-Version`` which"},{"line_number":13,"context_line":"is a monotonically increasing semantic version number starting from"},{"line_number":14,"context_line":"``2.1``."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"7a5de9d1_064ba188","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":60},"updated":"2016-01-28 17:56:10.000000000","message":"As discussed on IRC, this has several issues:\n\n - The use of \u0027X-\u0027 prefix is discouraged in new headers\n\n - Service names should be used instead of project nicknames. Thus \u0027volume\u0027 is preferred over \u0027Cinder\u0027.\n\n - The use of \u0027microversion\u0027 was preferred over \u0027version\u0027\n\n - It was felt that \u0027API-microversion\u0027 was redundant, so the \u0027API-\u0027 part should be dropped.\n\nIn summary, the preference would be to use:\n\n    OpenStack-Volume-microversion","commit_id":"fc8c7b36c800d44dacf05a3d5a0d881d49677b40"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        self._version_specific_func(req, \"foo\")"},{"line_number":216,"context_line":"        .... common stuff ...."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"A change in schema only"},{"line_number":219,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"If there is no change to the method, only to the schema that is used for"},{"line_number":222,"context_line":"validation, you can add a version range to the ``validation.schema``"},{"line_number":223,"context_line":"decorator::"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @wsgi.Controller.api_version(\"3.1\")"},{"line_number":226,"context_line":"    @validation.schema(dummy_schema.dummy, \"3.3\", \"3.8\")"},{"line_number":227,"context_line":"    @validation.schema(dummy_schema.dummy2, \"3.9\")"},{"line_number":228,"context_line":"    def update(self, req, id, body):"},{"line_number":229,"context_line":"        ...."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"This method will be available from version ``3.1``, validated according to"},{"line_number":232,"context_line":"``dummy_schema.dummy`` from ``3.3`` to ``3.8``, and validated according to"},{"line_number":233,"context_line":"``dummy_schema.dummy2`` from ``3.9`` onward."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"When not using decorators"}],"source_content_type":"text/x-rst","patch_set":32,"id":"bae84128_b26e0f2d","line":233,"range":{"start_line":218,"start_character":0,"end_line":233,"end_character":44},"updated":"2016-02-22 19:13:15.000000000","message":"Do we have schema validation in Cinder?","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        self._version_specific_func(req, \"foo\")"},{"line_number":216,"context_line":"        .... common stuff ...."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"A change in schema only"},{"line_number":219,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"If there is no change to the method, only to the schema that is used for"},{"line_number":222,"context_line":"validation, you can add a version range to the ``validation.schema``"},{"line_number":223,"context_line":"decorator::"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @wsgi.Controller.api_version(\"3.1\")"},{"line_number":226,"context_line":"    @validation.schema(dummy_schema.dummy, \"3.3\", \"3.8\")"},{"line_number":227,"context_line":"    @validation.schema(dummy_schema.dummy2, \"3.9\")"},{"line_number":228,"context_line":"    def update(self, req, id, body):"},{"line_number":229,"context_line":"        ...."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"This method will be available from version ``3.1``, validated according to"},{"line_number":232,"context_line":"``dummy_schema.dummy`` from ``3.3`` to ``3.8``, and validated according to"},{"line_number":233,"context_line":"``dummy_schema.dummy2`` from ``3.9`` onward."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"When not using decorators"}],"source_content_type":"text/x-rst","patch_set":32,"id":"bae84128_6a864bdc","line":233,"range":{"start_line":218,"start_character":0,"end_line":233,"end_character":44},"in_reply_to":"bae84128_b26e0f2d","updated":"2016-02-22 21:58:50.000000000","message":"No, you are right. This comes from Manila. I\u0027ll remove.","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"doc/source/devref/index.rst":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c6d82c8cfd6a2f08b2e77a1e21ec4a2e550831b7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"   :maxdepth: 3"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"   ../api/autoindex"},{"line_number":64,"context_line":"   api_microversion_dev"},{"line_number":65,"context_line":"   api_microversion_history"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Module Reference"},{"line_number":68,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":32,"id":"bae84128_322cbf01","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":27},"updated":"2016-02-22 19:13:15.000000000","message":"Can you move it up to any category? Programming HowTos and Tutorials seem like a proper place. Otherwise this gets under a long list generated by\n\n ../api/autoindex\n\nwhich makes it hard to find. Take a look on [1].\n\n[1] http://docs-draft.openstack.org/10/224910/32/check/gate-cinder-docs/1e9137f//doc/build/html/devref/index.html","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e4203374e5e808b78498126ee4a398da253800c4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"   :maxdepth: 3"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"   ../api/autoindex"},{"line_number":64,"context_line":"   api_microversion_dev"},{"line_number":65,"context_line":"   api_microversion_history"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Module Reference"},{"line_number":68,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":32,"id":"bae84128_6a476b77","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":27},"in_reply_to":"bae84128_322cbf01","updated":"2016-02-22 21:58:50.000000000","message":"Done","commit_id":"8be3ed82846476bdfa573d39a78116bd48447f8a"}],"etc/cinder/api-paste.ini":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"303afffc9ce6bd914830ce844376f82883f7e647","unresolved":false,"context_lines":[{"line_number":33,"context_line":"[filter:cors]"},{"line_number":34,"context_line":"paste.filter_factory \u003d oslo_middleware.cors:filter_factory"},{"line_number":35,"context_line":"oslo_config_project \u003d cinder"},{"line_number":36,"context_line":"latent_allow_headers \u003d X-Auth-Token, X-Identity-Status, X-Roles, X-Service-Catalog, X-User-Id, X-Tenant-Id, X-OpenStack-Request-ID, X-Trace-Info, X-Trace-HMAC"},{"line_number":37,"context_line":"latent_expose_headers \u003d X-Auth-Token, X-Subject-Token, X-Service-Token, X-OpenStack-Request-ID"},{"line_number":38,"context_line":"latent_allow_methods \u003d GET, PUT, POST, DELETE, PATCH"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[filter:faultwrap]"}],"source_content_type":"text/x-properties","patch_set":30,"id":"dae33548_d3955d33","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":94},"updated":"2016-02-17 22:52:58.000000000","message":"I only have a vague idea of what this does with the oslo api stuff... but I\u0027m wondering if we need to add the microversion header to these","commit_id":"759603f1daa9db05afebdd0d23c35023ee8db2db"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"84539c0f2e58edd3d9f5aa2b57f68fe9025fd7c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"[filter:cors]"},{"line_number":34,"context_line":"paste.filter_factory \u003d oslo_middleware.cors:filter_factory"},{"line_number":35,"context_line":"oslo_config_project \u003d cinder"},{"line_number":36,"context_line":"latent_allow_headers \u003d X-Auth-Token, X-Identity-Status, X-Roles, X-Service-Catalog, X-User-Id, X-Tenant-Id, X-OpenStack-Request-ID, X-Trace-Info, X-Trace-HMAC"},{"line_number":37,"context_line":"latent_expose_headers \u003d X-Auth-Token, X-Subject-Token, X-Service-Token, X-OpenStack-Request-ID"},{"line_number":38,"context_line":"latent_allow_methods \u003d GET, PUT, POST, DELETE, PATCH"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[filter:faultwrap]"}],"source_content_type":"text/x-properties","patch_set":30,"id":"dae33548_4ef7e08a","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":94},"in_reply_to":"dae33548_d3955d33","updated":"2016-02-17 23:18:26.000000000","message":"Good catch. I\u0027ll look into it.","commit_id":"759603f1daa9db05afebdd0d23c35023ee8db2db"}]}
