)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e749b534d4c256acaed13acbaeeb0deb02f650a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-01 11:18:35 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_ef72df48","line":7,"updated":"2015-07-01 05:39:10.000000000","message":"Query","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"346398bdd1cdd1c371a3534ba487a2a45db34b23","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-01 11:18:35 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_c0dc8814","line":7,"in_reply_to":"ba3cc151_ef72df48","updated":"2015-07-01 09:29:02.000000000","message":"Done","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e749b534d4c256acaed13acbaeeb0deb02f650a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_af93774e","line":9,"updated":"2015-07-01 05:39:10.000000000","message":"user \u003d \u003e the user or users","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"346398bdd1cdd1c371a3534ba487a2a45db34b23","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_8005207b","line":9,"in_reply_to":"ba3cc151_af93774e","updated":"2015-07-01 09:29:02.000000000","message":"Done","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e749b534d4c256acaed13acbaeeb0deb02f650a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_4f9aeb64","line":10,"updated":"2015-07-01 05:39:10.000000000","message":"User \u003d\u003e Users","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"346398bdd1cdd1c371a3534ba487a2a45db34b23","unresolved":false,"context_lines":[{"line_number":7,"context_line":"query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make user to query volume detail"},{"line_number":10,"context_line":"more conveniently. User can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_a0086492","line":10,"in_reply_to":"ba3cc151_4f9aeb64","updated":"2015-07-01 09:29:02.000000000","message":"Done","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"f6a9d7982ae3c69cde18421824456ecdf718e84c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-01 17:26:58 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make users to query volume detail"},{"line_number":10,"context_line":"more conveniently. Users can query a specific bootable volume quickly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_1a72147d","line":7,"updated":"2015-07-06 20:26:05.000000000","message":"Maybe say \u0027Add ability to filter volumes list by volume_glance_metadata\u0027","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"48a61d680f27ce8166edf18f5acd0541401fcbf0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-01 17:26:58 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make users to query volume detail"},{"line_number":10,"context_line":"more conveniently. Users can query a specific bootable volume quickly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_35959fe3","line":7,"in_reply_to":"ba3cc151_1a72147d","updated":"2015-07-07 03:45:00.000000000","message":"Done","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"f6a9d7982ae3c69cde18421824456ecdf718e84c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make users to query volume detail"},{"line_number":10,"context_line":"more conveniently. Users can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_7aafa094","line":9,"updated":"2015-07-06 20:26:05.000000000","message":"This sentence was a little confusing, I reworded it to this: \u0027This feature allows users to more conveniently query volume details by filtering the volume list by certain image metadata\u0027","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"48a61d680f27ce8166edf18f5acd0541401fcbf0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Query volume detail support volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this feature is to make users to query volume detail"},{"line_number":10,"context_line":"more conveniently. Users can query a specific bootable volume quickly"},{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_982f0288","line":9,"in_reply_to":"ba3cc151_7aafa094","updated":"2015-07-07 03:45:00.000000000","message":"Done","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"f6a9d7982ae3c69cde18421824456ecdf718e84c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"},{"line_number":14,"context_line":"User can use glance metadta to filter volume detail in cinder api."},{"line_number":15,"context_line":"The query url is like this:"},{"line_number":16,"context_line":" \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_fa8c1081","line":14,"updated":"2015-07-06 20:26:05.000000000","message":"s/metadta/metadata","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"48a61d680f27ce8166edf18f5acd0541401fcbf0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"filtering by image_name or other glance metadata."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"},{"line_number":14,"context_line":"User can use glance metadta to filter volume detail in cinder api."},{"line_number":15,"context_line":"The query url is like this:"},{"line_number":16,"context_line":" \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba3cc151_384d9672","line":14,"in_reply_to":"ba3cc151_fa8c1081","updated":"2015-07-07 03:45:00.000000000","message":"Done","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"f040e6e54648969460ddc05dcd2e0537321e5323","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 16:39:47 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to filter volumes list by volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This feature allows users to more conveniently query volume details by"},{"line_number":10,"context_line":"filtering the volume list by certain image metadata."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a50d1a3_1c3a4a99","line":7,"updated":"2015-07-30 06:15:30.000000000","message":"It seema more than 50 chars\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"3207456a642f6ff05a6aea0290a345aa3a2ea728"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"bea49ab5ed16d711ef9805cb052151dbc90776b9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 16:39:47 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to filter volumes list by volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This feature allows users to more conveniently query volume details by"},{"line_number":10,"context_line":"filtering the volume list by certain image metadata."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a50d1a3_fcb75ef6","line":7,"in_reply_to":"3a50d1a3_1c3a4a99","updated":"2015-07-30 06:23:04.000000000","message":"Agree with Jay.Shen, the title of commit message should no longer than 50 chars.","commit_id":"3207456a642f6ff05a6aea0290a345aa3a2ea728"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ba75d7299116e3cf1eee72653f5429baad838c3f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 16:39:47 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to filter volumes list by volume_glance_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This feature allows users to more conveniently query volume details by"},{"line_number":10,"context_line":"filtering the volume list by certain image metadata."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a50d1a3_34807649","line":7,"in_reply_to":"3a50d1a3_fcb75ef6","updated":"2015-07-30 09:11:52.000000000","message":"Done","commit_id":"3207456a642f6ff05a6aea0290a345aa3a2ea728"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"12a25660c3f20e1c629209698ef07ead19118ff0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"User can use glance metadata to filter volume detail in cinder api."},{"line_number":16,"context_line":"The query url is like this:"},{"line_number":17,"context_line":" \"volumes/detail?f_glance_metadata\u003d{\"image_name\":\"xxx\"}\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"Change-Id: I1d276d93ad5e799401b48d2234e61c28a3aaf790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3afc51ec_0016bba6","line":17,"updated":"2016-03-14 11:00:09.000000000","message":"-1: Looking at the code, it looks like it\u0027s \"glance_metadata\" and not \"f_glance_metadata\"","commit_id":"21feeb1075475aa1da076841ada0005dadbd546b"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b49d63bded15f7499790b17d081342cd475445f8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"User can use glance metadata to filter volume detail in cinder api."},{"line_number":16,"context_line":"The query url is like this:"},{"line_number":17,"context_line":" \"volumes/detail?f_glance_metadata\u003d{\"image_name\":\"xxx\"}\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"Change-Id: I1d276d93ad5e799401b48d2234e61c28a3aaf790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"7a1b2928_73f9974d","line":17,"in_reply_to":"3afc51ec_0016bba6","updated":"2016-04-11 12:00:12.000000000","message":"Sure, will update it.","commit_id":"21feeb1075475aa1da076841ada0005dadbd546b"}],"cinder/api/openstack/api_version_request.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                            method.end_version,"},{"line_number":127,"context_line":"                            method.experimental)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def matches(self, min_version, max_version, experimental\u003dFalse):"},{"line_number":130,"context_line":"        \"\"\"Compares this version to the specified min/max range."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        Returns whether the version object represents a version"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_93c06f7e","line":129,"updated":"2016-04-18 13:05:05.000000000","message":"-1: Please set default value for max_version to None.  Code below is already prepared to handle None and will make the use of this method look better in many cases as we\u0027ll be able to just call it with .matches(\u00273.2\u0027) when we want to say that anything above 3.2 is ok.","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"}],"cinder/api/v2/volumes.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"963020eab9dffc6f8a2a7be72be90548ff0fb1da","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        filters \u003d params"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # NOTE(wanghao): Always removing glance_metadata since we support it"},{"line_number":101,"context_line":"        # only in API version \u003e\u003d 3.2."},{"line_number":102,"context_line":"        filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":103,"context_line":"        utils.remove_invalid_filter_options(context,"},{"line_number":104,"context_line":"                                            filters,"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a122d0e_d76c6e9f","line":101,"range":{"start_line":101,"start_character":33,"end_line":101,"end_character":36},"updated":"2016-05-04 15:09:54.000000000","message":"nit: 3.4","commit_id":"9a2cba436ed7f2209f53dedffc74f1dc4272249a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"63fd3b5f18b2d8b0df55a38d17c362c3a999f5f6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        filters \u003d params"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # NOTE(wanghao): Always removing glance_metadata since we support it"},{"line_number":101,"context_line":"        # only in API version \u003e\u003d 3.2."},{"line_number":102,"context_line":"        filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":103,"context_line":"        utils.remove_invalid_filter_options(context,"},{"line_number":104,"context_line":"                                            filters,"}],"source_content_type":"text/x-python","patch_set":34,"id":"dab17558_860338b8","line":101,"range":{"start_line":101,"start_character":33,"end_line":101,"end_character":36},"in_reply_to":"1a122d0e_d76c6e9f","updated":"2016-05-06 00:23:10.000000000","message":"Done","commit_id":"9a2cba436ed7f2209f53dedffc74f1dc4272249a"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def __init__(self, ext_mgr):"},{"line_number":30,"context_line":"        super(VolumeController, self).__init__(volumes_v2.VolumeController)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _get_volumes(self, req, is_detail):"},{"line_number":33,"context_line":"        \"\"\"Returns a list of volumes, transformed through view builder.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_495c68ed","line":32,"updated":"2016-04-18 13:05:05.000000000","message":"?: Should we just use the decorator here as @wsgi.Controller.api_version(\u00273.2\u0027) and in v2 to work from 2.0 to 3.1?\n\nThat way we can simplify this method a little bit.","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        filters \u003d params"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d []"},{"line_number":44,"context_line":"        if req_version \u003e\u003d api_version_request.APIVersionRequest(\"3.2\"):"},{"line_number":45,"context_line":"            volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":46,"context_line":"            volume_filter_options.append(\"glance_metadata\")"},{"line_number":47,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_f3dc4314","line":44,"updated":"2016-04-18 13:05:05.000000000","message":"nit: Wouldn\u0027t this be clearer with `req_version.matches(\u00273.2\u0027)` ?","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            volume_filter_options.append(\"glance_metadata\")"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":49,"context_line":"            filters.pop(\"glance_metadata\", None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        volume_filter_options \u003d []"},{"line_number":52,"context_line":"        if req_version \u003e\u003d api_version_request.APIVersionRequest(\"3.2\"):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_b3dc8be5","line":49,"updated":"2016-04-18 13:05:05.000000000","message":"-1: We don\u0027t need to remove it manually here, since glance_metadata will not be present in volume_filter_options it will get removed on L58.","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":49,"context_line":"            filters.pop(\"glance_metadata\", None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        volume_filter_options \u003d []"},{"line_number":52,"context_line":"        if req_version \u003e\u003d api_version_request.APIVersionRequest(\"3.2\"):"},{"line_number":53,"context_line":"            volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":54,"context_line":"            volume_filter_options.append(\"glance_metadata\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_93850faf","line":51,"updated":"2016-04-18 13:05:05.000000000","message":"-1: Déjà vu: L51-L57 are duplicates of L43-L49","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d4c02a50de6128cc8a9b3d3c17f2739d6b52b5b1","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":44,"context_line":"        if req_version.matches(\"3.2\"):"},{"line_number":45,"context_line":"            volume_filter_options.append(\"glance_metadata\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":48,"context_line":"                                            volume_filter_options)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a122d0e_4e90c043","line":45,"updated":"2016-04-19 09:50:27.000000000","message":"-1: I just realized we cannot do this...  Because we would be modifying the filters globally since _get_volume_filter_options method returns CONF.query_volume_filters object and therefore we would allow using glance_metadata on earlier APIs than 3.2.  We need to copy the list and append to it if we are using 3.2   :-(","commit_id":"f1c2631b0b8a3bc736ed0a64c729b9f8a4373eb6"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"07a636ed8eca00eb186c4a91a34a9cb50c335801","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d self._get_volume_filter_options()"},{"line_number":44,"context_line":"        if req_version.matches(\"3.2\"):"},{"line_number":45,"context_line":"            volume_filter_options.append(\"glance_metadata\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":48,"context_line":"                                            volume_filter_options)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a122d0e_df547822","line":45,"in_reply_to":"1a122d0e_4e90c043","updated":"2016-04-19 10:59:51.000000000","message":"emm, sure, will update this.","commit_id":"f1c2631b0b8a3bc736ed0a64c729b9f8a4373eb6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ccc299040550d6dc860cdde27eab73634e4a3e29","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(params)"},{"line_number":42,"context_line":"        filters \u003d params"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        volume_filter_options \u003d copy.deepcopy("},{"line_number":45,"context_line":"                                              self._get_volume_filter_options()"},{"line_number":46,"context_line":"                                              )"},{"line_number":47,"context_line":"        if req_version.matches(\"3.2\"):"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a122d0e_8c393bda","line":44,"updated":"2016-04-19 12:21:42.000000000","message":"-1: We don\u0027t need to do a deepcopy, we just needed a copy of the list so when we add the \u0027glance_metadata\u0027 element we don\u0027t alter the original list.","commit_id":"4418239a6cbaed76b7c51cc6a19f33c105737237"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"da0a64b8c8140100f44f893d2ab0473f69148898","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(params)"},{"line_number":41,"context_line":"        filters \u003d params"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d copy.copy(self._get_volume_filter_options())"},{"line_number":44,"context_line":"        if req_version.matches(\"3.0\", \"3.1\"):"},{"line_number":45,"context_line":"            volume_filter_options.remove(\"glance_metadata\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_b60a10d0","line":43,"updated":"2016-04-21 09:18:51.000000000","message":"-1: Don\u0027t use copy library to copy a list, just use [:].\n\n-1: We also don\u0027t always need to copy the list, only when we are going to remove glance_metadata.\n\nnit: Also it would be more efficient (since we avoid copying the list) to just do in L45:\n\n filters.pop(\u0027glance_metadata\u0027, None)","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"daae132cc56c379436f7ec8e96591fbd646f9ec4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(params)"},{"line_number":41,"context_line":"        filters \u003d params"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d copy.copy(self._get_volume_filter_options())"},{"line_number":44,"context_line":"        if req_version.matches(\"3.0\", \"3.1\"):"},{"line_number":45,"context_line":"            volume_filter_options.remove(\"glance_metadata\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_9cdfd70b","line":43,"in_reply_to":"1a122d0e_b60a10d0","updated":"2016-04-23 04:07:03.000000000","message":"Yes, popping filters looks better, thanks.","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"da0a64b8c8140100f44f893d2ab0473f69148898","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        filters \u003d params"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d copy.copy(self._get_volume_filter_options())"},{"line_number":44,"context_line":"        if req_version.matches(\"3.0\", \"3.1\"):"},{"line_number":45,"context_line":"            volume_filter_options.remove(\"glance_metadata\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        utils.remove_invalid_filter_options(context, filters,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_b694d036","line":44,"updated":"2016-04-21 09:18:51.000000000","message":"nit: You could just set min_version to None since we don\u0027t really care about the min version.","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"daae132cc56c379436f7ec8e96591fbd646f9ec4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        filters \u003d params"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_filter_options \u003d copy.copy(self._get_volume_filter_options())"},{"line_number":44,"context_line":"        if req_version.matches(\"3.0\", \"3.1\"):"},{"line_number":45,"context_line":"            volume_filter_options.remove(\"glance_metadata\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        utils.remove_invalid_filter_options(context, filters,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_bc03b375","line":44,"in_reply_to":"1a122d0e_b694d036","updated":"2016-04-23 04:07:03.000000000","message":"Done","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"40f309d67d45e1a683d8d8df82d70bdcdcf30a15","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_8a48df5d","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-04-27 05:45:16.000000000","message":"It seems we only add this for a new file.\nAt least it\u0027s not 2011 now.","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"13f62ec325c78e69c5c97d7e9df6dd20533c879b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_cca658c0","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"1a122d0e_8a48df5d","updated":"2016-04-28 00:26:39.000000000","message":"Done","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"40f309d67d45e1a683d8d8df82d70bdcdcf30a15","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                            filters,"},{"line_number":43,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if req_version.matches(None, \"3.2\"):"},{"line_number":46,"context_line":"            filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        utils.remove_invalid_filter_options(context, filters,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_07e5eaa2","line":45,"range":{"start_line":45,"start_character":38,"end_line":45,"end_character":41},"updated":"2016-04-27 05:45:16.000000000","message":"s/3.2/3.3","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"13f62ec325c78e69c5c97d7e9df6dd20533c879b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                            filters,"},{"line_number":43,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if req_version.matches(None, \"3.2\"):"},{"line_number":46,"context_line":"            filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        utils.remove_invalid_filter_options(context, filters,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_8cbe20ac","line":45,"range":{"start_line":45,"start_character":38,"end_line":45,"end_character":41},"in_reply_to":"1a122d0e_07e5eaa2","updated":"2016-04-28 00:26:39.000000000","message":"No, it should be 3.2, that means if req_version \u003c\u003d3.2. that we will pop the glance_metadata.","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"d2cca3a9bf092b1b6e96e3f675d91081becb98fe","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                            filters,"},{"line_number":43,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if req_version.matches(None, \"3.2\"):"},{"line_number":46,"context_line":"            filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        utils.remove_invalid_filter_options(context, filters,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_8c7bc0bd","line":45,"range":{"start_line":45,"start_character":38,"end_line":45,"end_character":41},"in_reply_to":"1a122d0e_8cbe20ac","updated":"2016-04-28 01:08:58.000000000","message":"Oh, you are right!!!","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"40f309d67d45e1a683d8d8df82d70bdcdcf30a15","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if req_version.matches(None, \"3.2\"):"},{"line_number":46,"context_line":"            filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":49,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":50,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":51,"context_line":"        if \u0027name\u0027 in sort_keys:"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_a7f35672","line":48,"range":{"start_line":48,"start_character":14,"end_line":48,"end_character":43},"updated":"2016-04-27 05:45:16.000000000","message":"Why we call this function twice in line 48 and line 41?","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"13f62ec325c78e69c5c97d7e9df6dd20533c879b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if req_version.matches(None, \"3.2\"):"},{"line_number":46,"context_line":"            filters.pop(\u0027glance_metadata\u0027, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":49,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":50,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":51,"context_line":"        if \u0027name\u0027 in sort_keys:"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_cce2d8d4","line":48,"range":{"start_line":48,"start_character":14,"end_line":48,"end_character":43},"in_reply_to":"1a122d0e_a7f35672","updated":"2016-04-28 00:26:39.000000000","message":"Good catch, should remove line 41.","commit_id":"0cb89010af7c5b2d6a771801cf8759cf8c7b847a"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"f6a9d7982ae3c69cde18421824456ecdf718e84c","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"            for k, v in value.items():"},{"line_number":1576,"context_line":"                query \u003d query.filter(or_(col_attr.any(key\u003dk, value\u003dv),"},{"line_number":1577,"context_line":"                                         col_ad_attr.any(key\u003dk, value\u003dv)))"},{"line_number":1578,"context_line":"        elif key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1579,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1580,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1581,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_fa3090ea","line":1578,"updated":"2015-07-06 20:26:05.000000000","message":"I would prefer \u0027image_metadata\u0027 instead of \u0027glance_metadata\u0027. \n\nI\u0027d also like to note that according to the API guidelines, filters should start with \u0027f_\u0027. https://github.com/openstack/api-wg/blob/master/guidelines/pagination_filter_sort.rst","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"adb4c380b22e3f4096c1f522cd1f3bbba767930a","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"            for k, v in value.items():"},{"line_number":1576,"context_line":"                query \u003d query.filter(or_(col_attr.any(key\u003dk, value\u003dv),"},{"line_number":1577,"context_line":"                                         col_ad_attr.any(key\u003dk, value\u003dv)))"},{"line_number":1578,"context_line":"        elif key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1579,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1580,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1581,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_a4dfdcd4","line":1578,"in_reply_to":"ba3cc151_78b9de2d","updated":"2015-07-08 19:35:59.000000000","message":"One is an implementation detail and the other user-facing API. Not a big deal though.","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"48a61d680f27ce8166edf18f5acd0541401fcbf0","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"            for k, v in value.items():"},{"line_number":1576,"context_line":"                query \u003d query.filter(or_(col_attr.any(key\u003dk, value\u003dv),"},{"line_number":1577,"context_line":"                                         col_ad_attr.any(key\u003dk, value\u003dv)))"},{"line_number":1578,"context_line":"        elif key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1579,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1580,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1581,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_78b9de2d","line":1578,"in_reply_to":"ba3cc151_fa3090ea","updated":"2015-07-07 03:45:00.000000000","message":"Because cinder stores the image metadata as \u0027volume_glance_metadata\u0027, I feel this is more appropriate. Anyway, \u0027f_glance_metadata\u0027 should be added.","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"35efc5966065953ef6cd2d9b6c331fc836920db8","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"    for key in filters.keys():"},{"line_number":1546,"context_line":"        # metadata/glance_metadata is unique, must be a dict"},{"line_number":1547,"context_line":"        if key \u003d\u003d \u0027metadata\u0027 or key \u003d\u003d \u0027f_glance_metadata\u0027:"},{"line_number":1548,"context_line":"            if not isinstance(filters[key], dict):"},{"line_number":1549,"context_line":"                LOG.debug(\"\u0027metadata/glance_metadata\u0027 filter value is not \""},{"line_number":1550,"context_line":"                          \"valid.\")"},{"line_number":1551,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a1a9d01_00ebf5df","line":1548,"updated":"2015-09-30 15:56:34.000000000","message":"Optionally ould use the specific key to log which filter is invalid","commit_id":"192ba76b490b3bc8384d5141b691588b180c39b5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67507cff1e58a8e2fca6811bff00bc80a7cd17b5","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"    for key in filters.keys():"},{"line_number":1546,"context_line":"        # metadata/glance_metadata is unique, must be a dict"},{"line_number":1547,"context_line":"        if key \u003d\u003d \u0027metadata\u0027 or key \u003d\u003d \u0027f_glance_metadata\u0027:"},{"line_number":1548,"context_line":"            if not isinstance(filters[key], dict):"},{"line_number":1549,"context_line":"                LOG.debug(\"\u0027metadata/glance_metadata\u0027 filter value is not \""},{"line_number":1550,"context_line":"                          \"valid.\")"},{"line_number":1551,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_f6dd1a71","line":1548,"in_reply_to":"9a1a9d01_00ebf5df","updated":"2015-11-09 07:58:44.000000000","message":"Done","commit_id":"192ba76b490b3bc8384d5141b691588b180c39b5"},{"author":{"_account_id":12410,"name":"Subhadeep De","email":"subhadeep.de@veritas.com","username":"subho"},"change_message_id":"d940e3a019d952f90da9b2af06f451cae7ed7530","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"            for k, v in value.items():"},{"line_number":1578,"context_line":"                query \u003d query.filter(or_(col_attr.any(key\u003dk, value\u003dv),"},{"line_number":1579,"context_line":"                                         col_ad_attr.any(key\u003dk, value\u003dv)))"},{"line_number":1580,"context_line":"        elif key \u003d\u003d \u0027f_glance_metadata\u0027:"},{"line_number":1581,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1582,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1583,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a2fa921_18e06295","line":1580,"updated":"2015-10-09 08:50:15.000000000","message":"Why is the filter key starting with f_? Why not just glance_metadata?","commit_id":"192ba76b490b3bc8384d5141b691588b180c39b5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67507cff1e58a8e2fca6811bff00bc80a7cd17b5","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"            for k, v in value.items():"},{"line_number":1578,"context_line":"                query \u003d query.filter(or_(col_attr.any(key\u003dk, value\u003dv),"},{"line_number":1579,"context_line":"                                         col_ad_attr.any(key\u003dk, value\u003dv)))"},{"line_number":1580,"context_line":"        elif key \u003d\u003d \u0027f_glance_metadata\u0027:"},{"line_number":1581,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1582,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1583,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_b676b23c","line":1580,"in_reply_to":"7a2fa921_18e06295","updated":"2015-11-09 07:58:44.000000000","message":"In the beginning, API working group has guideline to require developer to use f_ prefix in filter params, but this rule has been updated[1], I will update code, thanks.\n\n[1]https://review.openstack.org/#/c/198547/1","commit_id":"192ba76b490b3bc8384d5141b691588b180c39b5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"12a25660c3f20e1c629209698ef07ead19118ff0","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"        elif key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1689,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1690,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1691,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"},{"line_number":1692,"context_line":"            for k, v in value.items():"},{"line_number":1693,"context_line":"                query \u003d query.filter(col_gl_attr.any(key\u003dk, value\u003dv))"},{"line_number":1694,"context_line":"        elif isinstance(value, (list, tuple, set, frozenset)):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afc51ec_059fedb4","line":1691,"updated":"2016-03-14 11:00:09.000000000","message":"-1: models.Volume.volume_glance_metadata","commit_id":"21feeb1075475aa1da076841ada0005dadbd546b"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b49d63bded15f7499790b17d081342cd475445f8","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"        elif key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1689,"context_line":"            # model.VolumeGlanceMetadata defines the backref to Volumes as"},{"line_number":1690,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1691,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"},{"line_number":1692,"context_line":"            for k, v in value.items():"},{"line_number":1693,"context_line":"                query \u003d query.filter(col_gl_attr.any(key\u003dk, value\u003dv))"},{"line_number":1694,"context_line":"        elif isinstance(value, (list, tuple, set, frozenset)):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7a1b2928_13b6638a","line":1691,"in_reply_to":"3afc51ec_059fedb4","updated":"2016-04-11 12:00:12.000000000","message":"Done","commit_id":"21feeb1075475aa1da076841ada0005dadbd546b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"12a25660c3f20e1c629209698ef07ead19118ff0","unresolved":false,"context_lines":[{"line_number":1690,"context_line":"            # \u0027volume_glance_metadata\u0027, use it as column attribute key"},{"line_number":1691,"context_line":"            col_gl_attr \u003d getattr(models.Volume, \u0027volume_glance_metadata\u0027)"},{"line_number":1692,"context_line":"            for k, v in value.items():"},{"line_number":1693,"context_line":"                query \u003d query.filter(col_gl_attr.any(key\u003dk, value\u003dv))"},{"line_number":1694,"context_line":"        elif isinstance(value, (list, tuple, set, frozenset)):"},{"line_number":1695,"context_line":"            # Looking for values in a list; apply to query directly"},{"line_number":1696,"context_line":"            column_attr \u003d getattr(models.Volume, key)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afc51ec_c5e34532","line":1693,"updated":"2016-03-14 11:00:09.000000000","message":"Nice!!","commit_id":"21feeb1075475aa1da076841ada0005dadbd546b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"    # filter value exists on the model"},{"line_number":1695,"context_line":"    for key in filters.keys():"},{"line_number":1696,"context_line":"        # metadata/glance_metadata is unique, must be a dict"},{"line_number":1697,"context_line":"        if key \u003d\u003d \u0027metadata\u0027 or key \u003d\u003d \u0027glance_metadata\u0027:"},{"line_number":1698,"context_line":"            if not isinstance(filters[key], dict):"},{"line_number":1699,"context_line":"                LOG.debug(\"\u0027%s\u0027 filter value is not valid.\", key)"},{"line_number":1700,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_6e0a0a23","line":1697,"updated":"2016-04-18 13:05:05.000000000","message":"nit: if key in (\u0027metadata\u0027, \u0027glance_metadata\u0027):","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"}],"cinder/tests/unit/api/v3/test_volumes.py":[{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"2229e1d1058e592fdb2ea950226ef5bc26c52778","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.assertEqual(vol1.id, volumes[0][\u0027id\u0027])"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_volume_index_filter_by_glance_metadata_in_unsupport_version(self):"},{"line_number":68,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":69,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":70,"context_line":"                                            self.ctxt.project_id})"},{"line_number":71,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"},{"line_number":72,"context_line":"                                         \u0027imageTestOne\u0027)"},{"line_number":73,"context_line":"        vol2 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test2\u0027,"},{"line_number":74,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":75,"context_line":"                                            self.ctxt.project_id})"},{"line_number":76,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol2.id, \u0027image_name\u0027,"},{"line_number":77,"context_line":"                                         \u0027imageTestTwo\u0027)"},{"line_number":78,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol2.id, \u0027disk_format\u0027,"},{"line_number":79,"context_line":"                                         \u0027qcow2\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?glance_metadata\u003d\""},{"line_number":82,"context_line":"                                      \"{\u0027image_name\u0027: \u0027imageTestOne\u0027}\")"},{"line_number":83,"context_line":"        req.headers[\"OpenStack-API-Version\"] \u003d \"volume 3.0\""},{"line_number":84,"context_line":"        req.api_version_request \u003d api_version.APIVersionRequest(\u00273.0\u0027)"},{"line_number":85,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_0d9e4507","line":82,"range":{"start_line":68,"start_character":0,"end_line":82,"end_character":71},"updated":"2016-04-21 13:59:40.000000000","message":"This seems common part in both of these test cases..\n\nI would suggest to reuse this common part by writing single function and using in these test...or by some other optimal way...","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"daae132cc56c379436f7ec8e96591fbd646f9ec4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.assertEqual(vol1.id, volumes[0][\u0027id\u0027])"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_volume_index_filter_by_glance_metadata_in_unsupport_version(self):"},{"line_number":68,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":69,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":70,"context_line":"                                            self.ctxt.project_id})"},{"line_number":71,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"},{"line_number":72,"context_line":"                                         \u0027imageTestOne\u0027)"},{"line_number":73,"context_line":"        vol2 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test2\u0027,"},{"line_number":74,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":75,"context_line":"                                            self.ctxt.project_id})"},{"line_number":76,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol2.id, \u0027image_name\u0027,"},{"line_number":77,"context_line":"                                         \u0027imageTestTwo\u0027)"},{"line_number":78,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol2.id, \u0027disk_format\u0027,"},{"line_number":79,"context_line":"                                         \u0027qcow2\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?glance_metadata\u003d\""},{"line_number":82,"context_line":"                                      \"{\u0027image_name\u0027: \u0027imageTestOne\u0027}\")"},{"line_number":83,"context_line":"        req.headers[\"OpenStack-API-Version\"] \u003d \"volume 3.0\""},{"line_number":84,"context_line":"        req.api_version_request \u003d api_version.APIVersionRequest(\u00273.0\u0027)"},{"line_number":85,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_1c3aa734","line":82,"range":{"start_line":68,"start_character":0,"end_line":82,"end_character":71},"in_reply_to":"1a122d0e_0d9e4507","updated":"2016-04-23 04:07:03.000000000","message":"Sure, good point, thanks Sheel.","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a58cd82180679bcd3c3105ae5012774f16a9965e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":35,"id":"dab17558_9419468b","line":1,"updated":"2016-05-09 15:26:53.000000000","message":"Please don\u0027t add this to existing files.  I\u0027m fairly sure this is not a correct copyright attribution here.","commit_id":"fca31fc95e00580249b19ec52a2e82e7d8dcff38"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f25e2efe0a05bf26977dbbce97699e917c4d5e24","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":35,"id":"dab17558_23e63944","line":1,"in_reply_to":"dab17558_9419468b","updated":"2016-05-10 08:12:36.000000000","message":"Thanks Eric, I will fix this ASAP.","commit_id":"fca31fc95e00580249b19ec52a2e82e7d8dcff38"}],"cinder/tests/unit/test_db_api.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"f523960456ba4587f08ca411b7c933ad59f728d8","unresolved":false,"context_lines":[{"line_number":937,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":938,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":939,"context_line":"        self._assertEqualListsOfObjects([vol2], volumes)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"class DBAPISnapshotTestCase(BaseTest):"},{"line_number":943,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_a798e71c","line":940,"updated":"2015-05-22 16:43:42.000000000","message":"Should it test beyond glance metadata default values?","commit_id":"10a9ebd477572dfefa4186cfec5503723a5b478b"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"78d18502689ac3e33c4a929e5eb29cfa81eca6b3","unresolved":false,"context_lines":[{"line_number":937,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":938,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":939,"context_line":"        self._assertEqualListsOfObjects([vol2], volumes)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"class DBAPISnapshotTestCase(BaseTest):"},{"line_number":943,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_06b54fcf","line":940,"in_reply_to":"7a016987_a798e71c","updated":"2015-05-26 03:28:42.000000000","message":"Emm, it should be. Will add more metadata for this.","commit_id":"10a9ebd477572dfefa4186cfec5503723a5b478b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e749b534d4c256acaed13acbaeeb0deb02f650a","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                                       \u0027test_image_key\u0027: \u0027test_image_value\u0027}}"},{"line_number":954,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":955,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":956,"context_line":"        self._assertEqualListsOfObjects([vol1], volumes)"},{"line_number":957,"context_line":"        filters \u003d {\u0027glance_metadata\u0027: {\u0027image_name\u0027: \u0027imageTestTwo\u0027,"},{"line_number":958,"context_line":"                                       \u0027disk_format\u0027: \u0027qcow2\u0027}}"},{"line_number":959,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_ef9bbf70","line":956,"updated":"2015-07-01 05:39:10.000000000","message":"This line raises error:\ncheck http://logs.openstack.org/38/147738/13/check/gate-cinder-python27/bbff446/console.html","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"346398bdd1cdd1c371a3534ba487a2a45db34b23","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                                       \u0027test_image_key\u0027: \u0027test_image_value\u0027}}"},{"line_number":954,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":955,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":956,"context_line":"        self._assertEqualListsOfObjects([vol1], volumes)"},{"line_number":957,"context_line":"        filters \u003d {\u0027glance_metadata\u0027: {\u0027image_name\u0027: \u0027imageTestTwo\u0027,"},{"line_number":958,"context_line":"                                       \u0027disk_format\u0027: \u0027qcow2\u0027}}"},{"line_number":959,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_61901b44","line":956,"in_reply_to":"ba3cc151_ef9bbf70","updated":"2015-07-01 09:29:02.000000000","message":"Yeah, have fixed this error.","commit_id":"580ed8282d810733771919c878ec2f70e046273c"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"f6a9d7982ae3c69cde18421824456ecdf718e84c","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                image_name \u003d meta_entry.value"},{"line_number":938,"context_line":"        self.assertEqual(u\u0027\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\u0027, image_name)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    def test_volume_get_all_by_image_metadata(self):"},{"line_number":941,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027})"},{"line_number":942,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"},{"line_number":943,"context_line":"                                         \u0027imageTestOne\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_1aca1450","line":940,"updated":"2015-07-06 20:26:05.000000000","message":"I think more tests could be written. What happens when invalid image metadata is specified? Or all/zero volumes should be returned?","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"48a61d680f27ce8166edf18f5acd0541401fcbf0","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                image_name \u003d meta_entry.value"},{"line_number":938,"context_line":"        self.assertEqual(u\u0027\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\u0027, image_name)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    def test_volume_get_all_by_image_metadata(self):"},{"line_number":941,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027})"},{"line_number":942,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"},{"line_number":943,"context_line":"                                         \u0027imageTestOne\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_d8910a9c","line":940,"in_reply_to":"ba3cc151_1aca1450","updated":"2015-07-07 03:45:00.000000000","message":"Sure","commit_id":"85590ecd993a49bbd57b587f94d78eb7a95ca938"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"3355a450904ac852910ba5cc5cd57426acaf4f2b","unresolved":false,"context_lines":[{"line_number":959,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":960,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":961,"context_line":"        self._assertEqualListsOfObjects([vol2], volumes)"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def test_volume_get_all_by_invalid_image_metadata(self):"},{"line_number":964,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027})"},{"line_number":965,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_fb9aac6d","line":962,"updated":"2015-07-07 14:54:08.000000000","message":"It could be just added a filter with invalid (or fake) glance_metadata here and not to duplicate the same chunk of code.","commit_id":"3207456a642f6ff05a6aea0290a345aa3a2ea728"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ba75d7299116e3cf1eee72653f5429baad838c3f","unresolved":false,"context_lines":[{"line_number":959,"context_line":"        volumes \u003d db.volume_get_all(self.ctxt, None, None, [\u0027created_at\u0027],"},{"line_number":960,"context_line":"                                    [\u0027desc\u0027], filters\u003dfilters)"},{"line_number":961,"context_line":"        self._assertEqualListsOfObjects([vol2], volumes)"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def test_volume_get_all_by_invalid_image_metadata(self):"},{"line_number":964,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027})"},{"line_number":965,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_1471baa8","line":962,"in_reply_to":"ba3cc151_fb9aac6d","updated":"2015-07-30 09:11:52.000000000","message":"Done","commit_id":"3207456a642f6ff05a6aea0290a345aa3a2ea728"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"                                                      \u0027deleted\u0027, \u0027deleted_at\u0027,"},{"line_number":1181,"context_line":"                                                      \u0027updated_at\u0027])"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"    def test_volume_get_all_by_valid_and_invalid_image_metadata(self):"},{"line_number":1184,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027})"},{"line_number":1185,"context_line":"        db.volume_glance_metadata_create(self.ctxt, vol1.id, \u0027image_name\u0027,"},{"line_number":1186,"context_line":"                                         \u0027imageTestOne\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_ce2b5e93","line":1183,"updated":"2016-04-18 13:05:05.000000000","message":"nit: I really prefer we don\u0027t test 3 different things in the same tests, as each method should test only 1 thing.","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d4c02a50de6128cc8a9b3d3c17f2739d6b52b5b1","unresolved":false,"context_lines":[{"line_number":1193,"context_line":"                                         \u0027qcow2\u0027)"},{"line_number":1194,"context_line":"        return [vol1, vol2]"},{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    def test_volume_get_all_by_image_name_and_key(self):"},{"line_number":1197,"context_line":"        vols \u003d self._create_volume_with_image_metadata()"},{"line_number":1198,"context_line":"        filters \u003d {\u0027glance_metadata\u0027: {\u0027image_name\u0027: \u0027imageTestOne\u0027,"},{"line_number":1199,"context_line":"                                       \u0027test_image_key\u0027: \u0027test_image_value\u0027}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a122d0e_4eb720d8","line":1196,"updated":"2016-04-19 09:50:27.000000000","message":"Thank you for making this change!","commit_id":"f1c2631b0b8a3bc736ed0a64c729b9f8a4373eb6"}],"releasenotes/notes/support-volume-glance-metadata-query-866b9e3beda2cd55.yaml":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3b16cfd46c4fb7a857ae881a4a8e4077e2ce835b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for querying volumes filtered by glance metadata key/value."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"1a122d0e_490d8836","line":3,"updated":"2016-04-18 13:05:05.000000000","message":"nit: This should mention that it\u0027s done using the `glace_metadata` optional URL parameter.","commit_id":"38ec1d72d423e242805ae21bc61878f6a83486a3"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"2229e1d1058e592fdb2ea950226ef5bc26c52778","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for querying volumes filtered by glance metadata key/value."},{"line_number":4,"context_line":"    Using \u0027glace_metadata\u0027 optional URL parameter in URL, for example,"},{"line_number":5,"context_line":"    \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\"."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"1a122d0e_889ec361","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":58},"updated":"2016-04-21 13:59:40.000000000","message":"Minor rephrasing:\n\n  - Added support for querying volumes filtered by glance metadata key/value using \u0027glace_metadata\u0027 optional URL parameter.\nFor example,\n    \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\".","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"daae132cc56c379436f7ec8e96591fbd646f9ec4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for querying volumes filtered by glance metadata key/value."},{"line_number":4,"context_line":"    Using \u0027glace_metadata\u0027 optional URL parameter in URL, for example,"},{"line_number":5,"context_line":"    \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\"."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"1a122d0e_7c20fbf7","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":58},"in_reply_to":"1a122d0e_889ec361","updated":"2016-04-23 04:07:03.000000000","message":"Done","commit_id":"0768c71064222ea9586468ae68343aa6c7913d41"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"0c4f39a7eca0bb7ff0d32d76f829e742ae76789c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for querying volumes filtered by glance metadata key/value"},{"line_number":4,"context_line":"    using \u0027glace_metadata\u0027 optional URL parameter."},{"line_number":5,"context_line":"    For example, \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\"."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"1a122d0e_776aa8b6","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":50},"updated":"2016-05-04 21:01:26.000000000","message":"nit: \u0027glance_metadata\u0027","commit_id":"9a2cba436ed7f2209f53dedffc74f1dc4272249a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"63fd3b5f18b2d8b0df55a38d17c362c3a999f5f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for querying volumes filtered by glance metadata key/value"},{"line_number":4,"context_line":"    using \u0027glace_metadata\u0027 optional URL parameter."},{"line_number":5,"context_line":"    For example, \"volumes/detail?glance_metadata\u003d{\"image_name\":\"xxx\"}\"."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"dab17558_6669f48b","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":50},"in_reply_to":"1a122d0e_776aa8b6","updated":"2016-05-06 00:23:10.000000000","message":"Thanks.","commit_id":"9a2cba436ed7f2209f53dedffc74f1dc4272249a"}]}
