)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"cddea26f8658c0c70f7571076945c28453af05d5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yuriy Nesenenko \u003cynesenenko@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-30 15:56:10 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support \u0027--all-tenants\u0027 argument for admin for cinder backup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"cinder backup-list is always listing all tenants\u0027s backups for admin."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_697139a8","line":7,"updated":"2015-07-30 14:36:07.000000000","message":"Commit header should be limited to 50 characters. \n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"5858f34bde803cd4015df55a1f7df672732031bd"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"9c5c3fe6947a85831f35e726340ab53b614cbf4a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yuriy Nesenenko \u003cynesenenko@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-30 18:15:16 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support \u0027--all-tenants\u0027 argument for cinder backup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"cinder backup-list is always listing all tenants\u0027s backups for admin."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_962ec3a3","line":7,"updated":"2015-08-02 06:33:41.000000000","message":"It seems more than 50 chars\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"2fd41dbeadf47bda3b75d198d0fe6d2e64444986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"d54d08f6b47af1d3d49e89c8e8c0648691c717be","unresolved":false,"context_lines":[{"line_number":9,"context_line":"cinder backup-list is always listing all tenants\u0027s backups for admin."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"APIImpact"},{"line_number":12,"context_line":"Closes-Bug #1435158"},{"line_number":13,"context_line":"Related-Bug #1422046"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I73f6377c7d6fd92d0464d13f9c8dd6682fef78e3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_8026c666","line":12,"updated":"2015-08-04 11:23:22.000000000","message":"suggest using \"Closes-Bug: #1234567\", see https://wiki.openstack.org/wiki/GitCommitMessages#Examples_of_bad_practice","commit_id":"9283a70137efcdd5c236d309722b9caec7054a5f"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"d54d08f6b47af1d3d49e89c8e8c0648691c717be","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"APIImpact"},{"line_number":12,"context_line":"Closes-Bug #1435158"},{"line_number":13,"context_line":"Related-Bug #1422046"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I73f6377c7d6fd92d0464d13f9c8dd6682fef78e3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_40e8bee2","line":13,"updated":"2015-08-04 11:23:22.000000000","message":"suggest using Related-Bug: #1234567, see https://wiki.openstack.org/wiki/GitCommitMessages#Examples_of_bad_practice","commit_id":"9283a70137efcdd5c236d309722b9caec7054a5f"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b8842ae14dfddc24e0a8be36e62228fb562e4f68","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support \u0027--all-tenants\u0027 for cinder backup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"cinder backup-list is always listing all tenants\u0027s backups for admin."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"APIImpact"},{"line_number":12,"context_line":"Closes-Bug: #1435158"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a4dcd0f_b269c1c0","line":9,"updated":"2015-08-04 16:09:20.000000000","message":"cinder -\u003e Cinder  Also, can you please elaborate to make it clear what the change is? It seems right now that nothing is changing, cinder backup-list prints all tenants and will still but now with \"--all-tenants\" ? Thanks!","commit_id":"9db44a2be4bcce61e749c517252c36205bc9d918"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7c9b32e10a311969f6fd10ee2eff74009ba10444","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support \u0027--all-tenants\u0027 for cinder backup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Cinder backup-list doesn\u0027t support \u0027--all-tenants\u0027 argument for admin. "},{"line_number":10,"context_line":"So it is always listing all tenants\u0027s backups for admin not only admin\u0027s"},{"line_number":11,"context_line":"tenant. This patch fixes it."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_74a5f344","line":9,"updated":"2015-08-06 14:45:33.000000000","message":"Extraneous space at the end.","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"}],"cinder/backup/api.py":[{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"881723fb74e61efe14ccd89704208668335b81de","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in search_opts):"},{"line_number":107,"context_line":"            # Need to remove all_tenants to pass the filtering below."},{"line_number":108,"context_line":"            del search_opts[\u0027all_tenants\u0027]"},{"line_number":109,"context_line":"            backups \u003d objects.BackupList.get_all(context, filters\u003dsearch_opts)"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            backups \u003d objects.BackupList.get_all_by_project("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_20cd865d","line":108,"updated":"2015-07-30 13:48:22.000000000","message":"This should be search_opts.pop(\u0027all_tenants\u0027, None). There\u0027s no locking here so trying to delete it is a potential race.","commit_id":"5858f34bde803cd4015df55a1f7df672732031bd"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"1494a02bffc8dbef48bf0cc66da90b181a9a9cf7","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        backup.save()"},{"line_number":99,"context_line":"        self.backup_rpcapi.delete_backup(context, backup)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def get_all(self, context, search_opts\u003dNone):"},{"line_number":102,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        search_opts \u003d search_opts or {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_59f03091","line":101,"updated":"2015-08-06 14:24:10.000000000","message":"Why not just set the default for search_opts to {}, i.e. search_opts\u003d{}?  Then you could remove L104.","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"1c43cdfd8f9f15b83507c4117393613325582673","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        backup.save()"},{"line_number":99,"context_line":"        self.backup_rpcapi.delete_backup(context, backup)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def get_all(self, context, search_opts\u003dNone):"},{"line_number":102,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        search_opts \u003d search_opts or {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b4cdbb86","line":101,"in_reply_to":"1a4dcd0f_59f03091","updated":"2015-08-06 14:34:14.000000000","message":"It\u0027s not a good idea to use mutable objects as default values because it may lead to unintended behavior.","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c03d8fd7e1678bac708231e0948de25e8dd77698","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        backup.save()"},{"line_number":99,"context_line":"        self.backup_rpcapi.delete_backup(context, backup)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def get_all(self, context, search_opts\u003dNone):"},{"line_number":102,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        search_opts \u003d search_opts or {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_94743f68","line":101,"in_reply_to":"1a4dcd0f_59f03091","updated":"2015-08-06 14:32:11.000000000","message":"It\u0027s not allowed in hacking rules to make default mutable arguments. For details, please, see http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"aa81b3297d8886ccbef2a11aee0f33b39a57e1a6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        backup.save()"},{"line_number":99,"context_line":"        self.backup_rpcapi.delete_backup(context, backup)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def get_all(self, context, search_opts\u003dNone):"},{"line_number":102,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        search_opts \u003d search_opts or {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_d48087c1","line":101,"in_reply_to":"1a4dcd0f_94faff73","updated":"2015-08-06 14:38:39.000000000","message":"Nevermind.","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"53be6d36493918932e64ec99d78674d53e308ba5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        backup.save()"},{"line_number":99,"context_line":"        self.backup_rpcapi.delete_backup(context, backup)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def get_all(self, context, search_opts\u003dNone):"},{"line_number":102,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        search_opts \u003d search_opts or {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_94faff73","line":101,"in_reply_to":"1a4dcd0f_b4cdbb86","updated":"2015-08-06 14:36:51.000000000","message":"You could make it a tuple, i.e. ().","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"}],"cinder/tests/unit/objects/test_backup.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7c9b32e10a311969f6fd10ee2eff74009ba10444","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertEqual(1, len(backups))"},{"line_number":111,"context_line":"        TestBackup._compare(self, fake_backup, backups[0])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @mock.patch(\u0027cinder.db.backup_get_all\u0027, return_value\u003d[fake_backup])"},{"line_number":114,"context_line":"    def test_get_all_tenants(self, backup_get_all):"},{"line_number":115,"context_line":"        search_opts \u003d {\u0027all_tenants\u0027: 1}"},{"line_number":116,"context_line":"        backups \u003d objects.BackupList.get_all(self.context, search_opts)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_14334f15","line":113,"updated":"2015-08-06 14:45:33.000000000","message":"Would be good to return multiple backups, one in the admin tenant/project, and one not.  Then verify that only one backup in the correct tenant gets returned.","commit_id":"c33262aa33d5f158b840153b0ce35a30fa84107d"}]}
