)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2bf0a84593355211db462c3a889c16fcdbd6a997","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-25 10:47:00 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Supprot for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"bab921fb_d622a3a2","line":7,"updated":"2015-04-27 00:42:33.000000000","message":"/Supprot/Support/","commit_id":"d319f125d6df87b253b63de2f7231a285876ca41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1e50273dad008346603046070c62c6b5c2d8b463","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-25 10:47:00 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Supprot for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7a016987_3f2e298c","line":7,"in_reply_to":"bab921fb_d622a3a2","updated":"2015-05-26 03:11:01.000000000","message":"Done","commit_id":"d319f125d6df87b253b63de2f7231a285876ca41"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"9d7a539e2adda8d2b307e34082932f6b40456e33","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow to delete the backups without"},{"line_number":12,"context_line":"in status of \u0027available\u0027 or \u0027error\u0027."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a016987_6a05fd11","line":12,"updated":"2015-05-25 07:28:14.000000000","message":"Third point is little bit tricky to understand. Please comment something like below:\n\n3. If force\u003dTrue, then allow the deletion of backup, which can be in any state.\n\nOR\n\n3. If force\u003dTrue, then allow the delete operation on backup, which can be in any state.","commit_id":"ca783ece9659a4e9a43be108b5ba20825d804e91"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6f079d400995258d0f01c619b293707318b97370","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow to delete the backups without"},{"line_number":12,"context_line":"in status of \u0027available\u0027 or \u0027error\u0027."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a016987_66f523ca","line":12,"in_reply_to":"7a016987_6a05fd11","updated":"2015-05-26 03:12:39.000000000","message":"Sure","commit_id":"ca783ece9659a4e9a43be108b5ba20825d804e91"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_b099c870","line":9,"updated":"2015-06-03 11:38:10.000000000","message":"Add a space between \"1.\" and \"Add\" ?","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Support for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4.Check the status of backup from DB in backup loop, if it"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_909c8c5e","line":10,"updated":"2015-06-03 11:38:10.000000000","message":"ditto","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4.Check the status of backup from DB in backup loop, if it"},{"line_number":14,"context_line":"has been deleting, set the flag cancel_backup_flag to avoid"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_70a470a5","line":11,"updated":"2015-06-03 11:38:10.000000000","message":"ditto","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2.Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3.If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4.Check the status of backup from DB in backup loop, if it"},{"line_number":14,"context_line":"has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":15,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_10a9bc7b","line":13,"updated":"2015-06-03 11:38:10.000000000","message":"ditto","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":15,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If we force delete backup when backup is still running,"},{"line_number":18,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":19,"context_line":"those objects has not been backed yet."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_a442a93c","line":18,"updated":"2015-06-03 11:38:10.000000000","message":"I think the modifications in chunkeddriver.py covers only part of drivers. For those doesn\u0027t subclass ChunkedBackupDriver will the backing-up be stopped?","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"99c1449c299086fbc4be85fb038d794305cd878a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If we force delete backup when backup is still running,"},{"line_number":18,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":19,"context_line":"those objects has not been backed yet."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3afb71cf_2a880922","line":18,"in_reply_to":"5afe65bd_a442a93c","updated":"2015-06-05 08:28:04.000000000","message":"No, for those drivers, we just call the delete backup directly. Of course, we need to test if there is no residual data in those backend.","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If we force delete backup when backup is still running,"},{"line_number":18,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":19,"context_line":"those objects has not been backed yet."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DocImpact"},{"line_number":22,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5afe65bd_f004e07e","line":19,"updated":"2015-06-03 11:38:10.000000000","message":"Add “that” in the middle of \"objects has\"?","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-05 17:59:37 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2. Add force\u003dFalse arg to delete method in backup api."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_88d01b55","line":7,"updated":"2015-06-05 14:33:17.000000000","message":"s/Support/Add support","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-05 17:59:37 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for force-delete backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add _get and _delete method to BackupAdminController."},{"line_number":10,"context_line":"2. Add force\u003dFalse arg to delete method in backup api."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_53a2abaf","line":7,"in_reply_to":"3afb71cf_88d01b55","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"fccab121809d4152cb34766073fd540e36c8b1d3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3. If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4. For chunkeddriver based backup,check the status of backup from DB in backup loop, if it has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_31bbd5c6","line":13,"updated":"2015-06-05 12:39:19.000000000","message":"Looks like you need to split the line.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3. If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4. For chunkeddriver based backup,check the status of backup from DB in backup loop, if it has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_2846c723","line":13,"updated":"2015-06-05 14:33:17.000000000","message":"s/has been deleting/has changed to deleting\n\ncancel_backup_flag doesn\u0027t exist","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. Add force\u003dFalse arg to delete method in backup api."},{"line_number":11,"context_line":"3. If force\u003dTrue, then allow the deletion of backup, which"},{"line_number":12,"context_line":"can be in any state."},{"line_number":13,"context_line":"4. For chunkeddriver based backup,check the status of backup from DB in backup loop, if it has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_33a5efb4","line":13,"in_reply_to":"3afb71cf_2846c723","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":13,"context_line":"4. For chunkeddriver based backup,check the status of backup from DB in backup loop, if it has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":17,"context_line":"those objects that has not been backed yet."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_08730b82","line":16,"updated":"2015-06-05 14:33:17.000000000","message":"s/has/have","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"4. For chunkeddriver based backup,check the status of backup from DB in backup loop, if it has been deleting, set the flag cancel_backup_flag to avoid"},{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":17,"context_line":"those objects that has not been backed yet."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_13ac339f","line":16,"in_reply_to":"3afb71cf_08730b82","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":17,"context_line":"those objects that has not been backed yet."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_c86cd39e","line":17,"updated":"2015-06-05 14:33:17.000000000","message":"s/has/have","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"leaving orphan object in the object store that can not be cleaned up."},{"line_number":15,"context_line":"If we force delete backup when backup is still running,"},{"line_number":16,"context_line":"we will delete those objects that has been done and stop backing"},{"line_number":17,"context_line":"those objects that has not been backed yet."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_f3ae3797","line":17,"in_reply_to":"3afb71cf_c86cd39e","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"flag is_backup_canceled and clear the data to avoid leaving orphan"},{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates the backup driver whether supporint force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature,it will return 400"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1af86dd1_d587dad5","line":18,"updated":"2015-06-12 08:52:22.000000000","message":"indicates if the backup driver supports force deletion.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":15,"context_line":"flag is_backup_canceled and clear the data to avoid leaving orphan"},{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates the backup driver whether supporint force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature,it will return 400"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"fa32b979_a190bfed","line":18,"in_reply_to":"1af86dd1_d587dad5","updated":"2015-06-15 07:15:29.000000000","message":"Done","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"indicates the backup driver whether supporint force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature,it will return 400"},{"line_number":22,"context_line":"when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1af86dd1_75770603","line":21,"updated":"2015-06-12 08:52:22.000000000","message":"Space between , and it\n\nShouldn\u0027t it be something different than 400? Maybe 405?","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":18,"context_line":"indicates the backup driver whether supporint force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature,it will return 400"},{"line_number":22,"context_line":"when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"fa32b979_a17e7fac","line":21,"in_reply_to":"1af86dd1_75770603","updated":"2015-06-15 07:15:29.000000000","message":"I think 501 is better， how about you?","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"96e67ea062b0c41d06036ad8b2d1c2386aea6146","unresolved":false,"context_lines":[{"line_number":18,"context_line":"indicates the backup driver whether supporint force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature,it will return 400"},{"line_number":22,"context_line":"when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"fa32b979_27491c32","line":21,"in_reply_to":"fa32b979_a17e7fac","updated":"2015-06-15 07:27:26.000000000","message":"I think it again, 500 is also better, that we can use BackupDriverException to raise.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"},{"line_number":25,"context_line":"APIImpact"},{"line_number":26,"context_line":"Implements: blueprint support-force-delete-backup"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ia4d36520d2a092730cd1be56e338349e383f9e6b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1af86dd1_9892b756","line":25,"updated":"2015-06-12 08:52:22.000000000","message":"Following APIImpact should be an explanation of the impact.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":22,"context_line":"when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"},{"line_number":25,"context_line":"APIImpact"},{"line_number":26,"context_line":"Implements: blueprint support-force-delete-backup"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ia4d36520d2a092730cd1be56e338349e383f9e6b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"fa32b979_414a1385","line":25,"in_reply_to":"1af86dd1_9892b756","updated":"2015-06-15 07:15:29.000000000","message":"Done","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"242a76737a28cd249e9ffb6aab571aad71589130","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from DB in backup loop, if it has changed to deleting, set the"},{"line_number":15,"context_line":"flag is_backup_canceled and clear the data to avoid leaving orphan"},{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates if the backup driver supports force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_fd56f228","line":17,"updated":"2015-06-17 11:45:46.000000000","message":"s/Flase/False/\n\nAdd space after period.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from DB in backup loop, if it has changed to deleting, set the"},{"line_number":15,"context_line":"flag is_backup_canceled and clear the data to avoid leaving orphan"},{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates if the backup driver supports force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_5e080d28","line":17,"in_reply_to":"fa32b979_fd56f228","updated":"2015-06-18 11:22:35.000000000","message":"Done","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"07c334bdba948e5a9c1afee822454bdab8902a27","unresolved":false,"context_lines":[{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates if the backup driver supports force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature, and it will return"},{"line_number":22,"context_line":"501 when calling API of force delete."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_eb384ff0","line":19,"updated":"2015-06-17 20:13:17.000000000","message":"inherits","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"object in the object store."},{"line_number":17,"context_line":"5. Add the flag: support_force_delete\u003dFlase in BackupDriver.That"},{"line_number":18,"context_line":"indicates if the backup driver supports force deletion."},{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature, and it will return"},{"line_number":22,"context_line":"501 when calling API of force delete."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_7e0b9124","line":19,"in_reply_to":"fa32b979_eb384ff0","updated":"2015-06-18 11:22:35.000000000","message":"Done","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature, and it will return"},{"line_number":22,"context_line":"501 when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"},{"line_number":25,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_b05c44ee","line":22,"updated":"2015-06-16 12:34:36.000000000","message":"501 is not the right status code, this should only be returned if server does not recognize the request method and is not capable of supporting it for *any resource*.\n\nAnd since we may have multiple backends and in some of them this can be supported we should return 405, which is Method Not Allowed, which indicates that the method received in the request-line is known by the origin server but not supported by the target resource.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature, and it will return"},{"line_number":22,"context_line":"501 when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"},{"line_number":25,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_be059911","line":22,"in_reply_to":"fa32b979_117fe466","updated":"2015-06-18 11:22:35.000000000","message":"Okay, thanks for the explanations, Gorka.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"07c334bdba948e5a9c1afee822454bdab8902a27","unresolved":false,"context_lines":[{"line_number":19,"context_line":"It should be set to True if the driver that inherit from BackupDriver"},{"line_number":20,"context_line":"supports the force deletion function."},{"line_number":21,"context_line":"6. If the backup driver doesn\u0027t support this feature, and it will return"},{"line_number":22,"context_line":"501 when calling API of force delete."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact"},{"line_number":25,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa32b979_117fe466","line":22,"in_reply_to":"fa32b979_b05c44ee","updated":"2015-06-17 20:13:17.000000000","message":"405 does seem to be more appropriate than 501.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"}],"cinder/api/contrib/admin_actions.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        return self.backup_api.get(*args, **kwargs)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _delete(self, *args, **kwargs):"},{"line_number":290,"context_line":"        return self.backup_api.delete(args[0], args[1].get(\u0027id\u0027), **kwargs)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"},{"line_number":293,"context_line":"    def _reset_status(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_a2cbf571","line":290,"updated":"2015-06-05 14:33:17.000000000","message":"It\u0027s not neat to do args[0] and args[1] here, you should pass *args and **kwargs to delete method and there check if you have received a string with the ID or a dictionary and extract the ID from it.\n\nIf cores think this is acceptable then you have to add *args to the call, otherwise you could be eating arguments.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        return self.backup_api.get(*args, **kwargs)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _delete(self, *args, **kwargs):"},{"line_number":290,"context_line":"        return self.backup_api.delete(args[0], args[1].get(\u0027id\u0027), **kwargs)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"},{"line_number":293,"context_line":"    def _reset_status(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_d3033b41","line":290,"in_reply_to":"3afb71cf_a2cbf571","updated":"2015-06-08 06:36:54.000000000","message":"Sure, I will fix this.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"}],"cinder/api/contrib/backups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ba02323773026d2893d0023c837530f842c5b7fd","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        LOG.info(_LI(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            backup \u003d self.backup_api.backup(context, id)"},{"line_number":185,"context_line":"            self.backup_api.delete(context, backup)"},{"line_number":186,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":187,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_db6bc1b5","line":184,"updated":"2015-06-18 10:41:58.000000000","message":"Shouldn\u0027t this be?:\n\n backup \u003d self.backup_api.get(context, id)","commit_id":"bc589ce3be7dea06cdad56917d9c27a9625d47fc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e14d8681f4a68f2343117418abf156a9ca1b187f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        LOG.info(_LI(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            backup \u003d self.backup_api.backup(context, id)"},{"line_number":185,"context_line":"            self.backup_api.delete(context, backup)"},{"line_number":186,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":187,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_5ef1df69","line":184,"in_reply_to":"fa32b979_db6bc1b5","updated":"2015-06-18 11:23:22.000000000","message":"Er, Write error.","commit_id":"bc589ce3be7dea06cdad56917d9c27a9625d47fc"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"81bb585d77ceb390a93ee5429da6a64435bc2bea","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def delete(self, req, id):"},{"line_number":177,"context_line":"        \"\"\"Delete a backup.\"\"\""},{"line_number":178,"context_line":"        LOG.debug(\u0027delete called for member %s\u0027, id)"},{"line_number":179,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        LOG.info(_LI(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_aaf7418b","line":178,"updated":"2015-06-19 16:16:49.000000000","message":"I suggest capitalizing the \u0027d\u0027 in delete and adding \u0027.\u0027 at EOL","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"802309b44d52b248adaec613f2bf6b529f60f623","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def delete(self, req, id):"},{"line_number":177,"context_line":"        \"\"\"Delete a backup.\"\"\""},{"line_number":178,"context_line":"        LOG.debug(\u0027delete called for member %s\u0027, id)"},{"line_number":179,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        LOG.info(_LI(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_d6be9dfe","line":178,"in_reply_to":"fa32b979_aaf7418b","updated":"2015-06-23 03:54:00.000000000","message":"Done","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"}],"cinder/backup/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"42bc863181db1477fb533120f8d2918f97d1344b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":68,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":69,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":70,"context_line":"            backup_id \u003d backup_id.get(\u0027id\u0027)"},{"line_number":71,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":72,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"},{"line_number":73,"context_line":"            msg \u003d _(\u0027Backup status must be available or error\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_d8fa32bd","line":70,"updated":"2015-06-08 09:02:46.000000000","message":"What do you think of doing backup_id[\u0027id\u0027] so that exception happens here if dict is missing id instead of happening somewhere else because backup_id is None?","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6ac11985fa8b285906021983f9ead1c2f3bb77cb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":68,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":69,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":70,"context_line":"            backup_id \u003d backup_id.get(\u0027id\u0027)"},{"line_number":71,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":72,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"},{"line_number":73,"context_line":"            msg \u003d _(\u0027Backup status must be available or error\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_b774f235","line":70,"in_reply_to":"3afb71cf_54a81c8d","updated":"2015-06-09 07:40:44.000000000","message":"That\u0027s precisely when you use [] instead of get, when you know it has to be there and you want it to crash if it\u0027s not. ;-)","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b6a3bf5e7f7110742b7c5cc6b966519a154c5f93","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":68,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":69,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":70,"context_line":"            backup_id \u003d backup_id.get(\u0027id\u0027)"},{"line_number":71,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":72,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"},{"line_number":73,"context_line":"            msg \u003d _(\u0027Backup status must be available or error\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_54a81c8d","line":70,"in_reply_to":"3afb71cf_d8fa32bd","updated":"2015-06-09 07:21:55.000000000","message":"Well, I think you are right, although it\u0027s hard to miss this id I think since we get the backup from DB at first and then pass the backup to call the deletion method.:)","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c37e994aa5aa4c28603a193d55dee11f18cb426","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"backup_api_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027force_delete_support\u0027,"},{"line_number":41,"context_line":"               default\u003dFalse,"},{"line_number":42,"context_line":"               help\u003d\u0027Indicate the backup driver support force delete or not.\u0027,"},{"line_number":43,"context_line":"               ),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_887677a2","line":40,"updated":"2015-06-09 09:04:44.000000000","message":"This should not be specified in Cinder config. It\u0027s not user configurable. This should be part of each driver\u0027s object because it\u0027s driver dependent.","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"be6346ffb9a634904589e95f2c3212c09851fe43","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"backup_api_opts \u003d ["},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027force_delete_support\u0027,"},{"line_number":41,"context_line":"               default\u003dFalse,"},{"line_number":42,"context_line":"               help\u003d\u0027Indicate the backup driver support force delete or not.\u0027,"},{"line_number":43,"context_line":"               ),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_5ea367b2","line":40,"in_reply_to":"3afb71cf_887677a2","updated":"2015-06-10 03:32:52.000000000","message":"Emm, I will try it.","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc278225852b0439dd6d0e04ea6f1cac377560c0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return dict(rv.iteritems())"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _check_support_to_force_delete(self, context):"},{"line_number":69,"context_line":"        if CONF.backup_driver in backup_manager.mapper:"},{"line_number":70,"context_line":"            driver_name \u003d backup_manager.mapper[CONF.backup_driver]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            driver_name \u003d CONF.backup_driver"}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_de3ff223","line":69,"updated":"2015-06-12 12:22:58.000000000","message":"It seems that this way of doing this could be problematic, since one API may be working with multiple nodes/cinder-backups and wouldn\u0027t know about their backup configurations or be able to load the right driver. Right?\n\nMaybe we should be asking the node if he can force delete it...","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return dict(rv.iteritems())"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _check_support_to_force_delete(self, context):"},{"line_number":69,"context_line":"        if CONF.backup_driver in backup_manager.mapper:"},{"line_number":70,"context_line":"            driver_name \u003d backup_manager.mapper[CONF.backup_driver]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            driver_name \u003d CONF.backup_driver"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_64bba273","line":69,"in_reply_to":"1af86dd1_de3ff223","updated":"2015-06-15 07:15:29.000000000","message":"Emm, we should consider this kind of situation as you said.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            driver_name \u003d backup_manager.mapper[CONF.backup_driver]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            driver_name \u003d CONF.backup_driver"},{"line_number":73,"context_line":"        self.service \u003d importutils.import_module(driver_name)"},{"line_number":74,"context_line":"        backup_service \u003d self.service.get_backup_driver(context)"},{"line_number":75,"context_line":"        return backup_service.support_force_delete"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_3804e37c","line":73,"updated":"2015-06-12 08:52:22.000000000","message":"Why store imported module in an instance attribute if it\u0027s not going to be used?\n\nWouldn\u0027t it be better to do this only once at initialization time and just store the value of support_force_delete in an attribute called backup_supports_force_delete or something?","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            driver_name \u003d backup_manager.mapper[CONF.backup_driver]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            driver_name \u003d CONF.backup_driver"},{"line_number":73,"context_line":"        self.service \u003d importutils.import_module(driver_name)"},{"line_number":74,"context_line":"        backup_service \u003d self.service.get_backup_driver(context)"},{"line_number":75,"context_line":"        return backup_service.support_force_delete"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_a44f6a91","line":73,"in_reply_to":"1af86dd1_3804e37c","updated":"2015-06-15 07:15:29.000000000","message":"I think there is no need to import module if we are asking the node like above comment.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2982034763913253d6d722232cc58137691612cc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":78,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":79,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":80,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":81,"context_line":"            backup_id \u003d backup_id[\u0027id\u0027]"},{"line_number":82,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":83,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3afb71cf_aa53d96b","line":80,"updated":"2015-06-11 20:34:53.000000000","message":"It\u0027s confusing to have backup_id param which could be a dict.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":78,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":79,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":80,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":81,"context_line":"            backup_id \u003d backup_id[\u0027id\u0027]"},{"line_number":82,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":83,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_e41d72be","line":80,"in_reply_to":"1af86dd1_18048713","updated":"2015-06-15 07:15:29.000000000","message":"Sure.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":78,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":79,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":80,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":81,"context_line":"            backup_id \u003d backup_id[\u0027id\u0027]"},{"line_number":82,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":83,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_18048713","line":80,"in_reply_to":"1af86dd1_cf5750c9","updated":"2015-06-12 08:52:22.000000000","message":"I think the docstring of this method should be extended to include a description of the parameters, so that the 2 possibilities of backup_id are explained.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"782aa437c1a020e2c7de3c37864f8404b6e43e6c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":78,"context_line":"        \"\"\"Make the RPC call to delete a volume backup.\"\"\""},{"line_number":79,"context_line":"        check_policy(context, \u0027delete\u0027)"},{"line_number":80,"context_line":"        if isinstance(backup_id, dict):"},{"line_number":81,"context_line":"            backup_id \u003d backup_id[\u0027id\u0027]"},{"line_number":82,"context_line":"        backup \u003d self.get(context, backup_id)"},{"line_number":83,"context_line":"        if not force and backup[\u0027status\u0027] not in [\u0027available\u0027, \u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_cf5750c9","line":80,"in_reply_to":"3afb71cf_aa53d96b","updated":"2015-06-12 03:02:31.000000000","message":"Because in _force_delete of admin_actions.py, it got the resource(like backup) first, and then call the delete method by passing the resource as arg, so the backup_id in here may be a dict.","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return dict(rv)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _check_support_to_force_delete(self, context, backup_host):"},{"line_number":67,"context_line":"        result \u003d self.backup_rpcapi.check_support_to_force_delete(context,"},{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_4b22e953","line":67,"updated":"2015-06-16 12:34:36.000000000","message":"I\u0027m not happy making an rpc call for each delete, but the alternative is to cache results here, and then an upgraded volume service node that newly implemented the force delete would not be automatically detected and would need an api service restart. So it\u0027s not perfect either.\n\nI am happy with that trade off, so I\u0027m in favor of caching here results in a dictionary using backup_host as key and make sure documentation explains this  limitation.\n\nBut that can be left for a follow up patch. :-)","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"242a76737a28cd249e9ffb6aab571aad71589130","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return dict(rv)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _check_support_to_force_delete(self, context, backup_host):"},{"line_number":67,"context_line":"        result \u003d self.backup_rpcapi.check_support_to_force_delete(context,"},{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_bddf0a0c","line":67,"in_reply_to":"fa32b979_4b22e953","updated":"2015-06-17 11:45:46.000000000","message":"Do we expect *force* deletes to be so frequent that caching is a concern?","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return dict(rv)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _check_support_to_force_delete(self, context, backup_host):"},{"line_number":67,"context_line":"        result \u003d self.backup_rpcapi.check_support_to_force_delete(context,"},{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_f1b82f2c","line":67,"in_reply_to":"fa32b979_bddf0a0c","updated":"2015-06-18 11:22:35.000000000","message":"@Gorka, We should move carefully about caching here, if we have many backup hosts, the dictionary may become bigger and not be used so frequently. Moreover, as you said, we also need api service restart to refresh the dictionary if some one of backup hosts updated for implementing the force delete.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f07402fc267434932a148c6a4f97ec01bb48db7f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_868e55ce","line":71,"updated":"2015-06-17 21:14:42.000000000","message":"It is very bad the backup_id can be a dict or just id itself.  You should modify cinder/api/contrib/backups.py: delete() and change self.backup_api.delete(context, id) to self.backup_api.delete(context, backup).  So here it always passes in a backup dict.  This change is internal to the backup API itself so it should be ok.\n\nSee how this is done in the volume API: \nhttps://github.com/openstack/cinder/blob/master/cinder/api/v2/volumes.py#L199\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L303","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"83c699e481700e63bcb53b4b37106d62c12da81a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_ec94c98b","line":71,"in_reply_to":"fa32b979_7f3dcbdb","updated":"2015-06-18 11:47:46.000000000","message":"@wanghao yes it should. I was just saying that it was my fault that you had that polymorphic argument. ;-)","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_7f3dcbdb","line":71,"in_reply_to":"fa32b979_868e55ce","updated":"2015-06-18 11:22:35.000000000","message":"Emm, it should be consistent with volume and snapshot.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"217f0c0b43b3ad110f1ba0c1e39f55fcd93ee8ee","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_98c3ff37","line":71,"in_reply_to":"fa32b979_868e55ce","updated":"2015-06-18 10:41:49.000000000","message":"This is actually my fault, I suggested it because I\u0027ve seen it in other places and thought it was acceptable practice. Like in volume\u0027s check_policy: https://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L106","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59e127540135aa5870688208c72d4edb7c79dd90","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_17f1df6a","line":71,"in_reply_to":"fa32b979_8d8f3774","updated":"2015-06-19 15:37:14.000000000","message":"@Gorka, that\u0027s fine.  I think that was added for Cinder objects to work, but we should avoid it if there is another way to make it cleaner.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"51353ec821b6f834d82ada3e37c486c52e19ef9f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                                                  backup_host)"},{"line_number":69,"context_line":"        return result"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def delete(self, context, backup_id, force\u003dFalse):"},{"line_number":72,"context_line":"        \"\"\"Make the RPC call to delete a volume backup."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_8d8f3774","line":71,"in_reply_to":"fa32b979_ec94c98b","updated":"2015-06-18 12:44:44.000000000","message":"np, that\u0027s fine.:)","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"242a76737a28cd249e9ffb6aab571aad71589130","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."},{"line_number":75,"context_line":"        :param context: running context"},{"line_number":76,"context_line":"        :param backup_id: which backup to be deleted, it cloud be a dict since"},{"line_number":77,"context_line":"                          the force delete call is passing the backup resource"},{"line_number":78,"context_line":"                          as arg to this method."},{"line_number":79,"context_line":"        :parma force: indicate force delete or not"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_9d856608","line":76,"updated":"2015-06-17 11:45:46.000000000","message":"Agree with Gorka.\n\nAlso:\n\ns/cloud/could/","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Call backup manager to execute backup delete or force delete operation."},{"line_number":75,"context_line":"        :param context: running context"},{"line_number":76,"context_line":"        :param backup_id: which backup to be deleted, it cloud be a dict since"},{"line_number":77,"context_line":"                          the force delete call is passing the backup resource"},{"line_number":78,"context_line":"                          as arg to this method."},{"line_number":79,"context_line":"        :parma force: indicate force delete or not"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_d0b788d6","line":76,"updated":"2015-06-16 12:34:36.000000000","message":"Should also mention that it can be a string with the id  ;-)","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        :param backup_id: which backup to be deleted, it cloud be a dict since"},{"line_number":77,"context_line":"                          the force delete call is passing the backup resource"},{"line_number":78,"context_line":"                          as arg to this method."},{"line_number":79,"context_line":"        :parma force: indicate force delete or not"},{"line_number":80,"context_line":"        :raises: InvalidBackup"},{"line_number":81,"context_line":"        :raises: BackupDriverException"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_90e820b6","line":79,"updated":"2015-06-16 12:34:36.000000000","message":"s/parma/param","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":90,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":91,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":92,"context_line":"            msg \u003d _(\u0027os-force_delete\u0027)"},{"line_number":93,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_d02c6804","line":92,"updated":"2015-06-16 12:34:36.000000000","message":"Why use _ if this is not supposed to be translated?","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"07c334bdba948e5a9c1afee822454bdab8902a27","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":90,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":91,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":92,"context_line":"            msg \u003d _(\u0027os-force_delete\u0027)"},{"line_number":93,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_3639bea4","line":92,"in_reply_to":"fa32b979_1da9567b","updated":"2015-06-17 20:13:17.000000000","message":"Exception message is always translated.  This message should be changed to be more readable.  I think changing \"os-force_delete\" to just \"force delete\" is better.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":90,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":91,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":92,"context_line":"            msg \u003d _(\u0027os-force_delete\u0027)"},{"line_number":93,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_5956e706","line":92,"in_reply_to":"fa32b979_3639bea4","updated":"2015-06-18 11:22:35.000000000","message":"Sure","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"242a76737a28cd249e9ffb6aab571aad71589130","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":90,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":91,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":92,"context_line":"            msg \u003d _(\u0027os-force_delete\u0027)"},{"line_number":93,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_1da9567b","line":92,"in_reply_to":"fa32b979_d02c6804","updated":"2015-06-17 11:45:46.000000000","message":"Agree.","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48a9fb51c9117065f39f13b75909616dc1ed7817","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":86,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":87,"context_line":"            msg \u003d _(\u0027force delete\u0027)"},{"line_number":88,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"},{"line_number":91,"context_line":"        # backups dependent on it."}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_9493aa5a","line":88,"updated":"2015-06-19 15:37:38.000000000","message":"Can you add a test using assertRaises for this code path?","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"802309b44d52b248adaec613f2bf6b529f60f623","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        if force and not self._check_support_to_force_delete(context,"},{"line_number":86,"context_line":"                                                             backup[\u0027host\u0027]):"},{"line_number":87,"context_line":"            msg \u003d _(\u0027force delete\u0027)"},{"line_number":88,"context_line":"            raise exception.NotSupportOperation(operation\u003dmsg)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Don\u0027t allow backup to be deleted if there are incremental"},{"line_number":91,"context_line":"        # backups dependent on it."}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_d69f7d5d","line":88,"in_reply_to":"fa32b979_9493aa5a","updated":"2015-06-23 03:54:00.000000000","message":"Sure.","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"}],"cinder/backup/chunkeddriver.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        sha256_list \u003d object_sha256[\u0027sha256s\u0027]"},{"line_number":447,"context_line":"        shaindex \u003d 0"},{"line_number":448,"context_line":"        cancel_backup_flag \u003d False"},{"line_number":449,"context_line":"        while True:"},{"line_number":450,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":451,"context_line":"            # has been deleting, we cancel the backup process for force delete."}],"source_content_type":"text/x-python","patch_set":14,"id":"5afe65bd_f07980fd","line":448,"updated":"2015-06-03 11:38:10.000000000","message":"I think you can use a more meaningful name such as \"is_backup_canceled\".","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        is_backup_canceled \u003d False"},{"line_number":449,"context_line":"        while True:"},{"line_number":450,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":451,"context_line":"            # has been deleting, we cancel the backup process for force delete."},{"line_number":452,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":453,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":454,"context_line":"                is_backup_canceled \u003d True"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_62c17d2e","line":451,"updated":"2015-06-05 14:33:17.000000000","message":"s/has been/has been changed to delete\n\nor\n\ns/has been/is\n\nI don\u0027t think it\u0027s correct the \"for force\" part, although I\u0027m not native.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        is_backup_canceled \u003d False"},{"line_number":449,"context_line":"        while True:"},{"line_number":450,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":451,"context_line":"            # has been deleting, we cancel the backup process for force delete."},{"line_number":452,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":453,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":454,"context_line":"                is_backup_canceled \u003d True"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_33e16fd1","line":451,"in_reply_to":"3afb71cf_62c17d2e","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":453,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":454,"context_line":"                is_backup_canceled \u003d True"},{"line_number":455,"context_line":"                LOG.debug(\u0027Cancel the backup process of %s for force delete.\u0027,"},{"line_number":456,"context_line":"                          backup[\u0027id\u0027])"},{"line_number":457,"context_line":"                break"},{"line_number":458,"context_line":"            data_offset \u003d volume_file.tell()"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_025ac983","line":455,"updated":"2015-06-05 14:33:17.000000000","message":"Same here for \"for force\"","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":453,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":454,"context_line":"                is_backup_canceled \u003d True"},{"line_number":455,"context_line":"                LOG.debug(\u0027Cancel the backup process of %s for force delete.\u0027,"},{"line_number":456,"context_line":"                          backup[\u0027id\u0027])"},{"line_number":457,"context_line":"                break"},{"line_number":458,"context_line":"            data_offset \u003d volume_file.tell()"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_f3eab7ab","line":455,"in_reply_to":"3afb71cf_025ac983","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        # Stop the timer."},{"line_number":527,"context_line":"        timer.stop()"},{"line_number":528,"context_line":"        # If we cancel this backup process, we don\u0027t need to do those thing"},{"line_number":529,"context_line":"        # below but timer.stop()"},{"line_number":530,"context_line":"        if is_backup_canceled:"},{"line_number":531,"context_line":"            return"},{"line_number":532,"context_line":"        # All the data have been sent, the backup_percent reaches 100."}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_a209b533","line":529,"updated":"2015-06-05 14:33:17.000000000","message":"I think this message could be better. For example \"If backup has been cancelled we have nothing more to do\"","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        # Stop the timer."},{"line_number":527,"context_line":"        timer.stop()"},{"line_number":528,"context_line":"        # If we cancel this backup process, we don\u0027t need to do those thing"},{"line_number":529,"context_line":"        # below but timer.stop()"},{"line_number":530,"context_line":"        if is_backup_canceled:"},{"line_number":531,"context_line":"            return"},{"line_number":532,"context_line":"        # All the data have been sent, the backup_percent reaches 100."}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_93dca313","line":529,"in_reply_to":"3afb71cf_a209b533","updated":"2015-06-08 06:36:54.000000000","message":"Done","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d18e020ccaee96df2fde5441a3adf8361e82a512","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":700,"context_line":"                # Yield so other threads can run"},{"line_number":701,"context_line":"                eventlet.sleep(0)"},{"line_number":702,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_c81df367","line":702,"updated":"2015-06-05 14:33:17.000000000","message":"Why did you remove the empty line before this one?","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":700,"context_line":"                # Yield so other threads can run"},{"line_number":701,"context_line":"                eventlet.sleep(0)"},{"line_number":702,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_93ab831d","line":702,"in_reply_to":"3afb71cf_c81df367","updated":"2015-06-08 06:36:54.000000000","message":"...Didn\u0027t notice this. Maybe delete the error line.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"42bc863181db1477fb533120f8d2918f97d1344b","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":451,"context_line":"            # has been changed to delete or has been deleted, we cancel the"},{"line_number":452,"context_line":"            # backup process to do forcing delete."},{"line_number":453,"context_line":"            try:"},{"line_number":454,"context_line":"                backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":455,"context_line":"            except exception.BackupNotFound:"},{"line_number":456,"context_line":"                LOG.debug(\"Can\u0027t find the backup %s, cancel the process\","}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_1e47934c","line":453,"updated":"2015-06-08 09:02:46.000000000","message":"No need for this try---except clause.","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b6a3bf5e7f7110742b7c5cc6b966519a154c5f93","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":451,"context_line":"            # has been changed to delete or has been deleted, we cancel the"},{"line_number":452,"context_line":"            # backup process to do forcing delete."},{"line_number":453,"context_line":"            try:"},{"line_number":454,"context_line":"                backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":455,"context_line":"            except exception.BackupNotFound:"},{"line_number":456,"context_line":"                LOG.debug(\"Can\u0027t find the backup %s, cancel the process\","}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_5496dc3f","line":453,"in_reply_to":"3afb71cf_1e47934c","updated":"2015-06-09 07:21:55.000000000","message":"sure.","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"42bc863181db1477fb533120f8d2918f97d1344b","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            try:"},{"line_number":454,"context_line":"                backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":455,"context_line":"            except exception.BackupNotFound:"},{"line_number":456,"context_line":"                LOG.debug(\"Can\u0027t find the backup %s, cancel the process\","},{"line_number":457,"context_line":"                          backup[\u0027id\u0027])"},{"line_number":458,"context_line":"                break"},{"line_number":459,"context_line":"            if \u0027deleting\u0027 \u003d\u003d backup[\u0027status\u0027] or \u0027deleted\u0027 \u003d\u003d backup[\u0027status\u0027]:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_d8e8f2e4","line":456,"updated":"2015-06-08 09:02:46.000000000","message":"s/cancel/cancelling","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b6a3bf5e7f7110742b7c5cc6b966519a154c5f93","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            try:"},{"line_number":454,"context_line":"                backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":455,"context_line":"            except exception.BackupNotFound:"},{"line_number":456,"context_line":"                LOG.debug(\"Can\u0027t find the backup %s, cancel the process\","},{"line_number":457,"context_line":"                          backup[\u0027id\u0027])"},{"line_number":458,"context_line":"                break"},{"line_number":459,"context_line":"            if \u0027deleting\u0027 \u003d\u003d backup[\u0027status\u0027] or \u0027deleted\u0027 \u003d\u003d backup[\u0027status\u0027]:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afb71cf_f4970846","line":456,"in_reply_to":"3afb71cf_d8e8f2e4","updated":"2015-06-09 07:21:55.000000000","message":"Done","commit_id":"99ccf9758f79c241c3dab21ae81cecc5a09dae37"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c37e994aa5aa4c28603a193d55dee11f18cb426","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        is_backup_canceled \u003d False"},{"line_number":457,"context_line":"        while True:"},{"line_number":458,"context_line":"            # First of all, we check the status of this backup. If it"},{"line_number":459,"context_line":"            # has been changed to delete or has been deleted, we cancel the"},{"line_number":460,"context_line":"            # backup process to do forcing delete."},{"line_number":461,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":462,"context_line":"            if \u0027deleting\u0027 \u003d\u003d backup[\u0027status\u0027] or \u0027deleted\u0027 \u003d\u003d backup[\u0027status\u0027]:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_48f19f00","line":459,"updated":"2015-06-09 09:04:44.000000000","message":"s/delete/deleting","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c37e994aa5aa4c28603a193d55dee11f18cb426","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            # has been changed to delete or has been deleted, we cancel the"},{"line_number":460,"context_line":"            # backup process to do forcing delete."},{"line_number":461,"context_line":"            backup \u003d self.db.backup_get(self.context, backup[\u0027id\u0027])"},{"line_number":462,"context_line":"            if \u0027deleting\u0027 \u003d\u003d backup[\u0027status\u0027] or \u0027deleted\u0027 \u003d\u003d backup[\u0027status\u0027]:"},{"line_number":463,"context_line":"                is_backup_canceled \u003d True"},{"line_number":464,"context_line":"                # To avoid the chunk left when deletion complete, need to"},{"line_number":465,"context_line":"                # clean up the object of chunk again."}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_683e9b8d","line":462,"updated":"2015-06-09 09:04:44.000000000","message":"if backup[\u0027status\u0027] in (\u0027deleting\u0027, \u0027deleted\u0027):","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c37e994aa5aa4c28603a193d55dee11f18cb426","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                is_backup_canceled \u003d True"},{"line_number":464,"context_line":"                # To avoid the chunk left when deletion complete, need to"},{"line_number":465,"context_line":"                # clean up the object of chunk again."},{"line_number":466,"context_line":"                self.delete(backup)"},{"line_number":467,"context_line":"                LOG.debug(\u0027Cancel the backup process of %s.\u0027, backup[\u0027id\u0027])"},{"line_number":468,"context_line":"                break"},{"line_number":469,"context_line":"            data_offset \u003d volume_file.tell()"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_e86ccb36","line":466,"updated":"2015-06-09 09:04:44.000000000","message":"I could be wrong, but this will most likely throw an exception since chunks are not removed from the list when deleted, so this will try to delete chunks that have already been deleted by the force delete.","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"be6346ffb9a634904589e95f2c3212c09851fe43","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                is_backup_canceled \u003d True"},{"line_number":464,"context_line":"                # To avoid the chunk left when deletion complete, need to"},{"line_number":465,"context_line":"                # clean up the object of chunk again."},{"line_number":466,"context_line":"                self.delete(backup)"},{"line_number":467,"context_line":"                LOG.debug(\u0027Cancel the backup process of %s.\u0027, backup[\u0027id\u0027])"},{"line_number":468,"context_line":"                break"},{"line_number":469,"context_line":"            data_offset \u003d volume_file.tell()"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afb71cf_fe14534d","line":466,"in_reply_to":"3afb71cf_e86ccb36","updated":"2015-06-10 03:32:52.000000000","message":"I think it\u0027s fine. For example, assume chunks 1,2,3 have been backup done, and chunks 4 is going to do backup right now. Now we delete the chunks 1,2,3 by the force delete, then chunk 4 begin and finish, and in next loop, we find the backup status is deleted, and call the self.delete method, this method will find the current existing objecst from backend and so just delete the chunk 4.","commit_id":"7ec8a8d50d9c3e1b805f085f2d940b50aa7b86bd"}],"cinder/backup/driver.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        super(BackupDriver, self).__init__(db_driver)"},{"line_number":324,"context_line":"        self.context \u003d context"},{"line_number":325,"context_line":"        self.backup_meta_api \u003d BackupMetadataAPI(context, db_driver)"},{"line_number":326,"context_line":"        # This flag indicates that backup driver whether supporting force"},{"line_number":327,"context_line":"        # deletion. So it should be set to True if the driver that inherit from"},{"line_number":328,"context_line":"        # BackupDriver supports the force deletion function."},{"line_number":329,"context_line":"        self.support_force_delete \u003d False"}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_f543f66a","line":326,"updated":"2015-06-12 08:52:22.000000000","message":"This flag indicates if backup driver supports force","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        super(BackupDriver, self).__init__(db_driver)"},{"line_number":324,"context_line":"        self.context \u003d context"},{"line_number":325,"context_line":"        self.backup_meta_api \u003d BackupMetadataAPI(context, db_driver)"},{"line_number":326,"context_line":"        # This flag indicates that backup driver whether supporting force"},{"line_number":327,"context_line":"        # deletion. So it should be set to True if the driver that inherit from"},{"line_number":328,"context_line":"        # BackupDriver supports the force deletion function."},{"line_number":329,"context_line":"        self.support_force_delete \u003d False"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_a4652a46","line":326,"in_reply_to":"1af86dd1_f543f66a","updated":"2015-06-15 07:15:29.000000000","message":"Done","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a10437324d54126e306f41ff7d23e2349efec1d4","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.context \u003d context"},{"line_number":325,"context_line":"        self.backup_meta_api \u003d BackupMetadataAPI(context, db_driver)"},{"line_number":326,"context_line":"        # This flag indicates that backup driver whether supporting force"},{"line_number":327,"context_line":"        # deletion. So it should be set to True if the driver that inherit from"},{"line_number":328,"context_line":"        # BackupDriver supports the force deletion function."},{"line_number":329,"context_line":"        self.support_force_delete \u003d False"},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1af86dd1_955ba254","line":327,"updated":"2015-06-12 08:52:22.000000000","message":"s/inherit/inherits","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"377bf7047aee74643df6948c99c2ac40c6eaad02","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.context \u003d context"},{"line_number":325,"context_line":"        self.backup_meta_api \u003d BackupMetadataAPI(context, db_driver)"},{"line_number":326,"context_line":"        # This flag indicates that backup driver whether supporting force"},{"line_number":327,"context_line":"        # deletion. So it should be set to True if the driver that inherit from"},{"line_number":328,"context_line":"        # BackupDriver supports the force deletion function."},{"line_number":329,"context_line":"        self.support_force_delete \u003d False"},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_645f2273","line":327,"in_reply_to":"1af86dd1_955ba254","updated":"2015-06-15 07:15:29.000000000","message":"Done","commit_id":"e3ba5d3f29e513cb4cc284c77aaaaaff2d090f7c"}],"cinder/backup/manager.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"242a76737a28cd249e9ffb6aab571aad71589130","unresolved":false,"context_lines":[{"line_number":725,"context_line":"                          notifier_info)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def check_support_to_force_delete(self, context):"},{"line_number":728,"context_line":"        \"\"\"Check the backup driver if supporting force delete operation."},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        :param context: running context"},{"line_number":731,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_3dfbfa7a","line":728,"updated":"2015-06-17 11:45:46.000000000","message":"Suggest:\n\n   \"\"\"Check if the backup driver supports force delete operation.\"\"\"","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":725,"context_line":"                          notifier_info)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def check_support_to_force_delete(self, context):"},{"line_number":728,"context_line":"        \"\"\"Check the backup driver if supporting force delete operation."},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        :param context: running context"},{"line_number":731,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_d1bc0bbd","line":728,"in_reply_to":"fa32b979_3dfbfa7a","updated":"2015-06-18 11:22:35.000000000","message":"Done","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"}],"cinder/backup/rpcapi.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"532d1b16c73db949a7f295d2f1091d40278baacd","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                          status\u003dstatus)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def check_support_to_force_delete(self, ctxt, host):"},{"line_number":102,"context_line":"        LOG.debug(\"check the backup driver if supporting force delete\""},{"line_number":103,"context_line":"                  \"on host %(host)s.\", {\u0027host\u0027: host})"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost)"},{"line_number":105,"context_line":"        return cctxt.call(ctxt, \u0027check_support_to_force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_2f678026","line":102,"updated":"2015-06-16 07:39:38.000000000","message":"check \u003d \u003e Check\nadd a space in the end of the first line.","commit_id":"62860679a75d016e73d0b453ee9e68ae0cee454c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0fbf955a327efdaafd1a24ee42cf10249e94865f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                          status\u003dstatus)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def check_support_to_force_delete(self, ctxt, host):"},{"line_number":102,"context_line":"        LOG.debug(\"check the backup driver if supporting force delete\""},{"line_number":103,"context_line":"                  \"on host %(host)s.\", {\u0027host\u0027: host})"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost)"},{"line_number":105,"context_line":"        return cctxt.call(ctxt, \u0027check_support_to_force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_be574001","line":102,"in_reply_to":"fa32b979_2f678026","updated":"2015-06-16 09:16:10.000000000","message":"Done","commit_id":"62860679a75d016e73d0b453ee9e68ae0cee454c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                          status\u003dstatus)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def check_support_to_force_delete(self, ctxt, host):"},{"line_number":102,"context_line":"        LOG.debug(\"Check the backup driver if supporting force delete \""},{"line_number":103,"context_line":"                  \"on host %(host)s.\", {\u0027host\u0027: host})"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost)"},{"line_number":105,"context_line":"        return cctxt.call(ctxt, \u0027check_support_to_force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_0ba141a3","line":102,"updated":"2015-06-16 12:34:36.000000000","message":"\"Check if backup driver supports force delete\"","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                          status\u003dstatus)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def check_support_to_force_delete(self, ctxt, host):"},{"line_number":102,"context_line":"        LOG.debug(\"Check the backup driver if supporting force delete \""},{"line_number":103,"context_line":"                  \"on host %(host)s.\", {\u0027host\u0027: host})"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost)"},{"line_number":105,"context_line":"        return cctxt.call(ctxt, \u0027check_support_to_force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_11bfd3aa","line":102,"in_reply_to":"fa32b979_0ba141a3","updated":"2015-06-18 11:22:35.000000000","message":"Done","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"81bb585d77ceb390a93ee5429da6a64435bc2bea","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   backup_hosts\u003dbackup_hosts)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def reset_status(self, ctxt, host, backup_id, status):"},{"line_number":93,"context_line":"        LOG.debug(\"reset_status in rpcapi backup_id %(id)s \""},{"line_number":94,"context_line":"                  \"on host %(host)s.\","},{"line_number":95,"context_line":"                  {\u0027id\u0027: backup_id,"},{"line_number":96,"context_line":"                   \u0027host\u0027: host})"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_0ad50db8","line":93,"updated":"2015-06-19 16:16:49.000000000","message":"Capitalize \u0027r\u0027 in reset and add \u0027.\u0027 at EOL","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d4e8ceb977820fa7568c255f0cf74241b7a7a538","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   backup_hosts\u003dbackup_hosts)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def reset_status(self, ctxt, host, backup_id, status):"},{"line_number":93,"context_line":"        LOG.debug(\"reset_status in rpcapi backup_id %(id)s \""},{"line_number":94,"context_line":"                  \"on host %(host)s.\","},{"line_number":95,"context_line":"                  {\u0027id\u0027: backup_id,"},{"line_number":96,"context_line":"                   \u0027host\u0027: host})"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_454ea697","line":93,"in_reply_to":"fa32b979_0ad50db8","updated":"2015-06-19 16:36:21.000000000","message":"r should not be changed as that is the literal name of the method.","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"}],"cinder/exception.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b3a8f11f4cced4aaca6df2a878480ae6e2108e15","unresolved":false,"context_lines":[{"line_number":964,"context_line":"    message \u003d _(\"No active iSCSI portals with supplied iSCSI IPs\")"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"class NotSupportOperation(Invalid):"},{"line_number":968,"context_line":"    message \u003d _(\"Can not support this operation: %(operation)s.\")"},{"line_number":969,"context_line":"    code \u003d 405"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_ae905296","line":967,"updated":"2015-06-23 10:20:49.000000000","message":"NotSupportedOperation or OperationNotSupported","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67df7443fb0e1426a4e0487fb182e36ca3767534","unresolved":false,"context_lines":[{"line_number":964,"context_line":"    message \u003d _(\"No active iSCSI portals with supplied iSCSI IPs\")"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"class NotSupportOperation(Invalid):"},{"line_number":968,"context_line":"    message \u003d _(\"Can not support this operation: %(operation)s.\")"},{"line_number":969,"context_line":"    code \u003d 405"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_4e995f78","line":967,"in_reply_to":"fa32b979_ae905296","updated":"2015-06-24 02:48:03.000000000","message":"Done","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b3a8f11f4cced4aaca6df2a878480ae6e2108e15","unresolved":false,"context_lines":[{"line_number":965,"context_line":""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"class NotSupportOperation(Invalid):"},{"line_number":968,"context_line":"    message \u003d _(\"Can not support this operation: %(operation)s.\")"},{"line_number":969,"context_line":"    code \u003d 405"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_6ee9ea19","line":968,"updated":"2015-06-23 10:20:49.000000000","message":"\"Operation not supported: %(operation)s.\" would look better, and in this case \"cannot\" is most commonly used instead of \"can not\".","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67df7443fb0e1426a4e0487fb182e36ca3767534","unresolved":false,"context_lines":[{"line_number":965,"context_line":""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"class NotSupportOperation(Invalid):"},{"line_number":968,"context_line":"    message \u003d _(\"Can not support this operation: %(operation)s.\")"},{"line_number":969,"context_line":"    code \u003d 405"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_ee887324","line":968,"in_reply_to":"fa32b979_6ee9ea19","updated":"2015-06-24 02:48:03.000000000","message":"Sure ,Thanks.","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"}],"cinder/tests/unit/api/contrib/test_admin_actions.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c555bd20fff8e73c0be7e4edded4c8076511351f","unresolved":false,"context_lines":[{"line_number":845,"context_line":"                          vac.validate_update,"},{"line_number":846,"context_line":"                          {\u0027status\u0027: \u0027creating\u0027})"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_delete_backup_force(self):"},{"line_number":849,"context_line":"        # admin context"},{"line_number":850,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":851,"context_line":"        # current status is creating"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_c9141cea","line":848,"updated":"2015-05-22 15:14:45.000000000","message":"I think there should be more test cases for example backup not in [\u0027available\u0027, \u0027error\u0027]. For now we skip the check at cinder/backup/api.py:70, but there may be a `not in [\u0027available\u0027, \u0027error\u0027]` somewhere else, or someday added by a future patch.","commit_id":"d319f125d6df87b253b63de2f7231a285876ca41"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1e50273dad008346603046070c62c6b5c2d8b463","unresolved":false,"context_lines":[{"line_number":845,"context_line":"                          vac.validate_update,"},{"line_number":846,"context_line":"                          {\u0027status\u0027: \u0027creating\u0027})"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_delete_backup_force(self):"},{"line_number":849,"context_line":"        # admin context"},{"line_number":850,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":851,"context_line":"        # current status is creating"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_ffee5120","line":848,"in_reply_to":"7a016987_c9141cea","updated":"2015-05-26 03:11:01.000000000","message":"You mean we should check the status which allow to force delete backup as white list rather than black list?","commit_id":"d319f125d6df87b253b63de2f7231a285876ca41"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2a8348ccfab5525f22304ba076106832e421d210","unresolved":false,"context_lines":[{"line_number":845,"context_line":"                          vac.validate_update,"},{"line_number":846,"context_line":"                          {\u0027status\u0027: \u0027creating\u0027})"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_delete_backup_force(self):"},{"line_number":849,"context_line":"        # admin context"},{"line_number":850,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":851,"context_line":"        # current status is creating"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_d43ebed9","line":848,"in_reply_to":"7a016987_ffee5120","updated":"2015-05-26 08:25:34.000000000","message":"IMHO you might need to add more test cases, which covers backup status\u003d\u0027in-use\u0027, status\u003d\u0027creating\u0027, status\u003d\u0027backing-up\u0027 and so on.","commit_id":"d319f125d6df87b253b63de2f7231a285876ca41"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"308db7608e8d5f993543f0684456521e8307d5f2","unresolved":false,"context_lines":[{"line_number":944,"context_line":"                          vac.validate_update,"},{"line_number":945,"context_line":"                          {\u0027status\u0027: \u0027creating\u0027})"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"    def test_delete_backup_force(self):"},{"line_number":948,"context_line":"        # admin context"},{"line_number":949,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":950,"context_line":"        # current status is creating"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_2143a3b0","line":947,"updated":"2015-05-25 13:13:34.000000000","message":"Same problem as in patch 7.","commit_id":"ca783ece9659a4e9a43be108b5ba20825d804e91"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6f079d400995258d0f01c619b293707318b97370","unresolved":false,"context_lines":[{"line_number":944,"context_line":"                          vac.validate_update,"},{"line_number":945,"context_line":"                          {\u0027status\u0027: \u0027creating\u0027})"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"    def test_delete_backup_force(self):"},{"line_number":948,"context_line":"        # admin context"},{"line_number":949,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":950,"context_line":"        # current status is creating"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_c624d761","line":947,"in_reply_to":"7a016987_2143a3b0","updated":"2015-05-26 03:12:39.000000000","message":"Some question for this review in patch 7. Please have a look.","commit_id":"ca783ece9659a4e9a43be108b5ba20825d804e91"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d78fed8d1955b64aa469b05877b53c7b2ffb2313","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"        # admin context"},{"line_number":1003,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1004,"context_line":"        # current status is available"},{"line_number":1005,"context_line":"        id \u003d test_backups.BackupsAPITestCase._create_backup(status\u003d\u0027available\u0027)"},{"line_number":1006,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s/action\u0027 % id)"},{"line_number":1007,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":1008,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"5afe65bd_10f89c48","line":1005,"updated":"2015-06-03 11:38:10.000000000","message":"Why not add test case for status is \u0027error\u0027 and \u0027error_deleting\u0027?","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"99c1449c299086fbc4be85fb038d794305cd878a","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"        # admin context"},{"line_number":1003,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1004,"context_line":"        # current status is available"},{"line_number":1005,"context_line":"        id \u003d test_backups.BackupsAPITestCase._create_backup(status\u003d\u0027available\u0027)"},{"line_number":1006,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s/action\u0027 % id)"},{"line_number":1007,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":1008,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_ca9df55a","line":1005,"in_reply_to":"5afe65bd_10f89c48","updated":"2015-06-05 08:28:04.000000000","message":"Sure, will add those.","commit_id":"7440ba4cb1fef21e3bace4f5ca2a1f3f7d30dd57"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"fccab121809d4152cb34766073fd540e36c8b1d3","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1040,"context_line":"        # current status is available"},{"line_number":1041,"context_line":"        err_status \u003d \u0027error_deleting\u0027"},{"line_number":1042,"context_line":"        id \u003d test_backups.BackupsAPITestCase._create_backup(status\u003derr_status)"},{"line_number":1043,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s/action\u0027 % id)"},{"line_number":1044,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":1045,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_5112d1b5","line":1042,"updated":"2015-06-05 12:39:19.000000000","message":"Thank you for adding so many test cases. But since every test case shares a lot of code, would you mind to extract a common method?","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"415df344fa9345f00b1976727c89d0cffa61c71b","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1040,"context_line":"        # current status is available"},{"line_number":1041,"context_line":"        err_status \u003d \u0027error_deleting\u0027"},{"line_number":1042,"context_line":"        id \u003d test_backups.BackupsAPITestCase._create_backup(status\u003derr_status)"},{"line_number":1043,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s/action\u0027 % id)"},{"line_number":1044,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":1045,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3afb71cf_93c5c33d","line":1042,"in_reply_to":"3afb71cf_5112d1b5","updated":"2015-06-08 06:36:54.000000000","message":"Sure.","commit_id":"bd8d7b8a392e16bcc0747271c98b784191a6ed73"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"532d1b16c73db949a7f295d2f1091d40278baacd","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        req.body \u003d jsonutils.dumps({\u0027os-force_delete\u0027: {}})"},{"line_number":1013,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d ctx"},{"line_number":1014,"context_line":"        res \u003d req.get_response(app())"},{"line_number":1015,"context_line":"        self.assertEqual(res.status_int, 501)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_4f9444e1","line":1015,"updated":"2015-06-16 07:39:38.000000000","message":"501, res.status_int","commit_id":"62860679a75d016e73d0b453ee9e68ae0cee454c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0fbf955a327efdaafd1a24ee42cf10249e94865f","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        req.body \u003d jsonutils.dumps({\u0027os-force_delete\u0027: {}})"},{"line_number":1013,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d ctx"},{"line_number":1014,"context_line":"        res \u003d req.get_response(app())"},{"line_number":1015,"context_line":"        self.assertEqual(res.status_int, 501)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_3e56d0d2","line":1015,"in_reply_to":"fa32b979_4f9444e1","updated":"2015-06-16 09:16:10.000000000","message":"Done","commit_id":"62860679a75d016e73d0b453ee9e68ae0cee454c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db2bdc17366244c964716e519946c47298ffe2fe","unresolved":false,"context_lines":[{"line_number":999,"context_line":"        return False"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1002,"context_line":"                mock_check_support)"},{"line_number":1003,"context_line":"    def test_delete_backup_force_when_not_supporting(self):"},{"line_number":1004,"context_line":"        # admin context"},{"line_number":1005,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_6bc7ad45","line":1002,"updated":"2015-06-16 12:34:36.000000000","message":"You can change remove the mock_check_support method and just replace it here for return_value\u003dFalse","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a7581de203a03b83bc757d44ea3a6443b006e71f","unresolved":false,"context_lines":[{"line_number":999,"context_line":"        return False"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1002,"context_line":"                mock_check_support)"},{"line_number":1003,"context_line":"    def test_delete_backup_force_when_not_supporting(self):"},{"line_number":1004,"context_line":"        # admin context"},{"line_number":1005,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_71fdff6c","line":1002,"in_reply_to":"fa32b979_6bc7ad45","updated":"2015-06-18 11:22:35.000000000","message":"Done","commit_id":"a330b87204ab27496db0327bf42fd50369da10a3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"124c39a1a9085fd34be746fb493152ea3c90179c","unresolved":false,"context_lines":[{"line_number":997,"context_line":""},{"line_number":998,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":999,"context_line":"                return_value\u003dFalse)"},{"line_number":1000,"context_line":"    def test_delete_backup_force_when_not_supporting(self):"},{"line_number":1001,"context_line":"        # admin context"},{"line_number":1002,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1003,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_76c96dab","line":1000,"updated":"2015-06-18 10:02:54.000000000","message":"You need to pass in the mocked method here.","commit_id":"bc589ce3be7dea06cdad56917d9c27a9625d47fc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e14d8681f4a68f2343117418abf156a9ca1b187f","unresolved":false,"context_lines":[{"line_number":997,"context_line":""},{"line_number":998,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":999,"context_line":"                return_value\u003dFalse)"},{"line_number":1000,"context_line":"    def test_delete_backup_force_when_not_supporting(self):"},{"line_number":1001,"context_line":"        # admin context"},{"line_number":1002,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1003,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_5e98ff1b","line":1000,"in_reply_to":"fa32b979_76c96dab","updated":"2015-06-18 11:23:22.000000000","message":"Done","commit_id":"bc589ce3be7dea06cdad56917d9c27a9625d47fc"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d9c825e1e76f1417a17cb72e947c6f13c6858dc2","unresolved":false,"context_lines":[{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1005,"context_line":"                return_value\u003dFalse)"},{"line_number":1006,"context_line":"    def test_delete_backup_force_when_not_supporting(self, mock_check_support):"},{"line_number":1007,"context_line":"        # admin context"},{"line_number":1008,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1009,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7931b90a","line":1006,"updated":"2015-06-23 10:03:59.000000000","message":"not_supporting \u003d\u003e not_supported","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67df7443fb0e1426a4e0487fb182e36ca3767534","unresolved":false,"context_lines":[{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1005,"context_line":"                return_value\u003dFalse)"},{"line_number":1006,"context_line":"    def test_delete_backup_force_when_not_supporting(self, mock_check_support):"},{"line_number":1007,"context_line":"        # admin context"},{"line_number":1008,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":1009,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_0ebcb7b9","line":1006,"in_reply_to":"fa32b979_7931b90a","updated":"2015-06-24 02:48:03.000000000","message":"Done","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"}],"cinder/tests/unit/api/contrib/test_backups.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d9c825e1e76f1417a17cb72e947c6f13c6858dc2","unresolved":false,"context_lines":[{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1519,"context_line":"                return_value\u003dFalse)"},{"line_number":1520,"context_line":"    def test_force_delete_with_not_support_operation(self, mock_check_support):"},{"line_number":1521,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":1522,"context_line":"        backup \u003d self.backup_api.get(self.context, backup_id)"},{"line_number":1523,"context_line":"        self.assertRaises(exception.NotSupportOperation,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_9934bdfb","line":1520,"updated":"2015-06-23 10:03:59.000000000","message":"not_support \u003d\u003e not_supported","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67df7443fb0e1426a4e0487fb182e36ca3767534","unresolved":false,"context_lines":[{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1519,"context_line":"                return_value\u003dFalse)"},{"line_number":1520,"context_line":"    def test_force_delete_with_not_support_operation(self, mock_check_support):"},{"line_number":1521,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":1522,"context_line":"        backup \u003d self.backup_api.get(self.context, backup_id)"},{"line_number":1523,"context_line":"        self.assertRaises(exception.NotSupportOperation,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_aee34bd7","line":1520,"in_reply_to":"fa32b979_9934bdfb","updated":"2015-06-24 02:48:03.000000000","message":"Done","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"4d05be484b89f5c09f9405d09126189089965c04","unresolved":false,"context_lines":[{"line_number":1505,"context_line":"                         \"request body.\","},{"line_number":1506,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":1507,"context_line":""},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1510,"context_line":"                return_value\u003dFalse)"},{"line_number":1511,"context_line":"    def test_force_delete_with_not_supported_operation(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_55b42634","line":1508,"updated":"2015-07-10 03:37:38.000000000","message":"Remove one of these blank lines to make pep8 happy.","commit_id":"9d15db970b4412b8bd47a752f73b715c9128f0da"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fcf2d5f12f7747f06694e1ccb8db12b6bfbaa405","unresolved":false,"context_lines":[{"line_number":1505,"context_line":"                         \"request body.\","},{"line_number":1506,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":1507,"context_line":""},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":"    @mock.patch(\u0027cinder.backup.rpcapi.BackupAPI.check_support_to_force_delete\u0027,"},{"line_number":1510,"context_line":"                return_value\u003dFalse)"},{"line_number":1511,"context_line":"    def test_force_delete_with_not_supported_operation(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_fdd0c02d","line":1508,"in_reply_to":"ba3cc151_55b42634","updated":"2015-07-10 06:04:50.000000000","message":"Done","commit_id":"9d15db970b4412b8bd47a752f73b715c9128f0da"}],"cinder/tests/unit/test_backup.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ba02323773026d2893d0023c837530f842c5b7fd","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        backup \u003d db.backup_get(self.ctxt, imported_record)"},{"line_number":587,"context_line":"        self.assertEqual(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_check_support_to_force_delete(self):"},{"line_number":590,"context_line":"        \"\"\"Test correct value returned when checking support to force delete"},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_3837534e","line":589,"updated":"2015-06-18 10:41:58.000000000","message":"Nice addition!","commit_id":"bc589ce3be7dea06cdad56917d9c27a9625d47fc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9b682724f0c0fb59cc64d5e51a3821455260fe28","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        self.assertEqual(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_check_support_to_force_delete(self):"},{"line_number":590,"context_line":"        \"\"\"Test correct value returned when checking support to force delete"},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":593,"context_line":"        result \u003d self.backup_mgr.check_support_to_force_delete(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_56e19499","line":590,"updated":"2015-06-19 09:50:44.000000000","message":"This does not actually conforms with PEP 257\n\nAs a one-line docstring it must have the closing quotes on the same lines as opening lines and it must end in a period.\n\nYou should change it to fit better. For example:\n\n \"\"\"Test force delete check method for non supporting drivers.\"\"\"","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"802309b44d52b248adaec613f2bf6b529f60f623","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        self.assertEqual(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_check_support_to_force_delete(self):"},{"line_number":590,"context_line":"        \"\"\"Test correct value returned when checking support to force delete"},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":593,"context_line":"        result \u003d self.backup_mgr.check_support_to_force_delete(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_16a405a4","line":590,"in_reply_to":"fa32b979_56e19499","updated":"2015-06-23 03:54:00.000000000","message":"Okay, thanks for clarification.","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48a9fb51c9117065f39f13b75909616dc1ed7817","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":593,"context_line":"        result \u003d self.backup_mgr.check_support_to_force_delete(self.ctxt)"},{"line_number":594,"context_line":"        self.assertFalse(result)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class BackupTestCaseWithVerify(BaseBackupTest):"},{"line_number":598,"context_line":"    \"\"\"Test Case for backups.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_72007902","line":595,"updated":"2015-06-19 15:37:38.000000000","message":"Can you add a test case for driver that supports force delete?","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"802309b44d52b248adaec613f2bf6b529f60f623","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":593,"context_line":"        result \u003d self.backup_mgr.check_support_to_force_delete(self.ctxt)"},{"line_number":594,"context_line":"        self.assertFalse(result)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class BackupTestCaseWithVerify(BaseBackupTest):"},{"line_number":598,"context_line":"    \"\"\"Test Case for backups.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa32b979_56828d01","line":595,"in_reply_to":"fa32b979_72007902","updated":"2015-06-23 03:54:00.000000000","message":"Sure.","commit_id":"3e844f71e338d812b5139d2857831e96aa15653e"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"d9c825e1e76f1417a17cb72e947c6f13c6858dc2","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        backup \u003d db.backup_get(self.ctxt, imported_record.id)"},{"line_number":590,"context_line":"        self.assertEqual(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_check_non_support_to_force_delete(self):"},{"line_number":593,"context_line":"        \"\"\"Test force delete check method for non supporting drivers.\"\"\""},{"line_number":594,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":595,"context_line":"        self.backup_mgr \u003d importutils.import_object(CONF.backup_manager)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_8bca2019","line":592,"updated":"2015-06-23 10:03:59.000000000","message":"The name is a bit confusing. Any better suggestions?","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"67df7443fb0e1426a4e0487fb182e36ca3767534","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        backup \u003d db.backup_get(self.ctxt, imported_record.id)"},{"line_number":590,"context_line":"        self.assertEqual(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_check_non_support_to_force_delete(self):"},{"line_number":593,"context_line":"        \"\"\"Test force delete check method for non supporting drivers.\"\"\""},{"line_number":594,"context_line":"        self.override_config(\u0027backup_driver\u0027, \u0027cinder.backup.drivers.ceph\u0027)"},{"line_number":595,"context_line":"        self.backup_mgr \u003d importutils.import_object(CONF.backup_manager)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d4d2e0d0","line":592,"in_reply_to":"fa32b979_8bca2019","updated":"2015-06-24 02:48:03.000000000","message":"test_not_supported_driver_to_force_delete?","commit_id":"174c3d37963e56789c9111ba626689b389f1cfbc"}]}
