)]}'
{"cinder/api/contrib/backup_tenant_attribute.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1c7e1cb591e88ff576843f95766d073406a9cee8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                self._add_backup_tenant_attribute(req, bak)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class Backup_tenant_attribute(extensions.ExtensionDescriptor):"},{"line_number":48,"context_line":"    \"\"\"Expose the internal project_id as an attribute of a backup.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    name \u003d \"BackupTenantAttribute\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_20e5b2a7","line":47,"range":{"start_line":47,"start_character":6,"end_line":47,"end_character":29},"updated":"2015-12-16 22:47:42.000000000","message":"This is not a valid class name. Please change to something like BackupTenantAttribute.","commit_id":"a975efc2bb739f2c38ffb3443502c2066434da7e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"10930d3e7b6f9c13b52413570ff328218f95cc65","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                self._add_backup_tenant_attribute(req, bak)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class Backup_tenant_attribute(extensions.ExtensionDescriptor):"},{"line_number":48,"context_line":"    \"\"\"Expose the internal project_id as an attribute of a backup.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    name \u003d \"BackupTenantAttribute\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_ccf744f4","line":47,"range":{"start_line":47,"start_character":6,"end_line":47,"end_character":29},"in_reply_to":"3a7e1126_20e5b2a7","updated":"2015-12-17 01:53:47.000000000","message":"Sure. BTW, I found volume and snapshot attributes classes are like this, we could change them too in this patch.","commit_id":"a975efc2bb739f2c38ffb3443502c2066434da7e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"3a0343d84fdb1b87588f16d0c9ce2068f4495b83","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                self._add_backup_tenant_attribute(req, bak)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class Backup_tenant_attribute(extensions.ExtensionDescriptor):"},{"line_number":48,"context_line":"    \"\"\"Expose the internal project_id as an attribute of a backup.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    name \u003d \"BackupTenantAttribute\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_cac15282","line":47,"range":{"start_line":47,"start_character":6,"end_line":47,"end_character":29},"in_reply_to":"3a7e1126_ccf744f4","updated":"2015-12-17 08:03:25.000000000","message":"Sean, I think we shouldn\u0027t change this name, I checked all the multi-word name classes that inherit from extensions.ExtensionDescriptor are using \"Xxx_xxx_xxx\" name.","commit_id":"a975efc2bb739f2c38ffb3443502c2066434da7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4f86b62290aed1edfdf67aeb02dfddb279afb16b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \"\"\"Expose the internal project_id as an attribute of a backup.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    name \u003d \"BackupTenantAttribute\""},{"line_number":51,"context_line":"    alias \u003d \"os-bak-tenant-attr\""},{"line_number":52,"context_line":"    namespace \u003d (\"http://docs.openstack.org/volume/ext/\""},{"line_number":53,"context_line":"                 \"backup_tenant_attribute/api/v2\")"},{"line_number":54,"context_line":"    updated \u003d \"2011-11-03T00:00:00+00:00\""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a061dce_a725965d","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":19},"updated":"2016-04-08 17:04:54.000000000","message":"Why bak and not back? Just curious if that\u0027s a convention thing or if there is some other reason for it.","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bbc740ddca24f8a5c91d8fbd752073b5261ecbf3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \"\"\"Expose the internal project_id as an attribute of a backup.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    name \u003d \"BackupTenantAttribute\""},{"line_number":51,"context_line":"    alias \u003d \"os-bak-tenant-attr\""},{"line_number":52,"context_line":"    namespace \u003d (\"http://docs.openstack.org/volume/ext/\""},{"line_number":53,"context_line":"                 \"backup_tenant_attribute/api/v2\")"},{"line_number":54,"context_line":"    updated \u003d \"2011-11-03T00:00:00+00:00\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_d60b7d7b","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":19},"in_reply_to":"9a061dce_a725965d","updated":"2016-04-15 03:42:55.000000000","message":"haha, not special reason, just see volume using \"os-vol-tenant-attr\".","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ad0e6aca8ce4f928469f74175863afa5123e9473","unresolved":false,"context_lines":[{"line_number":64,"context_line":"             \u0027%s:tenant_id\u0027 % Backup_tenant_attribute.alias)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class BackupTenantAttributeTemplate(xmlutil.TemplateBuilder):"},{"line_number":68,"context_line":"    def construct(self):"},{"line_number":69,"context_line":"        root \u003d xmlutil.TemplateElement(\u0027backup\u0027, selector\u003d\u0027backup\u0027)"},{"line_number":70,"context_line":"        make_backup(root)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_e8b497d2","line":67,"updated":"2016-04-15 12:06:33.000000000","message":"XML API is deprecated and will be removed in Newton. Please, do not introduce new changes to XML API","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b768a88900c3891d3d826b1e670883cef8c6e5c4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"             \u0027%s:tenant_id\u0027 % Backup_tenant_attribute.alias)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class BackupTenantAttributeTemplate(xmlutil.TemplateBuilder):"},{"line_number":68,"context_line":"    def construct(self):"},{"line_number":69,"context_line":"        root \u003d xmlutil.TemplateElement(\u0027backup\u0027, selector\u003d\u0027backup\u0027)"},{"line_number":70,"context_line":"        make_backup(root)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_6307dc1c","line":67,"in_reply_to":"1a122d0e_e8b497d2","updated":"2016-04-18 01:14:04.000000000","message":"yeah, I forgot this, will remove it.","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"}],"cinder/api/v3/backups.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5e8412d02bf12ef3c316cf85f4eb590adc391a7e","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def detail(self, req):"},{"line_number":84,"context_line":"        resp_backup \u003d super(BackupsController, self).detail(req)"},{"line_number":85,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":86,"context_line":"        req_version \u003d req.api_version_request"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if (req_version.matches(BACKUP_TENANT_MICRO_VERSION) and"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_90506bd6","line":85,"updated":"2016-09-20 19:55:56.000000000","message":"Should we add req.cache_db_backup(resp_backup) call here","commit_id":"29f36d71d07f50f54ddd9c6338b60d2b0e5bdb88"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"edb546c6ec7f880b2507bcd7336171fcb9bd81f7","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def detail(self, req):"},{"line_number":84,"context_line":"        resp_backup \u003d super(BackupsController, self).detail(req)"},{"line_number":85,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":86,"context_line":"        req_version \u003d req.api_version_request"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if (req_version.matches(BACKUP_TENANT_MICRO_VERSION) and"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa6399be_14081391","line":85,"in_reply_to":"7a8ec9b2_90506bd6","updated":"2016-10-18 06:39:17.000000000","message":"Since backups_v2.BackupsController has called cache_db_backup, I think we didn\u0027t need it here again.","commit_id":"29f36d71d07f50f54ddd9c6338b60d2b0e5bdb88"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5e8412d02bf12ef3c316cf85f4eb590adc391a7e","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if (req_version.matches(BACKUP_TENANT_MICRO_VERSION) and"},{"line_number":89,"context_line":"                authorize(context)):"},{"line_number":90,"context_line":"            for bak in list(resp_backup[\u0027backups\u0027]):"},{"line_number":91,"context_line":"                self._add_backup_tenant_attribute(req, bak)"},{"line_number":92,"context_line":"        return resp_backup"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_10f61bf9","line":90,"updated":"2016-09-20 19:55:56.000000000","message":"resp_backup[\u0027backups\u0027] is already list","commit_id":"29f36d71d07f50f54ddd9c6338b60d2b0e5bdb88"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"edb546c6ec7f880b2507bcd7336171fcb9bd81f7","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if (req_version.matches(BACKUP_TENANT_MICRO_VERSION) and"},{"line_number":89,"context_line":"                authorize(context)):"},{"line_number":90,"context_line":"            for bak in list(resp_backup[\u0027backups\u0027]):"},{"line_number":91,"context_line":"                self._add_backup_tenant_attribute(req, bak)"},{"line_number":92,"context_line":"        return resp_backup"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa6399be_747b0f2a","line":90,"in_reply_to":"7a8ec9b2_10f61bf9","updated":"2016-10-18 06:39:17.000000000","message":"Done","commit_id":"29f36d71d07f50f54ddd9c6338b60d2b0e5bdb88"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"77e202476d8312219449e6c06a73adf086c8c8f6","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self._view_builder.summary(req, new_backup)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _add_backup_tenant_attribute(self, req, resp_backup):"},{"line_number":63,"context_line":"        db_backup \u003d req.get_db_backup(resp_backup[\u0027id\u0027])"},{"line_number":64,"context_line":"        key \u003d \"os-backup-tenant-attr:tenant_id\""},{"line_number":65,"context_line":"        resp_backup[key] \u003d db_backup[\u0027project_id\u0027]"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5da102_fe417c0c","line":63,"updated":"2016-10-31 11:34:15.000000000","message":"You don\u0027t need that extra DB query.\n\nI started https://review.openstack.org/#/c/387508 last week (I genuinely didn\"t know about your patch), which does the same without the extra db query.","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2173c10784de8440e3fd5219b3ec0d14989b436c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self._view_builder.summary(req, new_backup)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _add_backup_tenant_attribute(self, req, resp_backup):"},{"line_number":63,"context_line":"        db_backup \u003d req.get_db_backup(resp_backup[\u0027id\u0027])"},{"line_number":64,"context_line":"        key \u003d \"os-backup-tenant-attr:tenant_id\""},{"line_number":65,"context_line":"        resp_backup[key] \u003d db_backup[\u0027project_id\u0027]"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_a42020f9","line":63,"in_reply_to":"ba5da102_fe417c0c","updated":"2016-11-15 03:17:29.000000000","message":"It\u0027s not a DB query, it\u0027s a previously stored object within the same API request, see L75: req.cache_db_backup(backup). Since this method was used by \u0027show\u0027 and \u0027detail\u0027, so I need to get the whole backup information from the cache in request, that will be fine here.","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"}],"cinder/tests/unit/api/contrib/test_backup_tenant_attribute.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"fea268d189fc2920baa87b81077fec79436161e0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_1ab462cf","line":1,"range":{"start_line":1,"start_character":14,"end_line":1,"end_character":18},"updated":"2016-01-19 18:42:35.000000000","message":":)","commit_id":"572da07a813cfc523578087529dcdf45cf497069"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"73f799ccad62d8d391b599d5c00ea1c2a3b0dcee","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_48885bc5","line":1,"range":{"start_line":1,"start_character":14,"end_line":1,"end_character":18},"in_reply_to":"ba63e191_1ab462cf","updated":"2016-01-25 03:35:15.000000000","message":"Thanks","commit_id":"572da07a813cfc523578087529dcdf45cf497069"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"fea268d189fc2920baa87b81077fec79436161e0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.tests.unit import fake_backup"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"PROJECT_ID \u003d \u002788fd1da4-f464-4a87-9ce5-26f2f40743b9\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def fake_backup_get(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_7a21defa","line":28,"range":{"start_line":28,"start_character":23,"end_line":28,"end_character":27},"updated":"2016-01-19 18:42:35.000000000","message":"Probably want to make this different than what is in test_volume_tenant_attribute.py. Or just use fakes.py","commit_id":"572da07a813cfc523578087529dcdf45cf497069"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"73f799ccad62d8d391b599d5c00ea1c2a3b0dcee","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.tests.unit import fake_backup"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"PROJECT_ID \u003d \u002788fd1da4-f464-4a87-9ce5-26f2f40743b9\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def fake_backup_get(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_288de7d5","line":28,"range":{"start_line":28,"start_character":23,"end_line":28,"end_character":27},"in_reply_to":"ba63e191_7a21defa","updated":"2016-01-25 03:35:15.000000000","message":"Done","commit_id":"572da07a813cfc523578087529dcdf45cf497069"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4f86b62290aed1edfdf67aeb02dfddb279afb16b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2016 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a061dce_a740f608","line":1,"updated":"2016-04-08 17:04:54.000000000","message":"This shouldn\u0027t have a Foundation copyright. That should only be added to a file by someone working for the Foundation.","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bbc740ddca24f8a5c91d8fbd752073b5261ecbf3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2016 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_f624b90d","line":1,"in_reply_to":"9a061dce_a740f608","updated":"2016-04-15 03:42:55.000000000","message":"Sure, got it.","commit_id":"861168b13eee69c5560342e5ef4277b018ee98b7"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"ff7afade34882c5f947b87e991d97e34943ee689","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def fake_backup_get(*args, **kwargs):"},{"line_number":32,"context_line":"    ctx \u003d context.RequestContext(\u0027non-admin\u0027, \u0027fake\u0027, False)"},{"line_number":33,"context_line":"    bak \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: \u0027fake\u0027,"},{"line_number":35,"context_line":"        \u0027project_id\u0027: PROJECT_ID,"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":"    return fake_backup.fake_backup_obj(ctx, **bak)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_730da536","line":34,"updated":"2016-04-19 09:23:14.000000000","message":"Please use a valid uuid.  See commit 9bbe9c440fce3f20d755ac8aa21808924ecfd065 for example.","commit_id":"0f19db992fd2b9372e868654e31929f8b0358317"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"77e202476d8312219449e6c06a73adf086c8c8f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5da102_9e688089","line":1,"updated":"2016-10-31 11:34:15.000000000","message":"This is duplicating so much code and logic from contrib/test_backups.py. 130 LoC to test just one attribut is a lot. Maintenance burden of unit tests is a thing too.","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2173c10784de8440e3fd5219b3ec0d14989b436c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_e7177a52","line":1,"in_reply_to":"ba5da102_9e688089","updated":"2016-11-15 03:17:29.000000000","message":"It\u0027s different from contrib/test_backups.py,  we need this to test some cases(under V3 API) to get project attribute correctly like what we do in test_extended_snapshot_attributes.py and test_volume_tenant_attribute.py. So I think we need this file, but code could be optimized more.","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"}],"cinder/tests/unit/policy.json":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"77e202476d8312219449e6c06a73adf086c8c8f6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \"backup:backup-export\": \"rule:admin_api\","},{"line_number":101,"context_line":"    \"backup:update\": \"rule:admin_or_owner\","},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    \"backup_extension:backup_tenant_attribute\": \"rule:admin_api\","},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    \"volume_extension:replication:promote\": \"rule:admin_api\","},{"line_number":106,"context_line":"    \"volume_extension:replication:reenable\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":21,"id":"ba5da102_feddfc42","line":103,"updated":"2016-10-31 11:34:15.000000000","message":"How is that an \"extension\" ? I mean, why introduce the extension word here ?","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2173c10784de8440e3fd5219b3ec0d14989b436c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \"backup:backup-export\": \"rule:admin_api\","},{"line_number":101,"context_line":"    \"backup:update\": \"rule:admin_or_owner\","},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    \"backup_extension:backup_tenant_attribute\": \"rule:admin_api\","},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    \"volume_extension:replication:promote\": \"rule:admin_api\","},{"line_number":106,"context_line":"    \"volume_extension:replication:reenable\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":21,"id":"7a77a97e_47490e8b","line":103,"in_reply_to":"ba5da102_feddfc42","updated":"2016-11-15 03:17:29.000000000","message":"Because I use extensions.soft_extension_authorizer to authorize policy, it adds \"extension\",  we also can use backup.api.check_policy, that\u0027s not \"extension\", I will update the code. Thanks","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"}],"releasenotes/notes/add-backup-tenant-attribute-cdaf24671b3b8474.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"85d42ac6c0f8bce3402f33618323330ab7edbf7c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Cinder has supported to query tenant id of volume and snapshot,"},{"line_number":4,"context_line":"    for consistency, add backup tenant attribute in querying operation."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"ba5da102_b864d949","line":2,"updated":"2016-10-26 06:48:17.000000000","message":"If you do another update, can you reword this to something like:\n\nAdded ability to query backups by project ID.","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2173c10784de8440e3fd5219b3ec0d14989b436c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Cinder has supported to query tenant id of volume and snapshot,"},{"line_number":4,"context_line":"    for consistency, add backup tenant attribute in querying operation."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"7a77a97e_04947435","line":2,"in_reply_to":"ba5da102_b864d949","updated":"2016-11-15 03:17:29.000000000","message":"sure","commit_id":"38d2c65f5a2dd1992ffdee30cc2207bd1b0ec75e"}]}
