)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"65cf8ac21072986bd203c9c5a3970236d655b63b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"- Refactoring in the volume API to accommodate both user and"},{"line_number":12,"context_line":"  image metadata."},{"line_number":13,"context_line":"- All of the necessary testcases needed for the changes."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements: bp support-modify-volume-image-metadata"},{"line_number":16,"context_line":"Change-Id: I22792ef7bd49c763d7c130aa8cac9abc3fff2d4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"ba3cc151_d56fd6fa","line":14,"updated":"2015-07-10 04:03:17.000000000","message":"Think we need to add APIImpact here.","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"5ba84d0fbb6623ae5622598ece3ddff3f5beeddb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"- Refactoring in the volume API to accommodate both user and"},{"line_number":12,"context_line":"  image metadata."},{"line_number":13,"context_line":"- All of the necessary testcases needed for the changes."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements: bp support-modify-volume-image-metadata"},{"line_number":16,"context_line":"Change-Id: I22792ef7bd49c763d7c130aa8cac9abc3fff2d4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"ba3cc151_ca32d45e","line":14,"in_reply_to":"ba3cc151_d56fd6fa","updated":"2015-07-10 05:49:07.000000000","message":"Done","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"87344a88c1aaead338c90448fc18b946db30fc89","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  image metadata."},{"line_number":13,"context_line":"- All of the necessary testcases needed for the changes."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":"Partially implements: bp support-modify-volume-image-metadata"},{"line_number":17,"context_line":"Change-Id: I22792ef7bd49c763d7c130aa8cac9abc3fff2d4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"ba3cc151_f27a0925","line":15,"updated":"2015-07-10 18:55:14.000000000","message":"Need a DocImpact also","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b2d18741469e3ae427134517a810d8385659e7a4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  image metadata."},{"line_number":13,"context_line":"- All of the necessary testcases needed for the changes."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":"Partially implements: bp support-modify-volume-image-metadata"},{"line_number":17,"context_line":"Change-Id: I22792ef7bd49c763d7c130aa8cac9abc3fff2d4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"9a41bdd9_8e22a3b8","line":15,"in_reply_to":"ba3cc151_f27a0925","updated":"2015-07-11 04:19:04.000000000","message":"Done","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"}],"cinder/api/common.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b2be2e907b6db3fa7ed343ebaa5a9e657e90af5f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"XML_NS_V1 \u003d \u0027http://docs.openstack.org/api/openstack-block-storage/1.0/content\u0027"},{"line_number":50,"context_line":"XML_NS_V2 \u003d \u0027http://docs.openstack.org/api/openstack-block-storage/2.0/content\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"METATDATA_TYPE \u003d [\u0027image\u0027, \u0027user\u0027]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Regex that matches alphanumeric characters, periods, hyphens,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_26ff9435","line":52,"updated":"2015-07-01 03:35:33.000000000","message":"Better than config options, but the usage a such a list isn\u0027t straightforward enough.","commit_id":"4983c08b4afd58c275c17b39d2bc3cd911b3aab0"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"4b614474dbae9609914d15321c2b5225fa4cb2fe","unresolved":false,"context_lines":[{"line_number":49,"context_line":"XML_NS_V1 \u003d \u0027http://docs.openstack.org/api/openstack-block-storage/1.0/content\u0027"},{"line_number":50,"context_line":"XML_NS_V2 \u003d \u0027http://docs.openstack.org/api/openstack-block-storage/2.0/content\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"METATDATA_TYPE \u003d [\u0027image\u0027, \u0027user\u0027]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Regex that matches alphanumeric characters, periods, hyphens,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_cf4cbb72","line":52,"in_reply_to":"ba3cc151_26ff9435","updated":"2015-07-01 05:57:15.000000000","message":"Done","commit_id":"4983c08b4afd58c275c17b39d2bc3cd911b3aab0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"faa64253da16902c5bab6380e4eb37c00988b566","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import re"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from enum import Enum"},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from six.moves import urllib"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba3cc151_dbaa4819","line":20,"updated":"2015-07-07 15:02:46.000000000","message":"According to hacking rules, please, import modules, not objects","commit_id":"120d1ed46b0c832060314107600fb81cb91041ae"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"ae7f8edcc31592ae9328a0ce002046d097f497ab","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import re"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from enum import Enum"},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from six.moves import urllib"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba3cc151_9974affe","line":20,"in_reply_to":"ba3cc151_dbaa4819","updated":"2015-07-08 02:55:17.000000000","message":"Done","commit_id":"120d1ed46b0c832060314107600fb81cb91041ae"}],"cinder/api/contrib/volume_image_metadata.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder import volume"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import webob"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_93fd7a3e","line":27,"updated":"2015-02-15 04:38:45.000000000","message":"See import guidelines: \r\n\r\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder import volume"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import webob"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_b8b505d2","line":27,"in_reply_to":"da86d52c_93fd7a3e","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                                                          volume,"},{"line_number":123,"context_line":"                                                          metadata,"},{"line_number":124,"context_line":"                                                          delete\u003dFalse,"},{"line_number":125,"context_line":"                                                          meta_type\u003d\"image\""},{"line_number":126,"context_line":"                                                          )"},{"line_number":127,"context_line":"        except exception.VolumeNotFound:"},{"line_number":128,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_13998a1f","line":125,"updated":"2015-02-15 04:38:45.000000000","message":"Use constant","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                                                          volume,"},{"line_number":123,"context_line":"                                                          metadata,"},{"line_number":124,"context_line":"                                                          delete\u003dFalse,"},{"line_number":125,"context_line":"                                                          meta_type\u003d\"image\""},{"line_number":126,"context_line":"                                                          )"},{"line_number":127,"context_line":"        except exception.VolumeNotFound:"},{"line_number":128,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_d8f2b96e","line":125,"in_reply_to":"da86d52c_13998a1f","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                self.volume_api.delete_volume_metadata(context,"},{"line_number":161,"context_line":"                                                       volume,"},{"line_number":162,"context_line":"                                                       key,"},{"line_number":163,"context_line":"                                                       meta_type\u003d\"image\")"},{"line_number":164,"context_line":"            except exception.VolumeNotFound:"},{"line_number":165,"context_line":"                msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":166,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b3919ef3","line":163,"updated":"2015-02-15 04:38:45.000000000","message":"use constant","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                self.volume_api.delete_volume_metadata(context,"},{"line_number":161,"context_line":"                                                       volume,"},{"line_number":162,"context_line":"                                                       key,"},{"line_number":163,"context_line":"                                                       meta_type\u003d\"image\")"},{"line_number":164,"context_line":"            except exception.VolumeNotFound:"},{"line_number":165,"context_line":"                msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":166,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_58fec939","line":163,"in_reply_to":"da86d52c_b3919ef3","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"450c2fb1b84323dfcbd5c0477c4fa9ed2627cb39","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":47,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":48,"context_line":"        except exception.VolumeNotFound:"},{"line_number":49,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":50,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":51,"context_line":"        return meta"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5aa745d1_0a0e4c34","line":49,"updated":"2015-04-16 11:26:36.000000000","message":"Please, start messages with upper-case letter","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6755a50431eece5e98ae0b920eec1cc1e3eb1917","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":47,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":48,"context_line":"        except exception.VolumeNotFound:"},{"line_number":49,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":50,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":51,"context_line":"        return meta"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ab451fb_711a7070","line":49,"in_reply_to":"5aa745d1_0a0e4c34","updated":"2015-04-17 09:43:00.000000000","message":"Done","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6755a50431eece5e98ae0b920eec1cc1e3eb1917","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                delete\u003dFalse,"},{"line_number":130,"context_line":"                meta_type\u003dMETATYPE_IMAGE)"},{"line_number":131,"context_line":"        except exception.VolumeNotFound:"},{"line_number":132,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":133,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        except (ValueError, AttributeError):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ab451fb_aece5958","line":132,"updated":"2015-04-17 09:43:00.000000000","message":"and here.","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6755a50431eece5e98ae0b920eec1cc1e3eb1917","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                    key,"},{"line_number":168,"context_line":"                    meta_type\u003dMETATYPE_IMAGE)"},{"line_number":169,"context_line":"            except exception.VolumeNotFound:"},{"line_number":170,"context_line":"                msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":171,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":172,"context_line":"            return webob.Response(status_int\u003d200)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ab451fb_8edb9d1b","line":170,"updated":"2015-04-17 09:43:00.000000000","message":"here","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d8443f3c6e52be8a6642df28b1fc816048455c73","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":46,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":47,"context_line":"        except exception.VolumeNotFound:"},{"line_number":48,"context_line":"            msg \u003d _(\u0027Volume does not exist\u0027)"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":50,"context_line":"        return meta"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_febcb76d","line":48,"updated":"2015-06-08 09:25:43.000000000","message":"Please specify volume id in error msg","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cac710c184bce76cfd9a111ea6c6de0a02324479","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":46,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":47,"context_line":"        except exception.VolumeNotFound:"},{"line_number":48,"context_line":"            msg \u003d _(\u0027Volume does not exist\u0027)"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":50,"context_line":"        return meta"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_ac727247","line":48,"in_reply_to":"3afb71cf_febcb76d","updated":"2015-06-09 03:28:44.000000000","message":"Done","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d8443f3c6e52be8a6642df28b1fc816048455c73","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                delete\u003dFalse,"},{"line_number":128,"context_line":"                meta_type\u003dCONF.metatype_image)"},{"line_number":129,"context_line":"        except exception.VolumeNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\u0027Volume does not exist\u0027)"},{"line_number":131,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        except (ValueError, AttributeError):"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_3e824f95","line":130,"updated":"2015-06-08 09:25:43.000000000","message":"Same as above","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cac710c184bce76cfd9a111ea6c6de0a02324479","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                delete\u003dFalse,"},{"line_number":128,"context_line":"                meta_type\u003dCONF.metatype_image)"},{"line_number":129,"context_line":"        except exception.VolumeNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\u0027Volume does not exist\u0027)"},{"line_number":131,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        except (ValueError, AttributeError):"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_6c935a50","line":130,"in_reply_to":"3afb71cf_3e824f95","updated":"2015-06-09 03:28:44.000000000","message":"Done","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"525f4b1ed556cdaff8eecb7341155aff09b4021a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":46,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":47,"context_line":"        except exception.VolumeNotFound:"},{"line_number":48,"context_line":"            msg \u003d _(\u0027Volume with volume id %s does not exist\u0027) % volume_id"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":50,"context_line":"        return meta"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_10b3c90b","line":48,"updated":"2015-06-28 02:21:35.000000000","message":"Would prefer these msg\u0027s end with a period.","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"61393b33168300db7dcb5dbdd0f187b75423bbb1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":46,"context_line":"            meta \u003d self.volume_api.get_volume_image_metadata(context, volume)"},{"line_number":47,"context_line":"        except exception.VolumeNotFound:"},{"line_number":48,"context_line":"            msg \u003d _(\u0027Volume with volume id %s does not exist\u0027) % volume_id"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":50,"context_line":"        return meta"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_69d15dfb","line":48,"in_reply_to":"fa32b979_10b3c90b","updated":"2015-06-29 09:21:28.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"35834b16979b87a5bcd743a6ad9af60ed0829011","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except exception.VolumeNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\u0027Volume with volume id %s does not exist\u0027) % volume_id"},{"line_number":131,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        except (ValueError, AttributeError):"},{"line_number":134,"context_line":"            msg \u003d _(\"Malformed request body\")"},{"line_number":135,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_5a2c55ab","line":132,"updated":"2015-06-29 05:11:12.000000000","message":"Remove this newline","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"666b8bcfabe7e4a68530555406ef3288df73a965","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except exception.VolumeNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\u0027Volume with volume id %s does not exist\u0027) % volume_id"},{"line_number":131,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        except (ValueError, AttributeError):"},{"line_number":134,"context_line":"            msg \u003d _(\"Malformed request body\")"},{"line_number":135,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_9602b13d","line":132,"in_reply_to":"ba3cc151_5a2c55ab","updated":"2015-06-29 15:09:31.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"35834b16979b87a5bcd743a6ad9af60ed0829011","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        except (ValueError, AttributeError):"},{"line_number":134,"context_line":"            msg \u003d _(\"Malformed request body\")"},{"line_number":135,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except exception.InvalidVolumeMetadata as error:"},{"line_number":138,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_fa176952","line":136,"updated":"2015-06-29 05:11:12.000000000","message":"ditto","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"666b8bcfabe7e4a68530555406ef3288df73a965","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        except (ValueError, AttributeError):"},{"line_number":134,"context_line":"            msg \u003d _(\"Malformed request body\")"},{"line_number":135,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except exception.InvalidVolumeMetadata as error:"},{"line_number":138,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_b6ffb533","line":136,"in_reply_to":"ba3cc151_fa176952","updated":"2015-06-29 15:09:31.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"35834b16979b87a5bcd743a6ad9af60ed0829011","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except exception.InvalidVolumeMetadata as error:"},{"line_number":138,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        except exception.InvalidVolumeMetadataSize as error:"},{"line_number":141,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge(explanation\u003derror.msg)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_1a1d6d73","line":139,"updated":"2015-06-29 05:11:12.000000000","message":"ditto","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"666b8bcfabe7e4a68530555406ef3288df73a965","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except exception.InvalidVolumeMetadata as error:"},{"line_number":138,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        except exception.InvalidVolumeMetadataSize as error:"},{"line_number":141,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge(explanation\u003derror.msg)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_56fc293e","line":139,"in_reply_to":"ba3cc151_1a1d6d73","updated":"2015-06-29 15:09:31.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"35834b16979b87a5bcd743a6ad9af60ed0829011","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except exception.InvalidVolumeMetadataSize as error:"},{"line_number":141,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge(explanation\u003derror.msg)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @wsgi.action(\"os-del_image_metadata\")"},{"line_number":144,"context_line":"    def delete(self, req, id, body):"},{"line_number":145,"context_line":"        \"\"\"Deletes an existing image metadata.\"\"\""},{"line_number":146,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_ba11e15f","line":143,"updated":"2015-06-29 05:11:12.000000000","message":"how about \u0027os-unset_image_metadata\u0027 to match update?","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"666b8bcfabe7e4a68530555406ef3288df73a965","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except exception.InvalidVolumeMetadataSize as error:"},{"line_number":141,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge(explanation\u003derror.msg)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @wsgi.action(\"os-del_image_metadata\")"},{"line_number":144,"context_line":"    def delete(self, req, id, body):"},{"line_number":145,"context_line":"        \"\"\"Deletes an existing image metadata.\"\"\""},{"line_number":146,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_f6ba1d6e","line":143,"in_reply_to":"ba3cc151_ba11e15f","updated":"2015-06-29 15:09:31.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"87344a88c1aaead338c90448fc18b946db30fc89","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    @wsgi.action(\"os-set_image_metadata\")"},{"line_number":97,"context_line":"    @wsgi.serializers(xml\u003dcommon.MetadataTemplate)"},{"line_number":98,"context_line":"    @wsgi.deserializers(xml\u003dcommon.MetadataDeserializer)"},{"line_number":99,"context_line":"    def create(self, req, id, body):"},{"line_number":100,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":101,"context_line":"        if authorize(context):"},{"line_number":102,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_97d36f5f","line":99,"updated":"2015-07-10 18:55:14.000000000","message":"we should call this something other than create. Seems weird since it\u0027s a wsgi action and not creating a new resource.","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b2d18741469e3ae427134517a810d8385659e7a4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    @wsgi.action(\"os-set_image_metadata\")"},{"line_number":97,"context_line":"    @wsgi.serializers(xml\u003dcommon.MetadataTemplate)"},{"line_number":98,"context_line":"    @wsgi.deserializers(xml\u003dcommon.MetadataDeserializer)"},{"line_number":99,"context_line":"    def create(self, req, id, body):"},{"line_number":100,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":101,"context_line":"        if authorize(context):"},{"line_number":102,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a41bdd9_2e0357ba","line":99,"in_reply_to":"ba3cc151_97d36f5f","updated":"2015-07-11 04:19:04.000000000","message":"Firstly, let me explain why we use wsgi action here, CRUD intefaces are all occupied by volume metadata APIs, and I think the rest API here should have the same prefix with volume metadata. Instead of changing the meaning of volume metadata APIs, we define it as a wsgi action here. \n\nSecondly, this API can create the new image metadata if the key is not existing or update it otherwise, so I don\u0027t see any reason of changing the name here, what would you suggest to call it here?","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"87344a88c1aaead338c90448fc18b946db30fc89","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":101,"context_line":"        if authorize(context):"},{"line_number":102,"context_line":"            try:"},{"line_number":103,"context_line":"                metadata \u003d body[\u0027os-set_image_metadata\u0027][\u0027metadata\u0027]"},{"line_number":104,"context_line":"            except (KeyError, TypeError):"},{"line_number":105,"context_line":"                msg \u003d _(\"Malformed request body.\")"},{"line_number":106,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_17c67f49","line":103,"updated":"2015-07-10 18:55:14.000000000","message":"You may want to use  self.assert_valid_body.\n\nExamples here: https://review.openstack.org/#/c/187886/","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"}],"cinder/api/v2/volume_metadata.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                          volume,"},{"line_number":114,"context_line":"                                                          metadata,"},{"line_number":115,"context_line":"                                                          delete,"},{"line_number":116,"context_line":"                                                          meta_type\u003d\"user\")"},{"line_number":117,"context_line":"        except exception.VolumeNotFound:"},{"line_number":118,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":119,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_93abba1d","line":116,"updated":"2015-02-15 04:38:45.000000000","message":"use constant","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                          volume,"},{"line_number":114,"context_line":"                                                          metadata,"},{"line_number":115,"context_line":"                                                          delete,"},{"line_number":116,"context_line":"                                                          meta_type\u003d\"user\")"},{"line_number":117,"context_line":"        except exception.VolumeNotFound:"},{"line_number":118,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":119,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_b8bb4574","line":116,"in_reply_to":"da86d52c_93abba1d","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.volume_api.delete_volume_metadata(context,"},{"line_number":156,"context_line":"                                                   volume,"},{"line_number":157,"context_line":"                                                   id,"},{"line_number":158,"context_line":"                                                   meta_type\u003d\"user\")"},{"line_number":159,"context_line":"        except exception.VolumeNotFound:"},{"line_number":160,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":161,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b3a8be21","line":158,"updated":"2015-02-15 04:38:45.000000000","message":"use constant","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.volume_api.delete_volume_metadata(context,"},{"line_number":156,"context_line":"                                                   volume,"},{"line_number":157,"context_line":"                                                   id,"},{"line_number":158,"context_line":"                                                   meta_type\u003d\"user\")"},{"line_number":159,"context_line":"        except exception.VolumeNotFound:"},{"line_number":160,"context_line":"            msg \u003d _(\u0027volume does not exist\u0027)"},{"line_number":161,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_d8c0f9e2","line":158,"in_reply_to":"da86d52c_b3a8be21","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8c987814cbec376bca4d4ddefcf421e2959c5f6e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import volume"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"METATYPE_USER \u003d \"user\""},{"line_number":25,"context_line":"METATYPE_IMAGE \u003d \"image\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Controller(wsgi.Controller):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_41586d56","line":25,"updated":"2015-02-28 19:38:56.000000000","message":"METATYPE_IMAGE doesn\u0027t appear to be used anywhere.","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6cbcf41f8097827e91b07b892a8075f5ecfc33f3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import volume"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"METATYPE_USER \u003d \"user\""},{"line_number":25,"context_line":"METATYPE_IMAGE \u003d \"image\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Controller(wsgi.Controller):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_05711e44","line":25,"in_reply_to":"ba7be1f8_41586d56","updated":"2015-03-01 05:14:57.000000000","message":"Done","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"}],"cinder/common/config.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d8443f3c6e52be8a6642df28b1fc816048455c73","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                    \u0027account.\u0027),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata.\u0027),"},{"line_number":209,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":210,"context_line":"               default\u003d\u0027image\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_21e35235","line":207,"updated":"2015-06-08 09:25:43.000000000","message":"Help for metatype_user and metatype_image are equivalent, could you add more meaningful help","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cac710c184bce76cfd9a111ea6c6de0a02324479","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                    \u0027account.\u0027),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata.\u0027),"},{"line_number":209,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":210,"context_line":"               default\u003d\u0027image\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_5f995e1e","line":207,"in_reply_to":"3afb71cf_21e35235","updated":"2015-06-09 03:28:44.000000000","message":"Done","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"35834b16979b87a5bcd743a6ad9af60ed0829011","unresolved":false,"context_lines":[{"line_number":202,"context_line":"               default\u003dNone,"},{"line_number":203,"context_line":"               help\u003d\u0027Tenant name associated with the OpenStack privileged \u0027"},{"line_number":204,"context_line":"                    \u0027account.\u0027),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata, default value user means the metadata is \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_da162555","line":205,"updated":"2015-06-29 05:11:12.000000000","message":"How about using a real unmutable constant like a global variant instead of a config option?  I don\u0027t see the value of having this constant being configurable, besides, in a weird situation user can really screw things up by config both \u0027metatype_user\u0027 and \u0027metatype_image\u0027 to the same value.","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"666b8bcfabe7e4a68530555406ef3288df73a965","unresolved":false,"context_lines":[{"line_number":202,"context_line":"               default\u003dNone,"},{"line_number":203,"context_line":"               help\u003d\u0027Tenant name associated with the OpenStack privileged \u0027"},{"line_number":204,"context_line":"                    \u0027account.\u0027),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata, default value user means the metadata is \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_99aada18","line":205,"in_reply_to":"ba3cc151_da162555","updated":"2015-06-29 15:09:31.000000000","message":"Done","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1b5d246f547f19f32ec11375701477661dd89a23","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata, default value user means the metadata is \u0027"},{"line_number":209,"context_line":"                    \u0027user metadata.\u0027),"},{"line_number":210,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":211,"context_line":"               default\u003d\u0027image\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba3cc151_0f999c6e","line":208,"updated":"2015-06-29 14:37:42.000000000","message":"If you do another update, please put \"user\" in quotes.","commit_id":"b6c3e718bf362cfe0dbb4c874b4a53bfa8c15809"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"fa8ee7ae8856c5eb7be99599465de532dd3f724a","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    cfg.StrOpt(\u0027metatype_user\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":208,"context_line":"                    \u0027metadata, default value user means the metadata is \u0027"},{"line_number":209,"context_line":"                    \u0027user metadata.\u0027),"},{"line_number":210,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":211,"context_line":"               default\u003d\u0027image\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba3cc151_2e7802c4","line":208,"in_reply_to":"ba3cc151_0f999c6e","updated":"2015-06-30 07:03:48.000000000","message":"@Sean, I have removed these conf and use a constant in `cinder/api/common.py` to follow up zhiteng\u0027s comments,\n\nsee: https://review.openstack.org/#/c/147726/22/cinder/common/config.py\n\nThanks.","commit_id":"b6c3e718bf362cfe0dbb4c874b4a53bfa8c15809"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1b5d246f547f19f32ec11375701477661dd89a23","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":211,"context_line":"               default\u003d\u0027image\u0027,"},{"line_number":212,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":213,"context_line":"                    \u0027metadata, default value image means the metadata \u0027"},{"line_number":214,"context_line":"                    \u0027is image metadata.\u0027),"},{"line_number":215,"context_line":"]"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba3cc151_2f9ee056","line":213,"updated":"2015-06-29 14:37:42.000000000","message":"Same for \"image\".","commit_id":"b6c3e718bf362cfe0dbb4c874b4a53bfa8c15809"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"fa8ee7ae8856c5eb7be99599465de532dd3f724a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    cfg.StrOpt(\u0027metatype_image\u0027,"},{"line_number":211,"context_line":"               default\u003d\u0027image\u0027,"},{"line_number":212,"context_line":"               help\u003d\u0027The constant used to differentiate the type of \u0027"},{"line_number":213,"context_line":"                    \u0027metadata, default value image means the metadata \u0027"},{"line_number":214,"context_line":"                    \u0027is image metadata.\u0027),"},{"line_number":215,"context_line":"]"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba3cc151_ee81ba90","line":213,"in_reply_to":"ba3cc151_2f9ee056","updated":"2015-06-30 07:03:48.000000000","message":"same here.","commit_id":"b6c3e718bf362cfe0dbb4c874b4a53bfa8c15809"}],"cinder/db/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    return IMPL.volume_metadata_get(context, volume_id)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type\u003d\"user\"):"},{"line_number":323,"context_line":"    \"\"\"Delete the given metadata item.\"\"\""},{"line_number":324,"context_line":"    return IMPL.volume_metadata_delete(context, volume_id,"},{"line_number":325,"context_line":"                                       key, meta_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d3a53248","line":322,"updated":"2015-02-15 04:38:45.000000000","message":"use constant","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    return IMPL.volume_metadata_get(context, volume_id)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type\u003d\"user\"):"},{"line_number":323,"context_line":"    \"\"\"Delete the given metadata item.\"\"\""},{"line_number":324,"context_line":"    return IMPL.volume_metadata_delete(context, volume_id,"},{"line_number":325,"context_line":"                                       key, meta_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_b32526b0","line":322,"in_reply_to":"da86d52c_d3a53248","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"def volume_metadata_update(context, volume_id, metadata,"},{"line_number":329,"context_line":"                           delete, meta_type\u003d\"user\"):"},{"line_number":330,"context_line":"    \"\"\"Update metadata if it exists, otherwise create it.\"\"\""},{"line_number":331,"context_line":"    return IMPL.volume_metadata_update(context, volume_id, metadata,"},{"line_number":332,"context_line":"                                       delete, meta_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f3615612","line":329,"updated":"2015-02-15 04:38:45.000000000","message":"same","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"def volume_metadata_update(context, volume_id, metadata,"},{"line_number":329,"context_line":"                           delete, meta_type\u003d\"user\"):"},{"line_number":330,"context_line":"    \"\"\"Update metadata if it exists, otherwise create it.\"\"\""},{"line_number":331,"context_line":"    return IMPL.volume_metadata_update(context, volume_id, metadata,"},{"line_number":332,"context_line":"                                       delete, meta_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_d32a9a7d","line":329,"in_reply_to":"da86d52c_f3615612","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":1543,"context_line":"@require_volume_exists"},{"line_number":1544,"context_line":"@_retry_on_deadlock"},{"line_number":1545,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type):"},{"line_number":1546,"context_line":"    if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":1547,"context_line":"        _volume_user_metadata_get_query(context, volume_id).\\"},{"line_number":1548,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1549,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_737566cb","line":1546,"updated":"2015-02-15 04:38:45.000000000","message":"use six.text_type() instead of str()","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":1543,"context_line":"@require_volume_exists"},{"line_number":1544,"context_line":"@_retry_on_deadlock"},{"line_number":1545,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type):"},{"line_number":1546,"context_line":"    if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":1547,"context_line":"        _volume_user_metadata_get_query(context, volume_id).\\"},{"line_number":1548,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1549,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_13d6f2c5","line":1546,"in_reply_to":"da86d52c_737566cb","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"            update({\u0027deleted\u0027: True,"},{"line_number":1550,"context_line":"                    \u0027deleted_at\u0027: timeutils.utcnow(),"},{"line_number":1551,"context_line":"                    \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)})"},{"line_number":1552,"context_line":"    elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":1553,"context_line":"        _volume_image_metadata_get_query(context, volume_id).\\"},{"line_number":1554,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1555,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_134eea96","line":1552,"updated":"2015-02-15 04:38:45.000000000","message":"six.text_type","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"            update({\u0027deleted\u0027: True,"},{"line_number":1550,"context_line":"                    \u0027deleted_at\u0027: timeutils.utcnow(),"},{"line_number":1551,"context_line":"                    \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)})"},{"line_number":1552,"context_line":"    elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":1553,"context_line":"        _volume_image_metadata_get_query(context, volume_id).\\"},{"line_number":1554,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1555,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_33da16ea","line":1552,"in_reply_to":"da86d52c_134eea96","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":1564,"context_line":"@require_volume_exists"},{"line_number":1565,"context_line":"@_retry_on_deadlock"},{"line_number":1566,"context_line":"def volume_metadata_update(context, volume_id, metadata, delete, meta_type):"},{"line_number":1567,"context_line":"    if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":1568,"context_line":"        return _volume_user_metadata_update(context,"},{"line_number":1569,"context_line":"                                            volume_id,"},{"line_number":1570,"context_line":"                                            metadata,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_53486287","line":1567,"updated":"2015-02-15 04:38:45.000000000","message":"six.text_type","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":1564,"context_line":"@require_volume_exists"},{"line_number":1565,"context_line":"@_retry_on_deadlock"},{"line_number":1566,"context_line":"def volume_metadata_update(context, volume_id, metadata, delete, meta_type):"},{"line_number":1567,"context_line":"    if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":1568,"context_line":"        return _volume_user_metadata_update(context,"},{"line_number":1569,"context_line":"                                            volume_id,"},{"line_number":1570,"context_line":"                                            metadata,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_338856c6","line":1567,"in_reply_to":"da86d52c_53486287","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":1569,"context_line":"                                            volume_id,"},{"line_number":1570,"context_line":"                                            metadata,"},{"line_number":1571,"context_line":"                                            delete)"},{"line_number":1572,"context_line":"    elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":1573,"context_line":"        return _volume_image_metadata_update(context,"},{"line_number":1574,"context_line":"                                             volume_id,"},{"line_number":1575,"context_line":"                                             metadata,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_735c864d","line":1572,"updated":"2015-02-15 04:38:45.000000000","message":"six.text_type","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":1569,"context_line":"                                            volume_id,"},{"line_number":1570,"context_line":"                                            metadata,"},{"line_number":1571,"context_line":"                                            delete)"},{"line_number":1572,"context_line":"    elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":1573,"context_line":"        return _volume_image_metadata_update(context,"},{"line_number":1574,"context_line":"                                             volume_id,"},{"line_number":1575,"context_line":"                                             metadata,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_938f42cc","line":1572,"in_reply_to":"da86d52c_735c864d","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"450c2fb1b84323dfcbd5c0477c4fa9ed2627cb39","unresolved":false,"context_lines":[{"line_number":61,"context_line":"_LOCK \u003d threading.Lock()"},{"line_number":62,"context_line":"_FACADE \u003d None"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"METATYPE_USER \u003d \"user\""},{"line_number":65,"context_line":"METATYPE_IMAGE \u003d \"image\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5aa745d1_ca3e24b8","line":64,"updated":"2015-04-16 11:26:36.000000000","message":"These consts are defined in several modules. Can we declare it once and re-use it?","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6755a50431eece5e98ae0b920eec1cc1e3eb1917","unresolved":false,"context_lines":[{"line_number":61,"context_line":"_LOCK \u003d threading.Lock()"},{"line_number":62,"context_line":"_FACADE \u003d None"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"METATYPE_USER \u003d \"user\""},{"line_number":65,"context_line":"METATYPE_IMAGE \u003d \"image\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ab451fb_eeec6191","line":64,"in_reply_to":"5aa745d1_ca3e24b8","updated":"2015-04-17 09:43:00.000000000","message":"Done","commit_id":"e1908f3238f7293892cec66daf718a5b8e9ff6ce"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d8443f3c6e52be8a6642df28b1fc816048455c73","unresolved":false,"context_lines":[{"line_number":1758,"context_line":"        filter_by(key\u003dkey).\\"},{"line_number":1759,"context_line":"        first()"},{"line_number":1760,"context_line":""},{"line_number":1761,"context_line":"    # import pdb"},{"line_number":1762,"context_line":"    # pdb.set_trace()"},{"line_number":1763,"context_line":"    if not result:"},{"line_number":1764,"context_line":"        if model is models.VolumeGlanceMetadata:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_a144e21a","line":1761,"updated":"2015-06-08 09:25:43.000000000","message":"forgot!?","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cac710c184bce76cfd9a111ea6c6de0a02324479","unresolved":false,"context_lines":[{"line_number":1758,"context_line":"        filter_by(key\u003dkey).\\"},{"line_number":1759,"context_line":"        first()"},{"line_number":1760,"context_line":""},{"line_number":1761,"context_line":"    # import pdb"},{"line_number":1762,"context_line":"    # pdb.set_trace()"},{"line_number":1763,"context_line":"    if not result:"},{"line_number":1764,"context_line":"        if model is models.VolumeGlanceMetadata:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_bf94d2e1","line":1761,"in_reply_to":"3afb71cf_a144e21a","updated":"2015-06-09 03:28:44.000000000","message":"Done","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"65cf8ac21072986bd203c9c5a3970236d655b63b","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"@require_volume_exists"},{"line_number":1873,"context_line":"@_retry_on_deadlock"},{"line_number":1874,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type):"},{"line_number":1875,"context_line":"    if meta_type \u003d\u003d common.METADATA_TYPES.user:"},{"line_number":1876,"context_line":"        _volume_user_metadata_get_query(context, volume_id).\\"},{"line_number":1877,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1878,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba3cc151_f5769a0b","line":1875,"updated":"2015-07-10 04:03:17.000000000","message":"Please don\u0027t use \\ for line continuation.","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"5ba84d0fbb6623ae5622598ece3ddff3f5beeddb","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"@require_volume_exists"},{"line_number":1873,"context_line":"@_retry_on_deadlock"},{"line_number":1874,"context_line":"def volume_metadata_delete(context, volume_id, key, meta_type):"},{"line_number":1875,"context_line":"    if meta_type \u003d\u003d common.METADATA_TYPES.user:"},{"line_number":1876,"context_line":"        _volume_user_metadata_get_query(context, volume_id).\\"},{"line_number":1877,"context_line":"            filter_by(key\u003dkey).\\"},{"line_number":1878,"context_line":"            update({\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba3cc151_2a2ee0fa","line":1875,"in_reply_to":"ba3cc151_f5769a0b","updated":"2015-07-10 05:49:07.000000000","message":"Done, and I notice is used widely in the cinder but I think that change should be in a separate commit.","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"}],"cinder/tests/api/contrib/test_volume_image_metadata.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, fake_volume_get)"},{"line_number":113,"context_line":"        self.UUID \u003d uuid.uuid4()"},{"line_number":114,"context_line":"        self.controller \u003d volume_image_metadata. \\"},{"line_number":115,"context_line":"            VolumeImageMetadataController()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _make_request(self, url):"},{"line_number":118,"context_line":"        req \u003d webob.Request.blank(url)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b356fe28","line":115,"updated":"2015-02-15 04:38:45.000000000","message":"Suggest using () instead of \\","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, fake_volume_get)"},{"line_number":113,"context_line":"        self.UUID \u003d uuid.uuid4()"},{"line_number":114,"context_line":"        self.controller \u003d volume_image_metadata. \\"},{"line_number":115,"context_line":"            VolumeImageMetadataController()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _make_request(self, url):"},{"line_number":118,"context_line":"        req \u003d webob.Request.blank(url)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_337696d9","line":115,"in_reply_to":"da86d52c_b356fe28","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":166,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":167,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":168,"context_line":"                         fake_image_metadata)"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f32f96a5","line":166,"updated":"2015-02-15 04:38:45.000000000","message":"The order of parameters should be expected, actual. \r\n\r\nself.assertEqual(200, res.status_int)\r\n\r\nPlease fix all other places changed in this patch.","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":166,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":167,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":168,"context_line":"                         fake_image_metadata)"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_73572e27","line":166,"in_reply_to":"da86d52c_f32f96a5","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                         fake_image_metadata)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_create_with_keys_case_insensitive(self):"},{"line_number":171,"context_line":"        # if the keys in uppercase_and_lowercase, should return the one"},{"line_number":172,"context_line":"        # which server added"},{"line_number":173,"context_line":"        self.stubs.Set(db, \u0027volume_glance_metadata_get\u0027,"},{"line_number":174,"context_line":"                       return_empty_image_metadata)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d32a928f","line":171,"updated":"2015-02-15 04:38:45.000000000","message":"Capital first letter.","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                         fake_image_metadata)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_create_with_keys_case_insensitive(self):"},{"line_number":171,"context_line":"        # if the keys in uppercase_and_lowercase, should return the one"},{"line_number":172,"context_line":"        # which server added"},{"line_number":173,"context_line":"        self.stubs.Set(db, \u0027volume_glance_metadata_get\u0027,"},{"line_number":174,"context_line":"                       return_empty_image_metadata)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_1340b255","line":171,"in_reply_to":"da86d52c_d32a928f","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8c987814cbec376bca4d4ddefcf421e2959c5f6e","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":165,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":166,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":167,"context_line":"                         fake_image_metadata)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def test_create_with_keys_case_insensitive(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_e115e149","line":166,"updated":"2015-02-28 19:38:56.000000000","message":"assertEqual argument order should be (EXPECTED, ACTUAL).","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6cbcf41f8097827e91b07b892a8075f5ecfc33f3","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":165,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":166,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":167,"context_line":"                         fake_image_metadata)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def test_create_with_keys_case_insensitive(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_258f0225","line":166,"in_reply_to":"ba7be1f8_e115e149","updated":"2015-03-01 05:14:57.000000000","message":"Done","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8c987814cbec376bca4d4ddefcf421e2959c5f6e","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":200,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":201,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":202,"context_line":"                         expected)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_create_empty_body(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_010cb541","line":201,"updated":"2015-02-28 19:38:56.000000000","message":"Switch order.","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6cbcf41f8097827e91b07b892a8075f5ecfc33f3","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":200,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":201,"context_line":"        self.assertEqual(json.loads(res.body)[\"metadata\"],"},{"line_number":202,"context_line":"                         expected)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_create_empty_body(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_859c2e5f","line":201,"in_reply_to":"ba7be1f8_010cb541","updated":"2015-03-01 05:14:57.000000000","message":"Done","commit_id":"68df24ce67b43b47d6f8682b4a9add23f4ae1e3b"}],"cinder/tests/api/v1/test_volume_metadata.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def return_create_volume_metadata_max(context, volume_id, metadata, delete):"},{"line_number":36,"context_line":"    return stub_max_volume_metadata()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def return_create_volume_metadata(context, volume_id, metadata, delete,"},{"line_number":40,"context_line":"                                  meta_type):"},{"line_number":41,"context_line":"    return stub_volume_metadata()"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_13f26a6f","line":38,"updated":"2015-02-15 04:38:45.000000000","message":"You only changed v2/volume_metadata.py, why do you need to change the v1 test?","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e1baa268763addd4e17699858889d62ae1bf9508","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def return_create_volume_metadata_max(context, volume_id, metadata, delete):"},{"line_number":36,"context_line":"    return stub_max_volume_metadata()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def return_create_volume_metadata(context, volume_id, metadata, delete,"},{"line_number":40,"context_line":"                                  meta_type):"},{"line_number":41,"context_line":"    return stub_volume_metadata()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_6aa4b757","line":38,"in_reply_to":"da86d52c_13f26a6f","updated":"2015-03-04 06:10:17.000000000","message":"I am afraid these change is needed or else parts of testcases will fail due to inconsistent parameter numbers, I have tried to remove them in the PS7 to give a more concise modificiation but hit those errors.\nRef: http://logs.openstack.org/26/147726/7/check/gate-cinder-python27/7b01e25/console.html.gz","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def return_create_volume_metadata_max(context, volume_id, metadata, delete):"},{"line_number":36,"context_line":"    return stub_max_volume_metadata()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def return_create_volume_metadata(context, volume_id, metadata, delete,"},{"line_number":40,"context_line":"                                  meta_type):"},{"line_number":41,"context_line":"    return stub_volume_metadata()"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_1e5d19ea","line":38,"in_reply_to":"da86d52c_13f26a6f","updated":"2015-02-27 13:40:48.000000000","message":"This is beacuse the DB API has been redefined to accommodate image type metadata, this may needn\u0027t since meta_type has been assigned with default value,let me try it later, thanks.","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"}],"cinder/tests/unit/api/contrib/test_volume_image_metadata.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d8443f3c6e52be8a6642df28b1fc816048455c73","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                         fake_image_metadata)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_create_image_metadata(self):"},{"line_number":144,"context_line":"        self.stubs.Set(volume.API, \u0027get_volume_image_metadata\u0027,"},{"line_number":145,"context_line":"                       return_empty_image_metadata)"},{"line_number":146,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":147,"context_line":"                       fake_create_volume_metadata)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_81fa06bc","line":144,"updated":"2015-06-08 09:25:43.000000000","message":"Please use mock instead stubs.","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cac710c184bce76cfd9a111ea6c6de0a02324479","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                         fake_image_metadata)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_create_image_metadata(self):"},{"line_number":144,"context_line":"        self.stubs.Set(volume.API, \u0027get_volume_image_metadata\u0027,"},{"line_number":145,"context_line":"                       return_empty_image_metadata)"},{"line_number":146,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":147,"context_line":"                       fake_create_volume_metadata)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_3f3c62e1","line":144,"in_reply_to":"3afb71cf_81fa06bc","updated":"2015-06-09 03:28:44.000000000","message":"why? any comparative advantage in this case? pick up stubs simply want to consistent with testcase in test_volume_metadata.py, and I saw stubs is also used widely in the cinder.","commit_id":"d1bc4851b894aab56332b7947aa8f9db6e7a4a38"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"525f4b1ed556cdaff8eecb7341155aff09b4021a","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":175,"context_line":"                       return_create_image_metadata_insensitive)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        body \u003d {"},{"line_number":178,"context_line":"            \"os-set_image_metadata\": {"},{"line_number":179,"context_line":"                \"metadata\": {"},{"line_number":180,"context_line":"                    \"Image_Id\": \"someid\","}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_f0e185fd","line":177,"updated":"2015-06-28 02:21:35.000000000","message":"This is duplicated in multiple places. Can you create a constant for this to use in each of these cases?\n\nAdditionally, according to guidelines dicts longer than 80 characters should have a trailing comma.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"61393b33168300db7dcb5dbdd0f187b75423bbb1","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":175,"context_line":"                       return_create_image_metadata_insensitive)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        body \u003d {"},{"line_number":178,"context_line":"            \"os-set_image_metadata\": {"},{"line_number":179,"context_line":"                \"metadata\": {"},{"line_number":180,"context_line":"                    \"Image_Id\": \"someid\","}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_b4e6d8e6","line":177,"in_reply_to":"fa32b979_f0e185fd","updated":"2015-06-29 09:21:28.000000000","message":"@Sean, thanks, I have did some refactoring around this dict, remove some redundant data and use the constant as you suggested.\n\nAnd will give trailing comma to follow your suggestion here, but keep the dict as is since here we will test the case that the key in dict is in mixed with uppercase and lowercase.","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"525f4b1ed556cdaff8eecb7341155aff09b4021a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":226,"context_line":"                          self.controller.create, req, 1, body)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_invalid_metadata_items_on_create(self):"},{"line_number":229,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":230,"context_line":"                       fake_create_volume_metadata)"},{"line_number":231,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/volumes/1/action\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_70bc95db","line":228,"updated":"2015-06-28 02:21:35.000000000","message":"It would be good to consider using ddt for this. You could pass in values for the data and the expected exception.\n\nhttp://ddt.readthedocs.org/en/latest/example.html","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c5184e53fcbffc9882f129eb60c0f3920eda7094","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":226,"context_line":"                          self.controller.create, req, 1, body)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_invalid_metadata_items_on_create(self):"},{"line_number":229,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":230,"context_line":"                       fake_create_volume_metadata)"},{"line_number":231,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/volumes/1/action\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_589425e1","line":228,"in_reply_to":"ba3cc151_1d09e495","updated":"2015-06-30 09:06:03.000000000","message":"Just notice that `ddt` has been included in the req-dep.  In this testcase, we want to test that different exceptions would be raised with the different input data, the test maynot be multiplied here. \n\nWe can split this testcase into two cases, the first canbe multiplied to test long key and long value, the second testcase can be used to test empty key, thus, IMHO, the ddt is not such meaningful in this case, so, let\u0027s just keep it as is.","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ce56765cb920fe8492eed758c3a3bea622ebe71b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":226,"context_line":"                          self.controller.create, req, 1, body)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_invalid_metadata_items_on_create(self):"},{"line_number":229,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":230,"context_line":"                       fake_create_volume_metadata)"},{"line_number":231,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/volumes/1/action\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_12ebd4b1","line":228,"in_reply_to":"ba3cc151_589425e1","updated":"2015-06-30 11:34:59.000000000","message":"I was thinking you could pass in the list of different \"data\" values along with the expected exceptions they should raise. See the unpack examples.\n\nJust a suggestion.","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"61393b33168300db7dcb5dbdd0f187b75423bbb1","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":226,"context_line":"                          self.controller.create, req, 1, body)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_invalid_metadata_items_on_create(self):"},{"line_number":229,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":230,"context_line":"                       fake_create_volume_metadata)"},{"line_number":231,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/volumes/1/action\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_1d09e495","line":228,"in_reply_to":"fa32b979_70bc95db","updated":"2015-06-29 09:21:28.000000000","message":"@Sean, thanks for the suggestion, since use \u0027ddt\u0027 will introduce a new dependencies \"ddt\", I am considering to address that in a following up patches, so other reviews could weigh in that patch, is that okay?","commit_id":"06a07ef0c0d70affcc9ef461a6098fe472561ec1"}],"cinder/tests/unit/policy.json":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"87344a88c1aaead338c90448fc18b946db30fc89","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    \"volume:get_volume_metadata\": \"\","},{"line_number":10,"context_line":"    \"volume:get_volume_image_metadata\": \"\","},{"line_number":11,"context_line":"    \"volume:delete_volume_metadata\": \"\","},{"line_number":12,"context_line":"    \"volume:update_volume_metadata\": \"\","},{"line_number":13,"context_line":"    \"volume:get_volume_admin_metadata\": \"rule:admin_api\","},{"line_number":14,"context_line":"    \"volume:delete_volume_admin_metadata\": \"rule:admin_api\","},{"line_number":15,"context_line":"    \"volume:update_volume_admin_metadata\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":32,"id":"ba3cc151_f294498d","line":12,"updated":"2015-07-10 18:55:14.000000000","message":"So is this the policy that will dictate if someone can update the image metadata? Would it be valuable to have another policy?","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b2d18741469e3ae427134517a810d8385659e7a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    \"volume:get_volume_metadata\": \"\","},{"line_number":10,"context_line":"    \"volume:get_volume_image_metadata\": \"\","},{"line_number":11,"context_line":"    \"volume:delete_volume_metadata\": \"\","},{"line_number":12,"context_line":"    \"volume:update_volume_metadata\": \"\","},{"line_number":13,"context_line":"    \"volume:get_volume_admin_metadata\": \"rule:admin_api\","},{"line_number":14,"context_line":"    \"volume:delete_volume_admin_metadata\": \"rule:admin_api\","},{"line_number":15,"context_line":"    \"volume:update_volume_admin_metadata\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":32,"id":"9a41bdd9_f3179852","line":12,"in_reply_to":"ba3cc151_f294498d","updated":"2015-07-11 04:19:04.000000000","message":"\"volume:update_volume_metadata\", this policy is for the API of update_volume_metadata which is dedicate to *user* metadata.\n\nCurrently, all of the \u0027image metadata\u0027 stuff go to the contrib or extension module due to historical reason (you can see my changes is based on the existing module volume_image_metadata.py). In this patch we tried to reuse some methods in DB and API layer and make it more general as we can but we cannot change the meaning of the existing API, which may lead to huge impact and I think no one like the change if we do in like way.","commit_id":"2c87dfaffe51f1adacc4fbebd2272b5ee001b521"}],"cinder/volume/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        return dict(rv.iteritems())"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    @wrap_check_policy"},{"line_number":820,"context_line":"    def delete_volume_metadata(self, context, volume, key, meta_type\u003d\"user\"):"},{"line_number":821,"context_line":"        \"\"\"Delete the given metadata item from a volume.\"\"\""},{"line_number":822,"context_line":"        self.db.volume_metadata_delete(context, volume[\u0027id\u0027], key, meta_type)"},{"line_number":823,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d3729210","line":820,"updated":"2015-02-15 04:38:45.000000000","message":"Use METATYPE_USER","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        return dict(rv.iteritems())"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    @wrap_check_policy"},{"line_number":820,"context_line":"    def delete_volume_metadata(self, context, volume, key, meta_type\u003d\"user\"):"},{"line_number":821,"context_line":"        \"\"\"Delete the given metadata item from a volume.\"\"\""},{"line_number":822,"context_line":"        self.db.volume_metadata_delete(context, volume[\u0027id\u0027], key, meta_type)"},{"line_number":823,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_3ee65d17","line":820,"in_reply_to":"da86d52c_d3729210","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":841,"context_line":""},{"line_number":842,"context_line":"    @wrap_check_policy"},{"line_number":843,"context_line":"    def update_volume_metadata(self, context, volume, metadata,"},{"line_number":844,"context_line":"                               delete\u003dFalse, meta_type\u003d\"user\"):"},{"line_number":845,"context_line":"        \"\"\"Updates or creates volume metadata."},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        If delete is True, metadata items that are not specified in the"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b3751efc","line":844,"updated":"2015-02-15 04:38:45.000000000","message":"Use METATYPE_USER.","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":841,"context_line":""},{"line_number":842,"context_line":"    @wrap_check_policy"},{"line_number":843,"context_line":"    def update_volume_metadata(self, context, volume, metadata,"},{"line_number":844,"context_line":"                               delete\u003dFalse, meta_type\u003d\"user\"):"},{"line_number":845,"context_line":"        \"\"\"Updates or creates volume metadata."},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        If delete is True, metadata items that are not specified in the"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_beb96dee","line":844,"in_reply_to":"da86d52c_b3751efc","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        if delete:"},{"line_number":852,"context_line":"            _metadata \u003d metadata"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":855,"context_line":"                orig_meta \u003d self.get_volume_metadata(context, volume)"},{"line_number":856,"context_line":"            elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_538782d7","line":854,"updated":"2015-02-15 04:38:45.000000000","message":"Use six.text_type() instead of str().","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        if delete:"},{"line_number":852,"context_line":"            _metadata \u003d metadata"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":855,"context_line":"                orig_meta \u003d self.get_volume_metadata(context, volume)"},{"line_number":856,"context_line":"            elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_9ec4a960","line":854,"in_reply_to":"da86d52c_538782d7","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":855,"context_line":"                orig_meta \u003d self.get_volume_metadata(context, volume)"},{"line_number":856,"context_line":"            elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"},{"line_number":858,"context_line":"            else:"},{"line_number":859,"context_line":"                raise exception.InvalidMetadataType(metadata_type\u003dmeta_type,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f35eb678","line":856,"updated":"2015-02-15 04:38:45.000000000","message":"Same","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            if str(meta_type).lower() \u003d\u003d METATYPE_USER:"},{"line_number":855,"context_line":"                orig_meta \u003d self.get_volume_metadata(context, volume)"},{"line_number":856,"context_line":"            elif str(meta_type).lower() \u003d\u003d METATYPE_IMAGE:"},{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"},{"line_number":858,"context_line":"            else:"},{"line_number":859,"context_line":"                raise exception.InvalidMetadataType(metadata_type\u003dmeta_type,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_feaa0584","line":856,"in_reply_to":"da86d52c_f35eb678","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ed82617c5dc11d0a8737c7716ccde9829ccdcc2b","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"},{"line_number":858,"context_line":"            else:"},{"line_number":859,"context_line":"                raise exception.InvalidMetadataType(metadata_type\u003dmeta_type,"},{"line_number":860,"context_line":"                                                    id \u003d volume[id])"},{"line_number":861,"context_line":"            _metadata \u003d orig_meta.copy()"},{"line_number":862,"context_line":"            _metadata.update(metadata)"},{"line_number":863,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f3c5d60a","line":860,"updated":"2015-02-15 04:38:45.000000000","message":"Remove space before and after \"\u003d\".","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79e5c6125d6bed27177b67a29106fe9584d9fed6","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                orig_meta \u003d self.get_volume_image_metadata(context, volume)"},{"line_number":858,"context_line":"            else:"},{"line_number":859,"context_line":"                raise exception.InvalidMetadataType(metadata_type\u003dmeta_type,"},{"line_number":860,"context_line":"                                                    id \u003d volume[id])"},{"line_number":861,"context_line":"            _metadata \u003d orig_meta.copy()"},{"line_number":862,"context_line":"            _metadata.update(metadata)"},{"line_number":863,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_5e78712b","line":860,"in_reply_to":"da86d52c_f3c5d60a","updated":"2015-02-27 13:40:48.000000000","message":"Done","commit_id":"6a78235c490a6a624b094c33433aa7fdddc91997"}],"requirements.txt":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"65cf8ac21072986bd203c9c5a3970236d655b63b","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"pbr\u003c2.0,\u003e\u003d0.11"},{"line_number":6,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":7,"context_line":"Babel\u003e\u003d1.3"},{"line_number":8,"context_line":"enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027"},{"line_number":9,"context_line":"eventlet\u003e\u003d0.17.4"},{"line_number":10,"context_line":"greenlet\u003e\u003d0.3.2"}],"source_content_type":"text/plain","patch_set":31,"id":"ba3cc151_7587eab6","line":7,"updated":"2015-07-10 04:03:17.000000000","message":"Why is this change needed?","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"5ba84d0fbb6623ae5622598ece3ddff3f5beeddb","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"pbr\u003c2.0,\u003e\u003d0.11"},{"line_number":6,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":7,"context_line":"Babel\u003e\u003d1.3"},{"line_number":8,"context_line":"enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027"},{"line_number":9,"context_line":"eventlet\u003e\u003d0.17.4"},{"line_number":10,"context_line":"greenlet\u003e\u003d0.3.2"}],"source_content_type":"text/plain","patch_set":31,"id":"ba3cc151_4a4c84c8","line":7,"in_reply_to":"ba3cc151_7587eab6","updated":"2015-07-10 05:49:07.000000000","message":"pls see: https://review.openstack.org/#/c/147726/31/cinder/api/common.py\n\nWe need enumerate different types of metadata, although it\u0027s in the global-req.txt but we need sync with cinder\u0027s req.txt, discussed in the IRC.\n\npls see: https://review.openstack.org/#/c/147726/25/cinder/api/common.py and Winston\u0027s cover message in PS25.","commit_id":"ef06d7e97e3fbcbebb468efac5c2ccb81c33e67b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"939a4e2a13fa31cb26f289e55c7045077349ffcd","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pbr\u003c2.0,\u003e\u003d0.11"},{"line_number":6,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":7,"context_line":"Babel\u003e\u003d1.3"},{"line_number":8,"context_line":"enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027"},{"line_number":9,"context_line":"eventlet\u003e\u003d0.17.4"},{"line_number":10,"context_line":"greenlet\u003e\u003d0.3.2"},{"line_number":11,"context_line":"iso8601\u003e\u003d0.1.9"}],"source_content_type":"text/plain","patch_set":33,"id":"9a41bdd9_8b8c9580","line":8,"updated":"2015-07-13 13:10:03.000000000","message":"We don\u0027t support 2.6 anymore, so that piece is really unnecessary.","commit_id":"4196e5f2d56d68134f08563e7eb51164214d2075"},{"author":{"_account_id":5055,"name":"Rain Suo","email":"yugsuo@gmail.com","username":"yugsuo"},"change_message_id":"e09617e7ca8d4e1236bb598b51bbad933525caf3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pbr\u003c2.0,\u003e\u003d0.11"},{"line_number":6,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":7,"context_line":"Babel\u003e\u003d1.3"},{"line_number":8,"context_line":"enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027"},{"line_number":9,"context_line":"eventlet\u003e\u003d0.17.4"},{"line_number":10,"context_line":"greenlet\u003e\u003d0.3.2"},{"line_number":11,"context_line":"iso8601\u003e\u003d0.1.9"}],"source_content_type":"text/plain","patch_set":33,"id":"9a41bdd9_5e95923c","line":8,"in_reply_to":"9a41bdd9_03057712","updated":"2015-07-14 23:09:41.000000000","message":"Sorry, I have found the reason: https://bugs.launchpad.net/devstack/+bug/1468808","commit_id":"4196e5f2d56d68134f08563e7eb51164214d2075"},{"author":{"_account_id":5055,"name":"Rain Suo","email":"yugsuo@gmail.com","username":"yugsuo"},"change_message_id":"6b90a88cf3ca9b9a422afc9736ea9a2008e4c15d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pbr\u003c2.0,\u003e\u003d0.11"},{"line_number":6,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":7,"context_line":"Babel\u003e\u003d1.3"},{"line_number":8,"context_line":"enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027"},{"line_number":9,"context_line":"eventlet\u003e\u003d0.17.4"},{"line_number":10,"context_line":"greenlet\u003e\u003d0.3.2"},{"line_number":11,"context_line":"iso8601\u003e\u003d0.1.9"}],"source_content_type":"text/plain","patch_set":33,"id":"9a41bdd9_03057712","line":8,"in_reply_to":"9a41bdd9_8b8c9580","updated":"2015-07-14 22:58:20.000000000","message":"And this causes an error when setting up cinder using `pip install -e .`:\n\nRequirementParseError: Expected version spec in enum34;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027 at ;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027\n\nSo what did I miss here?","commit_id":"4196e5f2d56d68134f08563e7eb51164214d2075"}]}
