)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"97a3cdb2014db18d2f6b9dc05142cba9b8fc3051","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Code change for nova support cinder client v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use v2 volume endpoint to attach/detach volume would be failed,"},{"line_number":10,"context_line":"due to nova not support cinder client v2 yet. This patch is for"},{"line_number":11,"context_line":"nova support cinder client v2"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUH%2F%2Bl1Y%3D","line":10,"updated":"2014-01-24 02:40:35.000000000","message":"s/nova not support/nova not supporting/","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Code change for nova support cinder client v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use v2 volume endpoint to attach/detach volume would be failed,"},{"line_number":10,"context_line":"due to nova not support cinder client v2 yet. This patch is for"},{"line_number":11,"context_line":"nova support cinder client v2"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUH%2F%2BlNM%3D","line":10,"in_reply_to":"AAAAUH%2F%2Bl1Y%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"97a3cdb2014db18d2f6b9dc05142cba9b8fc3051","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use v2 volume endpoint to attach/detach volume would be failed,"},{"line_number":10,"context_line":"due to nova not support cinder client v2 yet. This patch is for"},{"line_number":11,"context_line":"nova support cinder client v2"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"},{"line_number":14,"context_line":"Closes-Bug: #1215772"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUH%2F%2Bl1Q%3D","line":11,"updated":"2014-01-24 02:40:35.000000000","message":"End with a period.","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use v2 volume endpoint to attach/detach volume would be failed,"},{"line_number":10,"context_line":"due to nova not support cinder client v2 yet. This patch is for"},{"line_number":11,"context_line":"nova support cinder client v2"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"},{"line_number":14,"context_line":"Closes-Bug: #1215772"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUH%2F%2BlNI%3D","line":11,"in_reply_to":"AAAAUH%2F%2Bl1Q%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done, thanks!","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4910d2ca3b8ea4e798bdcc6ff1637b990e350556","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"},{"line_number":14,"context_line":"Closes-Bug: #1215772"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id8abbbb4d9b0c8c49ab51fc3d958ef0d487467f8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"AAAAXX%2F%2F4mI%3D","line":15,"updated":"2014-04-25 15:03:29.000000000","message":"Add: Co-authored-by: Mike Perez \u003cthingee@gmail.com\u003e","commit_id":"64d0f45177cb95023402283d718d6215de1f2d5f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"aecf1765d837fedf4fc6c175f1f5d3b0ddeeb2de","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp support-cinderclient-v2"},{"line_number":14,"context_line":"Closes-Bug: #1215772"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id8abbbb4d9b0c8c49ab51fc3d958ef0d487467f8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"AAAAXX%2F%2FxZM%3D","line":15,"in_reply_to":"AAAAXX%2F%2F4mI%3D","updated":"2014-04-28 03:48:30.000000000","message":"Done","commit_id":"64d0f45177cb95023402283d718d6215de1f2d5f"}],"etc/nova/nova.conf.sample":[{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"e63d278b0e001b89cee4b89975162570be01b2ca","unresolved":false,"context_lines":[{"line_number":2452,"context_line":"#cinder_http_retries\u003d3"},{"line_number":2453,"context_line":""},{"line_number":2454,"context_line":"# Version of the volume api to use (integer value)"},{"line_number":2455,"context_line":"#volume_api_version\u003d1"},{"line_number":2456,"context_line":""},{"line_number":2457,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean"},{"line_number":2458,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAASn%2F%2FAsQ%3D","line":2455,"updated":"2013-09-13 15:46:39.000000000","message":"nit but would it be better for consistenacy to call this cinder_api_version?\n\nOthers seem to follow the \u003cservice\u003e_api_version naming scheme.","commit_id":"7f2f2bc3f3a62b03cf1d4ec49c38957708d70283"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"3cab026bd22fbe0755e9ab8f5fd565697cecdd5a","unresolved":false,"context_lines":[{"line_number":2452,"context_line":"#cinder_http_retries\u003d3"},{"line_number":2453,"context_line":""},{"line_number":2454,"context_line":"# Version of the volume api to use (integer value)"},{"line_number":2455,"context_line":"#volume_api_version\u003d1"},{"line_number":2456,"context_line":""},{"line_number":2457,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean"},{"line_number":2458,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAS3%2F%2F%2B68%3D","line":2455,"in_reply_to":"AAAASn%2F%2FAsQ%3D","updated":"2013-09-16 01:45:21.000000000","message":"Sounds good? I will modify it in I release, since it is one function. Thanks!","commit_id":"7f2f2bc3f3a62b03cf1d4ec49c38957708d70283"}],"nova/api/openstack/compute/contrib/volumes.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"591d4882da899763c3adb1739563b15050e67f91","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    # NOTE(thingee) volume(cinder) v2 API uses \u0027name\u0027 instead of"},{"line_number":69,"context_line":"    # \u0027display_name\u0027, and use \u0027description\u0027 instead of \u0027display_description\u0027"},{"line_number":70,"context_line":"    # for volume."},{"line_number":71,"context_line":"    if \u0027display_name\u0027 in vol:"},{"line_number":72,"context_line":"        d[\u0027displayName\u0027] \u003d vol[\u0027display_name\u0027]"},{"line_number":73,"context_line":"        d[\u0027displayDescription\u0027] \u003d vol[\u0027display_description\u0027]"},{"line_number":74,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":47,"id":"baada198_5876d2a4","line":71,"updated":"2014-07-22 11:26:09.000000000","message":"Can\u0027t we hide all this fix up logic somewhere common to all these uses?","commit_id":"7072bfe21aba74bf7bd0d0c967f99960115ef01e"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f28dbf0c9cb27cfceb89093402424bf70c71840","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    # NOTE(thingee) volume(cinder) v2 API uses \u0027name\u0027 instead of"},{"line_number":69,"context_line":"    # \u0027display_name\u0027, and use \u0027description\u0027 instead of \u0027display_description\u0027"},{"line_number":70,"context_line":"    # for volume."},{"line_number":71,"context_line":"    if \u0027display_name\u0027 in vol:"},{"line_number":72,"context_line":"        d[\u0027displayName\u0027] \u003d vol[\u0027display_name\u0027]"},{"line_number":73,"context_line":"        d[\u0027displayDescription\u0027] \u003d vol[\u0027display_description\u0027]"},{"line_number":74,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":47,"id":"baada198_e9f6c5d7","line":71,"in_reply_to":"baada198_5876d2a4","updated":"2014-07-23 07:39:21.000000000","message":"Done","commit_id":"7072bfe21aba74bf7bd0d0c967f99960115ef01e"}],"nova/context.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e390dc96661610f90ec9bce758948d87cda9d700","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if service_catalog:"},{"line_number":83,"context_line":"            # Only include required parts of service_catalog"},{"line_number":84,"context_line":"            self.service_catalog \u003d [s for s in service_catalog"},{"line_number":85,"context_line":"                if s.get(\u0027type\u0027) in (\u0027volume\u0027, \u0027volumev2\u0027)]"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            # if list is empty or none"},{"line_number":88,"context_line":"            self.service_catalog \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_b0618bd5","line":85,"updated":"2014-06-09 16:40:32.000000000","message":"Can\u0027t we work out which one we need in advance here? Seems bad carrying around double the data we actually need.\n\nWe will need the same thing for glance, I presume.","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"3f912f8b70830893a117a555a7afdef176913a7a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if service_catalog:"},{"line_number":83,"context_line":"            # Only include required parts of service_catalog"},{"line_number":84,"context_line":"            self.service_catalog \u003d [s for s in service_catalog"},{"line_number":85,"context_line":"                if s.get(\u0027type\u0027) in (\u0027volume\u0027, \u0027volumev2\u0027)]"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            # if list is empty or none"},{"line_number":88,"context_line":"            self.service_catalog \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_7e03d20c","line":85,"in_reply_to":"1ae5cdf2_b0618bd5","updated":"2014-06-27 10:30:28.000000000","message":"You need both. https://github.com/openstack-dev/devstack/blob/master/lib/cinder#L348\n\nNova does the same thing:\nhttps://github.com/openstack-dev/devstack/blob/master/lib/nova#L346","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"}],"nova/tests/test_cinder.py":[{"author":{"_account_id":7476,"name":"kaitian521","email":"kaitian521@gmail.com"},"change_message_id":"293ff430a1a86546eb225e103800d62a958651ca","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        volume_v1.update(kwargs)"},{"line_number":69,"context_line":"        return volume_v1"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    return None"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"_image_metadata \u003d {"},{"line_number":74,"context_line":"    \u0027kernel_id\u0027: \u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2FVjM%3D","line":71,"updated":"2013-09-06 03:47:48.000000000","message":"remove this line","commit_id":"821deb34a615a20ff9eb753859b98b5e0ce59e43"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"70e964999e7d6705c674d7a58fbe544b9f1af926","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Volume with image metadata.\"\"\""},{"line_number":116,"context_line":"        volume \u003d {\u0027volume\u0027: _stub_volume(id\u003d\u00271234\u0027,"},{"line_number":117,"context_line":"                                         volume_image_metadata\u003d_image_metadata)"},{"line_number":118,"context_line":"                 }"},{"line_number":119,"context_line":"        return (200, volume)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FCRc%3D","line":118,"updated":"2013-11-15 11:12:31.000000000","message":"this is a necessary change, should not be made.","commit_id":"9f2b4378904331e24213eb2ae9c9c297ea9d1013"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a5a32c0ec27036786b99d7c26934e6bf956dee5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Volume with image metadata.\"\"\""},{"line_number":116,"context_line":"        volume \u003d {\u0027volume\u0027: _stub_volume(id\u003d\u00271234\u0027,"},{"line_number":117,"context_line":"                                         volume_image_metadata\u003d_image_metadata)"},{"line_number":118,"context_line":"                 }"},{"line_number":119,"context_line":"        return (200, volume)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FCAQ%3D","line":118,"in_reply_to":"AAAATn%2F%2FCRc%3D","updated":"2013-11-15 12:26:10.000000000","message":"*unnecessary :)\n\n+1","commit_id":"9f2b4378904331e24213eb2ae9c9c297ea9d1013"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a75f0531299600705c70bee82ced12f8789632cc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"status\": \"available\","},{"line_number":55,"context_line":"        \"volume_type\": \"None\","},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":"    if cinder.cinder_client_version \u003d\u003d \"2\":"},{"line_number":58,"context_line":"        volume_v2.update(kwargs)"},{"line_number":59,"context_line":"        return volume_v2"},{"line_number":60,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bl34%3D","line":57,"updated":"2014-01-24 02:38:45.000000000","message":"Hmm, would like to avoid even creating the volume_v1 dict if it\u0027s cinder client v2 in this method.  Just have the version block cover both cases so only a single dict is created in the setup, then update it with kwargs outside the condition and return that dict.","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"status\": \"available\","},{"line_number":55,"context_line":"        \"volume_type\": \"None\","},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":"    if cinder.cinder_client_version \u003d\u003d \"2\":"},{"line_number":58,"context_line":"        volume_v2.update(kwargs)"},{"line_number":59,"context_line":"        return volume_v2"},{"line_number":60,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bkk8%3D","line":57,"in_reply_to":"AAAAUH%2F%2Bl34%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a75f0531299600705c70bee82ced12f8789632cc","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"class CinderTestCase(test.NoDBTestCase):"},{"line_number":158,"context_line":"    \"\"\"Test case for cinder volume api.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def setUp(self):"},{"line_number":161,"context_line":"        super(CinderTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bl3g%3D","line":158,"updated":"2014-01-24 02:38:45.000000000","message":"Specify it\u0027s the v1 API here?","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"class CinderTestCase(test.NoDBTestCase):"},{"line_number":158,"context_line":"    \"\"\"Test case for cinder volume api.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def setUp(self):"},{"line_number":161,"context_line":"        super(CinderTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BlLk%3D","line":158,"in_reply_to":"AAAAUH%2F%2Bl3g%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a75f0531299600705c70bee82ced12f8789632cc","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        self.context \u003d context.RequestContext(\u0027username\u0027, \u0027project_id\u0027,"},{"line_number":245,"context_line":"                                              service_catalog\u003dcatalog)"},{"line_number":246,"context_line":"        cinder.cinderclient(self.context)"},{"line_number":247,"context_line":"        self.stubs.Set(cinder_client_v2, \"Client\","},{"line_number":248,"context_line":"                   self.fake_client_factory)"},{"line_number":249,"context_line":"        self.api \u003d cinder.API()"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bl28%3D","line":247,"updated":"2014-01-24 02:38:45.000000000","message":"stubs is mox and we should be using mock for new tests, especially with new blueprint work, can mock be used here?  You might need to mock the client at the class level to make that work, i.e. @mock.patch.object(cinder_client_v2, \"Client\", fake_client_factory) at the class scope, otherwise you\u0027d need to do it on each test case method.","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        self.context \u003d context.RequestContext(\u0027username\u0027, \u0027project_id\u0027,"},{"line_number":245,"context_line":"                                              service_catalog\u003dcatalog)"},{"line_number":246,"context_line":"        cinder.cinderclient(self.context)"},{"line_number":247,"context_line":"        self.stubs.Set(cinder_client_v2, \"Client\","},{"line_number":248,"context_line":"                   self.fake_client_factory)"},{"line_number":249,"context_line":"        self.api \u003d cinder.API()"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BlAY%3D","line":247,"in_reply_to":"AAAAUH%2F%2Bl28%3D","updated":"2014-01-24 09:31:50.000000000","message":"Matt, thanks for the reminder, I will update the code just for CinderV2TestCase, and ignore CinderTestCase to avoid confuse, is it OK?","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import test"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def _stub_volume(**kwargs):"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtAY%3D","line":27,"updated":"2014-02-28 22:05:57.000000000","message":"Why does this need to be global?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import test"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def _stub_volume(**kwargs):"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F%2BZQ%3D","line":27,"in_reply_to":"AAAAVX%2F%2FtAY%3D","updated":"2014-03-03 06:19:00.000000000","message":"I think it still need to use global, you can see in CinderTestCase and  CinderV2TestCase, we need to change this value, then base the value to call FakeCinderClient to generate suitable cinder client, I have seen many place to use global variable in unit test, in  nova/tests/api/openstack/compute/contrib/test_multinic_xs.py, and so on.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def setUp(self):"},{"line_number":137,"context_line":"        super(CinderTestCase, self).setUp()"},{"line_number":138,"context_line":"        self.fake_client_factory \u003d FakeClientFactory()"},{"line_number":139,"context_line":"        self.stubs.Set(cinder.cinder_client, \"Client\","},{"line_number":140,"context_line":"                       self.fake_client_factory)"},{"line_number":141,"context_line":"        self.api \u003d cinder.API()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrTE%3D","side":"PARENT","line":138,"updated":"2014-03-04 18:19:57.000000000","message":"You could just pass the V1 class into the constructor here, and V2 in the one below. I think that would be much simpler.\n\nIt can go into the above mock too, I guess.","commit_id":"ef3b1385cb3708aa4993a149ce24082b4082e347"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import test"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def _stub_volume(**kwargs):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrVg%3D","line":27,"updated":"2014-03-04 18:19:57.000000000","message":"This feels really confusing.","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_volumes_5678(self, **kw):"},{"line_number":115,"context_line":"        \"\"\"Volume with image metadata.\"\"\""},{"line_number":116,"context_line":"        if cinder_client_version \u003d\u003d \"2\":"},{"line_number":117,"context_line":"            volume \u003d {\u0027volume\u0027: _stub_volume_v2(id\u003d\u00271234\u0027,"},{"line_number":118,"context_line":"                                volume_image_metadata\u003d_image_metadata)"},{"line_number":119,"context_line":"                      }"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrVI%3D","line":116,"updated":"2014-03-04 18:19:57.000000000","message":"can\u0027t you just have a separate FakeHTTPClientV2 that overrides these methods? Then your test just sets up the appropriate instances.","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"f33d37277e68b0020e2e1d9f390beb714ca5ca7e","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class FakeCinderClient(cinder.cinder_client.get_client_class("},{"line_number":128,"context_line":"                       cinder_client_version)):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def __init__(self, username, password, project_id\u003dNone, auth_url\u003dNone,"},{"line_number":131,"context_line":"                 insecure\u003dFalse, retries\u003dNone, cacert\u003dNone):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FqgI%3D","line":128,"updated":"2014-03-04 19:27:47.000000000","message":"hmm, that\u0027s an odd construct ... how does that actually work with two different client versions?","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.context \u003d context.RequestContext(\u0027username\u0027, \u0027project_id\u0027,"},{"line_number":183,"context_line":"                                              service_catalog\u003dcatalog)"},{"line_number":184,"context_line":"        cinder.cinderclient(self.context)"},{"line_number":185,"context_line":"        self.stubs.Set(cinder_client_v1, \"Client\","},{"line_number":186,"context_line":"                       fake_client_factory)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self.api \u003d cinder.API()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrSc%3D","line":185,"updated":"2014-03-04 18:19:57.000000000","message":"seems bad to use mock and stubs in the same test.","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        global cinder_client_version"},{"line_number":253,"context_line":"        cinder_client_version \u003d \"2\""},{"line_number":254,"context_line":"        catalog \u003d [{"},{"line_number":255,"context_line":"            \"type\": \"volumev2\","},{"line_number":256,"context_line":"            \"name\": \"cinderv2\","},{"line_number":257,"context_line":"            \"endpoints\": [{\"publicURL\": \"http://localhost:8776/v2/project_id\"}]"},{"line_number":258,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrRY%3D","line":255,"updated":"2014-03-04 18:19:57.000000000","message":"what about v1 and v2 being present? it would be good to test that somewhere?","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e57ccbb07f9ce6834b62b4da173b6b79bb1020e","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            \"name\": \"cinderv2\","},{"line_number":257,"context_line":"            \"endpoints\": [{\"publicURL\": \"http://localhost:8776/v2/project_id\"}]"},{"line_number":258,"context_line":"        }]"},{"line_number":259,"context_line":"        cinder.CONF.set_override(\u0027cinder_catalog_info\u0027,"},{"line_number":260,"context_line":"                                 \u0027volumev2:cinder:publicURL\u0027)"},{"line_number":261,"context_line":"        self.context \u003d context.RequestContext(\u0027username\u0027, \u0027project_id\u0027,"},{"line_number":262,"context_line":"                                              service_catalog\u003dcatalog)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrSI%3D","line":259,"updated":"2014-03-04 18:19:57.000000000","message":"please use self.flags(..) for this kind of thing.\n\nNot sure why the above method didn\u0027t work.","commit_id":"51175ea2bba8a5a74dbec6c2991755ea79a3d98d"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":350,"context_line":"        self.assertEqual("},{"line_number":351,"context_line":"            fake_client_v2_factory.client.client.management_url,"},{"line_number":352,"context_line":"            \u0027http://localhost:8776/v2/project_id\u0027)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_cinder_endpoint_template(self):"},{"line_number":355,"context_line":"        self.flags("}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_96d8841f","line":352,"updated":"2014-07-21 10:41:13.000000000","message":"AssertEqual has follow signature:\n \n assertEqual(expected, actual)\n\nSo you should use \n\n self.assertEqual(\u0027http://localhost:8776/v2/project_id\u0027,  fake_client_v2_factory.client.client.management_url)","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":350,"context_line":"        self.assertEqual("},{"line_number":351,"context_line":"            fake_client_v2_factory.client.client.management_url,"},{"line_number":352,"context_line":"            \u0027http://localhost:8776/v2/project_id\u0027)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_cinder_endpoint_template(self):"},{"line_number":355,"context_line":"        self.flags("}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_4d14599f","line":352,"in_reply_to":"baada198_96d8841f","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":360,"context_line":"        self.assertEqual("},{"line_number":361,"context_line":"            fake_client_v2_factory.client.client.management_url,"},{"line_number":362,"context_line":"            \u0027http://other_host:8776/v2/project_id\u0027)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_get_non_existing_volume(self):"},{"line_number":365,"context_line":"        self.assertRaises(exception.VolumeNotFound, self.api.get, self.context,"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_d6059c7a","line":362,"updated":"2014-07-21 10:41:13.000000000","message":"same","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":360,"context_line":"        self.assertEqual("},{"line_number":361,"context_line":"            fake_client_v2_factory.client.client.management_url,"},{"line_number":362,"context_line":"            \u0027http://other_host:8776/v2/project_id\u0027)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_get_non_existing_volume(self):"},{"line_number":365,"context_line":"        self.assertRaises(exception.VolumeNotFound, self.api.get, self.context,"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_6d091d84","line":362,"in_reply_to":"baada198_d6059c7a","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        volume \u003d self.api.get(self.context, \u00275678\u0027)"},{"line_number":370,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/5678\u0027)"},{"line_number":371,"context_line":"        self.assertIn(\u0027volume_image_metadata\u0027, volume)"},{"line_number":372,"context_line":"        self.assertEqual(volume[\u0027volume_image_metadata\u0027], _image_metadata)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_cinder_api_insecure(self):"},{"line_number":375,"context_line":"        # The True/False negation is awkward, but better for the client"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_56f98c7e","line":372,"updated":"2014-07-21 10:41:13.000000000","message":"same","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        volume \u003d self.api.get(self.context, \u00275678\u0027)"},{"line_number":370,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/5678\u0027)"},{"line_number":371,"context_line":"        self.assertIn(\u0027volume_image_metadata\u0027, volume)"},{"line_number":372,"context_line":"        self.assertEqual(volume[\u0027volume_image_metadata\u0027], _image_metadata)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_cinder_api_insecure(self):"},{"line_number":375,"context_line":"        # The True/False negation is awkward, but better for the client"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_6d803dc0","line":372,"in_reply_to":"baada198_56f98c7e","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":379,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":380,"context_line":"        self.assertEqual("},{"line_number":381,"context_line":"            fake_client_v2_factory.client.client.verify_cert, False)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def test_cinder_api_cacert_file(self):"},{"line_number":384,"context_line":"        cacert \u003d \"/etc/ssl/certs/ca-certificates.crt\""}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_3636d851","line":381,"updated":"2014-07-21 10:41:13.000000000","message":"Why we can\u0027t use here \n\n assertFalse(fake_client_v2_factory.client.client.verify_cert)?","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":379,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":380,"context_line":"        self.assertEqual("},{"line_number":381,"context_line":"            fake_client_v2_factory.client.client.verify_cert, False)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def test_cinder_api_cacert_file(self):"},{"line_number":384,"context_line":"        cacert \u003d \"/etc/ssl/certs/ca-certificates.crt\""}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_8d8591d1","line":381,"in_reply_to":"baada198_3636d851","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":387,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":388,"context_line":"        self.assertEqual("},{"line_number":389,"context_line":"            fake_client_v2_factory.client.client.verify_cert, cacert)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def test_cinder_http_retries(self):"},{"line_number":392,"context_line":"        retries \u003d 42"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_d62cbc04","line":389,"updated":"2014-07-21 10:41:13.000000000","message":"same","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":387,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":388,"context_line":"        self.assertEqual("},{"line_number":389,"context_line":"            fake_client_v2_factory.client.client.verify_cert, cacert)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def test_cinder_http_retries(self):"},{"line_number":392,"context_line":"        retries \u003d 42"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_4dc9b924","line":389,"in_reply_to":"baada198_d62cbc04","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":395,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":396,"context_line":"        self.assertEqual("},{"line_number":397,"context_line":"            fake_client_v2_factory.client.client.retries, retries)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def test_cinder_http_timeout(self):"},{"line_number":400,"context_line":"        timeout \u003d 123"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_f62f00f4","line":397,"updated":"2014-07-21 10:41:13.000000000","message":"same","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        self.api.get(self.context, \u00271234\u0027)"},{"line_number":395,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":396,"context_line":"        self.assertEqual("},{"line_number":397,"context_line":"            fake_client_v2_factory.client.client.retries, retries)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def test_cinder_http_timeout(self):"},{"line_number":400,"context_line":"        timeout \u003d 123"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_22664fbc","line":397,"in_reply_to":"baada198_f62f00f4","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"af1bb370d707646cbaf50286bcd28b46081f1c9d","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        super(CinderV2TestCase, self).tearDown()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def assert_called(self, *args, **kwargs):"},{"line_number":345,"context_line":"        fake_client_v2_factory.assert_called(*args, **kwargs)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_context_with_catalog(self):"},{"line_number":348,"context_line":"        self.api.get(self.context, \u00271234\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_bda7a0bb","line":345,"updated":"2014-08-06 22:23:27.000000000","message":"assert_called() is actually not a method of mock.MagicMock(), and therefore MagicMock does its magic and calls a fake assert_called() method and returns None and raises no exceptions.\n\nThe above needs to be:\n\n fake_client_v2_factor.assert_called_once_with(*args, **kwargs)\n\nSee http://www.voidspace.org.uk/python/mock/mock.html for more information.","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"74254e080477b1086647c702d5a5c3f6d666dc9a","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        super(CinderV2TestCase, self).tearDown()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def assert_called(self, *args, **kwargs):"},{"line_number":345,"context_line":"        fake_client_v2_factory.assert_called(*args, **kwargs)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_context_with_catalog(self):"},{"line_number":348,"context_line":"        self.api.get(self.context, \u00271234\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_1d1decbf","line":345,"in_reply_to":"baada198_bda7a0bb","updated":"2014-08-06 22:31:33.000000000","message":"fake_client_v2_factory is not a MagicMock object. Take a look at line 231 for assert_called being defined.","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"}],"nova/tests/volume/test_cinder.py":[{"author":{"_account_id":7899,"name":"Kun Ge","email":"gekun@cn.ibm.com","username":"gekun"},"change_message_id":"3114a019c81d3e85dcc25451c99193829ebfa865","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class CinderClientTestCase(test.TestCase):"},{"line_number":47,"context_line":"    def test_cinderClient_version(self):"},{"line_number":48,"context_line":"        _old_volume_version_env \u003d cinder.os_volume_api_version"},{"line_number":49,"context_line":"        cinder.os_volume_api_version \u003d \u00272\u0027"},{"line_number":50,"context_line":"        catalog \u003d [{"},{"line_number":51,"context_line":"            \"type\": \"volume\","},{"line_number":52,"context_line":"            \"name\": \"cinder\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoJg%3D","line":49,"updated":"2013-09-02 09:14:04.000000000","message":"I prefer to use a constant variable instead of a string literal.","commit_id":"45d31922b88c3778f49512bf1665ece0de0b4eb2"},{"author":{"_account_id":7899,"name":"Kun Ge","email":"gekun@cn.ibm.com","username":"gekun"},"change_message_id":"3114a019c81d3e85dcc25451c99193829ebfa865","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                     service_catalog\u003dcatalog)"},{"line_number":57,"context_line":"        c \u003d cinder.cinderclient(self.context)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.assertIsInstance(c, cinder_client.get_client_class(2))"},{"line_number":60,"context_line":"        cinder.os_volume_api_version \u003d _old_volume_version_env"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoJE%3D","line":59,"updated":"2013-09-02 09:14:04.000000000","message":"same as the previous comment","commit_id":"45d31922b88c3778f49512bf1665ece0de0b4eb2"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"ee416b823e517d3fe5acce71afb9c748748adac4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class CinderClientTestCase(test.TestCase):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    V2_VOLUME_API_VALUE \u003d 2"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_cinderClient_version(self):"},{"line_number":54,"context_line":"        CONF.set_override(\u0027volume_api_version\u0027, self.V2_VOLUME_API_VALUE)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2F7bY%3D","line":51,"updated":"2013-09-17 02:58:19.000000000","message":"Please add a setUp() method and put the variable to the method.","commit_id":"7f2f2bc3f3a62b03cf1d4ec49c38957708d70283"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"05dfb2cbf1804a186c03c74350c46472570d90ed","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            \"endpoints\": [{\"publicURL\": \"http://localhost:8776/v2/project_id\"}]"},{"line_number":60,"context_line":"        }]"},{"line_number":61,"context_line":"        self.context \u003d context.RequestContext(\u0027username\u0027, \u0027project_id\u0027,"},{"line_number":62,"context_line":"                                     service_catalog\u003dcatalog)"},{"line_number":63,"context_line":"        c \u003d cinder.cinderclient(self.context)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.assertIsInstance(c, cinder_client."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BtUc%3D","line":62,"updated":"2013-11-21 09:18:02.000000000","message":"could you please make this alignment better, align the service_catelog with the parentheses","commit_id":"a856af754f723e4bec36bc44f767dbc6f1a4a618"}],"nova/volume/cinder.py":[{"author":{"_account_id":7899,"name":"Kun Ge","email":"gekun@cn.ibm.com","username":"gekun"},"change_message_id":"3114a019c81d3e85dcc25451c99193829ebfa865","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    # Use os_volume_api_version value to judge which cinder client should"},{"line_number":106,"context_line":"    # be called"},{"line_number":107,"context_line":"    c \u003d cinder_client.Client(os_volume_api_version,"},{"line_number":108,"context_line":"                            context.user_id,"},{"line_number":109,"context_line":"                            context.auth_token,"},{"line_number":110,"context_line":"                            project_id\u003dcontext.project_id,"},{"line_number":111,"context_line":"                            auth_url\u003durl,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoFE%3D","line":108,"updated":"2013-09-02 09:14:04.000000000","message":"I prefer to add an additional space before each parameter line other than the first to make the format compatible with the previous version.","commit_id":"45d31922b88c3778f49512bf1665ece0de0b4eb2"},{"author":{"_account_id":7899,"name":"Kun Ge","email":"gekun@cn.ibm.com","username":"gekun"},"change_message_id":"3114a019c81d3e85dcc25451c99193829ebfa865","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        d[\u0027attach_status\u0027] \u003d \u0027detached\u0027"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    # volume(cinder) v2 API use \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":147,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":148,"context_line":"    if os_volume_api_version \u003d\u003d DEFAULT_OS_VOLUME_API_VERSION:"},{"line_number":149,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":150,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoHY%3D","line":147,"updated":"2013-09-02 09:14:04.000000000","message":"I prefer the comment above should be written as: volume(cinder) v2 API uses \u0027name\u0027 and \u0027description\u0027 instead of \u0027display_name\u0027 and \u0027display_description\u0027 of the volume object, respectively.","commit_id":"45d31922b88c3778f49512bf1665ece0de0b4eb2"},{"author":{"_account_id":7899,"name":"Kun Ge","email":"gekun@cn.ibm.com","username":"gekun"},"change_message_id":"3114a019c81d3e85dcc25451c99193829ebfa865","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    d[\u0027size\u0027] \u003d snapshot.size"},{"line_number":177,"context_line":"    d[\u0027created_at\u0027] \u003d snapshot.created_at"},{"line_number":178,"context_line":"    # volume(cinder) v2 API use \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":179,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for snapshot."},{"line_number":180,"context_line":"    if os_volume_api_version \u003d\u003d DEFAULT_OS_VOLUME_API_VERSION:"},{"line_number":181,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":182,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoF8%3D","line":179,"updated":"2013-09-02 09:14:04.000000000","message":"same as above comment","commit_id":"45d31922b88c3778f49512bf1665ece0de0b4eb2"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"99099c1e07c6dcd665725e61ece9bb07083cb13b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FfyM%3D","line":37,"updated":"2013-09-04 03:47:40.000000000","message":"I\u0027m not sure why not we using a configuration item to do this? are there some values to load it from ENV variables?","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0f888e267e070dca57ba648cf1106e8f0e10f271","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fet4%3D","line":37,"in_reply_to":"AAAASn%2F%2Fexc%3D","updated":"2013-09-04 10:09:41.000000000","message":"Let\u0027s check cinder as the example:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/common/config.py#L98\n\nhttps://github.com/openstack/cinder/blob/master/cinder/image/glance.py#L65\n\nGlance api also have version 1.1 and 2.1, and when Cinder services consume image resource it need using a glanceclient client object with a particular version to access Glance service.\n\nSame as cinderclient, glanceclient also support using ENV to switch API version for accessing (but this only for its shell interface part) like this:\n\nlzy@dev-controller-master:~/workspace/openstack-org/cinder$ glance --help | grep API_VERSION\n              [--os-image-api-version OS_IMAGE_API_VERSION]\n  --os-image-api-version OS_IMAGE_API_VERSION\n                        Defaults to env[OS_IMAGE_API_VERSION] or 1\n\nAs I mentioned in those comments, I\u0027d like you adding a explicit configuration to Nova to control cinderclient version.","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"d364494c2915e2a6dcb1afa923ccd6c6ce7d3fb1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fexc%3D","line":37,"in_reply_to":"AAAASn%2F%2FfBg%3D","updated":"2013-09-04 09:57:08.000000000","message":"yes, I agree with you, but we just use ENV variable to get proper cinder client, also it is only way to get available cinder client.","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"2046743cc078624d692ea7dc6a48c388544ab9e8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FfBg%3D","line":37,"in_reply_to":"AAAASn%2F%2FfHc%3D","updated":"2013-09-04 08:19:59.000000000","message":"This approach is for client not for server side. You current modified code is running on nova server side, you I don\u0027t think it a good way to control nova-* services to using a ENV variable.","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5f8873ae2cb8c5ecd0910bf442ac9d1b1fdb8699","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FfHc%3D","line":37,"in_reply_to":"AAAASn%2F%2Ffjw%3D","updated":"2013-09-04 07:47:47.000000000","message":"Hi Zhi Yan,\n\nCurrently, we do not use any configuration item to control it, just like other value, e.g. \nexport OS_USERNAME\u003dadmin\nexport OS_TENANT_NAME\u003dservice\nexport OS_PASSWORD\u003dpassw0rd\nexport OS_AUTH_URL\u003dhttp://9.123.137.71:5000/v2.0/\nexport OS_REGION_NAME\u003dRegionOne\n\nIf we do not provide this value, our code will consider it as \u00271\u0027. \n\nPls refer to cinderclient/shell.py","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"33e4c6f54bdf4f76a237f559069f28a5481b0cbd","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Ffjw%3D","line":37,"in_reply_to":"AAAASn%2F%2Ffm4%3D","updated":"2013-09-04 05:16:33.000000000","message":"My meaning is that we\u0027d better using a configuration item to control this flag but a ENV variable.","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"abd025b5193dc0237e9f45d2cc2f061971f9bf04","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d \"1\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Ffm4%3D","line":37,"in_reply_to":"AAAASn%2F%2FfyM%3D","updated":"2013-09-04 04:56:52.000000000","message":"Hi Zhi Yan,\n\nWe can use \"export OS_VOLUME_API_VERSION\u003d2\" to change the volume api version. Also if do not provide this value, the default value is \u00271\u0027.","commit_id":"78b5c5b9c1dcb9216c8d88012c2efdd83ed97081"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"9f614f49b2a1b440c0c9181ee7dbf6bec6e9f60d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d 1"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FYyQ%3D","line":37,"updated":"2013-09-05 11:07:03.000000000","message":"I consider we don\u0027t really need this, since volume_api_version has a default value as you wrote.","commit_id":"4031c7ea4ae8ff08cdb8a0cbead9d8c0aa9672df"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"2581d37052e2bb62313de6f75b5bce9c52a6f0b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":35,"context_line":"from nova.openstack.common import log as logging"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DEFAULT_OS_VOLUME_API_VERSION \u003d 1"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cinder_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FVo0%3D","line":37,"in_reply_to":"AAAASn%2F%2FYyQ%3D","updated":"2013-09-06 02:58:26.000000000","message":"Hi Zhi Yan,\nI do not think so,  use a constant variable just for line#147 and #179","commit_id":"4031c7ea4ae8ff08cdb8a0cbead9d8c0aa9672df"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"31a4ec5a8be3c6f7e91118ea0873bc9e2ac7ce6f","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    d[\u0027progress\u0027] \u003d snapshot.progress"},{"line_number":175,"context_line":"    d[\u0027size\u0027] \u003d snapshot.size"},{"line_number":176,"context_line":"    d[\u0027created_at\u0027] \u003d snapshot.created_at"},{"line_number":177,"context_line":"    # volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":178,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for snapshot."},{"line_number":179,"context_line":"    if CONF.volume_api_version \u003d\u003d DEFAULT_OS_VOLUME_API_VERSION:"},{"line_number":180,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FVjo%3D","line":177,"updated":"2013-09-06 03:40:09.000000000","message":"Please using \u0027NOTE(xxx)\u0027 instead.","commit_id":"4031c7ea4ae8ff08cdb8a0cbead9d8c0aa9672df"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"31a4ec5a8be3c6f7e91118ea0873bc9e2ac7ce6f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    d[\u0027created_at\u0027] \u003d snapshot.created_at"},{"line_number":177,"context_line":"    # volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":178,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for snapshot."},{"line_number":179,"context_line":"    if CONF.volume_api_version \u003d\u003d DEFAULT_OS_VOLUME_API_VERSION:"},{"line_number":180,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":181,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"},{"line_number":182,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FVjs%3D","line":179,"updated":"2013-09-06 03:40:09.000000000","message":"Why not use \u00271\u0027 here directly, but need a global constant variable. Since the logic will be very clear under your above comments at L177. Anyway this is not a blocker for me. Same as L147.","commit_id":"4031c7ea4ae8ff08cdb8a0cbead9d8c0aa9672df"},{"author":{"_account_id":2967,"name":"ljjjustin","email":"iamljj@gmail.com","username":"ljjjustin"},"change_message_id":"f3a8cf110d7197f376210f28be0cf8bc7c07e9a5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027cinder_http_retries\u0027,"},{"line_number":51,"context_line":"               default\u003d3,"},{"line_number":52,"context_line":"               help\u003d\u0027Number of cinderclient retries on failed http calls\u0027),"},{"line_number":53,"context_line":"    cfg.IntOpt(\u0027volume_api_version\u0027,"},{"line_number":54,"context_line":"               default\u003d1,"},{"line_number":55,"context_line":"               help\u003d\u0027Version of the volume api to use\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027cinder_api_insecure\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B9qo%3D","line":53,"updated":"2013-11-18 02:17:44.000000000","message":"I prefer to change the type to StrOpt. In most openstack project, version is described by a string. I think we should keep consistent with other projects.","commit_id":"b366abf6ffe9e8366b2abca48e76acf66f6ad95d"},{"author":{"_account_id":2967,"name":"ljjjustin","email":"iamljj@gmail.com","username":"ljjjustin"},"change_message_id":"e25a49a90d94066e4cda00f05795d86d9ea27303","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":143,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":144,"context_line":"    if CONF.volume_api_version \u003d\u003d 1:"},{"line_number":145,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":146,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":147,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B9io%3D","line":144,"updated":"2013-11-18 02:51:10.000000000","message":"This should be \u00271\u0027.","commit_id":"88bf29c44db9426d1dc4b7857773e5f3baaad225"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"6eb9ac5fd4aea458d77f1b9cd1337bbbd44ea8a7","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":143,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":144,"context_line":"    if CONF.volume_api_version \u003d\u003d 1:"},{"line_number":145,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":146,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":147,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B9eU%3D","line":144,"in_reply_to":"AAAATn%2F%2B9io%3D","updated":"2013-11-18 03:09:21.000000000","message":"Hi Jiajun,\n\nI will change the type to int. Because someone tell me should use int rather than string. \n\nAlso I found the same use in glance:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/common/config.py#L100\n\nI will change it.","commit_id":"88bf29c44db9426d1dc4b7857773e5f3baaad225"},{"author":{"_account_id":2967,"name":"ljjjustin","email":"iamljj@gmail.com","username":"ljjjustin"},"change_message_id":"e25a49a90d94066e4cda00f05795d86d9ea27303","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    d[\u0027created_at\u0027] \u003d snapshot.created_at"},{"line_number":174,"context_line":"    # NOTE(dzyu)volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":175,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for snapshot."},{"line_number":176,"context_line":"    if CONF.volume_api_version \u003d\u003d 1:"},{"line_number":177,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":178,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"},{"line_number":179,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B9ik%3D","line":176,"updated":"2013-11-18 02:51:10.000000000","message":"this should be \u00271\u0027.","commit_id":"88bf29c44db9426d1dc4b7857773e5f3baaad225"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"05dfb2cbf1804a186c03c74350c46472570d90ed","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               default\u003d3,"},{"line_number":52,"context_line":"               help\u003d\u0027Number of cinderclient retries on failed http calls\u0027),"},{"line_number":53,"context_line":"    cfg.IntOpt(\u0027volume_api_version\u0027,"},{"line_number":54,"context_line":"               default\u003d1,"},{"line_number":55,"context_line":"               help\u003d\u0027Version of the volume api to use\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027cinder_api_insecure\u0027,"},{"line_number":57,"context_line":"               default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BtT4%3D","line":54,"updated":"2013-11-21 09:18:02.000000000","message":"thinking about the default version a little bit, I think we can set the default value to 2, since we will use version 2 from now on, although it will bring some effort to pass the unit tests but I think it worth to do it.","commit_id":"a856af754f723e4bec36bc44f767dbc6f1a4a618"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b05a0068bf8ebcf0fc0fde91b5b31bdd23f1e1d9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               default\u003d3,"},{"line_number":52,"context_line":"               help\u003d\u0027Number of cinderclient retries on failed http calls\u0027),"},{"line_number":53,"context_line":"    cfg.IntOpt(\u0027volume_api_version\u0027,"},{"line_number":54,"context_line":"               default\u003d1,"},{"line_number":55,"context_line":"               help\u003d\u0027Version of the volume api to use\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027cinder_api_insecure\u0027,"},{"line_number":57,"context_line":"               default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BsVA%3D","line":54,"in_reply_to":"AAAATn%2F%2BtT4%3D","updated":"2013-11-21 13:31:05.000000000","message":"This sounds similar to the ML thread here for nova picking which version of the glance API to use:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2013-October/016875.html","commit_id":"a856af754f723e4bec36bc44f767dbc6f1a4a618"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"05dfb2cbf1804a186c03c74350c46472570d90ed","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    # NOTE(dzyu) Use CONF.volume_api_version value to judge which cinder client"},{"line_number":102,"context_line":"    # should be called"},{"line_number":103,"context_line":"    c \u003d cinder_client.Client(CONF.volume_api_version,"},{"line_number":104,"context_line":"                             context.user_id,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BtTg%3D","line":101,"updated":"2013-11-21 09:18:02.000000000","message":"which version of cinder client","commit_id":"a856af754f723e4bec36bc44f767dbc6f1a4a618"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"c802e4ee4c2bfb1e4e087d394352a1e21f504880","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":226,"context_line":"        scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":227,"context_line":"        components \u003d path.split(\"/\")"},{"line_number":228,"context_line":"        valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":229,"context_line":"        for version in valid_versions:"},{"line_number":230,"context_line":"            if version in components:"},{"line_number":231,"context_line":"                return version[1:]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F8nzU%3D","line":228,"updated":"2013-12-24 07:19:37.000000000","message":"it worth to move the valid_versions into module level, we\u0027d better to comments the reason to doing so.","commit_id":"f5cbdb4195c0258e32114df6e04665316c2e3d30"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"c802e4ee4c2bfb1e4e087d394352a1e21f504880","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        for version in valid_versions:"},{"line_number":230,"context_line":"            if version in components:"},{"line_number":231,"context_line":"                return version[1:]"},{"line_number":232,"context_line":"        msg \u003d \"Invalid client version \u0027%s\u0027. must be one of: %s\" % ("},{"line_number":233,"context_line":"            (version, \u0027, \u0027.join(valid_versions)))"},{"line_number":234,"context_line":"        raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F8nzQ%3D","line":232,"updated":"2013-12-24 07:19:37.000000000","message":"message i18n issue needs to be fixed.","commit_id":"f5cbdb4195c0258e32114df6e04665316c2e3d30"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"b72b1c0a9748ec9a4dee5842a60b711e95432941","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Fee0%3D","line":71,"updated":"2014-01-13 14:22:58.000000000","message":"Why not consider use the upper case to represent to global variable?","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BlAI%3D","line":71,"in_reply_to":"AAAAUH%2F%2Fee0%3D","updated":"2014-01-24 09:31:50.000000000","message":"I just need to use it in unit-test, and also  upper case is not standard","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a75f0531299600705c70bee82ced12f8789632cc","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    return wrapper"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def get_cinder_client_version(url):"},{"line_number":228,"context_line":"        magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":229,"context_line":"        scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":230,"context_line":"        components \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bl4Y%3D","line":227,"updated":"2014-01-24 02:38:45.000000000","message":"Since this is a public method, it should have a docstring that explains what it\u0027s doing with the URL and what format the return value is, i.e. v1 string or 1 string, or int, etc.  I know it\u0027s a \"1\" or \"2\" but someone calling it doesn\u0027t unless they read the code.","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    return wrapper"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def get_cinder_client_version(url):"},{"line_number":228,"context_line":"        magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":229,"context_line":"        scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":230,"context_line":"        components \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bkxg%3D","line":227,"in_reply_to":"AAAAUH%2F%2Bl4Y%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a75f0531299600705c70bee82ced12f8789632cc","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def get_cinder_client_version(url):"},{"line_number":228,"context_line":"        magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":229,"context_line":"        scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":230,"context_line":"        components \u003d path.split(\"/\")"},{"line_number":231,"context_line":"        for version in valid_versions:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bl48%3D","line":228,"updated":"2014-01-24 02:38:45.000000000","message":"Alignment is off here.","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5adaa491a2a698e9b72c83678ab70708c1717f37","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def get_cinder_client_version(url):"},{"line_number":228,"context_line":"        magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":229,"context_line":"        scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":230,"context_line":"        components \u003d path.split(\"/\")"},{"line_number":231,"context_line":"        for version in valid_versions:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2Bk%2F4%3D","line":228,"in_reply_to":"AAAAUH%2F%2Bl48%3D","updated":"2014-01-24 09:31:50.000000000","message":"Done","commit_id":"3b74b26105b07e1ad72c6a207381ce05ce69a464"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6508e2596bec3f3e0fcfc715a499d157f70dda2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import sys"},{"line_number":25,"context_line":"try:"},{"line_number":26,"context_line":"    import urlparse"},{"line_number":27,"context_line":"except ImportError:"},{"line_number":28,"context_line":"    import urllib.parse as urlparse"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinderclient import client as cinder_client"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2Bi24%3D","line":27,"updated":"2014-01-24 15:25:46.000000000","message":"I don\u0027t see anywhere else in the code where we have to handle this ImportError and then import as import urllib.parse as urlparse, so why is this necessary, i.e. why isn\u0027t import urlparse good enough?\n\nI\u0027m assuming you\u0027re doing it this way because that\u0027s what cinderclient does, and it looks like the get_cinder_client_version code is more or less copied from cinderclient, so you did the same for the import statement.","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"8e57ce677956fb71a108ee81ced38b0b23139a5f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import sys"},{"line_number":25,"context_line":"try:"},{"line_number":26,"context_line":"    import urlparse"},{"line_number":27,"context_line":"except ImportError:"},{"line_number":28,"context_line":"    import urllib.parse as urlparse"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinderclient import client as cinder_client"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BNB8%3D","line":27,"in_reply_to":"AAAAUH%2F%2Bi24%3D","updated":"2014-01-29 04:23:07.000000000","message":"Yes, I write this code base on what cinderclient does.\nI will change it to just import urlparse","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6508e2596bec3f3e0fcfc715a499d157f70dda2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"try:"},{"line_number":26,"context_line":"    import urlparse"},{"line_number":27,"context_line":"except ImportError:"},{"line_number":28,"context_line":"    import urllib.parse as urlparse"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinderclient import client as cinder_client"},{"line_number":31,"context_line":"from cinderclient import exceptions as cinder_exception"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BiyY%3D","line":28,"updated":"2014-01-24 15:25:46.000000000","message":"pylint is also complaining about this:\n\nnova/volume/cinder.py:28: [E0611] No name \u0027parse\u0027 in module \u0027urllib\u0027","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"8e57ce677956fb71a108ee81ced38b0b23139a5f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"try:"},{"line_number":26,"context_line":"    import urlparse"},{"line_number":27,"context_line":"except ImportError:"},{"line_number":28,"context_line":"    import urllib.parse as urlparse"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinderclient import client as cinder_client"},{"line_number":31,"context_line":"from cinderclient import exceptions as cinder_exception"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BNBY%3D","line":28,"in_reply_to":"AAAAUH%2F%2BiyY%3D","updated":"2014-01-29 04:23:07.000000000","message":"Will remove handle importError","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6508e2596bec3f3e0fcfc715a499d157f70dda2","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2Bi2o%3D","line":71,"updated":"2014-01-24 15:25:46.000000000","message":"In a previous patch set you said this variable was necessary for the unit tests to work, but why can\u0027t you just work on what you have mocked out for the service catalog in the unit tests?  Can\u0027t you essentially \"discover\" the version to use based on the service catalog, which you are mocking out in the tests?\n\nOr is this still needed for checking v1 vs v2 for name vs display_name in the requests that go to cinder?","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"8e57ce677956fb71a108ee81ced38b0b23139a5f","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BNBs%3D","line":71,"in_reply_to":"AAAAUH%2F%2Bi2o%3D","updated":"2014-01-29 04:23:07.000000000","message":"Yes, it still needed for line #148 and line #180\nIf in unit test, since we mocked the service catalog, but we still to use cinder.cinderclient to parse the url to judge the cinder client version.","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6508e2596bec3f3e0fcfc715a499d157f70dda2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def cinderclient(context):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2Bi0Q%3D","line":72,"updated":"2014-01-24 15:25:46.000000000","message":"This doesn\u0027t need to be at this scope, you could move it to the get_cinder_client_version method like the client.","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"8e57ce677956fb71a108ee81ced38b0b23139a5f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":72,"context_line":"valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def cinderclient(context):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BNBg%3D","line":72,"in_reply_to":"AAAAUH%2F%2Bi0Q%3D","updated":"2014-01-29 04:23:07.000000000","message":"Will do it, thanks","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6508e2596bec3f3e0fcfc715a499d157f70dda2","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    for version in valid_versions:"},{"line_number":238,"context_line":"        if version in components:"},{"line_number":239,"context_line":"            return version[1:]"},{"line_number":240,"context_line":"    msg \u003d \"Invalid client version, must be one of: %s\" % valid_versions"},{"line_number":241,"context_line":"    raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2Bi2A%3D","line":240,"updated":"2014-01-24 15:25:46.000000000","message":"This should be a translatable message, i.e. wrap in _().","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"8e57ce677956fb71a108ee81ced38b0b23139a5f","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    for version in valid_versions:"},{"line_number":238,"context_line":"        if version in components:"},{"line_number":239,"context_line":"            return version[1:]"},{"line_number":240,"context_line":"    msg \u003d \"Invalid client version, must be one of: %s\" % valid_versions"},{"line_number":241,"context_line":"    raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BNAk%3D","line":240,"in_reply_to":"AAAAUH%2F%2Bi2A%3D","updated":"2014-01-29 04:23:07.000000000","message":"Will change it, thanks!","commit_id":"0e25b5af49f83df05fc2565a2386ebea83191540"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"7e631c31582314434321ee21d77081951601f2b6","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    for version in valid_versions:"},{"line_number":235,"context_line":"        if version in components:"},{"line_number":236,"context_line":"            return version[1:]"},{"line_number":237,"context_line":"    msg \u003d _(\"Invalid client version, must be one of: %s\" % valid_versions)"},{"line_number":238,"context_line":"    raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2BB5g%3D","line":237,"updated":"2014-01-30 20:47:35.000000000","message":"pep8 faiure here. Should be:\n  msg \u003d _(\"Invalid client version, must be one of: %s\") % valid_versions","commit_id":"82644fee796fcdf273afc6751b39039768540105"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"7e702dcac4fe3d53b1dd1d41ea3528f0bd1b234c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    for version in valid_versions:"},{"line_number":235,"context_line":"        if version in components:"},{"line_number":236,"context_line":"            return version[1:]"},{"line_number":237,"context_line":"    msg \u003d _(\"Invalid client version, must be one of: %s\" % valid_versions)"},{"line_number":238,"context_line":"    raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUX%2F%2F6G0%3D","line":237,"in_reply_to":"AAAAUH%2F%2BB5g%3D","updated":"2014-02-10 02:27:03.000000000","message":"Done,  thanks for the comment","commit_id":"82644fee796fcdf273afc6751b39039768540105"},{"author":{"_account_id":9190,"name":"Glenn M. Gobeli","email":"glenn.gobeli@gmail.com","username":"ggobeli"},"change_message_id":"f9bfef56bcb412a21bda8299e031dd6bac6bd72b","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def cinderclient(context):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FkpY%3D","line":66,"updated":"2014-02-25 21:12:55.000000000","message":"Not crazy about using the global...","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"1f310c7ce396e5daec60c1fe1a3dde37a80e7733","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"cinder_client_version \u003d \"1\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def cinderclient(context):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FfdU%3D","line":66,"in_reply_to":"AAAAU3%2F%2FkpY%3D","updated":"2014-02-26 10:21:07.000000000","message":"seem like must to use the global, since cinderclient is class method, we do not use self.cinder_client_version","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0abe7b0aab6070e955d941d7cc8b6f982421d362","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":98,"context_line":"    if url is not None:"},{"line_number":99,"context_line":"        global cinder_client_version"},{"line_number":100,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":101,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"},{"line_number":102,"context_line":"                             context.user_id,"},{"line_number":103,"context_line":"                             context.auth_token,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FlFU%3D","line":100,"updated":"2014-02-25 20:58:11.000000000","message":"So you\u0027re going to change the global every time you make a connection?  Why not just set it once since you\u0027d have to restart the service if the config changes anyway right?\n\nElse should we think about caching the url-to-version mapping so we don\u0027t have to do this lookup all the time?","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"1f310c7ce396e5daec60c1fe1a3dde37a80e7733","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":98,"context_line":"    if url is not None:"},{"line_number":99,"context_line":"        global cinder_client_version"},{"line_number":100,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":101,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"},{"line_number":102,"context_line":"                             context.user_id,"},{"line_number":103,"context_line":"                             context.auth_token,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FfaE%3D","line":100,"in_reply_to":"AAAAU3%2F%2FlFU%3D","updated":"2014-02-26 10:21:07.000000000","message":"How to just set it once?  the value is base on the provided url, I think it is hard to catcing the url-to-version, due to url is undefine","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0abe7b0aab6070e955d941d7cc8b6f982421d362","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":141,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":142,"context_line":"    if cinder_client_version \u003d\u003d \"1\":"},{"line_number":143,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":144,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":145,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Fk%2FY%3D","line":142,"updated":"2014-02-25 20:58:11.000000000","message":"Is there a better way we can handle this that doesn\u0027t require a global?  Is there something we can introspect from the client that will tell us which version it is?  It looks like there is a version field on the HTTPClient in Cinder that we could use instead of the global, then just pass the client (or version string) into these translate/untranslate helper methods.","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0561ea5838a4fb2877e11443a0f4750eb082cf48","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":141,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":142,"context_line":"    if cinder_client_version \u003d\u003d \"1\":"},{"line_number":143,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":144,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":145,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAVX%2F%2F6L8%3D","line":142,"in_reply_to":"AAAAU3%2F%2Ffhw%3D","updated":"2014-02-27 13:06:09.000000000","message":"OK, it looks like you could use service_type on the HTTPClient though, it\u0027s \u0027volume\u0027 in v1 and \u0027volumev2\u0027 in v2.\n\nAlternatively, couldn\u0027t we just check vol to see if it has a display_name attribute and if so you know it\u0027s a v1 volume and handle accordingly?","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"1f310c7ce396e5daec60c1fe1a3dde37a80e7733","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":141,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":142,"context_line":"    if cinder_client_version \u003d\u003d \"1\":"},{"line_number":143,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":144,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":145,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Ffhw%3D","line":142,"in_reply_to":"AAAAU3%2F%2Fk%2FY%3D","updated":"2014-02-26 10:21:07.000000000","message":"I need investigate it more, but use a version field on the HTTPClient is not good method, since cinderclient do not update this value any more. You can check it","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"572649c8271d17594f9d09de051c78d6069876a0","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":141,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":142,"context_line":"    if cinder_client_version \u003d\u003d \"1\":"},{"line_number":143,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":144,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":145,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAVX%2F%2Fzvs%3D","line":142,"in_reply_to":"AAAAVX%2F%2F6L8%3D","updated":"2014-02-28 05:54:47.000000000","message":"Oh, check if it has a display_name or name will be more clear and easy, thanks!","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0abe7b0aab6070e955d941d7cc8b6f982421d362","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":173,"context_line":"    # \u0027description\u0027 instead of \u0027display_description\u0027 for snapshot."},{"line_number":174,"context_line":"    if cinder_client_version \u003d\u003d \"1\":"},{"line_number":175,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":176,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"},{"line_number":177,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Fk%2Bs%3D","line":174,"updated":"2014-02-25 20:58:11.000000000","message":"ditto","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08600b338c46288ef1fd9a423d60afb67e5e676d","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    return wrapper"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"def get_cinder_client_version(url):"},{"line_number":222,"context_line":"    \"\"\"Parse cinder client version by endpoint url."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    :param url: The cinder endpoint url."}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FlYY%3D","line":221,"updated":"2014-02-25 19:59:06.000000000","message":"Ahh.. here\u0027s what I was looking for earlier ;)","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0abe7b0aab6070e955d941d7cc8b6f982421d362","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    return wrapper"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"def get_cinder_client_version(url):"},{"line_number":222,"context_line":"    \"\"\"Parse cinder client version by endpoint url."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    :param url: The cinder endpoint url."}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FlBw%3D","line":221,"updated":"2014-02-25 20:58:11.000000000","message":"Decorate with @staticmethod?","commit_id":"411e179530bd167999d9f8ef0eaac49bc020b7a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                         endpoint_type\u003dendpoint_type)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":96,"context_line":"    if url is not None:"},{"line_number":97,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtC4%3D","line":96,"updated":"2014-02-28 22:05:57.000000000","message":"How can url be None?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                         endpoint_type\u003dendpoint_type)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":96,"context_line":"    if url is not None:"},{"line_number":97,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F%2BZM%3D","line":96,"in_reply_to":"AAAAVX%2F%2FtC4%3D","updated":"2014-03-03 06:19:00.000000000","message":"Well done, thanks!","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    if url is not None:"},{"line_number":97,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"},{"line_number":100,"context_line":"                             context.user_id,"},{"line_number":101,"context_line":"                             context.auth_token,"},{"line_number":102,"context_line":"                             project_id\u003dcontext.project_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtDE%3D","line":99,"updated":"2014-02-28 22:05:57.000000000","message":"NameError if url is None, but is that possible?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    if url is not None:"},{"line_number":97,"context_line":"        cinder_client_version \u003d get_cinder_client_version(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    c \u003d cinder_client.Client(cinder_client_version,"},{"line_number":100,"context_line":"                             context.user_id,"},{"line_number":101,"context_line":"                             context.auth_token,"},{"line_number":102,"context_line":"                             project_id\u003dcontext.project_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F%2BZE%3D","line":99,"in_reply_to":"AAAAVX%2F%2FtDE%3D","updated":"2014-03-03 06:19:00.000000000","message":"Yes, I will do this case","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    # noauth extracts user_id:project_id from auth_token"},{"line_number":108,"context_line":"    c.client.auth_token \u003d context.auth_token or \u0027%s:%s\u0027 % (context.user_id,"},{"line_number":109,"context_line":"                                                           context.project_id)"},{"line_number":110,"context_line":"    c.client.management_url \u003d url"},{"line_number":111,"context_line":"    return c"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtBA%3D","line":110,"updated":"2014-02-28 22:05:57.000000000","message":"We should consider caching the client based on the url, like what we do for the neutron client when using the admin context.\n\nhttps://github.com/openstack/nova/blob/master/nova/network/neutronv2/__init__.py\n\nMaybe we only do it if it\u0027s an admin context.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    # noauth extracts user_id:project_id from auth_token"},{"line_number":108,"context_line":"    c.client.auth_token \u003d context.auth_token or \u0027%s:%s\u0027 % (context.user_id,"},{"line_number":109,"context_line":"                                                           context.project_id)"},{"line_number":110,"context_line":"    c.client.management_url \u003d url"},{"line_number":111,"context_line":"    return c"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F9pY%3D","line":110,"in_reply_to":"AAAAVX%2F%2FtBA%3D","updated":"2014-03-03 06:19:00.000000000","message":"Good idea for it, I can do that, but I suggest we show open one new codechange for it, since this code change just enable nova support cinder v2, what do you think, Matt?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d4586c6f1691ae5dc8a4ad373ccd178a36d45469","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    # noauth extracts user_id:project_id from auth_token"},{"line_number":108,"context_line":"    c.client.auth_token \u003d context.auth_token or \u0027%s:%s\u0027 % (context.user_id,"},{"line_number":109,"context_line":"                                                           context.project_id)"},{"line_number":110,"context_line":"    c.client.management_url \u003d url"},{"line_number":111,"context_line":"    return c"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2Frkc%3D","line":110,"in_reply_to":"AAAAVn%2F%2F9pY%3D","updated":"2014-03-04 17:54:27.000000000","message":"I\u0027d be OK with a follow on patch to do some caching.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    if hasattr(vol, \u0027display_name\u0027):"},{"line_number":140,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":141,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":142,"context_line":"    elif hasattr(vol, \u0027name\u0027):"},{"line_number":143,"context_line":"        d[\u0027name\u0027] \u003d vol.name"},{"line_number":144,"context_line":"        d[\u0027description\u0027] \u003d vol.description"},{"line_number":145,"context_line":"    # TODO(jdg): Information may be lost in this translation"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtCs%3D","line":142,"updated":"2014-02-28 22:05:57.000000000","message":"Just else.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    if hasattr(vol, \u0027display_name\u0027):"},{"line_number":140,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":141,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":142,"context_line":"    elif hasattr(vol, \u0027name\u0027):"},{"line_number":143,"context_line":"        d[\u0027name\u0027] \u003d vol.name"},{"line_number":144,"context_line":"        d[\u0027description\u0027] \u003d vol.description"},{"line_number":145,"context_line":"    # TODO(jdg): Information may be lost in this translation"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F%2BYY%3D","line":142,"in_reply_to":"AAAAVX%2F%2FtCs%3D","updated":"2014-03-03 06:19:00.000000000","message":"Done","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    if hasattr(snapshot, \u0027display_name\u0027):"},{"line_number":172,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":173,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"},{"line_number":174,"context_line":"    elif hasattr(snapshot, \u0027name\u0027):"},{"line_number":175,"context_line":"        d[\u0027name\u0027] \u003d snapshot.name"},{"line_number":176,"context_line":"        d[\u0027description\u0027] \u003d snapshot.description"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtCk%3D","line":174,"updated":"2014-02-28 22:05:57.000000000","message":"Just else.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    if hasattr(snapshot, \u0027display_name\u0027):"},{"line_number":172,"context_line":"        d[\u0027display_name\u0027] \u003d snapshot.display_name"},{"line_number":173,"context_line":"        d[\u0027display_description\u0027] \u003d snapshot.display_description"},{"line_number":174,"context_line":"    elif hasattr(snapshot, \u0027name\u0027):"},{"line_number":175,"context_line":"        d[\u0027name\u0027] \u003d snapshot.name"},{"line_number":176,"context_line":"        d[\u0027description\u0027] \u003d snapshot.description"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F%2BYc%3D","line":174,"in_reply_to":"AAAAVX%2F%2FtCk%3D","updated":"2014-03-03 06:19:00.000000000","message":"Done","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e35a28c40b13c5959bfc35e32e62217f632b1b8b","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    return wrapper"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def get_cinder_client_version(url):"},{"line_number":219,"context_line":"    \"\"\"Parse cinder client version by endpoint url."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    :param url: The cinder endpoint url."}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVX%2F%2FtBg%3D","line":218,"updated":"2014-02-28 22:05:57.000000000","message":"I\u0027d still like to consider caching the mapping of the url to the version, see how we do that with the neutron client here:\n\nhttps://github.com/openstack/nova/blob/master/nova/network/neutronv2/__init__.py\n\nSince it looks like this will get hit every time we make a connection to the client.","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"5bd591453b5bfbf1c6e5b119e6be7e1662dce45d","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    return wrapper"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def get_cinder_client_version(url):"},{"line_number":219,"context_line":"    \"\"\"Parse cinder client version by endpoint url."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    :param url: The cinder endpoint url."}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2F9pU%3D","line":218,"in_reply_to":"AAAAVX%2F%2FtBg%3D","updated":"2014-03-03 06:19:00.000000000","message":"if we want to caching the client, then we do not to cach the mapping of the url to the version, is it right?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d4586c6f1691ae5dc8a4ad373ccd178a36d45469","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    return wrapper"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def get_cinder_client_version(url):"},{"line_number":219,"context_line":"    \"\"\"Parse cinder client version by endpoint url."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    :param url: The cinder endpoint url."}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAVn%2F%2FrkA%3D","line":218,"in_reply_to":"AAAAVn%2F%2F9pU%3D","updated":"2014-03-04 17:54:27.000000000","message":"I guess I\u0027m not sure how static the URL is, does it actually change in each request, or is it static based on the config file and/or service catalog?","commit_id":"bf4ecd517f015c14c4f8414c01db80b41db5a394"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"584f5b430ae0cd6df9b6c6fdc7f2b1e02608cc36","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL: %s\u0027) % url)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    c \u003d cinder_client.Client(context.user_id,"},{"line_number":97,"context_line":"                             context.auth_token,"},{"line_number":98,"context_line":"                             project_id\u003dcontext.project_id,"},{"line_number":99,"context_line":"                             auth_url\u003durl,"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAVn%2F%2FrIA%3D","side":"PARENT","line":96,"updated":"2014-03-04 18:31:17.000000000","message":"In terms of risk, it would be good to change as little of this as possible.","commit_id":"ef3b1385cb3708aa4993a149ce24082b4082e347"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e390dc96661610f90ec9bce758948d87cda9d700","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"cinder_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027volume:cinder:publicURL\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Info to match when looking for cinder in the service \u0027"},{"line_number":38,"context_line":"                    \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":39,"context_line":"                    \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_fd304c09","line":36,"updated":"2014-06-09 16:40:32.000000000","message":"I think the spec said this:\n\n`cinder_catalog_info` option in nova.conf should also be set to `volumev2:cinder:publicURL` which would default new users the v2 API which is on by default in Cinder since Grizzly.\n\nShould we change the default here? Seems like we should? And add an UpgradeImpact note to that effect?\n\nAlso feels like we should at least mention how to select v1 vs v2?\n\nWe probably need to deprecate Nova\u0027s support for v1, so would be good to log a deprecation warning, should we use v1.","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"3f912f8b70830893a117a555a7afdef176913a7a","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"cinder_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027volume:cinder:publicURL\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Info to match when looking for cinder in the service \u0027"},{"line_number":38,"context_line":"                    \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":39,"context_line":"                    \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_be41da0b","line":36,"in_reply_to":"1ae5cdf2_fd304c09","updated":"2014-06-27 10:30:28.000000000","message":"Done. John, can you please let me know an appropriate place for the warning message. I\u0027m assuming you want this to displayed in nova-compute on startup, instead of for every request?","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e390dc96661610f90ec9bce758948d87cda9d700","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               help\u003d\u0027Number of cinderclient retries on failed http calls\u0027),"},{"line_number":51,"context_line":"    cfg.BoolOpt(\u0027cinder_api_insecure\u0027,"},{"line_number":52,"context_line":"                default\u003dFalse,"},{"line_number":53,"context_line":"                help\u003d\u0027Allow to perform insecure SSL requests to cinder\u0027),"},{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027cinder_cross_az_attach\u0027,"},{"line_number":55,"context_line":"                default\u003dTrue,"},{"line_number":56,"context_line":"                help\u003d\u0027Allow attach between instance and volume in different \u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_7d0b5c2b","line":53,"updated":"2014-06-09 16:40:32.000000000","message":"Its quite distracting to have these unrelated white space changes here.","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"3f912f8b70830893a117a555a7afdef176913a7a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               help\u003d\u0027Number of cinderclient retries on failed http calls\u0027),"},{"line_number":51,"context_line":"    cfg.BoolOpt(\u0027cinder_api_insecure\u0027,"},{"line_number":52,"context_line":"                default\u003dFalse,"},{"line_number":53,"context_line":"                help\u003d\u0027Allow to perform insecure SSL requests to cinder\u0027),"},{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027cinder_cross_az_attach\u0027,"},{"line_number":55,"context_line":"                default\u003dTrue,"},{"line_number":56,"context_line":"                help\u003d\u0027Allow attach between instance and volume in different \u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"1ae5cdf2_de494633","line":53,"in_reply_to":"1ae5cdf2_7d0b5c2b","updated":"2014-06-27 10:30:28.000000000","message":"Done","commit_id":"11c431d0b9e66af1b57fd0fa6ffd4adab52d83e5"},{"author":{"_account_id":9190,"name":"Glenn M. Gobeli","email":"glenn.gobeli@gmail.com","username":"ggobeli"},"change_message_id":"23257c4624da9af819818184d239ff0e32a19c32","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    :param url: The cinder endpoint url."},{"line_number":213,"context_line":"    :return: int value(1 or 2)."},{"line_number":214,"context_line":"    \"\"\""},{"line_number":215,"context_line":"    valid_versions \u003d [\u0027v1\u0027, \u0027v2\u0027]"},{"line_number":216,"context_line":"    magic_tuple \u003d urlparse.urlsplit(url)"},{"line_number":217,"context_line":"    scheme, netloc, path, query, frag \u003d magic_tuple"},{"line_number":218,"context_line":"    components \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_aa0fa22c","line":215,"updated":"2014-07-15 15:25:09.000000000","message":"Great work is being done to address the new version. \nGeneral question: What happens when version 3 comes out? Shouldn\u0027t we use a \"version list\" from a config file and check version against the configured list of valid versions? Then this code (and other code checks on version) will not have to be updated every time a new version is introduced.","commit_id":"76de8feccfc33e0bee964bbed0cdaa2302f04e6b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2e4645a190ff8817ef0cfa0f06efa7bd3cb1d25","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova import availability_zones as az"},{"line_number":31,"context_line":"from nova import exception"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":"from nova.openstack.common import strutils"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_0e7d226d","line":32,"updated":"2014-07-21 21:23:54.000000000","message":"Hmm, this should be nova.i18n now, do you need to rebase?","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"83937a54eb7cde01ee21f84b79627ce2ff1ab850","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova import availability_zones as az"},{"line_number":31,"context_line":"from nova import exception"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":"from nova.openstack.common import strutils"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_14ea730e","line":32,"in_reply_to":"baada198_0e7d226d","updated":"2014-07-22 07:48:48.000000000","message":"+1","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova import availability_zones as az"},{"line_number":31,"context_line":"from nova import exception"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":"from nova.openstack.common import strutils"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_c2f593cd","line":32,"in_reply_to":"baada198_14ea730e","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"48827148acb5c3b5b29d416a4c3812a2a03d5403","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                version \u003d version[1:]"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"                if not CINDER_V1_WARNING and version \u003d\u003d \u00271\u0027:"},{"line_number":249,"context_line":"                    msg \u003d _(\u0027Cinder V1 API is deprecated as of the Juno \u0027"},{"line_number":250,"context_line":"                            \u0027release, and Nova is still configured to use it. \u0027"},{"line_number":251,"context_line":"                            \u0027Enable the V2 API in Cinder and set \u0027"},{"line_number":252,"context_line":"                            \u0027cinder_catalog_info in nova.conf to use it.\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_96e2449e","line":249,"updated":"2014-07-21 10:41:13.000000000","message":"I think it\u0027s better to use here \n\n msg \u003d _LW(\u0027Cinder.....","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"097140681961177202103bd433c4bbc604d669f4","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                version \u003d version[1:]"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"                if not CINDER_V1_WARNING and version \u003d\u003d \u00271\u0027:"},{"line_number":249,"context_line":"                    msg \u003d _(\u0027Cinder V1 API is deprecated as of the Juno \u0027"},{"line_number":250,"context_line":"                            \u0027release, and Nova is still configured to use it. \u0027"},{"line_number":251,"context_line":"                            \u0027Enable the V2 API in Cinder and set \u0027"},{"line_number":252,"context_line":"                            \u0027cinder_catalog_info in nova.conf to use it.\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"baada198_6d967d40","line":249,"in_reply_to":"baada198_96e2449e","updated":"2014-07-22 10:37:24.000000000","message":"Done","commit_id":"eabfccad3d48575841f5e37fa86ba488cdc09100"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"591d4882da899763c3adb1739563b15050e67f91","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":117,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":118,"context_line":"    if hasattr(vol, \u0027display_name\u0027):"},{"line_number":119,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":120,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":121,"context_line":"    else:"},{"line_number":122,"context_line":"        d[\u0027name\u0027] \u003d vol.name"}],"source_content_type":"text/x-python","patch_set":47,"id":"baada198_78a2b6fd","line":119,"updated":"2014-07-22 11:26:09.000000000","message":"What about just keeping what we return to always be the v2 version.","commit_id":"7072bfe21aba74bf7bd0d0c967f99960115ef01e"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f28dbf0c9cb27cfceb89093402424bf70c71840","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    # NOTE(dzyu) volume(cinder) v2 API uses \u0027name\u0027 instead of \u0027display_name\u0027,"},{"line_number":117,"context_line":"    # and use \u0027description\u0027 instead of \u0027display_description\u0027 for volume."},{"line_number":118,"context_line":"    if hasattr(vol, \u0027display_name\u0027):"},{"line_number":119,"context_line":"        d[\u0027display_name\u0027] \u003d vol.display_name"},{"line_number":120,"context_line":"        d[\u0027display_description\u0027] \u003d vol.display_description"},{"line_number":121,"context_line":"    else:"},{"line_number":122,"context_line":"        d[\u0027name\u0027] \u003d vol.name"}],"source_content_type":"text/x-python","patch_set":47,"id":"baada198_a90dadea","line":119,"in_reply_to":"baada198_78a2b6fd","updated":"2014-07-23 07:39:21.000000000","message":"Done","commit_id":"7072bfe21aba74bf7bd0d0c967f99960115ef01e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bbe5a37798c20213bea81e27a47eba47559fc3bc","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                    CINDER_V1_WARNING \u003d True"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"                url_version_map[version] \u003d url"},{"line_number":258,"context_line":"                return version"},{"line_number":259,"context_line":"        msg \u003d _(\"Invalid client version, must be one of: %s\") % valid_versions"},{"line_number":260,"context_line":"        raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"baada198_aa2ce64a","line":258,"updated":"2014-08-05 20:46:30.000000000","message":"I don\u0027t think I get the point of building a dict indexed by the version, if there\u0027s only ever one thing in it. Why not just set the global CINDER_URL\u003durl here and be done?","commit_id":"00c6fecf63ebf072366e791a10b70eecceed4902"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"ea44c74f10ee704def25d2fca64af1e731bf0e55","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                    CINDER_V1_WARNING \u003d True"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"                url_version_map[version] \u003d url"},{"line_number":258,"context_line":"                return version"},{"line_number":259,"context_line":"        msg \u003d _(\"Invalid client version, must be one of: %s\") % valid_versions"},{"line_number":260,"context_line":"        raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"baada198_4ebfd3fd","line":258,"in_reply_to":"baada198_aa2ce64a","updated":"2014-08-06 06:01:34.000000000","message":"Done","commit_id":"00c6fecf63ebf072366e791a10b70eecceed4902"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"68e8f3672ad3572781b8256c62ea485364e9e2ad","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"cinder_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"},{"line_number":39,"context_line":"            default\u003d\u0027volumev2:cinder:publicURL\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027Info to match when looking for cinder in the service \u0027"},{"line_number":41,"context_line":"                 \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":42,"context_line":"                 \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_92a4cc08","line":39,"updated":"2014-08-12 20:22:54.000000000","message":"Shouldn\u0027t there have been an UpgradeImpact tag for this?  I.e. anyone w/o a cinder v2 endpoint configured that moves to this is going to explode.","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c7cbf74162e754b91d22b0c5859e22fc41857a4","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"cinder_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027cinder_catalog_info\u0027,"},{"line_number":39,"context_line":"            default\u003d\u0027volumev2:cinder:publicURL\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027Info to match when looking for cinder in the service \u0027"},{"line_number":41,"context_line":"                 \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":42,"context_line":"                 \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_1296fc49","line":39,"in_reply_to":"baada198_92a4cc08","updated":"2014-08-12 20:28:31.000000000","message":"Ah yes:\n\nhttps://review.openstack.org/#/c/112970/","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"395e097a571a6b96037abffa952beb748c47afe7","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    :param context: Nova auth context."},{"line_number":210,"context_line":"    :return: str value(1 or 2)."},{"line_number":211,"context_line":"    \"\"\""},{"line_number":212,"context_line":"    global CINDER_URL"},{"line_number":213,"context_line":"    # FIXME: the cinderclient ServiceCatalog object is mis-named."},{"line_number":214,"context_line":"    #        It actually contains the entire access blob."},{"line_number":215,"context_line":"    # Only needed parts of the service catalog are passed in, see"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_4af87c4a","line":212,"updated":"2014-08-06 21:58:19.000000000","message":"Can\u0027t we just return this as part of this function, instead of using a global?","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc6889a482f27e70314827b999a94a5a7c1929a1","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    :param context: Nova auth context."},{"line_number":210,"context_line":"    :return: str value(1 or 2)."},{"line_number":211,"context_line":"    \"\"\""},{"line_number":212,"context_line":"    global CINDER_URL"},{"line_number":213,"context_line":"    # FIXME: the cinderclient ServiceCatalog object is mis-named."},{"line_number":214,"context_line":"    #        It actually contains the entire access blob."},{"line_number":215,"context_line":"    # Only needed parts of the service catalog are passed in, see"}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_1d8c0c39","line":212,"in_reply_to":"baada198_4af87c4a","updated":"2014-08-06 22:21:09.000000000","message":"As discussed on irc, we\u0027re going to use this for a further optimization in a follow-on patch to avoid probing the url each time.","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"395e097a571a6b96037abffa952beb748c47afe7","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                LOG.warn(msg)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"            CINDER_URL \u003d url"},{"line_number":256,"context_line":"            return version"},{"line_number":257,"context_line":"    msg \u003d _(\"Invalid client version, must be one of: %s\") % valid_versions"},{"line_number":258,"context_line":"    raise cinder_exception.UnsupportedVersion(msg)"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"baada198_8ab8d479","line":256,"updated":"2014-08-06 21:58:19.000000000","message":"return version, url ?","commit_id":"c5402ef4fc509047d513a715a1c14e9b4ba9674f"}]}
