)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"af94e8c4aa1886ec8856fe481269c8f7bbfbf826","unresolved":false,"context_lines":[{"line_number":7,"context_line":"non-admin user don\u0027t get volumes in other project"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Non-admin user should not get the volumes in other project."},{"line_number":10,"context_line":"We should exclude it."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I06f21e7578b65a59c0fe4d3afe0e882ed73c4725"},{"line_number":13,"context_line":"Closes-Bug: #1477625"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_70c2f186","line":10,"updated":"2015-07-28 14:21:09.000000000","message":"Assuming my interpretation of this is correct, instead of \"We should exclude it.\", I suggest: \"Volumes outside the project returned from volume.get should be excluded.\"","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"14e9179bedb89635c3e30b2b82edf9535aa8b813","unresolved":false,"context_lines":[{"line_number":13,"context_line":"normal user need `run context.elevated` to retrieves admin metadata."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The above way will bring a side effect. Normal user can also get "},{"line_number":16,"context_line":"any volume which the user should\u0027`t access when the user knows the UUID."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Solution:"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a4dcd0f_1c42d610","line":16,"updated":"2015-08-05 12:54:00.000000000","message":"S/should\u0027`t/should\u0027t","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"a3468793abab6c59ba2e98faf83033691895df71","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Since the metadata(readonly and attached_mode) is stored in admin metadata,"},{"line_number":12,"context_line":"normal user need `run context.elevated` to retrieves admin metadata."},{"line_number":13,"context_line":"The above way will bring a side effect. Normal user can also get"},{"line_number":14,"context_line":"any volume which the user should\u0027t access when the user knows the UUID."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Solution:"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_c0992ed2","line":14,"updated":"2015-08-14 14:34:19.000000000","message":"s/should\u0027t/shouldn\u0027t","commit_id":"e0d6e5044b2a73c92cc00e2d5b8a20d4806ad9d4"}],"cinder/tests/unit/api/v1/test_volumes.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"fa3f4945b68581c4b8c75ec74b089838816e2ef7","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            return {\u0027attached_mode\u0027: \u0027rw\u0027,"},{"line_number":241,"context_line":"                    \u0027readonly\u0027: \u0027False\u0027}"},{"line_number":242,"context_line":"        self.stubs.Set(db, \u0027volume_admin_metadata_get\u0027,"},{"line_number":243,"context_line":"                       stubs_volume_admin_metadata_get)"},{"line_number":244,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, stubs.stub_volume_get_db)"},{"line_number":245,"context_line":"        self.stubs.Set(volume_api.API, \"update\", stubs.stub_volume_update)"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_c0d49b48","line":243,"updated":"2015-08-05 05:33:49.000000000","message":"Since you are changing this method, please replace all self.stubs.Set with self.mock_object() or change them into mock.patch.object.\n\nself.assertEqual should have the expected value first. Please also take a look at them .\n\n\n\nBTW, is there no impact on the api/v2/test_volumes?","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"54e7e3284dda2635e286f0343c21d5b6288a36a2","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            return {\u0027attached_mode\u0027: \u0027rw\u0027,"},{"line_number":241,"context_line":"                    \u0027readonly\u0027: \u0027False\u0027}"},{"line_number":242,"context_line":"        self.stubs.Set(db, \u0027volume_admin_metadata_get\u0027,"},{"line_number":243,"context_line":"                       stubs_volume_admin_metadata_get)"},{"line_number":244,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, stubs.stub_volume_get_db)"},{"line_number":245,"context_line":"        self.stubs.Set(volume_api.API, \"update\", stubs.stub_volume_update)"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_56ee9622","line":243,"in_reply_to":"1a4dcd0f_c0d49b48","updated":"2015-08-13 07:17:52.000000000","message":"Done","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"fa3f4945b68581c4b8c75ec74b089838816e2ef7","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":272,"context_line":"        self.assertEqual(len(self.notifier.notifications), 2)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_volume_update_metadata(self):"},{"line_number":275,"context_line":"        def stubs_volume_admin_metadata_get(context, volume_id):"},{"line_number":276,"context_line":"            return {\"qos_max_iops\": 2000,"},{"line_number":277,"context_line":"                    \"readonly\": \"False\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a0386fa1","line":274,"updated":"2015-08-05 05:33:49.000000000","message":"The same to  test_volume_update.","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"54e7e3284dda2635e286f0343c21d5b6288a36a2","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":272,"context_line":"        self.assertEqual(len(self.notifier.notifications), 2)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_volume_update_metadata(self):"},{"line_number":275,"context_line":"        def stubs_volume_admin_metadata_get(context, volume_id):"},{"line_number":276,"context_line":"            return {\"qos_max_iops\": 2000,"},{"line_number":277,"context_line":"                    \"readonly\": \"False\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_16f48eee","line":274,"in_reply_to":"1a4dcd0f_a0386fa1","updated":"2015-08-13 07:17:52.000000000","message":"Done","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"fa3f4945b68581c4b8c75ec74b089838816e2ef7","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":312,"context_line":"        self.assertEqual(len(self.notifier.notifications), 2)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_volume_update_with_admin_metadata(self):"},{"line_number":315,"context_line":"        def stubs_volume_admin_metadata_get(context, volume_id):"},{"line_number":316,"context_line":"            return {\u0027key\u0027: \u0027value\u0027,"},{"line_number":317,"context_line":"                    \u0027readonly\u0027: \u0027True\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_204d3f3e","line":314,"updated":"2015-08-05 05:33:49.000000000","message":"The same to test_volume_update.","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"54e7e3284dda2635e286f0343c21d5b6288a36a2","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":312,"context_line":"        self.assertEqual(len(self.notifier.notifications), 2)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_volume_update_with_admin_metadata(self):"},{"line_number":315,"context_line":"        def stubs_volume_admin_metadata_get(context, volume_id):"},{"line_number":316,"context_line":"            return {\u0027key\u0027: \u0027value\u0027,"},{"line_number":317,"context_line":"                    \u0027readonly\u0027: \u0027True\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_b6dfda67","line":314,"in_reply_to":"1a4dcd0f_204d3f3e","updated":"2015-08-13 07:17:52.000000000","message":"Done","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"fa3f4945b68581c4b8c75ec74b089838816e2ef7","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            return {"},{"line_number":547,"context_line":"                \u0027attached_mode\u0027: \u0027rw\u0027,"},{"line_number":548,"context_line":"                \u0027readonly\u0027: \u0027False\u0027"},{"line_number":549,"context_line":"            }"},{"line_number":550,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, stubs.stub_volume_get_db)"},{"line_number":551,"context_line":"        self.stubs.Set(db, \u0027volume_admin_metadata_get\u0027,"},{"line_number":552,"context_line":"                       stubs_volume_admin_metadata_get)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a05f0fe4","line":549,"updated":"2015-08-05 05:33:49.000000000","message":"The same to test_volume_update.","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"54e7e3284dda2635e286f0343c21d5b6288a36a2","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            return {"},{"line_number":547,"context_line":"                \u0027attached_mode\u0027: \u0027rw\u0027,"},{"line_number":548,"context_line":"                \u0027readonly\u0027: \u0027False\u0027"},{"line_number":549,"context_line":"            }"},{"line_number":550,"context_line":"        self.stubs.Set(db, \u0027volume_get\u0027, stubs.stub_volume_get_db)"},{"line_number":551,"context_line":"        self.stubs.Set(db, \u0027volume_admin_metadata_get\u0027,"},{"line_number":552,"context_line":"                       stubs_volume_admin_metadata_get)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_d6daa677","line":549,"in_reply_to":"1a4dcd0f_a05f0fe4","updated":"2015-08-13 07:17:52.000000000","message":"Done","commit_id":"5160f068b31dbf5b3d5ecaf15171d10df450aea8"}],"cinder/tests/unit/api/v2/test_volumes.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"730e320692b488f1c42822d202bd503297826f3b","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                                           context, source_volid)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        kwargs \u003d self._expected_volume_api_create_kwargs("},{"line_number":271,"context_line":"            source_volume\u003dstubs.stub_volume(source_volid, ))"},{"line_number":272,"context_line":"        create.assert_called_once_with(self.controller.volume_api, context,"},{"line_number":273,"context_line":"                                       vol[\u0027size\u0027], DEFAULT_VOL_NAME,"},{"line_number":274,"context_line":"                                       DEFAULT_VOL_DESCRIPTION, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_7d94aa8b","line":271,"updated":"2015-08-13 19:54:59.000000000","message":"Any reason for the extra comma at the end here?","commit_id":"e393a587e22c0797d1f663fddd7f22c9fa4a0572"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"31ddb323ba3b1bed9bd342145dcac99396a8e40b","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                                           context, source_volid)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        kwargs \u003d self._expected_volume_api_create_kwargs("},{"line_number":271,"context_line":"            source_volume\u003dstubs.stub_volume(source_volid, ))"},{"line_number":272,"context_line":"        create.assert_called_once_with(self.controller.volume_api, context,"},{"line_number":273,"context_line":"                                       vol[\u0027size\u0027], DEFAULT_VOL_NAME,"},{"line_number":274,"context_line":"                                       DEFAULT_VOL_DESCRIPTION, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_b69a476d","line":271,"in_reply_to":"1a4dcd0f_7d94aa8b","updated":"2015-08-14 02:07:49.000000000","message":"Done","commit_id":"e393a587e22c0797d1f663fddd7f22c9fa4a0572"}],"cinder/volume/api.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"f95d437d67044c95a90f7c59f4f9d84fd4660605","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # volume.get should just get the volume in the project."},{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_d58d4c2b","line":411,"updated":"2015-07-31 13:44:50.000000000","message":"I think what you are trying to say in the comment is something like:\nvolume.get should only get the volume for a non-admin user if the volume belongs to that user/project_id.\nSince a call to volume.get with elevated context will return the volume regardless of the project_id, we should not return it if the caller is not admin and the caller project_id does not match the volume project_id","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"af94e8c4aa1886ec8856fe481269c8f7bbfbf826","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # volume.get should just get the volume in the project."},{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_d082e551","line":411,"updated":"2015-07-28 14:21:09.000000000","message":"This comment isn\u0027t as clear as it could be. I\u0027m confused about how this relates to the commit statement. Is the issue that the context.elevated (because of admin status) is giving access to volumes not in the scope of project? If there is another way to rephrase this to make it clearer? Thanks!","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"db065c12ffe8c2962552defd0462e76b524d155b","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"},{"line_number":415,"context_line":"        volume \u003d dict(rv)"},{"line_number":416,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_ef20269c","line":413,"updated":"2015-07-29 14:38:55.000000000","message":"This logic does not make sense to me.  If the context is elevated, is_admin is True, so you would need to check if is_admin is True and the project_id is the same as the project_id of the original context.","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"f95d437d67044c95a90f7c59f4f9d84fd4660605","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"},{"line_number":415,"context_line":"        volume \u003d dict(rv)"},{"line_number":416,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_75455813","line":413,"in_reply_to":"3a50d1a3_88b2b892","updated":"2015-07-31 13:44:50.000000000","message":"I think that (context) is the original context that is passed in, so context.is_admin should tell us if the original caller is_admin.\n(ctxt) is set in L#404 or L#406 and so when we get the volume in L#407 we are elevated there if viewable_admin_meta. In this case, ctxt is the elevated copy.","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"f95d437d67044c95a90f7c59f4f9d84fd4660605","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"},{"line_number":415,"context_line":"        volume \u003d dict(rv)"},{"line_number":416,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_d52a2c2f","line":413,"in_reply_to":"3a50d1a3_ef20269c","updated":"2015-07-31 13:44:50.000000000","message":"(context) is passed in, (ctxt) is set in L#404 and L#406.\nSo this does check if the original context is_admin and if the original project_id is the found project id.","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":4159,"name":"Cory Stone","email":"corystone@gmail.com","username":"corystone"},"change_message_id":"e7599301667b739665f68b37ce14dc55a2c3a50c","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        # But because of context.elevated, it\u0027s possible to get"},{"line_number":411,"context_line":"        # the volume in project. We should exclude it."},{"line_number":412,"context_line":"        if (rv[\u0027project_id\u0027] !\u003d context.project_id and"},{"line_number":413,"context_line":"                not context.is_admin):"},{"line_number":414,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_id)"},{"line_number":415,"context_line":"        volume \u003d dict(rv)"},{"line_number":416,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_88b2b892","line":413,"in_reply_to":"3a50d1a3_ef20269c","updated":"2015-07-29 15:42:33.000000000","message":"I think this should be checking if the original context (ctxt) is_admin instead of the elevated copy.","commit_id":"c3ff2fee6dbdce6a1ebbdcb6274c2955c522bb27"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"a71f6f43ca71bbaf2fa4c69c3d0de2bc14fcb5b7","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if viewable_admin_meta:"},{"line_number":408,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":409,"context_line":"            admin_metadata \u003d self.db.volume_admin_metadata_get(ctxt,"},{"line_number":410,"context_line":"                                                               volume_id)"},{"line_number":411,"context_line":"            volume[\u0027volume_admin_metadata\u0027] \u003d admin_metadata"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_acc2e432","line":409,"updated":"2015-07-30 19:04:09.000000000","message":"This is making an extra db call, which is uneccessary because if the context.is_admin is True, the admin_metadata would be loaded through a join - https://github.com/openstack/cinder/blob/master/cinder/db/sqlalchemy/api.py#L1260.\n\nThe original code was better, once you addressed the previous comments.","commit_id":"317265e0ff09b1a2f72aabc2cf773a3419b2ef11"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"db6fa08be254ec7b887815b7216a69b4132520cb","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if viewable_admin_meta:"},{"line_number":408,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":409,"context_line":"            admin_metadata \u003d self.db.volume_admin_metadata_get(ctxt,"},{"line_number":410,"context_line":"                                                               volume_id)"},{"line_number":411,"context_line":"            volume[\u0027volume_admin_metadata\u0027] \u003d admin_metadata"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_26c55c5a","line":409,"in_reply_to":"3a50d1a3_acc2e432","updated":"2015-08-05 03:52:38.000000000","message":"Based on cinder-meetup-summer-2015 conclusion, we use the solution.\n\n\nhttps://etherpad.openstack.org/p/cinder-meetup-summer-2015","commit_id":"317265e0ff09b1a2f72aabc2cf773a3419b2ef11"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"169d2224bda8f0bb2671a5abd17178988590aece","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if viewable_admin_meta:"},{"line_number":408,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":409,"context_line":"            admin_metadata \u003d self.db.volume_admin_metadata_get(ctxt,"},{"line_number":410,"context_line":"                                                               volume_id)"},{"line_number":411,"context_line":"            volume[\u0027volume_admin_metadata\u0027] \u003d admin_metadata"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_d2ca5b1a","line":409,"in_reply_to":"3a50d1a3_acc2e432","updated":"2015-07-31 01:56:10.000000000","message":"Thank you for your suggestion. Unfortunately, somebody lives patchset 2. And somebody live patchset 1. The both of the solution have good parts and bad parts. I will discuss the issues in irc/launchpad.","commit_id":"317265e0ff09b1a2f72aabc2cf773a3419b2ef11"}]}
