)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add four improvements for incremental backup:"},{"line_number":10,"context_line":"1.When query backup detail, cinder-api need to judge this backup is a full"},{"line_number":11,"context_line":"backup or not by backup[\u0027parent_id\u0027]."},{"line_number":12,"context_line":"2.If it\u0027s an incremental backup, judge if this backup has dependent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3afb71cf_b89f6f02","line":9,"updated":"2015-06-08 12:03:00.000000000","message":"There are not 4 improvements, just 2 (numbers 3 and 4 of your list).\n\nI don\u0027t think the commit message should include, in this simple case, implementation details (number 1 and 2 of the list)","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add four improvements for incremental backup:"},{"line_number":10,"context_line":"1.When query backup detail, cinder-api need to judge this backup is a full"},{"line_number":11,"context_line":"backup or not by backup[\u0027parent_id\u0027]."},{"line_number":12,"context_line":"2.If it\u0027s an incremental backup, judge if this backup has dependent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3afb71cf_07e6bfaf","line":9,"in_reply_to":"3afb71cf_b89f6f02","updated":"2015-06-10 07:19:32.000000000","message":"Okay, will delete them.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":11,"context_line":"backup or not by backup[\u0027parent_id\u0027]."},{"line_number":12,"context_line":"2.If it\u0027s an incremental backup, judge if this backup has dependent"},{"line_number":13,"context_line":"backups like what we do in process of delete backup."},{"line_number":14,"context_line":"3.Then add \u0027increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":15,"context_line":"response body of querying."},{"line_number":16,"context_line":"4.Add parent_id to notification system."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3afb71cf_38949fe0","line":14,"updated":"2015-06-08 12:03:00.000000000","message":"I think is_incremental is a better name than incremet","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"backup or not by backup[\u0027parent_id\u0027]."},{"line_number":12,"context_line":"2.If it\u0027s an incremental backup, judge if this backup has dependent"},{"line_number":13,"context_line":"backups like what we do in process of delete backup."},{"line_number":14,"context_line":"3.Then add \u0027increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":15,"context_line":"response body of querying."},{"line_number":16,"context_line":"4.Add parent_id to notification system."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3afb71cf_e7d3a3d3","line":14,"in_reply_to":"3afb71cf_38949fe0","updated":"2015-06-10 07:19:32.000000000","message":"Sure.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"174c55619d0da678e1a7ad5bd65c9f1a1806cdcc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add two improvements for incremental backup:"},{"line_number":10,"context_line":"1. Add \u0027is_increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":11,"context_line":"response body of querying."},{"line_number":12,"context_line":"2. Add parent_id to notification system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba3cc151_dbdd8f43","line":9,"updated":"2015-06-30 10:14:43.000000000","message":"Before merge, we should think about the wording of this commit message.  It is confusing to read that there are two \"improvements\" and then immediately see a list with three items.\n\nPerhaps just have a numbered list with #1 and #2 and add\na separate following sentence, unnumbered, that explains\nwhy as part of this changeset you indexed the parent_id\nin the backup table.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bbd1e92b75cfc3ed384700da1e9880b69f4ce3dc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add two improvements for incremental backup:"},{"line_number":10,"context_line":"1. Add \u0027is_increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":11,"context_line":"response body of querying."},{"line_number":12,"context_line":"2. Add parent_id to notification system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba3cc151_f2caf0a0","line":9,"in_reply_to":"ba3cc151_dbdd8f43","updated":"2015-06-30 11:24:50.000000000","message":"I think it\u0027s enough to remove the numeration from the third one, but an explanation on why index was added would be even better.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"facf50f8b457b5a2667afa07369b8bbbfd3d0e5f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add two improvements for incremental backup:"},{"line_number":10,"context_line":"1. Add \u0027is_increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":11,"context_line":"response body of querying."},{"line_number":12,"context_line":"2. Add parent_id to notification system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba3cc151_210d3390","line":9,"in_reply_to":"ba3cc151_f2caf0a0","updated":"2015-07-02 02:43:20.000000000","message":"Sounds great, Thanks.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"43c489ac102d0385ad03908b9624f4359926f7f2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add \u0027is_increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":10,"context_line":"response body of querying."},{"line_number":11,"context_line":"2. Add parent_id to notification system."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_05e7d011","line":9,"updated":"2015-07-01 13:13:14.000000000","message":"s/is_increment/is_incremental/","commit_id":"a28aab297fe57ee230e0003864ae8553579cd738"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"16a58e79521cb7a3269adcc7a50d885016ff9119","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Incremental backup improvements for L"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add \u0027is_increment\u003dTrue\u0027 and \u0027has_dependent_backups\u003dTrue/False\u0027 to"},{"line_number":10,"context_line":"response body of querying."},{"line_number":11,"context_line":"2. Add parent_id to notification system."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_e783ad54","line":9,"in_reply_to":"ba3cc151_05e7d011","updated":"2015-07-02 02:43:09.000000000","message":"Thanks, miss this one.","commit_id":"a28aab297fe57ee230e0003864ae8553579cd738"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"43c489ac102d0385ad03908b9624f4359926f7f2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. Add parent_id to notification system."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since we need to get volume has_dependent_backups value when querying"},{"line_number":14,"context_line":"volume detail list, for reducing the performance impact, add index to"},{"line_number":15,"context_line":"parent_id column in backup table."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_4585d804","line":14,"updated":"2015-07-01 13:13:14.000000000","message":"Just a suggestion:  s/for reducing the/to reduce the/","commit_id":"a28aab297fe57ee230e0003864ae8553579cd738"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"16a58e79521cb7a3269adcc7a50d885016ff9119","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. Add parent_id to notification system."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since we need to get volume has_dependent_backups value when querying"},{"line_number":14,"context_line":"volume detail list, for reducing the performance impact, add index to"},{"line_number":15,"context_line":"parent_id column in backup table."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_07f011fd","line":14,"in_reply_to":"ba3cc151_4585d804","updated":"2015-07-02 02:43:09.000000000","message":"Done","commit_id":"a28aab297fe57ee230e0003864ae8553579cd738"}],"cinder/api/contrib/quotas.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b12d00f87ab19256e174ee21c9f4c87c8fc6261","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                continue"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            value \u003d self._validate_quota_limit(body[\u0027quota_set\u0027][key])"},{"line_number":130,"context_line":"            self._validate_existing_resource(project_id,body[\u0027quota_set\u0027][key],"},{"line_number":131,"context_line":"                                             value)"},{"line_number":132,"context_line":"            valid_quotas[key] \u003d value"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_270c2e3a","line":130,"updated":"2015-07-02 07:31:56.000000000","message":"Regardless of the PEP8 error for the missing space, this change does not belong here!\n\nI believe this is a mix from another of your patches: https://review.openstack.org/#/c/165068/","commit_id":"0da74d6f8e5637443332a8c521613aea00f01c78"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"84b503366a8918a32d45c177d51306814c9a7fac","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                continue"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            value \u003d self._validate_quota_limit(body[\u0027quota_set\u0027][key])"},{"line_number":130,"context_line":"            self._validate_existing_resource(project_id,body[\u0027quota_set\u0027][key],"},{"line_number":131,"context_line":"                                             value)"},{"line_number":132,"context_line":"            valid_quotas[key] \u003d value"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_67f55655","line":130,"in_reply_to":"ba3cc151_270c2e3a","updated":"2015-07-02 07:50:44.000000000","message":"Oh, sh*t... something is going wrong...","commit_id":"0da74d6f8e5637443332a8c521613aea00f01c78"}],"cinder/api/views/backups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027increment\u0027:"},{"line_number":80,"context_line":"                    (lambda x: x is not None)(backup.get(\u0027parent_id\u0027)),"},{"line_number":81,"context_line":"                \u0027has_dependent_backups\u0027: backup.get(\u0027has_dependent_backups\u0027),"},{"line_number":82,"context_line":"            }"},{"line_number":83,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_38593f5b","line":80,"updated":"2015-06-08 12:03:00.000000000","message":"No need for a lambda function, and what if parent_id is empty string?\nThis should be\n\n \u0027increment\u0027: bool(backup.get(\u0027parent_id\u0027))","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027increment\u0027:"},{"line_number":80,"context_line":"                    (lambda x: x is not None)(backup.get(\u0027parent_id\u0027)),"},{"line_number":81,"context_line":"                \u0027has_dependent_backups\u0027: backup.get(\u0027has_dependent_backups\u0027),"},{"line_number":82,"context_line":"            }"},{"line_number":83,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_076b5ff2","line":80,"in_reply_to":"3afb71cf_38593f5b","updated":"2015-06-10 07:19:32.000000000","message":"Sure, that\u0027s better.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5a0b3bfe2373d88715d8c79a5523642e8fd23a36","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027is_increment\u0027: bool(backup.get(\u0027parent_id\u0027)),"},{"line_number":80,"context_line":"                \u0027has_dependent_backups\u0027: backup.get(\u0027has_dependent_backups\u0027),"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_5647724b","line":80,"updated":"2015-06-11 19:10:16.000000000","message":"Why not just have \u0027parent_id\u0027/\u0027child_id\u0027? You could then infer both of is increment and if it has dependent backups. It would also tell you want backup you would need to delete first.","commit_id":"27c28c3e05ee332263a5f1b3a1aeba8d6616d168"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"3e3352f62996b08f13f5761a92bf37726086e468","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027is_increment\u0027: bool(backup.get(\u0027parent_id\u0027)),"},{"line_number":80,"context_line":"                \u0027has_dependent_backups\u0027: backup.get(\u0027has_dependent_backups\u0027),"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af86dd1_6c6aaa1c","line":80,"in_reply_to":"3afb71cf_5647724b","updated":"2015-06-12 02:30:16.000000000","message":"It has discussed in the bp specs. According the core\u0027s opinion, in the future, a backup could have multiple child backups, this is better than to show those child backups\u0027 id in response.","commit_id":"27c28c3e05ee332263a5f1b3a1aeba8d6616d168"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"174c55619d0da678e1a7ad5bd65c9f1a1806cdcc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                \u0027fail_reason\u0027: backup.get(\u0027fail_reason\u0027),"},{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027is_increment\u0027: backup.is_incremental,"},{"line_number":80,"context_line":"                \u0027has_dependent_backups\u0027: backup.has_dependent_backups,"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_bb476b1c","line":79,"updated":"2015-06-30 10:14:43.000000000","message":"I think \u0027is_incremental\u0027 is better wording, and more consistent.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"facf50f8b457b5a2667afa07369b8bbbfd3d0e5f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                \u0027fail_reason\u0027: backup.get(\u0027fail_reason\u0027),"},{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027is_increment\u0027: backup.is_incremental,"},{"line_number":80,"context_line":"                \u0027has_dependent_backups\u0027: backup.has_dependent_backups,"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_fc3610e6","line":79,"in_reply_to":"ba3cc151_12a994df","updated":"2015-07-02 02:43:20.000000000","message":"Sure","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bbd1e92b75cfc3ed384700da1e9880b69f4ce3dc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                \u0027fail_reason\u0027: backup.get(\u0027fail_reason\u0027),"},{"line_number":77,"context_line":"                \u0027volume_id\u0027: backup.get(\u0027volume_id\u0027),"},{"line_number":78,"context_line":"                \u0027links\u0027: self._get_links(request, backup[\u0027id\u0027]),"},{"line_number":79,"context_line":"                \u0027is_increment\u0027: backup.is_incremental,"},{"line_number":80,"context_line":"                \u0027has_dependent_backups\u0027: backup.has_dependent_backups,"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_12a994df","line":79,"in_reply_to":"ba3cc151_bb476b1c","updated":"2015-06-30 11:24:50.000000000","message":"I agree","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"}],"cinder/backup/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        check_policy(context, \u0027get\u0027)"},{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_53361ce8","line":65,"updated":"2015-06-08 12:03:00.000000000","message":"If you want a copy to modify:\n\n backup_dict \u003d rv.copy()","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"40c39a0c8fd704a85bbedb11a1ed6b6e1634f0d3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        check_policy(context, \u0027get\u0027)"},{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_585c5f18","line":65,"in_reply_to":"3afb71cf_0710ff57","updated":"2015-06-11 07:53:44.000000000","message":"@Gorka, I test this, it will raise the error: \u0027Backup\u0027 object has no attribute \u0027copy\u0027. It should be dict(rv.iteritems()).","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        check_policy(context, \u0027get\u0027)"},{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_0710ff57","line":65,"in_reply_to":"3afb71cf_53361ce8","updated":"2015-06-10 07:19:32.000000000","message":"Done","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"01282d17e165f2976e38c9edb0f9a2b5d78b1187","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        check_policy(context, \u0027get\u0027)"},{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_687aa225","line":65,"in_reply_to":"3afb71cf_585c5f18","updated":"2015-06-11 12:42:34.000000000","message":"You are right, sorry. I don\u0027t know why I thought that ModelBase had that method.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def delete(self, context, backup_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_f39bc8c7","line":66,"updated":"2015-06-08 12:03:00.000000000","message":"No need for lambda function.\n\n backup_dict[\u0027has_dependent_backups\u0027] \u003d count \u003e 0\n\nor\n\n backup_dict[\u0027has_dependent_backups\u0027] \u003d bool(count)","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        rv \u003d self.db.backup_get(context, backup_id)"},{"line_number":64,"context_line":"        count \u003d self.db.get_dependent_backups_number(context, backup_id)"},{"line_number":65,"context_line":"        backup_dict \u003d dict(rv.iteritems())"},{"line_number":66,"context_line":"        backup_dict[\u0027has_dependent_backups\u0027] \u003d (lambda x: x \u003e 0)(count)"},{"line_number":67,"context_line":"        return backup_dict"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def delete(self, context, backup_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_c70e673a","line":66,"in_reply_to":"3afb71cf_f39bc8c7","updated":"2015-06-10 07:19:32.000000000","message":"Done","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"}],"cinder/backup/manager.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"60a130ce3631e84d4e0f6c2f7dc2d756fade3ac6","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # Handle the has_dependent_backups of parent backup when child backup"},{"line_number":359,"context_line":"        # has created successfully."},{"line_number":360,"context_line":"        if backup.parent_id:"},{"line_number":361,"context_line":"            parent_backup \u003d objects.Backup.get_by_id(context.elevated(),"},{"line_number":362,"context_line":"                                                     backup.parent_id)"},{"line_number":363,"context_line":"            parent_backup.has_dependent_backups \u003d 1"},{"line_number":364,"context_line":"            parent_backup.save()"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_a81d2963","line":361,"updated":"2015-08-13 14:28:12.000000000","message":"This is likely a dumb question, but why is an elevated context required to find the parent?","commit_id":"1b317a2b8c89998473c1217b642d836fe442a68d"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"60a130ce3631e84d4e0f6c2f7dc2d756fade3ac6","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            reservations \u003d None"},{"line_number":514,"context_line":"            LOG.exception(_LE(\"Failed to update usages deleting backup\"))"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        backup.destroy()"},{"line_number":517,"context_line":"        # If this backup is incremental backup, handle the"},{"line_number":518,"context_line":"        # has_dependent_backups of parent backup"},{"line_number":519,"context_line":"        if backup.parent_id:"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_0831bda1","line":516,"updated":"2015-08-13 14:28:12.000000000","message":"Move this after the has_dependent_backups update since it requires inspecting backup.parent_id?","commit_id":"1b317a2b8c89998473c1217b642d836fe442a68d"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d5e8418b0afde86b65c10783742916bf8a76c095","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            reservations \u003d None"},{"line_number":514,"context_line":"            LOG.exception(_LE(\"Failed to update usages deleting backup\"))"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        backup.destroy()"},{"line_number":517,"context_line":"        # If this backup is incremental backup, handle the"},{"line_number":518,"context_line":"        # has_dependent_backups of parent backup"},{"line_number":519,"context_line":"        if backup.parent_id:"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa1b9901_35f4a085","line":516,"in_reply_to":"1a4dcd0f_0831bda1","updated":"2015-08-25 09:37:39.000000000","message":"Sorry, not sure what I was thinking.  The destroy() is only operating on the database and the in-memory object is fine to reference for backup.parent_id and backup.id.","commit_id":"1b317a2b8c89998473c1217b642d836fe442a68d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        # Handle the num_dependent_backups of parent backup when child backup"},{"line_number":365,"context_line":"        # has created successfully."},{"line_number":366,"context_line":"        if backup.parent_id:"},{"line_number":367,"context_line":"            parent_backup \u003d objects.Backup.get_by_id(context.elevated(),"},{"line_number":368,"context_line":"                                                     backup.parent_id)"},{"line_number":369,"context_line":"            parent_backup.num_dependent_backups +\u003d 1"},{"line_number":370,"context_line":"            parent_backup.save()"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_985598c7","line":367,"updated":"2015-08-25 13:35:06.000000000","message":"This context doesn\u0027t need to be elevated.","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        # Handle the num_dependent_backups of parent backup when child backup"},{"line_number":365,"context_line":"        # has created successfully."},{"line_number":366,"context_line":"        if backup.parent_id:"},{"line_number":367,"context_line":"            parent_backup \u003d objects.Backup.get_by_id(context.elevated(),"},{"line_number":368,"context_line":"                                                     backup.parent_id)"},{"line_number":369,"context_line":"            parent_backup.num_dependent_backups +\u003d 1"},{"line_number":370,"context_line":"            parent_backup.save()"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_c97fa4de","line":367,"in_reply_to":"fa1b9901_985598c7","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        # If this backup is incremental backup, handle the"},{"line_number":524,"context_line":"        # num_dependent_backups of parent backup"},{"line_number":525,"context_line":"        if backup.parent_id:"},{"line_number":526,"context_line":"            parent_backup \u003d objects.Backup.get_by_id(context.elevated(),"},{"line_number":527,"context_line":"                                                     backup.parent_id)"},{"line_number":528,"context_line":"            if parent_backup.has_dependent_backups:"},{"line_number":529,"context_line":"                parent_backup.num_dependent_backups -\u003d 1"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_1858a8f9","line":526,"updated":"2015-08-25 13:35:06.000000000","message":"Same here.","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        # If this backup is incremental backup, handle the"},{"line_number":524,"context_line":"        # num_dependent_backups of parent backup"},{"line_number":525,"context_line":"        if backup.parent_id:"},{"line_number":526,"context_line":"            parent_backup \u003d objects.Backup.get_by_id(context.elevated(),"},{"line_number":527,"context_line":"                                                     backup.parent_id)"},{"line_number":528,"context_line":"            if parent_backup.has_dependent_backups:"},{"line_number":529,"context_line":"                parent_backup.num_dependent_backups -\u003d 1"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_6980d8bf","line":526,"in_reply_to":"fa1b9901_1858a8f9","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"}],"cinder/db/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":984,"context_line":"    return IMPL.driver_initiator_data_get(context, initiator, namespace)"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"def get_dependent_backups_number(context, backup_id):"},{"line_number":988,"context_line":"    \"\"\"Count the number of dependent backups\"\"\""},{"line_number":989,"context_line":"    return IMPL.get_dependent_backups_number(context, backup_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_b37c3073","line":987,"updated":"2015-06-08 12:03:00.000000000","message":"I think \"get_dependent_backups_count\" would be a more appropriate name","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"72b55cdfdb697a1a6f68f52403e6b6949bd4e933","unresolved":false,"context_lines":[{"line_number":984,"context_line":"    return IMPL.driver_initiator_data_get(context, initiator, namespace)"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"def get_dependent_backups_number(context, backup_id):"},{"line_number":988,"context_line":"    \"\"\"Count the number of dependent backups\"\"\""},{"line_number":989,"context_line":"    return IMPL.get_dependent_backups_number(context, backup_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_c6d5721c","line":987,"updated":"2015-06-04 14:34:03.000000000","message":"This seems like a good candidate to put in the backup object - https://review.openstack.org/#/c/157085/.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"ea7c7bbb339a2cac6bb102da0eb5c0e55ead6f2f","unresolved":false,"context_lines":[{"line_number":986,"context_line":""},{"line_number":987,"context_line":"def get_dependent_backups_count(context, backup_id):"},{"line_number":988,"context_line":"    \"\"\"Count the number of dependent backups\"\"\""},{"line_number":989,"context_line":"    return IMPL.get_dependent_backups_count(context, backup_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_98cebe2b","line":989,"updated":"2015-07-02 05:46:20.000000000","message":"Is it better to put the function after backup_destroy() to put all backup related functions together?\nMeanwhile, change the name to backup_get_dependencies_count something.","commit_id":"e25b8fb3ca4f7d533eb02980655466cdbfbcf8e9"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f7ff248ce258cba8dbee472415d77c06193306e8","unresolved":false,"context_lines":[{"line_number":986,"context_line":""},{"line_number":987,"context_line":"def get_dependent_backups_count(context, backup_id):"},{"line_number":988,"context_line":"    \"\"\"Count the number of dependent backups\"\"\""},{"line_number":989,"context_line":"    return IMPL.get_dependent_backups_count(context, backup_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_1eae1798","line":989,"in_reply_to":"ba3cc151_98cebe2b","updated":"2015-07-02 06:15:33.000000000","message":"Done","commit_id":"e25b8fb3ca4f7d533eb02980655466cdbfbcf8e9"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9e34b448b8c6b6ffcd9b392c51c313038ffdc744","unresolved":false,"context_lines":[{"line_number":3701,"context_line":"def get_dependent_backups_number(context, backup_id):"},{"line_number":3702,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3703,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3704,"context_line":"    return result or 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_b358b0fb","line":3704,"updated":"2015-06-08 12:03:00.000000000","message":"No need for the or, count will always return a number.","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6c20d513552a5321f3147de6060c22cbffeec7d8","unresolved":false,"context_lines":[{"line_number":3701,"context_line":"def get_dependent_backups_number(context, backup_id):"},{"line_number":3702,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3703,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3704,"context_line":"    return result or 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_ca3c2eca","line":3704,"in_reply_to":"3afb71cf_b358b0fb","updated":"2015-06-10 07:19:32.000000000","message":"Done","commit_id":"1c3d901cce03b8bb177f9d255bbfa8414f2cdc90"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"ea7c7bbb339a2cac6bb102da0eb5c0e55ead6f2f","unresolved":false,"context_lines":[{"line_number":3716,"context_line":"def get_dependent_backups_count(context, backup_id):"},{"line_number":3717,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3718,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3719,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_b8eaa272","line":3719,"updated":"2015-07-02 05:46:20.000000000","message":"Is it better to put the function after backup_destroy() to put all backup related functions together? Meanwhile, change the name to backup_get_dependencies_count something.","commit_id":"e25b8fb3ca4f7d533eb02980655466cdbfbcf8e9"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f7ff248ce258cba8dbee472415d77c06193306e8","unresolved":false,"context_lines":[{"line_number":3716,"context_line":"def get_dependent_backups_count(context, backup_id):"},{"line_number":3717,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3718,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3719,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_9ec30757","line":3719,"in_reply_to":"ba3cc151_b8eaa272","updated":"2015-07-02 06:15:33.000000000","message":"Done","commit_id":"e25b8fb3ca4f7d533eb02980655466cdbfbcf8e9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6983ab245d651d1c7552506a269f3293b496b5a3","unresolved":false,"context_lines":[{"line_number":3378,"context_line":"@require_context"},{"line_number":3379,"context_line":"def backup_get_dependencies_count(context, backup_id):"},{"line_number":3380,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3381,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3382,"context_line":"    return result"},{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_67f4c086","line":3381,"updated":"2015-07-27 10:32:54.000000000","message":"Adding index to parent_id field is a good idea. But I still worry about this method performance when we\u0027ll have thousands backups in the DB. Could you please post some performance results with 100, 1000, 10000 backups in the DB?","commit_id":"5f25bef33e690cae035b284ee0b4844121eb134c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4fbea6d40100b22fee8682ab104ae68a3610f37d","unresolved":false,"context_lines":[{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"@require_context"},{"line_number":3385,"context_line":"def backup_get_dependencies_count(context, backup_id):"},{"line_number":3386,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3387,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3388,"context_line":"    return result"},{"line_number":3389,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_bb098cdf","line":3386,"range":{"start_line":3386,"start_character":63,"end_line":3386,"end_character":67},"updated":"2015-08-19 08:25:00.000000000","message":"It should be project_only\u003dFalse","commit_id":"1444e633ed3e4017290671efb6b51ee7fb6de359"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"26f63ee931fbd7c9331e656d6d263ba6a76c5ccd","unresolved":false,"context_lines":[{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"@require_context"},{"line_number":3385,"context_line":"def backup_get_dependencies_count(context, backup_id):"},{"line_number":3386,"context_line":"    result \u003d (model_query(context, models.Backup, project_only\u003dTrue)."},{"line_number":3387,"context_line":"              filter_by(parent_id\u003dbackup_id).count())"},{"line_number":3388,"context_line":"    return result"},{"line_number":3389,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_4a826ac9","line":3386,"in_reply_to":"fa1b9901_bb098cdf","updated":"2015-08-21 02:55:21.000000000","message":"Done","commit_id":"1444e633ed3e4017290671efb6b51ee7fb6de359"}],"cinder/db/sqlalchemy/migrate_repo/versions/047_add_parent_id_index_to_backups.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7a32bad8c246693e3f3527852c897c34c5ae9533","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _get_deleted_expire_index(table):"},{"line_number":26,"context_line":"    members \u003d sorted([\u0027parent_id\u0027])"},{"line_number":27,"context_line":"    for idx in table.indexes:"},{"line_number":28,"context_line":"        if sorted(idx.columns.keys()) \u003d\u003d members:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_93f72059","line":25,"updated":"2015-06-26 04:38:20.000000000","message":"This is not for deleted expire.  This needs to be renamed to something relevant here.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e6cd4c782daaed75defebc5ec727aa285e9a23d3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _get_deleted_expire_index(table):"},{"line_number":26,"context_line":"    members \u003d sorted([\u0027parent_id\u0027])"},{"line_number":27,"context_line":"    for idx in table.indexes:"},{"line_number":28,"context_line":"        if sorted(idx.columns.keys()) \u003d\u003d members:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_7da79ba7","line":25,"in_reply_to":"fa32b979_93f72059","updated":"2015-06-27 02:23:09.000000000","message":"Oh, sorry, copy error.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7a32bad8c246693e3f3527852c897c34c5ae9533","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        index.drop(migrate_engine)"},{"line_number":54,"context_line":"    else:"},{"line_number":55,"context_line":"        LOG.info(_LI(\u0027Skipped removing backups_parent_id_idx because index \u0027"},{"line_number":56,"context_line":"                     \u0027does not exist.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_7304dc17","line":56,"updated":"2015-06-26 04:38:20.000000000","message":"You need to add a migration test for this.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e6cd4c782daaed75defebc5ec727aa285e9a23d3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        index.drop(migrate_engine)"},{"line_number":54,"context_line":"    else:"},{"line_number":55,"context_line":"        LOG.info(_LI(\u0027Skipped removing backups_parent_id_idx because index \u0027"},{"line_number":56,"context_line":"                     \u0027does not exist.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_fd9acb61","line":56,"in_reply_to":"fa32b979_7304dc17","updated":"2015-06-27 02:23:09.000000000","message":"Sure","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"}],"cinder/db/sqlalchemy/migrate_repo/versions/049_add_parent_id_index_to_backups.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"1fb118060481fccf875837fbfe0b9b195fae8984","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 TrilioData, Inc"},{"line_number":2,"context_line":"# Copyright (c) 2015 EMC Corporation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_91593891","line":1,"updated":"2015-07-06 15:51:19.000000000","message":"Is this copyright valid?  Since this is a new file, you change it to match your company, Huawei.","commit_id":"ecb32c7ce85aa4fc2b721f3cbdd2748503d7b831"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"edd11a4f64724152f95ad33b10014673845facb1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 TrilioData, Inc"},{"line_number":2,"context_line":"# Copyright (c) 2015 EMC Corporation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_e22c18ae","line":1,"in_reply_to":"ba3cc151_91593891","updated":"2015-07-08 09:35:12.000000000","message":"Yes, I forgot to change it, thanks.","commit_id":"ecb32c7ce85aa4fc2b721f3cbdd2748503d7b831"}],"cinder/db/sqlalchemy/migrate_repo/versions/051_add_parent_id_index_to_backups.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6983ab245d651d1c7552506a269f3293b496b5a3","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    if _get_parent_id_index(backups):"},{"line_number":37,"context_line":"        LOG.info(_LI(\u0027Skipped adding backups_parent_id_idx because an \u0027"},{"line_number":38,"context_line":"                     \u0027index already exists.\u0027))"},{"line_number":39,"context_line":"        return"},{"line_number":40,"context_line":"    index \u003d Index(\u0027backups_parent_id_idx\u0027, backups.c.parent_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_8758ecfb","line":37,"updated":"2015-07-27 10:32:54.000000000","message":"According to https://github.com/openstack/cinder/commit/82e87b5080fa539c3fe3f58b59dc7db0678ca3a3 we don\u0027t need to use logging in migrations","commit_id":"5f25bef33e690cae035b284ee0b4844121eb134c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7e5522922203ee8cab92c335339d6ba6b234ccc9","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    if _get_parent_id_index(backups):"},{"line_number":37,"context_line":"        LOG.info(_LI(\u0027Skipped adding backups_parent_id_idx because an \u0027"},{"line_number":38,"context_line":"                     \u0027index already exists.\u0027))"},{"line_number":39,"context_line":"        return"},{"line_number":40,"context_line":"    index \u003d Index(\u0027backups_parent_id_idx\u0027, backups.c.parent_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_983d8291","line":37,"in_reply_to":"3a50d1a3_8758ecfb","updated":"2015-07-28 02:45:37.000000000","message":"Done","commit_id":"5f25bef33e690cae035b284ee0b4844121eb134c"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7a32bad8c246693e3f3527852c897c34c5ae9533","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":520,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":521,"context_line":"    container \u003d Column(String(255))"},{"line_number":522,"context_line":"    parent_id \u003d Column(String(36), index\u003dTrue)"},{"line_number":523,"context_line":"    status \u003d Column(String(255))"},{"line_number":524,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":525,"context_line":"    service_metadata \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_937c00b7","line":522,"updated":"2015-06-26 04:38:20.000000000","message":"I\u0027m not sure why index is needed for parent_id.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"77fbe9c5b23d9d18adfa9f66f6bd3a85a3c6d596","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":520,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":521,"context_line":"    container \u003d Column(String(255))"},{"line_number":522,"context_line":"    parent_id \u003d Column(String(36), index\u003dTrue)"},{"line_number":523,"context_line":"    status \u003d Column(String(255))"},{"line_number":524,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":525,"context_line":"    service_metadata \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_d73fcdb3","line":522,"in_reply_to":"fa32b979_937c00b7","updated":"2015-06-26 08:59:24.000000000","message":"To speed up the process of finding if the backup has dependent backups.  Because we are going to calculate it for every item when we return a detailed list.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e6cd4c782daaed75defebc5ec727aa285e9a23d3","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":520,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":521,"context_line":"    container \u003d Column(String(255))"},{"line_number":522,"context_line":"    parent_id \u003d Column(String(36), index\u003dTrue)"},{"line_number":523,"context_line":"    status \u003d Column(String(255))"},{"line_number":524,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":525,"context_line":"    service_metadata \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_9df7ff8b","line":522,"in_reply_to":"fa32b979_d73fcdb3","updated":"2015-06-27 02:23:09.000000000","message":"Yes, as Gorka said, we need this.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"13a0c45bae56bbf64a595ceee23f114a01e8eb2e","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    object_count \u003d Column(Integer)"},{"line_number":533,"context_line":"    temp_volume_id \u003d Column(String(36))"},{"line_number":534,"context_line":"    temp_snapshot_id \u003d Column(String(36))"},{"line_number":535,"context_line":"    has_dependent_backups \u003d Column(Integer)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    @validates(\u0027fail_reason\u0027)"},{"line_number":538,"context_line":"    def validate_fail_reason(self, key, fail_reason):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_d548f9ce","line":535,"updated":"2015-08-24 11:48:29.000000000","message":"-1: \"has\" implies a boolean value, we should use a Boolean field instead, or rename this to num_dependent_backups or something like that if we want to have a counter.  If we want to have a counter well have to change on create and delete were we do `\u003d 1` and `\u003d 0` with `+\u003d 1` and `-\u003d 1`","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"26fa1bad716889ac8f662ec58ada49957a71ea44","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    object_count \u003d Column(Integer)"},{"line_number":533,"context_line":"    temp_volume_id \u003d Column(String(36))"},{"line_number":534,"context_line":"    temp_snapshot_id \u003d Column(String(36))"},{"line_number":535,"context_line":"    has_dependent_backups \u003d Column(Integer)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    @validates(\u0027fail_reason\u0027)"},{"line_number":538,"context_line":"    def validate_fail_reason(self, key, fail_reason):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_248fa2cd","line":535,"in_reply_to":"fa1b9901_d548f9ce","updated":"2015-08-25 01:43:24.000000000","message":"Sure.","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"}],"cinder/objects/backup.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"77fbe9c5b23d9d18adfa9f66f6bd3a85a3c6d596","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027service\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        \u0027object_count\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"        \u0027has_dependent_backups\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_97ef05e9","line":59,"updated":"2015-06-26 08:59:24.000000000","message":"This should be set to read_only\u003dTrue. \n\nBut I\u0027m not entirely convinced this should be a field, instead I think it\u0027d be better to set it as a read only property so we don\u0027t need to calculate it for every single backup we get.\n\nProperty method can store it in the object as a private attribute (not a field) so it doesn\u0027t get it from the DB every time we access it.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"673fc1fbd529f98c99ad86d6b100e2c038ce9381","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027service\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        \u0027object_count\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"        \u0027has_dependent_backups\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f9cf5455","line":59,"in_reply_to":"fa32b979_97ef05e9","updated":"2015-06-26 15:38:56.000000000","message":"I do not believe it should be a field.  Why not just have a method, e.g. has_dependent_backups, that will do \"bool(db.get_dependent_backups_count(context, id))\".  Hence, no penalty.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"77fbe9c5b23d9d18adfa9f66f6bd3a85a3c6d596","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"},{"line_number":65,"context_line":"    def name(self):"},{"line_number":66,"context_line":"        return CONF.backup_name_template % self.id"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_17b21507","line":63,"updated":"2015-06-26 08:59:24.000000000","message":"I\u0027d add a read only property called is_incremental that just returns bool(self.parent_id)","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e6cd4c782daaed75defebc5ec727aa285e9a23d3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"},{"line_number":65,"context_line":"    def name(self):"},{"line_number":66,"context_line":"        return CONF.backup_name_template % self.id"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_dd8107c5","line":63,"in_reply_to":"fa32b979_17b21507","updated":"2015-06-27 02:23:09.000000000","message":"Thank guys, property is better.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"77fbe9c5b23d9d18adfa9f66f6bd3a85a3c6d596","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @base.remotable_classmethod"},{"line_number":85,"context_line":"    def get_by_id(cls, context, id):"},{"line_number":86,"context_line":"        db_backup \u003d db.backup_get(context, id)"},{"line_number":87,"context_line":"        count \u003d db.get_dependent_backups_count(context, id)"},{"line_number":88,"context_line":"        db_backup[\u0027has_dependent_backups\u0027] \u003d bool(count)"},{"line_number":89,"context_line":"        return cls._from_db_object(context, cls(context), db_backup)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_d7c82d59","line":87,"updated":"2015-06-26 08:59:24.000000000","message":"This is an unnecessary penalty for every backup object we get.","commit_id":"ebc10f741817c12d518f060fac8f92c3ddbc657c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a3f7a83c05f195d7eb7af3e3068ed63b8488bca2","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        return bool(db.get_dependent_backups_count(self._context, self.id))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":76,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_2774ca9a","line":73,"updated":"2015-06-29 13:49:07.000000000","message":"This means it will query the DB every time we check has_dependent_backups.  Like I mentioned in patch 6 maybe we should use an attribute to only check it once.\n\n if not getattr(self, \u0027__has_dependent_backups\u0027, None):\n     self.__has_dependent_backups \u003d bool(db.get_dependent_backups_count(self._context, self.id))\n return self.__has_dependent_backups","commit_id":"8ae5bc4d79e13defa2cf93bba8b539d7e926fb89"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"3131e4cfc2afd14e4d93118ba73095e19bf94308","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        return bool(db.get_dependent_backups_count(self._context, self.id))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":76,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_424c4042","line":73,"in_reply_to":"ba3cc151_2774ca9a","updated":"2015-06-30 01:56:13.000000000","message":"Okay, I got your point.","commit_id":"8ae5bc4d79e13defa2cf93bba8b539d7e926fb89"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6d8f937038a7d53ee85572b96042f74ccf532216","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not getattr(self, \u0027__has_dependent_backups\u0027, None):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.get_dependent_backups_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_a488b123","line":73,"updated":"2015-06-30 07:48:26.000000000","message":"I\u0027m so sorry, suggested code is not right. This should either use `hasattr` or `if getattr(..) is None` otherwise it will update it whenever have dependent backups is False as well.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"facf50f8b457b5a2667afa07369b8bbbfd3d0e5f","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not getattr(self, \u0027__has_dependent_backups\u0027, None):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.get_dependent_backups_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3cf798f6","line":73,"in_reply_to":"ba3cc151_a488b123","updated":"2015-07-02 02:43:20.000000000","message":"Oh, you\u0027re right, will fix it soon.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"0bea9777c4eecdecd5b5f479448f3f837d9dd01c","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not hasattr(self, \u0027__has_dependent_backups\u0027):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_31da1ae9","line":73,"updated":"2015-07-02 13:48:09.000000000","message":"There are two \"_\" here, but L74 sets this object as self._has_dependent_backups (with one \"_\").","commit_id":"bba2a5245f05cdeb5e0f1baa365aff5310e9d65c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6fa05f80b2b9c5a515e79b604ccbabea45e11461","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not hasattr(self, \u0027__has_dependent_backups\u0027):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_ddf17f96","line":73,"in_reply_to":"ba3cc151_31da1ae9","updated":"2015-07-02 14:47:52.000000000","message":"Great catch!!  I missed that, I blame my tiny fonts.  ;-)","commit_id":"bba2a5245f05cdeb5e0f1baa365aff5310e9d65c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"47ee8e69e2e56aa81e9eda2315cc1f8c70402be0","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not hasattr(self, \u0027__has_dependent_backups\u0027):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_984f6933","line":73,"in_reply_to":"ba3cc151_ddf17f96","updated":"2015-07-03 03:45:16.000000000","message":"oops! Thanks Thang.","commit_id":"bba2a5245f05cdeb5e0f1baa365aff5310e9d65c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e44f749ba5d2e7cc2a73d5efc7d18de65c185bdb","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not hasattr(self, \u0027_has_dependent_backups\u0027):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_bfad6cea","line":74,"updated":"2015-07-03 08:54:43.000000000","message":"You need to add tests for this path, as it\u0027s clearly not covered and we would have missed it if it were not for Thang.  Sorry I didn\u0027t mention on previous patch, but I assumed you would add it.","commit_id":"7cf65e54b3a6dc07c98b08b9ee1580541c7d03e9"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"014718b66eabb8a925cfb5bb5f24587c61fea4fe","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @property"},{"line_number":72,"context_line":"    def has_dependent_backups(self):"},{"line_number":73,"context_line":"        if not hasattr(self, \u0027_has_dependent_backups\u0027):"},{"line_number":74,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":75,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":76,"context_line":"        return self._has_dependent_backups"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_bf6b2c1d","line":74,"in_reply_to":"ba3cc151_bfad6cea","updated":"2015-07-03 09:05:57.000000000","message":"Emm, sure, I thought we have covered this in API tests. But you\u0027re right, it\u0027s value to add another test for this.","commit_id":"7cf65e54b3a6dc07c98b08b9ee1580541c7d03e9"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2c71bc65a6a12095df982e2c69bababd5cf4c05d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027object_count\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @property"},{"line_number":64,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_bf24855f","line":61,"updated":"2015-07-03 11:35:23.000000000","message":"You need to add is_incremental and has_dependent_backups properties into the obj_extra_fields list because they are not part of the Backup model.","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cbb81cff07c26d222361a43a7f70022a1921094a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027object_count\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @property"},{"line_number":64,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_87ba7609","line":61,"in_reply_to":"ba3cc151_bf24855f","updated":"2015-07-06 03:48:20.000000000","message":"Done","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6983ab245d651d1c7552506a269f3293b496b5a3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @property"},{"line_number":75,"context_line":"    def has_dependent_backups(self):"},{"line_number":76,"context_line":"        if not hasattr(self, \u0027_has_dependent_backups\u0027):"},{"line_number":77,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":78,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":79,"context_line":"        return self._has_dependent_backups"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_c70594c2","line":77,"updated":"2015-07-27 10:32:54.000000000","message":"Please, use () instead of \\","commit_id":"5f25bef33e690cae035b284ee0b4844121eb134c"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7e5522922203ee8cab92c335339d6ba6b234ccc9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @property"},{"line_number":75,"context_line":"    def has_dependent_backups(self):"},{"line_number":76,"context_line":"        if not hasattr(self, \u0027_has_dependent_backups\u0027):"},{"line_number":77,"context_line":"            self._has_dependent_backups \u003d \\"},{"line_number":78,"context_line":"                bool(db.backup_get_dependencies_count(self._context, self.id))"},{"line_number":79,"context_line":"        return self._has_dependent_backups"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_f8fa86bc","line":77,"in_reply_to":"3a50d1a3_c70594c2","updated":"2015-07-28 02:45:37.000000000","message":"Done","commit_id":"5f25bef33e690cae035b284ee0b4844121eb134c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"60a130ce3631e84d4e0f6c2f7dc2d756fade3ac6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            db.backup_destroy(self._context, self.id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @base.remotable"},{"line_number":120,"context_line":"    def is_dependent_backups(self):"},{"line_number":121,"context_line":"        has_depend \u003d db.backup_get_dependencies_count(self._context, self.id)"},{"line_number":122,"context_line":"        return bool(has_depend)"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_186026ce","line":120,"updated":"2015-08-13 14:28:12.000000000","message":"I think \u0027has_dependent_backups\u0027 or \u0027is_a_parent_backup\u0027 is a better name.  The parent *has* dependents, it isn\u0027t the same as the the dependents.","commit_id":"1b317a2b8c89998473c1217b642d836fe442a68d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4fbea6d40100b22fee8682ab104ae68a3610f37d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class Backup(base.CinderPersistentObject, base.CinderObject,"},{"line_number":31,"context_line":"             base.CinderObjectDictCompat):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_bbbaecbe","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":14},"updated":"2015-08-19 08:25:00.000000000","message":"Version change, we have added a new field","commit_id":"1444e633ed3e4017290671efb6b51ee7fb6de359"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"97661c5b3ba90a1cc97b9d9bcac8e4d9fb918abc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class Backup(base.CinderPersistentObject, base.CinderObject,"},{"line_number":31,"context_line":"             base.CinderObjectDictCompat):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_4671e50a","line":33,"in_reply_to":"fa1b9901_aa69c6fa","updated":"2015-08-21 14:09:37.000000000","message":"1.1 looks right to me","commit_id":"1444e633ed3e4017290671efb6b51ee7fb6de359"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"26f63ee931fbd7c9331e656d6d263ba6a76c5ccd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class Backup(base.CinderPersistentObject, base.CinderObject,"},{"line_number":31,"context_line":"             base.CinderObjectDictCompat):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_aa69c6fa","line":33,"in_reply_to":"fa1b9901_bbbaecbe","updated":"2015-08-21 02:55:21.000000000","message":"1.1 right?","commit_id":"1444e633ed3e4017290671efb6b51ee7fb6de359"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"13a0c45bae56bbf64a595ceee23f114a01e8eb2e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            db.backup_destroy(self._context, self.id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @base.remotable"},{"line_number":120,"context_line":"    def is_dependent_backups(self):"},{"line_number":121,"context_line":"        return bool(self.has_dependent_backups)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_5598696a","line":120,"updated":"2015-08-24 11:48:29.000000000","message":"-1: If we change has_dependent_backups to boolean we no longer need this, and if we change the name of the field to reflect that it\u0027s a counter, we need to rename this to has_dependent_backups","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"26fa1bad716889ac8f662ec58ada49957a71ea44","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            db.backup_destroy(self._context, self.id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @base.remotable"},{"line_number":120,"context_line":"    def is_dependent_backups(self):"},{"line_number":121,"context_line":"        return bool(self.has_dependent_backups)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_8758f0fb","line":120,"in_reply_to":"fa1b9901_5598696a","updated":"2015-08-25 01:43:24.000000000","message":"Done","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":30,"context_line":"class Backup(base.CinderPersistentObject, base.CinderObject,"},{"line_number":31,"context_line":"             base.CinderObjectDictCompat):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_380c8c3a","line":32,"updated":"2015-08-25 13:35:06.000000000","message":"If you bumped the version, you should add a description on what has been changed in 1.1.","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":29,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":30,"context_line":"class Backup(base.CinderPersistentObject, base.CinderObject,"},{"line_number":31,"context_line":"             base.CinderObjectDictCompat):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_a9efd085","line":32,"in_reply_to":"fa1b9901_380c8c3a","updated":"2015-08-26 01:15:30.000000000","message":"Of course.","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"}],"cinder/tests/unit/api/contrib/test_backups.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"9fc72c24336b0eaebd2736d5610a145e57fc2526","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"        self.assertEqual(\"Missing required element \u0027backup-record\u0027 in \""},{"line_number":1507,"context_line":"                         \"request body.\","},{"line_number":1508,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"    def test_show_incremental_backup(self):"},{"line_number":1512,"context_line":"        volume_id \u003d utils.create_volume(self.context, size\u003d5)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba3cc151_bd16f146","line":1509,"updated":"2015-07-09 08:36:36.000000000","message":"Remove one of these blank lines to make pep8 happy.","commit_id":"fd592d3b4deb834d437de71b5d06cb267f0154a9"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"678f044cfd2663cd43f89f4443e5e9dbb0824a79","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"        self.assertEqual(\"Missing required element \u0027backup-record\u0027 in \""},{"line_number":1507,"context_line":"                         \"request body.\","},{"line_number":1508,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"    def test_show_incremental_backup(self):"},{"line_number":1512,"context_line":"        volume_id \u003d utils.create_volume(self.context, size\u003d5)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba3cc151_d4435c12","line":1509,"in_reply_to":"ba3cc151_bd16f146","updated":"2015-07-10 01:30:22.000000000","message":"Done","commit_id":"fd592d3b4deb834d437de71b5d06cb267f0154a9"},{"author":{"_account_id":16973,"name":"Skyler Berg","email":"skylertheberg@gmail.com","username":"sberg"},"change_message_id":"100c95871316b7848c7a78e5579690388a976931","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][0][\u0027status\u0027], \u0027creating\u0027)"},{"line_number":224,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][0][\u0027volume_id\u0027], \u00271\u0027)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(len(res_dict[\u0027backups\u0027][1]), 14)"},{"line_number":227,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027availability_zone\u0027], \u0027az1\u0027)"},{"line_number":228,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027container\u0027],"},{"line_number":229,"context_line":"                         \u0027volumebackups\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_cf169b4b","line":226,"updated":"2015-08-06 23:28:04.000000000","message":"Argument order for assertEqual should be reversed.","commit_id":"9cb5fc7062680e9c98dca4eabe62fb58db04fbd7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6ca25ab5e999e49a0ed50b922d89a0f671da59d2","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][0][\u0027status\u0027], \u0027creating\u0027)"},{"line_number":224,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][0][\u0027volume_id\u0027], \u00271\u0027)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(len(res_dict[\u0027backups\u0027][1]), 14)"},{"line_number":227,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027availability_zone\u0027], \u0027az1\u0027)"},{"line_number":228,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027container\u0027],"},{"line_number":229,"context_line":"                         \u0027volumebackups\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_4311ff02","line":226,"in_reply_to":"1a4dcd0f_cf169b4b","updated":"2015-08-07 09:02:00.000000000","message":"Done","commit_id":"9cb5fc7062680e9c98dca4eabe62fb58db04fbd7"},{"author":{"_account_id":16973,"name":"Skyler Berg","email":"skylertheberg@gmail.com","username":"sberg"},"change_message_id":"100c95871316b7848c7a78e5579690388a976931","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027status\u0027], \u0027creating\u0027)"},{"line_number":238,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027volume_id\u0027], \u00271\u0027)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.assertEqual(len(res_dict[\u0027backups\u0027][2]), 14)"},{"line_number":241,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][2][\u0027availability_zone\u0027], \u0027az1\u0027)"},{"line_number":242,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][2][\u0027container\u0027],"},{"line_number":243,"context_line":"                         \u0027volumebackups\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_ef111753","line":240,"updated":"2015-08-06 23:28:04.000000000","message":"Argument order for assertEqual should be reversed.","commit_id":"9cb5fc7062680e9c98dca4eabe62fb58db04fbd7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6ca25ab5e999e49a0ed50b922d89a0f671da59d2","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027status\u0027], \u0027creating\u0027)"},{"line_number":238,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][1][\u0027volume_id\u0027], \u00271\u0027)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.assertEqual(len(res_dict[\u0027backups\u0027][2]), 14)"},{"line_number":241,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][2][\u0027availability_zone\u0027], \u0027az1\u0027)"},{"line_number":242,"context_line":"        self.assertEqual(res_dict[\u0027backups\u0027][2][\u0027container\u0027],"},{"line_number":243,"context_line":"                         \u0027volumebackups\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_e3fccbb9","line":240,"in_reply_to":"1a4dcd0f_ef111753","updated":"2015-08-07 09:02:00.000000000","message":"Done","commit_id":"9cb5fc7062680e9c98dca4eabe62fb58db04fbd7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.assertEqual(0, res_dict[\u0027backup\u0027][\u0027size\u0027])"},{"line_number":107,"context_line":"        self.assertEqual(\u0027creating\u0027, res_dict[\u0027backup\u0027][\u0027status\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(volume_id, res_dict[\u0027backup\u0027][\u0027volume_id\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":110,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_9de58aa9","line":109,"updated":"2015-08-25 13:35:06.000000000","message":"assertFalse","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.assertEqual(0, res_dict[\u0027backup\u0027][\u0027size\u0027])"},{"line_number":107,"context_line":"        self.assertEqual(\u0027creating\u0027, res_dict[\u0027backup\u0027][\u0027status\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(volume_id, res_dict[\u0027backup\u0027][\u0027volume_id\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":110,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_09011c06","line":109,"in_reply_to":"fa1b9901_9de58aa9","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertEqual(\u0027creating\u0027, res_dict[\u0027backup\u0027][\u0027status\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(volume_id, res_dict[\u0027backup\u0027][\u0027volume_id\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":110,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"},{"line_number":113,"context_line":"        db.volume_destroy(context.get_admin_context(), volume_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_bde08e97","line":110,"updated":"2015-08-25 13:35:06.000000000","message":"Same here","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertEqual(\u0027creating\u0027, res_dict[\u0027backup\u0027][\u0027status\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(volume_id, res_dict[\u0027backup\u0027][\u0027volume_id\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":110,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"},{"line_number":113,"context_line":"        db.volume_destroy(context.get_admin_context(), volume_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_a4005502","line":110,"in_reply_to":"fa1b9901_bde08e97","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":1668,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":1669,"context_line":""},{"line_number":1670,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1671,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1672,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_5dee128c","line":1671,"updated":"2015-08-25 13:35:06.000000000","message":"assertTrue","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":1668,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":1669,"context_line":""},{"line_number":1670,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1671,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1672,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_a9bd9069","line":1671,"in_reply_to":"fa1b9901_5dee128c","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":1669,"context_line":""},{"line_number":1670,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1671,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1672,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"},{"line_number":1675,"context_line":"                                  parent_backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_dd02223e","line":1672,"updated":"2015-08-25 13:35:06.000000000","message":"assertTrue","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":1669,"context_line":""},{"line_number":1670,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1671,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1672,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"},{"line_number":1675,"context_line":"                                  parent_backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_c9c244e9","line":1672,"in_reply_to":"fa1b9901_dd02223e","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1682,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1683,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_9dfcaa3f","line":1682,"updated":"2015-08-25 13:35:06.000000000","message":"assertFalse","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1682,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1683,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_69b3f89a","line":1682,"in_reply_to":"fa1b9901_9dfcaa3f","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1682,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1683,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"},{"line_number":1686,"context_line":"                                  child_backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_3da23e4c","line":1683,"updated":"2015-08-25 13:35:06.000000000","message":"assertTrue","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1682,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1683,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/backups/%s\u0027 %"},{"line_number":1686,"context_line":"                                  child_backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_89b8cc76","line":1683,"in_reply_to":"fa1b9901_3da23e4c","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34b0fd41a0866457147e26ccf376f3f72d54825b","unresolved":false,"context_lines":[{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1693,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1694,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1695,"context_line":""},{"line_number":1696,"context_line":"        db.backup_destroy(context.get_admin_context(), child_backup_id)"},{"line_number":1697,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_1db65a8a","line":1694,"updated":"2015-08-25 13:35:06.000000000","message":"Same","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5e0851d73b1536a5a330e48b4ff382f5935c6b01","unresolved":false,"context_lines":[{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        self.assertEqual(200, res.status_int)"},{"line_number":1693,"context_line":"        self.assertEqual(True, res_dict[\u0027backup\u0027][\u0027is_incremental\u0027])"},{"line_number":1694,"context_line":"        self.assertEqual(False, res_dict[\u0027backup\u0027][\u0027has_dependent_backups\u0027])"},{"line_number":1695,"context_line":""},{"line_number":1696,"context_line":"        db.backup_destroy(context.get_admin_context(), child_backup_id)"},{"line_number":1697,"context_line":"        db.backup_destroy(context.get_admin_context(), backup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa1b9901_29b2e094","line":1694,"in_reply_to":"fa1b9901_1db65a8a","updated":"2015-08-26 01:15:30.000000000","message":"Done","commit_id":"863c8ec63fa9b48b32d63b7d63b5b4494d3786c7"}],"cinder/tests/unit/test_backup.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c182622e93786dfc5bdc9d14a6f8576d04033ab","unresolved":false,"context_lines":[{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    @mock.patch(\u0027cinder.db.backup_get_dependencies_count\u0027)"},{"line_number":599,"context_line":"    def test_backup_has_dependent_backups(self, mock_db):"},{"line_number":600,"context_line":"        \"\"\"Test backup object has dependent backups\"\"\""},{"line_number":601,"context_line":"        mock_db.return_value \u003d False"},{"line_number":602,"context_line":"        vol_size \u003d 1"},{"line_number":603,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003dvol_size)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_d642960e","line":600,"updated":"2015-07-03 10:31:37.000000000","message":"I would add that this tests that the query is only done once no matter how many times you get the property.","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cbb81cff07c26d222361a43a7f70022a1921094a","unresolved":false,"context_lines":[{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    @mock.patch(\u0027cinder.db.backup_get_dependencies_count\u0027)"},{"line_number":599,"context_line":"    def test_backup_has_dependent_backups(self, mock_db):"},{"line_number":600,"context_line":"        \"\"\"Test backup object has dependent backups\"\"\""},{"line_number":601,"context_line":"        mock_db.return_value \u003d False"},{"line_number":602,"context_line":"        vol_size \u003d 1"},{"line_number":603,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003dvol_size)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_4730ee9e","line":600,"in_reply_to":"ba3cc151_d642960e","updated":"2015-07-06 03:48:20.000000000","message":"Done","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c182622e93786dfc5bdc9d14a6f8576d04033ab","unresolved":false,"context_lines":[{"line_number":602,"context_line":"        vol_size \u003d 1"},{"line_number":603,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003dvol_size)"},{"line_number":604,"context_line":"        backup \u003d self._create_backup_db_entry(volume_id\u003dvol_id)"},{"line_number":605,"context_line":"        self.assertFalse(backup.has_dependent_backups)"},{"line_number":606,"context_line":"        mock_db.assert_called_once_with(backup._context, backup.id)"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_16d6be4e","line":605,"updated":"2015-07-03 10:31:37.000000000","message":"You need to check the property twice to make sure that the if is actually working.  As it was before this test would pass.","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cbb81cff07c26d222361a43a7f70022a1921094a","unresolved":false,"context_lines":[{"line_number":602,"context_line":"        vol_size \u003d 1"},{"line_number":603,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003dvol_size)"},{"line_number":604,"context_line":"        backup \u003d self._create_backup_db_entry(volume_id\u003dvol_id)"},{"line_number":605,"context_line":"        self.assertFalse(backup.has_dependent_backups)"},{"line_number":606,"context_line":"        mock_db.assert_called_once_with(backup._context, backup.id)"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_27d28a35","line":605,"in_reply_to":"ba3cc151_16d6be4e","updated":"2015-07-06 03:48:20.000000000","message":"Done","commit_id":"02c6ecf8f95206c095f6705bffc84f3cc460497a"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"e0f7b85fa7f39df7a476c6080f8fc7bb5bba47f0","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    @mock.patch(\u0027cinder.db.backup_get_dependencies_count\u0027)"},{"line_number":675,"context_line":"    def test_backup_has_dependent_backups(self, mock_db):"},{"line_number":676,"context_line":"        \"\"\"Test the query of has_dependent_backups in backup object is only"},{"line_number":677,"context_line":"        done once no matter how many times you get the property."},{"line_number":678,"context_line":"        \"\"\""},{"line_number":679,"context_line":"        mock_db.return_value \u003d False"},{"line_number":680,"context_line":"        vol_size \u003d 1"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_e1ee52ec","line":677,"updated":"2015-07-28 05:07:00.000000000","message":"minor style nit, iirc these should have a one line description, empty line, and then the rest of the longer description","commit_id":"18f596d9a77090fbf038d0f1c6ea1d862823f36b"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"79eec8deda8bb25b3a9916087afcbef8adb9a3f8","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    @mock.patch(\u0027cinder.db.backup_get_dependencies_count\u0027)"},{"line_number":675,"context_line":"    def test_backup_has_dependent_backups(self, mock_db):"},{"line_number":676,"context_line":"        \"\"\"Test the query of has_dependent_backups in backup object is only"},{"line_number":677,"context_line":"        done once no matter how many times you get the property."},{"line_number":678,"context_line":"        \"\"\""},{"line_number":679,"context_line":"        mock_db.return_value \u003d False"},{"line_number":680,"context_line":"        vol_size \u003d 1"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_27fa0a76","line":677,"in_reply_to":"3a50d1a3_e1ee52ec","updated":"2015-08-03 01:21:46.000000000","message":"Done","commit_id":"18f596d9a77090fbf038d0f1c6ea1d862823f36b"}],"cinder/tests/unit/test_volume_utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a3f7a83c05f195d7eb7af3e3068ed63b8488bca2","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            \u0027service\u0027: \u0027cinder.backup.drivers.swift\u0027,"},{"line_number":385,"context_line":"            \u0027fail_reason\u0027: None,"},{"line_number":386,"context_line":"            \u0027parent_id\u0027: \u0027fake_parent_id\u0027,"},{"line_number":387,"context_line":"        }"},{"line_number":388,"context_line":"        self.assertEqual(expected_backup, usage_info)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_c7239e04","line":387,"updated":"2015-06-29 13:49:07.000000000","message":"You could have done `raw_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027)` and it would have been easier to see what the differences are between one another.","commit_id":"8ae5bc4d79e13defa2cf93bba8b539d7e926fb89"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fa6c4b8f17c3e65daf45c8413b08ea895146c965","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            \u0027service\u0027: \u0027cinder.backup.drivers.swift\u0027,"},{"line_number":385,"context_line":"            \u0027fail_reason\u0027: None,"},{"line_number":386,"context_line":"            \u0027parent_id\u0027: \u0027fake_parent_id\u0027,"},{"line_number":387,"context_line":"        }"},{"line_number":388,"context_line":"        self.assertEqual(expected_backup, usage_info)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_6435c944","line":387,"in_reply_to":"ba3cc151_42cf607f","updated":"2015-06-30 07:47:53.000000000","message":"No I meant you use raw_backup as expected_backup but changing the only key that gets changed, which is the id.","commit_id":"8ae5bc4d79e13defa2cf93bba8b539d7e926fb89"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"3131e4cfc2afd14e4d93118ba73095e19bf94308","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            \u0027service\u0027: \u0027cinder.backup.drivers.swift\u0027,"},{"line_number":385,"context_line":"            \u0027fail_reason\u0027: None,"},{"line_number":386,"context_line":"            \u0027parent_id\u0027: \u0027fake_parent_id\u0027,"},{"line_number":387,"context_line":"        }"},{"line_number":388,"context_line":"        self.assertEqual(expected_backup, usage_info)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_42cf607f","line":387,"in_reply_to":"ba3cc151_c7239e04","updated":"2015-06-30 01:56:13.000000000","message":"You mean expected_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027) like this?","commit_id":"8ae5bc4d79e13defa2cf93bba8b539d7e926fb89"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"174c55619d0da678e1a7ad5bd65c9f1a1806cdcc","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        }"},{"line_number":371,"context_line":"        usage_info \u003d volume_utils._usage_from_backup(raw_backup)"},{"line_number":372,"context_line":"        # Make it easier to find out differences between raw and expected."},{"line_number":373,"context_line":"        expected_backup \u003d {}"},{"line_number":374,"context_line":"        expected_backup[\u0027tenant_id\u0027] \u003d raw_backup.pop(\u0027project_id\u0027)"},{"line_number":375,"context_line":"        expected_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027)"},{"line_number":376,"context_line":"        expected_backup[\u0027user_id\u0027] \u003d raw_backup.pop(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_c164c0e6","line":373,"updated":"2015-06-30 10:14:43.000000000","message":"How about:\n    expected_backup \u003d copy.deepcopy(raw_backup)\n    expected_backup[\u0027tenant_id\u0027] \u003d expected_backup.pop(\u0027project_id\u0027)\n    expected_backup[\u0027backup_id\u0027] \u003d expected_backup.pop(\u0027id\u0027)\nThen you can move the \u0027usage_info \u003d \u0027 line after these and put whitespace before and after it to make the test easier to read.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"facf50f8b457b5a2667afa07369b8bbbfd3d0e5f","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        }"},{"line_number":371,"context_line":"        usage_info \u003d volume_utils._usage_from_backup(raw_backup)"},{"line_number":372,"context_line":"        # Make it easier to find out differences between raw and expected."},{"line_number":373,"context_line":"        expected_backup \u003d {}"},{"line_number":374,"context_line":"        expected_backup[\u0027tenant_id\u0027] \u003d raw_backup.pop(\u0027project_id\u0027)"},{"line_number":375,"context_line":"        expected_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027)"},{"line_number":376,"context_line":"        expected_backup[\u0027user_id\u0027] \u003d raw_backup.pop(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_bcc0882b","line":373,"in_reply_to":"ba3cc151_1f867c13","updated":"2015-07-02 02:43:20.000000000","message":"Okay","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bbd1e92b75cfc3ed384700da1e9880b69f4ce3dc","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        }"},{"line_number":371,"context_line":"        usage_info \u003d volume_utils._usage_from_backup(raw_backup)"},{"line_number":372,"context_line":"        # Make it easier to find out differences between raw and expected."},{"line_number":373,"context_line":"        expected_backup \u003d {}"},{"line_number":374,"context_line":"        expected_backup[\u0027tenant_id\u0027] \u003d raw_backup.pop(\u0027project_id\u0027)"},{"line_number":375,"context_line":"        expected_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027)"},{"line_number":376,"context_line":"        expected_backup[\u0027user_id\u0027] \u003d raw_backup.pop(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_d2648ce6","line":373,"in_reply_to":"ba3cc151_c164c0e6","updated":"2015-06-30 11:24:50.000000000","message":"We don\u0027t need a deepcopy, a simple raw_backup.copy() would suffice.  I think this is a nit.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5f60a552d1988a7bc81abd57acfcdb9db4043514","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        }"},{"line_number":371,"context_line":"        usage_info \u003d volume_utils._usage_from_backup(raw_backup)"},{"line_number":372,"context_line":"        # Make it easier to find out differences between raw and expected."},{"line_number":373,"context_line":"        expected_backup \u003d {}"},{"line_number":374,"context_line":"        expected_backup[\u0027tenant_id\u0027] \u003d raw_backup.pop(\u0027project_id\u0027)"},{"line_number":375,"context_line":"        expected_backup[\u0027backup_id\u0027] \u003d raw_backup.pop(\u0027id\u0027)"},{"line_number":376,"context_line":"        expected_backup[\u0027user_id\u0027] \u003d raw_backup.pop(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_1f867c13","line":373,"in_reply_to":"ba3cc151_d2648ce6","updated":"2015-06-30 12:31:47.000000000","message":"Agree.","commit_id":"65e2e00a57caddcbf01e1c4c32f0e21e4ba55b54"}],"cinder/volume/utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"76d77c959748b2023e0fa3254662d6c95df0a9b5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                      service_metadata\u003dbackup_ref[\u0027service_metadata\u0027],"},{"line_number":92,"context_line":"                      service\u003dbackup_ref[\u0027service\u0027],"},{"line_number":93,"context_line":"                      fail_reason\u003dbackup_ref[\u0027fail_reason\u0027],"},{"line_number":94,"context_line":"                      parent_id\u003dbackup_ref[\u0027parent_id\u0027],)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    usage_info.update(kw)"},{"line_number":97,"context_line":"    return usage_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_bbd38203","line":94,"updated":"2015-06-10 08:38:47.000000000","message":"No need for the last comma.","commit_id":"1134b5d821d2b3c64e2004dd9939c169c9c28510"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4400554ccb9265c59b2d24e6388a3a852ab4ed20","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                      service_metadata\u003dbackup_ref[\u0027service_metadata\u0027],"},{"line_number":92,"context_line":"                      service\u003dbackup_ref[\u0027service\u0027],"},{"line_number":93,"context_line":"                      fail_reason\u003dbackup_ref[\u0027fail_reason\u0027],"},{"line_number":94,"context_line":"                      parent_id\u003dbackup_ref[\u0027parent_id\u0027],)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    usage_info.update(kw)"},{"line_number":97,"context_line":"    return usage_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_582e9f8c","line":94,"in_reply_to":"3afb71cf_bbd38203","updated":"2015-06-11 08:07:48.000000000","message":"Sure","commit_id":"1134b5d821d2b3c64e2004dd9939c169c9c28510"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"13a0c45bae56bbf64a595ceee23f114a01e8eb2e","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def _usage_from_backup(backup_ref, **kw):"},{"line_number":90,"context_line":"    has_dependent_backups_temp \u003d backup_ref[\u0027has_dependent_backups\u0027]"},{"line_number":91,"context_line":"    usage_info \u003d dict(tenant_id\u003dbackup_ref[\u0027project_id\u0027],"},{"line_number":92,"context_line":"                      user_id\u003dbackup_ref[\u0027user_id\u0027],"},{"line_number":93,"context_line":"                      availability_zone\u003dbackup_ref[\u0027availability_zone\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_b54ea594","line":90,"updated":"2015-08-24 11:48:29.000000000","message":"nit: No need to specify _temp","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"26fa1bad716889ac8f662ec58ada49957a71ea44","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def _usage_from_backup(backup_ref, **kw):"},{"line_number":90,"context_line":"    has_dependent_backups_temp \u003d backup_ref[\u0027has_dependent_backups\u0027]"},{"line_number":91,"context_line":"    usage_info \u003d dict(tenant_id\u003dbackup_ref[\u0027project_id\u0027],"},{"line_number":92,"context_line":"                      user_id\u003dbackup_ref[\u0027user_id\u0027],"},{"line_number":93,"context_line":"                      availability_zone\u003dbackup_ref[\u0027availability_zone\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa1b9901_a701746c","line":90,"in_reply_to":"fa1b9901_b54ea594","updated":"2015-08-25 01:43:24.000000000","message":"Done","commit_id":"5f3b2f0f85891e1126bcd054ee6118c1c0adc79d"}]}
