)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"adding more protection parameters retention period"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implement blueprint adding-more-protection-parameters-retention-period"},{"line_number":10,"context_line":"for karbor."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9584daf87edda97b9e5f15dd2542b9b0e2b97864"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f4b6375_c683fe55","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":11},"updated":"2017-10-31 10:23:15.000000000","message":"remove it","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"}],"karbor/services/operationengine/operations/protect_operation.py":[{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6dafb6b0f761c850f65bd663a2a8b40b14dda905","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            self._update_log_when_operation_finished(log_ref, state)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            max_backups \u003d int(operation_definition.get(\"max_backups\", -1))"},{"line_number":77,"context_line":"            retention_duration \u003d int(operation_definition.get("},{"line_number":78,"context_line":"                \"retention_duration\", -1))"},{"line_number":79,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_f33778af","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":23},"updated":"2017-09-08 02:25:29.000000000","message":"add validation check for max_backups and retention_duration. (for example, max_backups \u003d -2 or retention_duration \u003d -3?)","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            self._update_log_when_operation_finished(log_ref, state)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            max_backups \u003d int(operation_definition.get(\"max_backups\", -1))"},{"line_number":77,"context_line":"            retention_duration \u003d int(operation_definition.get("},{"line_number":78,"context_line":"                \"retention_duration\", -1))"},{"line_number":79,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_8458e830","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":23},"in_reply_to":"7f287b81_f33778af","updated":"2017-11-01 08:43:41.000000000","message":"ok.Here really need to check, otherwise if the implementation of -3 or even -10 will delete a lot of checkpoints, more dangerous","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6dafb6b0f761c850f65bd663a2a8b40b14dda905","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            self._update_log_when_operation_finished(log_ref, state)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            max_backups \u003d int(operation_definition.get(\"max_backups\", -1))"},{"line_number":77,"context_line":"            retention_duration \u003d int(operation_definition.get("},{"line_number":78,"context_line":"                \"retention_duration\", -1))"},{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            reason \u003d _(\"Failed to get plan by plan_id: %s\") % plan_id"},{"line_number":81,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_33b50033","line":78,"range":{"start_line":76,"start_character":12,"end_line":78,"end_character":42},"updated":"2017-09-08 02:25:29.000000000","message":"IMO, max backups and retention are two function that can be used separately. So maybe split this to two try catch block will be better","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            self._update_log_when_operation_finished(log_ref, state)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            max_backups \u003d int(operation_definition.get(\"max_backups\", -1))"},{"line_number":77,"context_line":"            retention_duration \u003d int(operation_definition.get("},{"line_number":78,"context_line":"                \"retention_duration\", -1))"},{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            reason \u003d _(\"Failed to get plan by plan_id: %s\") % plan_id"},{"line_number":81,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_64417c39","line":78,"range":{"start_line":76,"start_character":12,"end_line":78,"end_character":42},"in_reply_to":"7f287b81_33b50033","updated":"2017-11-01 08:43:41.000000000","message":"ok","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6dafb6b0f761c850f65bd663a2a8b40b14dda905","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":85,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"},{"line_number":86,"context_line":"            self._delete_old_backup_by_duration("},{"line_number":87,"context_line":"                client, retention_duration, project_id, provider_id, plan_id)"},{"line_number":88,"context_line":"        except Exception:"},{"line_number":89,"context_line":"            reason \u003d (_(\"Can\u0027t execute retention policy %(provider_id)s and \""},{"line_number":90,"context_line":"                        \"%(plan_id)%s\") %"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_b037a6fe","line":87,"range":{"start_line":86,"start_character":12,"end_line":87,"end_character":77},"updated":"2017-09-08 02:25:29.000000000","message":"IMO, max backups and retention are two function that can be used separately. So maybe split this to two try catch block will be better","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":85,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"},{"line_number":86,"context_line":"            self._delete_old_backup_by_duration("},{"line_number":87,"context_line":"                client, retention_duration, project_id, provider_id, plan_id)"},{"line_number":88,"context_line":"        except Exception:"},{"line_number":89,"context_line":"            reason \u003d (_(\"Can\u0027t execute retention policy %(provider_id)s and \""},{"line_number":90,"context_line":"                        \"%(plan_id)%s\") %"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_443e80b8","line":87,"range":{"start_line":86,"start_character":12,"end_line":87,"end_character":77},"in_reply_to":"7f287b81_b037a6fe","updated":"2017-11-01 08:43:41.000000000","message":"ok","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"b8e431dbee1ceb3a8e7968168167a08459443b66","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                              {\"cp_id\": item.id, \"reason\": e})"},{"line_number":140,"context_line":"                    raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _delete_old_backup_by_duration("},{"line_number":143,"context_line":"            self, client, retention_duration,"},{"line_number":144,"context_line":"            project_id, provider_id, plan_id):"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_76f936c6","line":142,"range":{"start_line":142,"start_character":9,"end_line":142,"end_character":38},"updated":"2017-09-08 03:42:56.000000000","message":"if no new checkpoint was created, the duration will never be effective?","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                              {\"cp_id\": item.id, \"reason\": e})"},{"line_number":140,"context_line":"                    raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _delete_old_backup_by_duration("},{"line_number":143,"context_line":"            self, client, retention_duration,"},{"line_number":144,"context_line":"            project_id, provider_id, plan_id):"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f287b81_64af3ce3","line":142,"range":{"start_line":142,"start_character":9,"end_line":142,"end_character":38},"in_reply_to":"7f287b81_76f936c6","updated":"2017-11-01 08:43:41.000000000","message":"I personally sugguest we don\u0027t modify it, otherwise this parameter will be meaningless, I see nbu also have such parameters, it should be handled so.","commit_id":"941e9b2df2dc7a609521669aa05c624452098628"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            reason \u003d _(\"Failed to get retention_duration\")"},{"line_number":89,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":93,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_c661be3b","line":90,"updated":"2017-10-31 10:23:15.000000000","message":"maybe we  should check if the new created checkpoint being available before doing delete operation?","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            reason \u003d _(\"Failed to get retention_duration\")"},{"line_number":89,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":93,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3f3ab797","line":90,"in_reply_to":"3f4b6375_c661be3b","updated":"2017-11-01 08:43:41.000000000","message":"I will modify the code, I remove the code from  protect_operation.py, and redefine the retention_protect operation, which would add retention_protect_operation.py.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":93,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"},{"line_number":94,"context_line":"            self._delete_old_backup_by_duration("},{"line_number":95,"context_line":"                client, retention_duration, project_id, provider_id, plan_id)"},{"line_number":96,"context_line":"        except Exception:"},{"line_number":97,"context_line":"            reason \u003d (_(\"Can\u0027t execute retention policy %(provider_id)s and \""},{"line_number":98,"context_line":"                        \"%(plan_id)%s\") %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_062116fc","line":95,"range":{"start_line":92,"start_character":12,"end_line":95,"end_character":77},"updated":"2017-10-31 10:23:15.000000000","message":"split this to two try catch blocks maybe better","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise exception.InvalidOperationDefinition(reason\u003dreason)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self._delete_old_backup_by_max_backups("},{"line_number":93,"context_line":"                client, max_backups, project_id, provider_id, plan_id)"},{"line_number":94,"context_line":"            self._delete_old_backup_by_duration("},{"line_number":95,"context_line":"                client, retention_duration, project_id, provider_id, plan_id)"},{"line_number":96,"context_line":"        except Exception:"},{"line_number":97,"context_line":"            reason \u003d (_(\"Can\u0027t execute retention policy %(provider_id)s and \""},{"line_number":98,"context_line":"                        \"%(plan_id)%s\") %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_bf458717","line":95,"range":{"start_line":92,"start_character":12,"end_line":95,"end_character":77},"in_reply_to":"3f4b6375_062116fc","updated":"2017-11-01 08:43:41.000000000","message":"I split this to tow try catch blocks.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                   provider_id, plan_id):"},{"line_number":105,"context_line":"        search_opts \u003d {\u0027project_id\u0027: project_id,"},{"line_number":106,"context_line":"                       \u0027plan_id\u0027: plan_id,"},{"line_number":107,"context_line":"                       \u0027start_date\u0027: None,"},{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_66b8cae4","line":108,"range":{"start_line":107,"start_character":23,"end_line":108,"end_character":40},"updated":"2017-10-31 10:23:15.000000000","message":"remove start_date and end_date here.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                   provider_id, plan_id):"},{"line_number":105,"context_line":"        search_opts \u003d {\u0027project_id\u0027: project_id,"},{"line_number":106,"context_line":"                       \u0027plan_id\u0027: plan_id,"},{"line_number":107,"context_line":"                       \u0027start_date\u0027: None,"},{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3f0877d7","line":108,"range":{"start_line":107,"start_character":23,"end_line":108,"end_character":40},"in_reply_to":"3f4b6375_66b8cae4","updated":"2017-11-01 08:43:41.000000000","message":"ok, I remove them.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_e6d4baeb","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"updated":"2017-10-31 10:23:15.000000000","message":"this may have some issues. \ncreated_at in karbor is a date, not a time, so if users have more than one checkpoints, this may delete the checkpoint that users do not want to delete.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"bc9ef93919cabff959cb4735aeec33ccb375ebfb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_5fc7b313","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_3f3197a3","updated":"2017-11-01 09:03:14.000000000","message":"for example:\nUser A created 3 checkpoints in day1, 2 checkpoints in day2, day1 \u003c day2.\nWhen he want to make max_backups \u003d 4, which one of the 3 checkpoints in day1 will be deleted?\n\ncreated_at in karbor is a date, \u0027%Y-%m-%d, not a time. so we can not know which checkpoint was created earlier in day1.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"3f627db4bcca247dd30767992ad98e98d1993481","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_c5acf436","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_5fc7b313","updated":"2017-11-01 10:27:45.000000000","message":"create_at is not very precise, is there a better time information?","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"5a8a36de5779cfa1cda2f4032e295cfaba71a680","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_d642c2ab","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_6f9921c2","updated":"2017-11-09 01:54:10.000000000","message":"Actually the \u0027created_at don\u0027t include hour, miniute, second\u0027 only affects the \u0027max_backups\u0027, not \u0027retention_duration\u0027.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"78e3f81f790505c9441439639b2afab8ae9e0bc0","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_6f9921c2","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_946d9004","updated":"2017-11-07 03:26:25.000000000","message":"to chenying: I agree with you. \nIn addition, do we discuss in 517155? is it abandoned?","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"02cd2fe2aa261626f752376677519200c39bf252","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_946d9004","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_c5acf436","updated":"2017-11-07 03:07:48.000000000","message":"IMO, even the create_at field of checkpoint don\u0027t include hour, minute, second. We also can delete the outdated checkpoint according to this create_at field.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                       \u0027end_date\u0027: None,"},{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3f3197a3","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":37},"in_reply_to":"3f4b6375_e6d4baeb","updated":"2017-11-01 08:43:41.000000000","message":"I don\u0027t understand it. Can you give a example?","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("},{"line_number":115,"context_line":"                provider_id\u003dprovider_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_46c5ce8d","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":22},"updated":"2017-10-31 10:23:15.000000000","message":"unused, so you can remove it","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                       \"status\": constants.CHECKPOINT_STATUS_AVAILABLE"},{"line_number":110,"context_line":"                       }"},{"line_number":111,"context_line":"        sort \u003d {\"created_at\": \"desc\"}"},{"line_number":112,"context_line":"        avi_check \u003d []"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            checkpoints \u003d client.checkpoints.list("},{"line_number":115,"context_line":"                provider_id\u003dprovider_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_1f281b32","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":22},"in_reply_to":"3f4b6375_46c5ce8d","updated":"2017-11-01 08:43:41.000000000","message":"I remove it.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"}],"karbor/tests/unit/operationengine/operations/test_protect_operation.py":[{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class FakeCheckPoint_one(object):"},{"line_number":38,"context_line":"    def __init__(self, id, created_at):"},{"line_number":39,"context_line":"        super(FakeCheckPoint_one, self).__init__()"},{"line_number":40,"context_line":"        self.id \u003d id"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_06ab561d","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":24},"updated":"2017-10-31 10:23:15.000000000","message":"this name is not suitable","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class FakeCheckPoint_one(object):"},{"line_number":38,"context_line":"    def __init__(self, id, created_at):"},{"line_number":39,"context_line":"        super(FakeCheckPoint_one, self).__init__()"},{"line_number":40,"context_line":"        self.id \u003d id"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3fd63729","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":24},"in_reply_to":"3f4b6375_06ab561d","updated":"2017-11-01 08:43:41.000000000","message":"Can I modify it to FakeCheckPointObject?","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"bc9ef93919cabff959cb4735aeec33ccb375ebfb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class FakeCheckPoint_one(object):"},{"line_number":38,"context_line":"    def __init__(self, id, created_at):"},{"line_number":39,"context_line":"        super(FakeCheckPoint_one, self).__init__()"},{"line_number":40,"context_line":"        self.id \u003d id"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3fe077cc","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":24},"in_reply_to":"3f4b6375_3fd63729","updated":"2017-11-01 09:03:14.000000000","message":"FakeCheckPointInstance may be better","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"17be612cff0a19ea8bfc0681d4eabbcf062d408c","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        self.assertIsNotNone(logs)"},{"line_number":132,"context_line":"        log \u003d logs.objects[0]"},{"line_number":133,"context_line":"        self.assertTrue(now, log.triggered_time)"},{"line_number":134,"context_line":"        checkpoints \u003d self._fake_karbor_client.checkpoints.list(\"123\")"},{"line_number":135,"context_line":"        self.assertEqual(2, len(checkpoints))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(base_operation.Operation, \u0027_create_karbor_client\u0027)"},{"line_number":138,"context_line":"    def test_resume(self, client):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_a1010c07","line":135,"range":{"start_line":134,"start_character":8,"end_line":135,"end_character":45},"updated":"2017-10-31 10:23:15.000000000","message":"Add new tests may be better.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"bc9ef93919cabff959cb4735aeec33ccb375ebfb","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        self.assertIsNotNone(logs)"},{"line_number":132,"context_line":"        log \u003d logs.objects[0]"},{"line_number":133,"context_line":"        self.assertTrue(now, log.triggered_time)"},{"line_number":134,"context_line":"        checkpoints \u003d self._fake_karbor_client.checkpoints.list(\"123\")"},{"line_number":135,"context_line":"        self.assertEqual(2, len(checkpoints))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(base_operation.Operation, \u0027_create_karbor_client\u0027)"},{"line_number":138,"context_line":"    def test_resume(self, client):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_1f9ffb03","line":135,"range":{"start_line":134,"start_character":8,"end_line":135,"end_character":45},"in_reply_to":"3f4b6375_3fbf57d1","updated":"2017-11-01 09:03:14.000000000","message":"no, not a new file. just need add a new method","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"},{"author":{"_account_id":22484,"name":"gengchc2","email":"geng.changcai2@zte.com.cn","username":"gengchc2"},"change_message_id":"af94040f4b64ee6a96a5e689de2c3cd9eda081b0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        self.assertIsNotNone(logs)"},{"line_number":132,"context_line":"        log \u003d logs.objects[0]"},{"line_number":133,"context_line":"        self.assertTrue(now, log.triggered_time)"},{"line_number":134,"context_line":"        checkpoints \u003d self._fake_karbor_client.checkpoints.list(\"123\")"},{"line_number":135,"context_line":"        self.assertEqual(2, len(checkpoints))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(base_operation.Operation, \u0027_create_karbor_client\u0027)"},{"line_number":138,"context_line":"    def test_resume(self, client):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_3fbf57d1","line":135,"range":{"start_line":134,"start_character":8,"end_line":135,"end_character":45},"in_reply_to":"3f4b6375_a1010c07","updated":"2017-11-01 08:43:41.000000000","message":"I will add a new file test_retention_protect_operation.py Correspond to retention_protect_operation.py.","commit_id":"f62268d086536edd344cb11a2ce5662aa66ca15d"}]}
