)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"80681861f5c90a0282fe19fbcb4a6c200e6c65d9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LisaLi \u003cxiaoyan.li@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-04 17:31:03 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add backup rename function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_7cb948cb","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":17},"updated":"2016-01-06 18:26:12.000000000","message":"I would say\nAdd update backup to api\n\nor something like that","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"6f64b12fcb2a66d6072add2187021fd055c698d0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LisaLi \u003cxiaoyan.li@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-04 17:31:03 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add backup rename function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da6ed579_c497cb8e","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":17},"in_reply_to":"fa69d971_7cb948cb","updated":"2016-01-13 05:08:39.000000000","message":"Done","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"80681861f5c90a0282fe19fbcb4a6c200e6c65d9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_1c7b6c29","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"updated":"2016-01-06 18:26:12.000000000","message":"I would add \"Adds PUT to /backups/\u003cid\u003e\" under this line","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"6f64b12fcb2a66d6072add2187021fd055c698d0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da6ed579_8491d39b","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"in_reply_to":"fa69d971_1c7b6c29","updated":"2016-01-13 05:08:39.000000000","message":"Done","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add backup update function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":"Add PUT to /backups/\u003cid\u003e."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_57f1d0cc","line":10,"updated":"2016-06-28 09:23:11.000000000","message":"nit: Please mention the microversion that adds this.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"03f315d12381e113e908aeacddc22165718f00e9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add backup update function (microversion)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":"Add PUT to /backups/\u003cid\u003e."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1aa78d24_731926d7","line":10,"updated":"2016-07-06 09:06:50.000000000","message":"nit: I still believe it would be good to mention the microversion that adds this in the commit message.","commit_id":"3f2a76db7b6f9b11837eaab07bf5d4a536a61997"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e52cfcf636487ea38b3b8bbda7f4254573d7be61","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add update interface so that users can update"},{"line_number":10,"context_line":"name and description of a backup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This new API endpoint is added in microversion 3.7."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"Add PUT to /backups/\u003cid\u003e."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1aa78d24_20452f6e","line":12,"updated":"2016-07-13 12:16:13.000000000","message":"Thanks for adding this  :-)","commit_id":"4020afa64e1d40c23cad91438341719c947dbd32"}],"cinder/api/contrib/backups.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"80681861f5c90a0282fe19fbcb4a6c200e6c65d9","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        update_dict \u003d {}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        valid_update_keys \u003d ("},{"line_number":395,"context_line":"            \u0027name\u0027,"},{"line_number":396,"context_line":"            \u0027description\u0027,"},{"line_number":397,"context_line":"            \u0027display_name\u0027,"},{"line_number":398,"context_line":"            \u0027display_description\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_1cda8ce8","line":395,"range":{"start_line":395,"start_character":13,"end_line":395,"end_character":17},"updated":"2016-01-06 18:26:12.000000000","message":"I dont think name and description need to be in this dictionary","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"6f64b12fcb2a66d6072add2187021fd055c698d0","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        update_dict \u003d {}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        valid_update_keys \u003d ("},{"line_number":395,"context_line":"            \u0027name\u0027,"},{"line_number":396,"context_line":"            \u0027description\u0027,"},{"line_number":397,"context_line":"            \u0027display_name\u0027,"},{"line_number":398,"context_line":"            \u0027display_description\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_a48c1780","line":395,"range":{"start_line":395,"start_character":13,"end_line":395,"end_character":17},"in_reply_to":"fa69d971_1cda8ce8","updated":"2016-01-13 05:08:39.000000000","message":"Done","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"80681861f5c90a0282fe19fbcb4a6c200e6c65d9","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":414,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"},{"line_number":415,"context_line":"                                                   \u0027update.start\u0027)"},{"line_number":416,"context_line":"            self.backup_api.update(context, backup, update_dict)"},{"line_number":417,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":418,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_9c7f5cdf","line":416,"range":{"start_line":416,"start_character":17,"end_line":416,"end_character":27},"updated":"2016-01-06 18:26:12.000000000","message":"I would have this return backup with the updated fields, then you dont need backup.update below","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"6f64b12fcb2a66d6072add2187021fd055c698d0","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":414,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"},{"line_number":415,"context_line":"                                                   \u0027update.start\u0027)"},{"line_number":416,"context_line":"            self.backup_api.update(context, backup, update_dict)"},{"line_number":417,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":418,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_64edbf24","line":416,"range":{"start_line":416,"start_character":17,"end_line":416,"end_character":27},"in_reply_to":"fa69d971_9c7f5cdf","updated":"2016-01-13 05:08:39.000000000","message":"Done","commit_id":"64047eade677e73a08b526c559756fb52f43580d"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"eb967344dd568cbbd5ee4170c6423b46ffa32b3f","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":389,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        backup \u003d body[\u0027backup\u0027]"},{"line_number":392,"context_line":"        update_dict \u003d {}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        valid_update_keys \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_746a18f0","line":391,"updated":"2016-02-11 16:51:00.000000000","message":"I think it would be clearer to use a different variable name, perhaps \u0027backup_update\u0027, and then continue to use \u0027backup\u0027 for the result of self.backup_api.get() at line 411.","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"70863aec09a501ad35e26f47d3e17f165303d823","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":389,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        backup \u003d body[\u0027backup\u0027]"},{"line_number":392,"context_line":"        update_dict \u003d {}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        valid_update_keys \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_756502e0","line":391,"in_reply_to":"3a57f1b5_746a18f0","updated":"2016-02-15 06:07:57.000000000","message":"Done","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"eb967344dd568cbbd5ee4170c6423b46ffa32b3f","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            \u0027display_description\u0027,"},{"line_number":397,"context_line":"        )"},{"line_number":398,"context_line":"        self.validate_name_and_description(backup)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        if \u0027name\u0027 in backup:"},{"line_number":401,"context_line":"            backup[\u0027display_name\u0027] \u003d backup.pop(\u0027name\u0027)"},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_b4017008","line":399,"updated":"2016-02-11 16:51:00.000000000","message":"Should we have a check for the case where the backup_update contains other keys than \u0027name\u0027 and \u0027description\u0027 and log an error?","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"70863aec09a501ad35e26f47d3e17f165303d823","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            \u0027display_description\u0027,"},{"line_number":397,"context_line":"        )"},{"line_number":398,"context_line":"        self.validate_name_and_description(backup)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        if \u0027name\u0027 in backup:"},{"line_number":401,"context_line":"            backup[\u0027display_name\u0027] \u003d backup.pop(\u0027name\u0027)"},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_b5002aac","line":399,"in_reply_to":"3a57f1b5_b4017008","updated":"2016-02-15 06:07:57.000000000","message":"I didn\u0027t do it as the other update functions just ignore the keys.\n\nI think it is reasonable to raise an error.","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"eb967344dd568cbbd5ee4170c6423b46ffa32b3f","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        for key in valid_update_keys:"},{"line_number":407,"context_line":"            if key in backup:"},{"line_number":408,"context_line":"                update_dict[key] \u003d backup[key]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":412,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_5484bc5c","line":409,"updated":"2016-02-11 16:51:00.000000000","message":"Should we test that update_dict is not {} - as it would be if invalid keys were supplied - and skip the backup update in that case?","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"56cc097a5a630a244f24c7981f90e42422353555","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        for key in valid_update_keys:"},{"line_number":407,"context_line":"            if key in backup:"},{"line_number":408,"context_line":"                update_dict[key] \u003d backup[key]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":412,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_83c3d8ec","line":409,"in_reply_to":"3a57f1b5_0313685c","updated":"2016-02-11 18:00:47.000000000","message":"ok","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"15e8911b011ecddc7071d1ede03fe737d2e93836","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        for key in valid_update_keys:"},{"line_number":407,"context_line":"            if key in backup:"},{"line_number":408,"context_line":"                update_dict[key] \u003d backup[key]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":412,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_0313685c","line":409,"in_reply_to":"3a57f1b5_5484bc5c","updated":"2016-02-11 17:44:37.000000000","message":"The problem with doing that here is that you\u0027d get a weird API behavior where updating a backup that didn\u0027t exist would succeed.\n\nYou could conceivably do this after the backup_api.get() and before the backup_api.update().  But I suspect we should just let this work, since it looks like it works this same way on other updates in our API.","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c8c2c5254d317d0eee160d4185b3887b02e374a7","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(differences))"},{"line_number":411,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        for key in valid_update_keys:"},{"line_number":414,"context_line":"            if key in backup_update:"},{"line_number":415,"context_line":"                update_dict[key] \u003d backup_update[key]"},{"line_number":416,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_13667a29","line":413,"updated":"2016-02-24 11:37:09.000000000","message":"I think we can we write:\n\nfor key in backup_update.keys():\n  update_dict[key] \u003d backup_update[key]","commit_id":"522c0a8936ceddd0ca3c86f20b3a0837c2fa74f4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1dc3eed311775f9ccf04ae0866b6ae4c001b1dfc","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(differences))"},{"line_number":411,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        for key in valid_update_keys:"},{"line_number":414,"context_line":"            if key in backup_update:"},{"line_number":415,"context_line":"                update_dict[key] \u003d backup_update[key]"},{"line_number":416,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_b9a4cf4a","line":413,"in_reply_to":"bae84128_13667a29","updated":"2016-02-24 12:02:45.000000000","message":"Well, we probably can even do:\n\n update_dict.update(backup_update)\n\nas we\u0027re already protected from wrong keys in lines 408-411.","commit_id":"522c0a8936ceddd0ca3c86f20b3a0837c2fa74f4"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c8c2c5254d317d0eee160d4185b3887b02e374a7","unresolved":false,"context_lines":[{"line_number":420,"context_line":"                                                   \u0027update.start\u0027)"},{"line_number":421,"context_line":"            new_backup \u003d self.backup_api.update(context, backup, update_dict)"},{"line_number":422,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":423,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        volume_utils.notify_about_backup_usage(context, backup,"},{"line_number":426,"context_line":"                                               \u0027update.end\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_b37b4ebd","line":423,"updated":"2016-02-24 11:37:09.000000000","message":"There is no unit test for this case.","commit_id":"522c0a8936ceddd0ca3c86f20b3a0837c2fa74f4"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"8c71049533ecfe8f5b1fae8d53e54b0c5651a4c1","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        return retval"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    @wsgi.serializers(xml\u003dBackupTemplate)"},{"line_number":388,"context_line":"    def update(self, req, id, body):"},{"line_number":389,"context_line":"        \"\"\"Update a backup.\"\"\""},{"line_number":390,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":391,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_85b49735","line":388,"range":{"start_line":388,"start_character":8,"end_line":388,"end_character":14},"updated":"2016-04-23 18:29:36.000000000","message":"I think we should add new functionality in /v3/..\nFor your case, it should be /v3/backups.py with microversioning.","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"148d009ee5aacc3a3aad0774d571c7607d5558d3","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        return retval"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    @wsgi.serializers(xml\u003dBackupTemplate)"},{"line_number":388,"context_line":"    def update(self, req, id, body):"},{"line_number":389,"context_line":"        \"\"\"Update a backup.\"\"\""},{"line_number":390,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":391,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_13596035","line":388,"range":{"start_line":388,"start_character":8,"end_line":388,"end_character":14},"in_reply_to":"1a122d0e_85b49735","updated":"2016-06-27 07:47:40.000000000","message":"Yes.","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"f86fb03536388fccda6ee92315f63e11a90da2d9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"},{"line_number":420,"context_line":"                                                   \u0027update.start\u0027)"},{"line_number":421,"context_line":"            new_backup \u003d self.backup_api.update(context, backup, update_dict)"},{"line_number":422,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":423,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        volume_utils.notify_about_backup_usage(context, backup,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_8307a517","line":422,"updated":"2016-05-02 22:02:32.000000000","message":"Can we reduce the scope of try..except to cover only the first statement?","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"148d009ee5aacc3a3aad0774d571c7607d5558d3","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            volume_utils.notify_about_backup_usage(context, backup,"},{"line_number":420,"context_line":"                                                   \u0027update.start\u0027)"},{"line_number":421,"context_line":"            new_backup \u003d self.backup_api.update(context, backup, update_dict)"},{"line_number":422,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":423,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        volume_utils.notify_about_backup_usage(context, backup,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_f39db4bc","line":422,"in_reply_to":"1a122d0e_8307a517","updated":"2016-06-27 07:47:40.000000000","message":"Done","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"}],"cinder/api/openstack/api_version_request.py":[{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"77643b6c2598b65561766e9dd24826ded3fb22fb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    * 3.0 - Includes all V2 APIs and extensions. V1 API is still supported."},{"line_number":48,"context_line":"    * 3.0 - Versions API updated to reflect beginning of microversions epoch."},{"line_number":49,"context_line":"    * 3.1 - Adds visibility and protected to _volume_upload_image parameters."},{"line_number":50,"context_line":"    * 3.2 - Add backup update."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"\"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_257ca371","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":9},"updated":"2016-04-23 18:30:25.000000000","message":"bump to 3.3","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"148d009ee5aacc3a3aad0774d571c7607d5558d3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    * 3.0 - Includes all V2 APIs and extensions. V1 API is still supported."},{"line_number":48,"context_line":"    * 3.0 - Versions API updated to reflect beginning of microversions epoch."},{"line_number":49,"context_line":"    * 3.1 - Adds visibility and protected to _volume_upload_image parameters."},{"line_number":50,"context_line":"    * 3.2 - Add backup update."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"\"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b3bdec03","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":9},"in_reply_to":"1a122d0e_257ca371","updated":"2016-06-27 07:47:40.000000000","message":"Done","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"f86fb03536388fccda6ee92315f63e11a90da2d9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# minimum version of the API supported."},{"line_number":57,"context_line":"# Explicitly using /v1 or /v2 enpoints will still work"},{"line_number":58,"context_line":"_MIN_API_VERSION \u003d \"3.0\""},{"line_number":59,"context_line":"_MAX_API_VERSION \u003d \"3.1\""},{"line_number":60,"context_line":"_LEGACY_API_VERSION1 \u003d \"1.0\""},{"line_number":61,"context_line":"_LEGACY_API_VERSION2 \u003d \"2.0\""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_c0007338","line":59,"updated":"2016-05-02 22:02:32.000000000","message":"We need to update this as well.","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"148d009ee5aacc3a3aad0774d571c7607d5558d3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# minimum version of the API supported."},{"line_number":57,"context_line":"# Explicitly using /v1 or /v2 enpoints will still work"},{"line_number":58,"context_line":"_MIN_API_VERSION \u003d \"3.0\""},{"line_number":59,"context_line":"_MAX_API_VERSION \u003d \"3.1\""},{"line_number":60,"context_line":"_LEGACY_API_VERSION1 \u003d \"1.0\""},{"line_number":61,"context_line":"_LEGACY_API_VERSION2 \u003d \"2.0\""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_d33cf894","line":59,"in_reply_to":"1a122d0e_c0007338","updated":"2016-06-27 07:47:40.000000000","message":"Done","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"77643b6c2598b65561766e9dd24826ded3fb22fb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  Added the parameters ``protected`` and ``visibility`` to"},{"line_number":35,"context_line":"  _volume_upload_image requests."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"3.2"},{"line_number":38,"context_line":"---"},{"line_number":39,"context_line":"  Add backup update interface to update name and description of a backup."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a122d0e_057fe766","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":3},"updated":"2016-04-23 18:30:25.000000000","message":"bump to 3.3","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"148d009ee5aacc3a3aad0774d571c7607d5558d3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  Added the parameters ``protected`` and ``visibility`` to"},{"line_number":35,"context_line":"  _volume_upload_image requests."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"3.2"},{"line_number":38,"context_line":"---"},{"line_number":39,"context_line":"  Add backup update interface to update name and description of a backup."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3aaa91ec_13432014","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":3},"in_reply_to":"1a122d0e_057fe766","updated":"2016-06-27 07:47:40.000000000","message":"Done","commit_id":"cb615c39bf52d1021b1a3800fb7a32e1f1961517"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"3.7"},{"line_number":74,"context_line":"---"},{"line_number":75,"context_line":"  Added backup update interface."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3aaa91ec_173f4826","line":75,"updated":"2016-06-28 09:23:11.000000000","message":"-1: I feel that this information is insufficient, which fields are allowed to be updated?","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"3.7"},{"line_number":74,"context_line":"---"},{"line_number":75,"context_line":"  Added backup update interface."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3aaa91ec_afb4eef1","line":75,"in_reply_to":"3aaa91ec_173f4826","updated":"2016-06-29 03:50:41.000000000","message":"Done","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a2132e0d8f2b521b2a5a01b9fbb82f3ee21f136","unresolved":false,"context_lines":[{"line_number":147,"context_line":"         }"},{"line_number":148,"context_line":"     ]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"3.7"},{"line_number":151,"context_line":"---"},{"line_number":152,"context_line":"  Added backup update interface to change name and description."},{"line_number":153,"context_line":"  Returns:"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_5233fc13","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":3},"updated":"2016-07-27 11:19:22.000000000","message":"3.8","commit_id":"716c2471b0e5fedd8fb91f23b11e65b0e45c08f4"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"0396e73b9d95721cf360fee4045b95c1d7d6fa7c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"         }"},{"line_number":148,"context_line":"     ]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"3.7"},{"line_number":151,"context_line":"---"},{"line_number":152,"context_line":"  Added backup update interface to change name and description."},{"line_number":153,"context_line":"  Returns:"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bacf61ea_64254eaa","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":3},"in_reply_to":"dada55a8_5233fc13","updated":"2016-07-28 02:10:22.000000000","message":"Done","commit_id":"716c2471b0e5fedd8fb91f23b11e65b0e45c08f4"}],"cinder/api/v3/backups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class BackupsController(backups_v2.BackupsController):"},{"line_number":30,"context_line":"    \"\"\"The backups API controller for the Openstack API V3.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update(self, req, id, body):"},{"line_number":33,"context_line":"        \"\"\"Update a backup.\"\"\""},{"line_number":34,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":35,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_777dece6","line":32,"updated":"2016-06-28 09:23:11.000000000","message":"-1: This should be limited to call to microversion 3.7 or higher.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class BackupsController(backups_v2.BackupsController):"},{"line_number":30,"context_line":"    \"\"\"The backups API controller for the Openstack API V3.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update(self, req, id, body):"},{"line_number":33,"context_line":"        \"\"\"Update a backup.\"\"\""},{"line_number":34,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":35,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_4f92aa4c","line":32,"in_reply_to":"3aaa91ec_777dece6","updated":"2016-06-29 03:50:41.000000000","message":"Done","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        backup_update \u003d body[\u0027backup\u0027]"},{"line_number":38,"context_line":"        update_dict \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        valid_update_keys \u003d ("},{"line_number":41,"context_line":"            \u0027display_name\u0027,"},{"line_number":42,"context_line":"            \u0027display_description\u0027,"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.validate_name_and_description(backup_update)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        if \u0027name\u0027 in backup_update:"},{"line_number":47,"context_line":"            backup_update[\u0027display_name\u0027] \u003d backup_update.pop(\u0027name\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if \u0027description\u0027 in backup_update:"},{"line_number":50,"context_line":"            backup_update[\u0027display_description\u0027] \u003d ("},{"line_number":51,"context_line":"                backup_update.pop(\u0027description\u0027))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Check no unsupported fields."},{"line_number":54,"context_line":"        differences \u003d set(backup_update.keys()).difference(valid_update_keys)"},{"line_number":55,"context_line":"        if differences:"},{"line_number":56,"context_line":"            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(differences))"},{"line_number":57,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        update_dict.update(backup_update)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_37036411","line":59,"range":{"start_line":38,"start_character":8,"end_line":59,"end_character":41},"updated":"2016-06-28 09:23:11.000000000","message":"-1: This is a little convoluted:\n\n        self.validate_name_and_description(backup_update)\n\n        update_dict \u003d {}\n\n        if \u0027name\u0027 in backup_update:\n            update_dict[\u0027display_name\u0027] \u003d backup_update.pop(\u0027name\u0027)\n\n        if \u0027description\u0027 in backup_update:\n            update_dict[\u0027display_description\u0027] \u003d (\n                backup_update.pop(\u0027description\u0027))\n\n        # Check no unsupported fields.\n        if backup_update:\n            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(backup_update))\n            raise exc.HTTPBadRequest(explanation\u003dmsg)","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        backup_update \u003d body[\u0027backup\u0027]"},{"line_number":38,"context_line":"        update_dict \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        valid_update_keys \u003d ("},{"line_number":41,"context_line":"            \u0027display_name\u0027,"},{"line_number":42,"context_line":"            \u0027display_description\u0027,"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.validate_name_and_description(backup_update)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        if \u0027name\u0027 in backup_update:"},{"line_number":47,"context_line":"            backup_update[\u0027display_name\u0027] \u003d backup_update.pop(\u0027name\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if \u0027description\u0027 in backup_update:"},{"line_number":50,"context_line":"            backup_update[\u0027display_description\u0027] \u003d ("},{"line_number":51,"context_line":"                backup_update.pop(\u0027description\u0027))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Check no unsupported fields."},{"line_number":54,"context_line":"        differences \u003d set(backup_update.keys()).difference(valid_update_keys)"},{"line_number":55,"context_line":"        if differences:"},{"line_number":56,"context_line":"            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(differences))"},{"line_number":57,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        update_dict.update(backup_update)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_0feee2b3","line":59,"range":{"start_line":38,"start_character":8,"end_line":59,"end_character":41},"in_reply_to":"3aaa91ec_37036411","updated":"2016-06-29 03:50:41.000000000","message":"Yes, your suggestion look much better.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        update_dict.update(backup_update)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":63,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":64,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":65,"context_line":"        new_backup \u003d self.backup_api.update(context, backup, update_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_09961094","line":62,"updated":"2016-06-28 09:23:11.000000000","message":"-1: I think this should follow the same pattern as other methods and just pass the backup_id to self.backup_api.update and do the get in there.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        update_dict.update(backup_update)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":63,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":64,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":65,"context_line":"        new_backup \u003d self.backup_api.update(context, backup, update_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_b241f10d","line":62,"in_reply_to":"3aaa91ec_09961094","updated":"2016-06-29 03:50:41.000000000","message":"The update of other resources get object at first, and then do real work. \n\nVolume-update: also volume reserve etc.\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L438\n\nAlso consistent group:\nhttps://github.com/openstack/cinder/blob/master/cinder/consistencygroup/api.py#L473","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69ea8f5df9b2b787a2e52cd302a2e97ca7d4d7c7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        update_dict.update(backup_update)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":63,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":64,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":65,"context_line":"        new_backup \u003d self.backup_api.update(context, backup, update_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c9f96bca","line":62,"in_reply_to":"3aaa91ec_b241f10d","updated":"2016-06-29 09:03:11.000000000","message":"I was aiming for consistency in backup:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L241\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L375\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L447\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L465\n\nWhere we only have 1 instance were we pass the OVO:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L85","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":63,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":64,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":65,"context_line":"        new_backup \u003d self.backup_api.update(context, backup, update_dict)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_29314ced","line":63,"updated":"2016-06-28 09:23:11.000000000","message":"-1: Don\u0027t catch this exception here, WSGI will raise the right exception when any NotFound exception is raised.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            backup \u003d self.backup_api.get(context, id)"},{"line_number":63,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":64,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":65,"context_line":"        new_backup \u003d self.backup_api.update(context, backup, update_dict)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c5903951","line":63,"in_reply_to":"3aaa91ec_29314ced","updated":"2016-06-29 03:50:41.000000000","message":"Yes, WSGI handles such notfound exception.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"abb8e750994723381a40b12b1afbf62919171051","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class BackupsController(backups_v2.BackupsController):"},{"line_number":30,"context_line":"    \"\"\"The backups API controller for the Openstack API V3.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @backups_v2.BackupsController.api_version(BACKUP_UPDATE_MICRO_VERSION)"},{"line_number":33,"context_line":"    def update(self, req, id, body):"},{"line_number":34,"context_line":"        \"\"\"Update a backup.\"\"\""},{"line_number":35,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_fd601303","line":32,"updated":"2016-06-30 13:57:20.000000000","message":"I think this should use wsgi.Controller.  I have posted a fix to our problem with the microversion decorator: https://review.openstack.org/336030","commit_id":"479df42b2de462b04d7a6e62914d9bf15dd9ae85"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"2a22b97782e29ce6096ded1b51b641efaf4dd625","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.assert_valid_body(body, \u0027backup\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        backup_update \u003d body[\u0027backup\u0027]"},{"line_number":39,"context_line":"        update_dict \u003d {}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.validate_name_and_description(backup_update)"},{"line_number":42,"context_line":"        update_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_080fbf88","line":39,"updated":"2016-07-06 13:49:18.000000000","message":"Please remove this, see line 42.","commit_id":"3f2a76db7b6f9b11837eaab07bf5d4a536a61997"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"03f315d12381e113e908aeacddc22165718f00e9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                backup_update.pop(\u0027description\u0027))"},{"line_number":48,"context_line":"        # Check no unsupported fields."},{"line_number":49,"context_line":"        if backup_update:"},{"line_number":50,"context_line":"            msg \u003d _(\"Unsupported fields %s.\") % (\",\".join(backup_update))"},{"line_number":51,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        new_backup \u003d self.backup_api.update(context, id, update_dict)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_f3019639","line":50,"range":{"start_line":50,"start_character":49,"end_line":50,"end_character":52},"updated":"2016-07-06 09:06:50.000000000","message":"nit: We should add a space after the comma: \", \"","commit_id":"3f2a76db7b6f9b11837eaab07bf5d4a536a61997"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dccc0e2870f5c43f30e8433be04bdf9efc6a5806","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder.api.openstack import wsgi"},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"BACKUP_UPDATE_MICRO_VERSION \u003d \u00273.7\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_b8d8f980","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":33},"updated":"2016-07-14 09:39:46.000000000","message":"Looks like LOG is unused.","commit_id":"4020afa64e1d40c23cad91438341719c947dbd32"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0a68bf70d68a75826e1c7b1278ba5b33f25b43f1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder.api.openstack import wsgi"},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"BACKUP_UPDATE_MICRO_VERSION \u003d \u00273.7\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_370c3a94","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":33},"in_reply_to":"1aa78d24_b8d8f980","updated":"2016-07-18 08:43:42.000000000","message":"+1, Please, remove unused variable","commit_id":"4020afa64e1d40c23cad91438341719c947dbd32"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"7c3711bbdbe30e89d1a27f1502ee29a99ad9cc38","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder.api.openstack import wsgi"},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"BACKUP_UPDATE_MICRO_VERSION \u003d \u00273.7\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_535b8787","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":33},"in_reply_to":"dada55a8_370c3a94","updated":"2016-07-19 08:44:16.000000000","message":"Yes, done.","commit_id":"4020afa64e1d40c23cad91438341719c947dbd32"}],"cinder/tests/unit/api/contrib/test_backups.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"eb967344dd568cbbd5ee4170c6423b46ffa32b3f","unresolved":false,"context_lines":[{"line_number":2027,"context_line":"        if snapshot:"},{"line_number":2028,"context_line":"            snapshot.destroy()"},{"line_number":2029,"context_line":"        db.volume_destroy(context.get_admin_context(), volume_id)"},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"    def test_backup_update(self):"},{"line_number":2032,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":2033,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_345b40f8","line":2030,"updated":"2016-02-11 16:51:00.000000000","message":"Should we have negative test where a bad key is supplied - say, the \u0027id\u0027 or something that one shouldn\u0027t be able to change?","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"15e8911b011ecddc7071d1ede03fe737d2e93836","unresolved":false,"context_lines":[{"line_number":2027,"context_line":"        if snapshot:"},{"line_number":2028,"context_line":"            snapshot.destroy()"},{"line_number":2029,"context_line":"        db.volume_destroy(context.get_admin_context(), volume_id)"},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"    def test_backup_update(self):"},{"line_number":2032,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":2033,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_6376dca5","line":2030,"in_reply_to":"3a57f1b5_345b40f8","updated":"2016-02-11 17:44:37.000000000","message":"This sounds like a really good idea.","commit_id":"800e782e1a2cf0d7fc0c7d6d79332ed566798cc6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"7e9fb23db90df8b2b3e1c6c2e4aaea3e21b577db","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import json"},{"line_number":21,"context_line":"from xml.dom import minidom"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import ddt"},{"line_number":24,"context_line":"import mock"},{"line_number":25,"context_line":"from oslo_utils import timeutils"},{"line_number":26,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_d681544c","line":23,"updated":"2016-02-26 11:23:21.000000000","message":"import json","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"06785a7564ee568939b345916ab4370d93a9daee","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import json"},{"line_number":21,"context_line":"from xml.dom import minidom"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import ddt"},{"line_number":24,"context_line":"import mock"},{"line_number":25,"context_line":"from oslo_utils import timeutils"},{"line_number":26,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_1267fa4d","line":23,"in_reply_to":"9aed3d3a_d681544c","updated":"2016-02-29 02:45:23.000000000","message":"Line 20 has \u0027import json\u0027","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"d07f701d2edfda937961eb6c96bf6a50fdf0f7a2","unresolved":false,"context_lines":[{"line_number":2035,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2036,"context_line":"        }"},{"line_number":2037,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2038,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 % backup_id)"},{"line_number":2039,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2040,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2041,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_88cbf71d","line":2038,"updated":"2016-02-27 08:10:54.000000000","message":"We\u0027ve a huge number of \"invalid UUID\" warnings in gate logs. https://bugs.launchpad.net/cinder/+bug/1549909 \nI think the usage here could add to the woes. Could you please check and fix it here? \nPrevention is better than cure :-)","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"3d4b9a183bcfc113efbfe7d2d9b482466e627117","unresolved":false,"context_lines":[{"line_number":2035,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2036,"context_line":"        }"},{"line_number":2037,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2038,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 % backup_id)"},{"line_number":2039,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2040,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2041,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_a3a24297","line":2038,"in_reply_to":"9aed3d3a_88cbf71d","updated":"2016-02-29 04:48:22.000000000","message":"This backup is created with db.backup_create(). So its uuid is valid, not fake.","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"d07f701d2edfda937961eb6c96bf6a50fdf0f7a2","unresolved":false,"context_lines":[{"line_number":2054,"context_line":"    def test_backup_update_with_no_body(self):"},{"line_number":2055,"context_line":"        # omit body from the request"},{"line_number":2056,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":2057,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 % backup_id)"},{"line_number":2058,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2059,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2060,"context_line":"        req.body \u003d json.dumps(None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_e8d283d1","line":2057,"updated":"2016-02-27 08:10:54.000000000","message":"Same here as above...","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"d07f701d2edfda937961eb6c96bf6a50fdf0f7a2","unresolved":false,"context_lines":[{"line_number":2074,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2075,"context_line":"        }"},{"line_number":2076,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2077,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 % backup_id)"},{"line_number":2078,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2079,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2080,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_08d887ee","line":2077,"updated":"2016-02-27 08:10:54.000000000","message":"same here as above","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"3d4b9a183bcfc113efbfe7d2d9b482466e627117","unresolved":false,"context_lines":[{"line_number":2074,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2075,"context_line":"        }"},{"line_number":2076,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2077,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 % backup_id)"},{"line_number":2078,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2079,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2080,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_03acce8a","line":2077,"in_reply_to":"9aed3d3a_08d887ee","updated":"2016-02-29 04:48:22.000000000","message":"same as above.","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"d07f701d2edfda937961eb6c96bf6a50fdf0f7a2","unresolved":false,"context_lines":[{"line_number":2093,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2094,"context_line":"        }"},{"line_number":2095,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2096,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/1234\u0027)"},{"line_number":2097,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2098,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2099,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_c8ecdf91","line":2096,"updated":"2016-02-27 08:10:54.000000000","message":"same here as above","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"3d4b9a183bcfc113efbfe7d2d9b482466e627117","unresolved":false,"context_lines":[{"line_number":2093,"context_line":"            \"description\": \"Updated Test description.\","},{"line_number":2094,"context_line":"        }"},{"line_number":2095,"context_line":"        body \u003d {\"backup\": updates}"},{"line_number":2096,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/1234\u0027)"},{"line_number":2097,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":2098,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":2099,"context_line":"        req.body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_63d4babc","line":2096,"in_reply_to":"9aed3d3a_c8ecdf91","updated":"2016-02-29 04:48:22.000000000","message":"Done.","commit_id":"7366232dced210acc97790fcaba09a69c35844ac"}],"cinder/tests/unit/api/v3/test_backups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class BackupsControllerAPITestCase(test.TestCase):"},{"line_number":32,"context_line":"    \"\"\"Test cases for backups API.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_29aaec70","line":31,"updated":"2016-06-28 09:23:11.000000000","message":"nit: Maybe a negative test that checks that prior to version 3.7 update was not possible.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class BackupsControllerAPITestCase(test.TestCase):"},{"line_number":32,"context_line":"    \"\"\"Test cases for backups API.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_6377bd9f","line":31,"in_reply_to":"3aaa91ec_29aaec70","updated":"2016-06-29 03:50:41.000000000","message":"Done","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":40,"context_line":"        self.controller \u003d backups.BackupsController()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _backup_create(self,"},{"line_number":43,"context_line":"                       ctxt\u003dNone,"},{"line_number":44,"context_line":"                       volume_id\u003dfake.VOLUME_ID,"},{"line_number":45,"context_line":"                       name\u003d\u0027test_backup\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_89a040a7","line":42,"updated":"2016-06-28 09:23:11.000000000","message":"nit: I believe this should either leverage `create_backup` method in cinder/tests/unit/utils.py, modify that method to return an OVO, or just add an OVO create backup method there.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":40,"context_line":"        self.controller \u003d backups.BackupsController()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _backup_create(self,"},{"line_number":43,"context_line":"                       ctxt\u003dNone,"},{"line_number":44,"context_line":"                       volume_id\u003dfake.VOLUME_ID,"},{"line_number":45,"context_line":"                       name\u003d\u0027test_backup\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_085ed811","line":42,"in_reply_to":"3aaa91ec_89a040a7","updated":"2016-06-29 03:50:41.000000000","message":"I updated the function to OVO.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_backup_update_with_no_body(self):"},{"line_number":79,"context_line":"        # omit body from the request"},{"line_number":80,"context_line":"        backup \u003d self._backup_create(status\u003dfields.BackupStatus.AVAILABLE)"},{"line_number":81,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/%s/backups/%s/update\u0027 %"},{"line_number":82,"context_line":"                                      (fake.PROJECT_ID, backup.id))"},{"line_number":83,"context_line":"        req.environ[\u0027cinder.context\u0027].is_admin \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_e9cd845e","line":80,"updated":"2016-06-28 09:23:11.000000000","message":"nit: You don\u0027t really need to create the backup, you could use fake.BACKUP_ID","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_backup_update_with_no_body(self):"},{"line_number":79,"context_line":"        # omit body from the request"},{"line_number":80,"context_line":"        backup \u003d self._backup_create(status\u003dfields.BackupStatus.AVAILABLE)"},{"line_number":81,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/%s/backups/%s/update\u0027 %"},{"line_number":82,"context_line":"                                      (fake.PROJECT_ID, backup.id))"},{"line_number":83,"context_line":"        req.environ[\u0027cinder.context\u0027].is_admin \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_4877409f","line":80,"in_reply_to":"3aaa91ec_e9cd845e","updated":"2016-06-29 03:50:41.000000000","message":"Done","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                          req, backup.id, None)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_backup_update_with_unsupported_field(self):"},{"line_number":92,"context_line":"        backup \u003d self._backup_create(status\u003dfields.BackupStatus.AVAILABLE)"},{"line_number":93,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/%s/backups/%s/update\u0027 %"},{"line_number":94,"context_line":"                                      (fake.PROJECT_ID, backup.id))"},{"line_number":95,"context_line":"        req.environ[\u0027cinder.context\u0027].is_admin \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_a9eb7caf","line":92,"updated":"2016-06-28 09:23:11.000000000","message":"nit: You don\u0027t really need to create the backup, you could use fake.BACKUP_ID","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"95363e7ed722a14417018d5ccf2a1a59347920ad","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                          req, backup.id, None)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_backup_update_with_unsupported_field(self):"},{"line_number":92,"context_line":"        backup \u003d self._backup_create(status\u003dfields.BackupStatus.AVAILABLE)"},{"line_number":93,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/%s/backups/%s/update\u0027 %"},{"line_number":94,"context_line":"                                      (fake.PROJECT_ID, backup.id))"},{"line_number":95,"context_line":"        req.environ[\u0027cinder.context\u0027].is_admin \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_a86ea4c6","line":92,"in_reply_to":"3aaa91ec_a9eb7caf","updated":"2016-06-29 03:50:41.000000000","message":"Done","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"03f315d12381e113e908aeacddc22165718f00e9","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_update_wrong_version(self):"},{"line_number":53,"context_line":"        req \u003d self._fake_update_request(fake.BACKUP_ID, version\u003d\u00273.6\u0027)"},{"line_number":54,"context_line":"        body \u003d {\"backup\": {\u0027name\u0027: \u0027Updated Test Name\u0027, }}"},{"line_number":55,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":56,"context_line":"                          self.controller.update, req, fake.BACKUP_ID,"},{"line_number":57,"context_line":"                          body)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_d66c48d2","line":54,"updated":"2016-07-06 09:06:50.000000000","message":"nit: It would look better if we only used \u0027 string delimiter instead of using \u0027 and \" in the same line.","commit_id":"3f2a76db7b6f9b11837eaab07bf5d4a536a61997"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"2a22b97782e29ce6096ded1b51b641efaf4dd625","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_update_wrong_version(self):"},{"line_number":53,"context_line":"        req \u003d self._fake_update_request(fake.BACKUP_ID, version\u003d\u00273.6\u0027)"},{"line_number":54,"context_line":"        body \u003d {\"backup\": {\u0027name\u0027: \u0027Updated Test Name\u0027, }}"},{"line_number":55,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":56,"context_line":"                          self.controller.update, req, fake.BACKUP_ID,"},{"line_number":57,"context_line":"                          body)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_93b92018","line":54,"in_reply_to":"1aa78d24_d66c48d2","updated":"2016-07-06 13:49:18.000000000","message":"+1","commit_id":"3f2a76db7b6f9b11837eaab07bf5d4a536a61997"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"8796f28594fb01d980cc8c771a169fe939238a88","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                          self.controller.update, req, fake.BACKUP_ID,"},{"line_number":57,"context_line":"                          body)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_backup_update_with_no_body(self):"},{"line_number":60,"context_line":"        # omit body from the request"},{"line_number":61,"context_line":"        req \u003d self._fake_update_request(fake.BACKUP_ID)"},{"line_number":62,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_ca3b51ea","line":59,"updated":"2016-07-28 11:19:58.000000000","message":"We can have one more test to cover the invalid name/description case.","commit_id":"c5ebe48b8ef5bebd0a1eaba3fd76993bfabc41a1"}],"releasenotes/notes/backup-update-d0b0db6a7b1c2a5b.yaml":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"24704f55b96da3091c217885f6c1f7b0b3eda5f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Backup update."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9aed3d3a_ea259bc2","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":18},"updated":"2016-02-26 07:31:49.000000000","message":"Can we reword it to something like:\n\n Added REST API PUT call to update the backup name and description.\n\n?","commit_id":"36c7fbe25fd04255adc3f67fd0a39a674165bf00"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5277ef86cc42e566ec048877c34d628766d89b3e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added REST API to update backup name and description."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3aaa91ec_f71c3c15","line":3,"updated":"2016-06-28 09:23:11.000000000","message":"nit: Please mention the microversion that adds this.","commit_id":"c7d92c325a6b0a171de4b6342ba153b0520bf533"}]}
