)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b01815f2d7b698de3940cf5bc0786e406b346ac6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"   exception occurs, migration status will be set to error and that"},{"line_number":13,"context_line":"   also means source host or destination host might have not finished"},{"line_number":14,"context_line":"   cleanup."},{"line_number":15,"context_line":"b) there might be orphan instances not being cleaned up."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Currently, we calculate assignments based on tracked instances and"},{"line_number":18,"context_line":"migrations, so we need taking orphan instances and error migrations"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f560f44_a296314b","line":15,"range":{"start_line":15,"start_character":3,"end_line":15,"end_character":56},"updated":"2020-08-04 06:52:06.000000000","message":"at least, we can separated this into another patch I think","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LuyaoZhong \u003cluyao.zhong@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-08-07 04:46:34 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"introduce a new driver interface \u0027cleanup_instance\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_8a899b76","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"updated":"2020-08-20 09:45:32.000000000","message":"I","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LuyaoZhong \u003cluyao.zhong@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-08-07 04:46:34 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"introduce a new driver interface \u0027cleanup_instance\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_bed2afcf","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"in_reply_to":"9f560f44_8a899b76","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"introduce a new driver interface \u0027cleanup_instance\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"},{"line_number":11,"context_line":"whatever we add in the future."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_ea7ad774","line":9,"range":{"start_line":9,"start_character":70,"end_line":9,"end_character":76},"updated":"2020-08-20 09:45:32.000000000","message":"nit: wrapping (72 characters in commit messages)","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"introduce a new driver interface \u0027cleanup_instance\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"},{"line_number":11,"context_line":"whatever we add in the future."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_1edbdbec","line":9,"range":{"start_line":9,"start_character":70,"end_line":9,"end_character":76},"in_reply_to":"9f560f44_ea7ad774","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"},{"line_number":11,"context_line":"whatever we add in the future."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id553242d61eb167a58cdbea75423a5acf3ca7467"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_ca7f1364","line":12,"updated":"2020-08-20 09:45:32.000000000","message":"A link to the blueprint would be helpful too","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The driver interface \u0027delete_instance_files\u0027 is removed. This function takes"},{"line_number":10,"context_line":"charge of lingering instance cleanup, including instance files deletes and"},{"line_number":11,"context_line":"whatever we add in the future."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id553242d61eb167a58cdbea75423a5acf3ca7467"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9f560f44_fed707be","line":12,"in_reply_to":"9f560f44_ca7f1364","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"}],"nova/compute/manager.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                # Short circuit, don\u0027t waste a DB call"},{"line_number":674,"context_line":"                return objects.InstanceList()"},{"line_number":675,"context_line":"            filters[\u0027uuid\u0027] \u003d driver_uuids"},{"line_number":676,"context_line":"            # NOTE(luyao): we need host filter since if instance.host is"},{"line_number":677,"context_line":"            # not current host, it must be an migrating instance, which"},{"line_number":678,"context_line":"            # should be handled in _cleanup_incomplete_migrations"},{"line_number":679,"context_line":"            filters[\u0027host\u0027] \u003d self.host"},{"line_number":680,"context_line":"            local_instances \u003d objects.InstanceList.get_by_filters("},{"line_number":681,"context_line":"                context, filters, use_slave\u003dTrue)"},{"line_number":682,"context_line":"            return local_instances"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_2dd6cf28","line":679,"range":{"start_line":676,"start_character":12,"end_line":679,"end_character":39},"updated":"2020-03-26 07:00:11.000000000","message":"this will be a problem for evacuated instance cleanup https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L744","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                # Short circuit, don\u0027t waste a DB call"},{"line_number":674,"context_line":"                return objects.InstanceList()"},{"line_number":675,"context_line":"            filters[\u0027uuid\u0027] \u003d driver_uuids"},{"line_number":676,"context_line":"            # NOTE(luyao): we need host filter since if instance.host is"},{"line_number":677,"context_line":"            # not current host, it must be an migrating instance, which"},{"line_number":678,"context_line":"            # should be handled in _cleanup_incomplete_migrations"},{"line_number":679,"context_line":"            filters[\u0027host\u0027] \u003d self.host"},{"line_number":680,"context_line":"            local_instances \u003d objects.InstanceList.get_by_filters("},{"line_number":681,"context_line":"                context, filters, use_slave\u003dTrue)"},{"line_number":682,"context_line":"            return local_instances"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_6d8617de","line":679,"range":{"start_line":676,"start_character":12,"end_line":679,"end_character":39},"in_reply_to":"df33271e_2dd6cf28","updated":"2020-03-26 07:40:07.000000000","message":"yeah, I can pass this filter when invoking this method.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":10288,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10289,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10290,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10291,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10292,"context_line":"                        try:"},{"line_number":10293,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10294,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_4da193a9","line":10291,"updated":"2020-03-26 07:00:11.000000000","message":"can we call \"driver.rollback_live_migration_at_destination\"?","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"abcf8350bdd95202745ae57ba3b15e83b8f5c95c","unresolved":false,"context_lines":[{"line_number":10288,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10289,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10290,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10291,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10292,"context_line":"                        try:"},{"line_number":10293,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10294,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_2415389d","line":10291,"in_reply_to":"df33271e_09d76d25","updated":"2020-03-27 03:28:41.000000000","message":"we are not sure this is a error \u0027live\u0027 migration.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":10288,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10289,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10290,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10291,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10292,"context_line":"                        try:"},{"line_number":10293,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10294,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_cd7da31d","line":10291,"in_reply_to":"df33271e_4da193a9","updated":"2020-03-26 07:40:07.000000000","message":"we are not sure if this host is destination","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3acfa09c4a3b78c21e871baf9080416a99615ddb","unresolved":false,"context_lines":[{"line_number":10288,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10289,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10290,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10291,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10292,"context_line":"                        try:"},{"line_number":10293,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10294,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_09d76d25","line":10291,"in_reply_to":"df33271e_cd7da31d","updated":"2020-03-27 00:04:07.000000000","message":"emm...we can figure it out by line 10288. so we can call the \u0027rollback_live_migration_at_destination\u0027 or \u0027cleanup\u0027?","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":8644,"context_line":"    @wrap_instance_fault"},{"line_number":8645,"context_line":"    def _rollback_live_migration(self, context, instance,"},{"line_number":8646,"context_line":"                                 dest, migrate_data\u003dNone,"},{"line_number":8647,"context_line":"                                 migration_status\u003d\u0027failed\u0027,"},{"line_number":8648,"context_line":"                                 source_bdms\u003dNone):"},{"line_number":8649,"context_line":"        \"\"\"Recovers Instance/volume state from migrating -\u003e running."},{"line_number":8650,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_6fd76725","line":8647,"range":{"start_line":8647,"start_character":50,"end_line":8647,"end_character":58},"updated":"2020-07-27 09:55:22.000000000","message":"This is a big change, and I don\u0027t see anything about it in the commit message. Could you note the rationale for this change in the commit message, please?","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"997120d95071da832332c96b0aca1663b899aae2","unresolved":false,"context_lines":[{"line_number":8644,"context_line":"    @wrap_instance_fault"},{"line_number":8645,"context_line":"    def _rollback_live_migration(self, context, instance,"},{"line_number":8646,"context_line":"                                 dest, migrate_data\u003dNone,"},{"line_number":8647,"context_line":"                                 migration_status\u003d\u0027failed\u0027,"},{"line_number":8648,"context_line":"                                 source_bdms\u003dNone):"},{"line_number":8649,"context_line":"        \"\"\"Recovers Instance/volume state from migrating -\u003e running."},{"line_number":8650,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_877d5b1e","line":8647,"range":{"start_line":8647,"start_character":50,"end_line":8647,"end_character":58},"in_reply_to":"9f560f44_6fd76725","updated":"2020-07-29 06:46:48.000000000","message":"Sure. I\u0027ll make it more understandable.\nIn commit message, I proposed that \u0027error\u0027 migrations should be tracked, so \u0027error\u0027 should not be a final state. if _rollback_live_migration triggers some exception(maybe resource cleanup is not finished), the status is set to \u0027error\u0027, it should be differ from a successful rollback. So I\u0027d like set the migration status to \u0027failed\u0027 to mark it as a finished state.","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5b8d613c9d478855d7f58d121f49af99a64d9575","unresolved":false,"context_lines":[{"line_number":8644,"context_line":"    @wrap_instance_fault"},{"line_number":8645,"context_line":"    def _rollback_live_migration(self, context, instance,"},{"line_number":8646,"context_line":"                                 dest, migrate_data\u003dNone,"},{"line_number":8647,"context_line":"                                 migration_status\u003d\u0027failed\u0027,"},{"line_number":8648,"context_line":"                                 source_bdms\u003dNone):"},{"line_number":8649,"context_line":"        \"\"\"Recovers Instance/volume state from migrating -\u003e running."},{"line_number":8650,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_337c431e","line":8647,"range":{"start_line":8647,"start_character":50,"end_line":8647,"end_character":58},"in_reply_to":"9f560f44_877d5b1e","updated":"2020-08-03 09:40:54.000000000","message":"Also, orphan should not be a instance final state, \u0027error\u0027 migrations and orphans should be both tracked in resource tracker until they are cleaned up.","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":8785,"context_line":"                phase\u003dfields.NotificationPhase.END,"},{"line_number":8786,"context_line":"                bdms\u003dbdms)"},{"line_number":8787,"context_line":""},{"line_number":8788,"context_line":"        # NOTE(luyao): we have cleanup all stuff and get instance"},{"line_number":8789,"context_line":"        # back to normal status, then set migration status to \u0027failed\u0027"},{"line_number":8790,"context_line":"        self._set_migration_status(migration, migration_status)"},{"line_number":8791,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_cfdcb348","line":8788,"range":{"start_line":8788,"start_character":31,"end_line":8788,"end_character":38},"updated":"2020-07-27 09:55:22.000000000","message":"cleaned up","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":8785,"context_line":"                phase\u003dfields.NotificationPhase.END,"},{"line_number":8786,"context_line":"                bdms\u003dbdms)"},{"line_number":8787,"context_line":""},{"line_number":8788,"context_line":"        # NOTE(luyao): we have cleanup all stuff and get instance"},{"line_number":8789,"context_line":"        # back to normal status, then set migration status to \u0027failed\u0027"},{"line_number":8790,"context_line":"        self._set_migration_status(migration, migration_status)"},{"line_number":8791,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_afe17f01","line":8788,"range":{"start_line":8788,"start_character":39,"end_line":8788,"end_character":49},"updated":"2020-07-27 09:55:22.000000000","message":"everything","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":8786,"context_line":"                bdms\u003dbdms)"},{"line_number":8787,"context_line":""},{"line_number":8788,"context_line":"        # NOTE(luyao): we have cleanup all stuff and get instance"},{"line_number":8789,"context_line":"        # back to normal status, then set migration status to \u0027failed\u0027"},{"line_number":8790,"context_line":"        self._set_migration_status(migration, migration_status)"},{"line_number":8791,"context_line":""},{"line_number":8792,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_0fe6ab17","line":8789,"range":{"start_line":8789,"start_character":31,"end_line":8789,"end_character":37},"updated":"2020-07-27 09:55:22.000000000","message":"; now","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":10346,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10347,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10348,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10349,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10350,"context_line":"                        try:"},{"line_number":10351,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10352,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_8f8e3b25","line":10349,"updated":"2020-07-27 09:55:22.000000000","message":"Rather than adding yet another cleanup-related helper function (I suspect \u0027delete_instance_files\u0027 was added purely for this code path), how much work would it be to make \u0027self.driver.cleanup\u0027 work for this code path? If that\u0027s not possible, what about a more generic \u0027cleanup_instance\u0027 function that handles resources, files and whatever else we may add in the future?","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"997120d95071da832332c96b0aca1663b899aae2","unresolved":false,"context_lines":[{"line_number":10346,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027)"},{"line_number":10347,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10348,"context_line":"                            # Cleanup specific resources, such as vpmems"},{"line_number":10349,"context_line":"                            self.driver.cleanup_specific_resources(instance)"},{"line_number":10350,"context_line":"                        try:"},{"line_number":10351,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10352,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_e766d751","line":10349,"in_reply_to":"9f560f44_8f8e3b25","updated":"2020-07-29 06:46:48.000000000","message":"I thought about using driver.cleanup, but I think it\u0027s used for instance.host \u003d\u003d CONF.host. I prefer a new generic \u0027cleanup_instance\u0027 function.","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":10268,"context_line":"        return results"},{"line_number":10269,"context_line":""},{"line_number":10270,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":10271,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":10272,"context_line":"        \"\"\"Retry any pending instance cleanup.\"\"\""},{"line_number":10273,"context_line":"        LOG.debug(\u0027Cleaning up deleted instances\u0027)"},{"line_number":10274,"context_line":"        filters \u003d {\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_6a8ec779","line":10271,"range":{"start_line":10271,"start_character":8,"end_line":10271,"end_character":28},"updated":"2020-08-20 09:45:32.000000000","message":"Can you rename this to \u0027_run_pending_instance_deletes\u0027?","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":10268,"context_line":"        return results"},{"line_number":10269,"context_line":""},{"line_number":10270,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":10271,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":10272,"context_line":"        \"\"\"Retry any pending instance cleanup.\"\"\""},{"line_number":10273,"context_line":"        LOG.debug(\u0027Cleaning up deleted instances\u0027)"},{"line_number":10274,"context_line":"        filters \u003d {\u0027deleted\u0027: True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_3ede9fd9","line":10271,"range":{"start_line":10271,"start_character":8,"end_line":10271,"end_character":28},"in_reply_to":"9f560f44_6a8ec779","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":10328,"context_line":"            if instance.host !\u003d CONF.host:"},{"line_number":10329,"context_line":"                for migration in migrations:"},{"line_number":10330,"context_line":"                    if instance.uuid \u003d\u003d migration.instance_uuid:"},{"line_number":10331,"context_line":"                        self.driver.cleanup_instance(instance)"},{"line_number":10332,"context_line":"                        try:"},{"line_number":10333,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10334,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_8ad7db4b","line":10331,"updated":"2020-08-20 09:45:32.000000000","message":"As an aside, we don\u0027t check the return value here to ensure cleanup was successful. It sounds reasonable to add a LOG here if it failed, e.g.:\n\n  LOG.info(\n      \u0027Failed to cleanup instance with incomplete migration. \u0027\n      \u0027Manual cleanup may be necessary.\u0027,\n      instance\u003dinstance\n  )\n\nYou\u0027ll have a hard time wrapping this so consider de-denting the whole block, e.g.\n\n  for instance in instances:\n      if instance.host \u003d\u003d CONF.host:\n          continue\n\n      for migration in migrations:\n          if instance.uuid !\u003d migration.instance_uuid:\n              continue\n\n          cleaned \u003d self.driver.cleanup_instance(instance)\n          if not cleaned:\n              LOG.warning(...)\n\n          ...\n\nI\u0027m okay with all this being done in a follow-up but please do it if you can :)","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":10328,"context_line":"            if instance.host !\u003d CONF.host:"},{"line_number":10329,"context_line":"                for migration in migrations:"},{"line_number":10330,"context_line":"                    if instance.uuid \u003d\u003d migration.instance_uuid:"},{"line_number":10331,"context_line":"                        self.driver.cleanup_instance(instance)"},{"line_number":10332,"context_line":"                        try:"},{"line_number":10333,"context_line":"                            migration.status \u003d \u0027failed\u0027"},{"line_number":10334,"context_line":"                            migration.save()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_9ef08b69","line":10331,"in_reply_to":"9f560f44_8ad7db4b","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86936483d7547b3aaacfa7fcb471a5776ce7d921","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_53afa02a","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"updated":"2020-08-31 06:06:20.000000000","message":"I remember the instance db record won\u0027t be marked as deleted until vpmem cleanup successful. So we shouldn\u0027t have the case db record is removed, but the cleanup failed.","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"9af4f16e62937955b003c1db0d258825df961280","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_b601ca07","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"in_reply_to":"9f560f44_53afa02a","updated":"2020-08-31 06:35:02.000000000","message":"we can add a parameter to this driver function later(in subsequent patch), this change has nothing to do with vpmem.","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cf5f041e2634a32711f47cad7e40845a97d09b49","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_58958231","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"in_reply_to":"9f560f44_56678eeb","updated":"2020-09-08 09:15:53.000000000","message":"I don\u0027t understand this comment. Could you restate the issue?","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f458554a4d9a12de3dda1c2db4050713ebf0e903","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_9b69d4bf","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"in_reply_to":"9f560f44_58958231","updated":"2020-09-08 09:51:17.000000000","message":"Ah, okay, I think you\u0027re saying that the \u0027_cleanup\u0027 function in the libvirt driver will call \u0027_cleanup_vpmems\u0027 if there are vPMEM devices present, which will raise an exception if cleanup failed. Because this exception will be raised, there\u0027s no way we can get here and still have leftover vPMEM devices to cleanup","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"bb47fcce4bc4a479d6632e69392c1b48d318d72d","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_2c2330a9","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"in_reply_to":"9f560f44_9b69d4bf","updated":"2020-09-08 12:37:58.000000000","message":"yes","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"87a3106d4263949f759fbcd4cd5f70771c883616","unresolved":false,"context_lines":[{"line_number":10321,"context_line":"                       \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":10322,"context_line":"                      instance\u003dinstance)"},{"line_number":10323,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":10324,"context_line":"                success \u003d self.driver.cleanup_instance(instance)"},{"line_number":10325,"context_line":""},{"line_number":10326,"context_line":"                instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":10327,"context_line":"                if success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_56678eeb","line":10324,"range":{"start_line":10324,"start_character":27,"end_line":10324,"end_character":64},"in_reply_to":"9f560f44_b601ca07","updated":"2020-08-31 06:50:23.000000000","message":"you are right, that can be done later patch.","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"387fb2e0a59f40cf05a556d1ef8b36140e04e506","unresolved":false,"context_lines":[{"line_number":10358,"context_line":""},{"line_number":10359,"context_line":"        for instance in instances:"},{"line_number":10360,"context_line":"            if instance.host \u003d\u003d CONF.host:"},{"line_number":10361,"context_line":"                continue"},{"line_number":10362,"context_line":"            for migration in migrations:"},{"line_number":10363,"context_line":"                if instance.uuid !\u003d migration.instance_uuid:"},{"line_number":10364,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_18378ab2","line":10361,"updated":"2020-09-08 09:01:45.000000000","message":"nit: newline after this would help visually group stuff","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"387fb2e0a59f40cf05a556d1ef8b36140e04e506","unresolved":false,"context_lines":[{"line_number":10361,"context_line":"                continue"},{"line_number":10362,"context_line":"            for migration in migrations:"},{"line_number":10363,"context_line":"                if instance.uuid !\u003d migration.instance_uuid:"},{"line_number":10364,"context_line":"                    continue"},{"line_number":10365,"context_line":"                cleaned \u003d self.driver.cleanup_instance(instance)"},{"line_number":10366,"context_line":"                if not cleaned:"},{"line_number":10367,"context_line":"                    LOG.warning(\"Failed to cleanup instance with incomplete \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_583d828c","line":10364,"updated":"2020-09-08 09:01:45.000000000","message":"ditto","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        # Grab all error migrations:"},{"line_number":893,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":894,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027,"},{"line_number":895,"context_line":"                          \u0027node\u0027: nodename})"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":898,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_2dd52f44","line":895,"range":{"start_line":892,"start_character":8,"end_line":895,"end_character":44},"updated":"2020-03-26 07:00:11.000000000","message":"can we merge this with line 887 as one DB call?","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        # Grab all error migrations:"},{"line_number":893,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":894,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027,"},{"line_number":895,"context_line":"                          \u0027node\u0027: nodename})"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":898,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_eda7c7a6","line":895,"range":{"start_line":892,"start_character":8,"end_line":895,"end_character":44},"in_reply_to":"df33271e_2dd52f44","updated":"2020-03-26 07:40:07.000000000","message":"if we define a new db api I think it might be OK to merge them.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":915,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":916,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"},{"line_number":917,"context_line":"        orphan_uuids \u003d frozenset(instance_vuuids) - instance_uuids"},{"line_number":918,"context_line":"        orphan_insts \u003d objects.InstanceList.get_by_filters("},{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_0d030bba","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":20},"updated":"2020-03-26 07:00:11.000000000","message":"what is different with the orphans we got at line 910?","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"abcf8350bdd95202745ae57ba3b15e83b8f5c95c","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":915,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":916,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"},{"line_number":917,"context_line":"        orphan_uuids \u003d frozenset(instance_vuuids) - instance_uuids"},{"line_number":918,"context_line":"        orphan_insts \u003d objects.InstanceList.get_by_filters("},{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_af4be128","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":20},"in_reply_to":"df33271e_09c00d50","updated":"2020-03-27 03:28:41.000000000","message":"I\u0027m afraid we can\u0027t, orphans(line 910) record usage of each orphan, but list_instance_uuids just gets uuids.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":915,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":916,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"},{"line_number":917,"context_line":"        orphan_uuids \u003d frozenset(instance_vuuids) - instance_uuids"},{"line_number":918,"context_line":"        orphan_insts \u003d objects.InstanceList.get_by_filters("},{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_ad393f40","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":20},"in_reply_to":"df33271e_0d030bba","updated":"2020-03-26 07:40:07.000000000","message":"orphans(line 910) are from get_per_instance_usage(line 1633), only xenapi implement this method. We use list_instance_uuids here.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3acfa09c4a3b78c21e871baf9080416a99615ddb","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":915,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":916,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"},{"line_number":917,"context_line":"        orphan_uuids \u003d frozenset(instance_vuuids) - instance_uuids"},{"line_number":918,"context_line":"        orphan_insts \u003d objects.InstanceList.get_by_filters("},{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_09c00d50","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":20},"in_reply_to":"df33271e_ad393f40","updated":"2020-03-27 00:04:07.000000000","message":"I\u0027m thinking we should be able change that. replace get_pre_instance_usage with list_instance_uuids","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"},{"line_number":921,"context_line":"        for instance in orphan_insts:"},{"line_number":922,"context_line":"            migration_ctxt \u003d instance.migration_context"},{"line_number":923,"context_line":"            if not migration_ctxt:"},{"line_number":924,"context_line":"                self.tracked_instances.add(instance.uuid)"},{"line_number":925,"context_line":"                instance_by_uuid[instance.uuid] \u003d instance"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_adf3ffe6","line":922,"range":{"start_line":922,"start_character":11,"end_line":922,"end_character":55},"updated":"2020-03-26 07:00:11.000000000","message":"It means we have the case migration is finished. But we still have migration_context? I thought the migration_context will be dropped, when the migration finished.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"},{"line_number":921,"context_line":"        for instance in orphan_insts:"},{"line_number":922,"context_line":"            migration_ctxt \u003d instance.migration_context"},{"line_number":923,"context_line":"            if not migration_ctxt:"},{"line_number":924,"context_line":"                self.tracked_instances.add(instance.uuid)"},{"line_number":925,"context_line":"                instance_by_uuid[instance.uuid] \u003d instance"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_cd276312","line":922,"range":{"start_line":922,"start_character":11,"end_line":922,"end_character":55},"in_reply_to":"df33271e_adf3ffe6","updated":"2020-03-26 07:40:07.000000000","message":"if migration_context is not dropped, it means migration is not finished, so we put it in tracked_mirations(line 929), otherwise we treat this instance not in migrating, and put it in tacked_iinstances(line 924).","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"abcf8350bdd95202745ae57ba3b15e83b8f5c95c","unresolved":false,"context_lines":[{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"},{"line_number":921,"context_line":"        for instance in orphan_insts:"},{"line_number":922,"context_line":"            migration_ctxt \u003d instance.migration_context"},{"line_number":923,"context_line":"            if not migration_ctxt:"},{"line_number":924,"context_line":"                self.tracked_instances.add(instance.uuid)"},{"line_number":925,"context_line":"                instance_by_uuid[instance.uuid] \u003d instance"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_6ff439f3","line":922,"range":{"start_line":922,"start_character":11,"end_line":922,"end_character":55},"in_reply_to":"df33271e_c9ec65f5","updated":"2020-03-27 03:28:41.000000000","message":"Yes it\u0027s what I expect","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3acfa09c4a3b78c21e871baf9080416a99615ddb","unresolved":false,"context_lines":[{"line_number":919,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":920,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"},{"line_number":921,"context_line":"        for instance in orphan_insts:"},{"line_number":922,"context_line":"            migration_ctxt \u003d instance.migration_context"},{"line_number":923,"context_line":"            if not migration_ctxt:"},{"line_number":924,"context_line":"                self.tracked_instances.add(instance.uuid)"},{"line_number":925,"context_line":"                instance_by_uuid[instance.uuid] \u003d instance"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_c9ec65f5","line":922,"range":{"start_line":922,"start_character":11,"end_line":922,"end_character":55},"in_reply_to":"df33271e_cd276312","updated":"2020-03-27 00:04:07.000000000","message":"The migration\u0027s status shouldn\u0027t be fail or finished before the cleanup done, right?","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"80ee65cf07b7c231d0300ec513e15b12d8c066d4","unresolved":false,"context_lines":[{"line_number":1350,"context_line":"            except exception.InstanceNotFound as e:"},{"line_number":1351,"context_line":"                # migration referencing deleted instance"},{"line_number":1352,"context_line":"                LOG.debug(\u0027Migration instance not found: %s\u0027, e)"},{"line_number":1353,"context_line":"                # get the deleted instance"},{"line_number":1354,"context_line":"                filters \u003d {\u0027uuid\u0027: [uuid], \u0027deleted\u0027: True}"},{"line_number":1355,"context_line":"                insts \u003d objects.InstanceList.get_by_filters(context, filters)"},{"line_number":1356,"context_line":"                if insts:"},{"line_number":1357,"context_line":"                    instances[uuid] \u003d insts[0]"},{"line_number":1358,"context_line":"                else:"},{"line_number":1359,"context_line":"                    continue"},{"line_number":1360,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_2d31afa3","line":1357,"range":{"start_line":1353,"start_character":16,"end_line":1357,"end_character":46},"updated":"2020-03-26 07:00:11.000000000","message":"there should be a more effective way to get those deleted instances.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"aa1fa0cafd1c2b5fcaabeb8d1716dfad8e4a95b5","unresolved":false,"context_lines":[{"line_number":1350,"context_line":"            except exception.InstanceNotFound as e:"},{"line_number":1351,"context_line":"                # migration referencing deleted instance"},{"line_number":1352,"context_line":"                LOG.debug(\u0027Migration instance not found: %s\u0027, e)"},{"line_number":1353,"context_line":"                # get the deleted instance"},{"line_number":1354,"context_line":"                filters \u003d {\u0027uuid\u0027: [uuid], \u0027deleted\u0027: True}"},{"line_number":1355,"context_line":"                insts \u003d objects.InstanceList.get_by_filters(context, filters)"},{"line_number":1356,"context_line":"                if insts:"},{"line_number":1357,"context_line":"                    instances[uuid] \u003d insts[0]"},{"line_number":1358,"context_line":"                else:"},{"line_number":1359,"context_line":"                    continue"},{"line_number":1360,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_ad22dfff","line":1357,"range":{"start_line":1353,"start_character":16,"end_line":1357,"end_character":46},"in_reply_to":"df33271e_2d31afa3","updated":"2020-03-26 07:40:07.000000000","message":"Maybe we need another new db api here.","commit_id":"0f67868e85396e6acf6d4b5ed9c0376b40ace4b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b01815f2d7b698de3940cf5bc0786e406b346ac6","unresolved":false,"context_lines":[{"line_number":911,"context_line":""},{"line_number":912,"context_line":"        # Detect and account for orphaned instances that may exist on the"},{"line_number":913,"context_line":"        # hypervisor, but are not in the DB:"},{"line_number":914,"context_line":"        orphans \u003d self._find_orphaned_instances()"},{"line_number":915,"context_line":"        self._update_usage_from_orphans(orphans, nodename)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"        instance_uuids1 \u003d frozenset(self.tracked_instances)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_827ccd1f","line":914,"range":{"start_line":914,"start_character":8,"end_line":914,"end_character":49},"updated":"2020-08-04 06:52:06.000000000","message":"I can\u0027t recall whether we discussed this before...since this method already find the orphans instance, the only need is implement virtdriver.get_per_instance_usage for libvirt virt driver.\n\nThen we needn\u0027t the logic you add below.","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        orphans \u003d self._find_orphaned_instances()"},{"line_number":915,"context_line":"        self._update_usage_from_orphans(orphans, nodename)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"        instance_uuids1 \u003d frozenset(self.tracked_instances)"},{"line_number":918,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":919,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":920,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_8fd2bb33","line":917,"updated":"2020-07-27 09:55:22.000000000","message":"This really needs a context comment","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"997120d95071da832332c96b0aca1663b899aae2","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        orphans \u003d self._find_orphaned_instances()"},{"line_number":915,"context_line":"        self._update_usage_from_orphans(orphans, nodename)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"        instance_uuids1 \u003d frozenset(self.tracked_instances)"},{"line_number":918,"context_line":"        instance_uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":919,"context_line":"        instance_uuids \u003d instance_uuids1 | instance_uuids2"},{"line_number":920,"context_line":"        instance_vuuids \u003d self.driver.list_instance_uuids()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_67d767c1","line":917,"in_reply_to":"9f560f44_8fd2bb33","updated":"2020-07-29 06:46:48.000000000","message":"ok, I\u0027ll add some notes here","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":7073,"context_line":"        mock_get.assert_called_once_with(ctxt,"},{"line_number":7074,"context_line":"                                         {\u0027deleted\u0027: True,"},{"line_number":7075,"context_line":"                                          \u0027soft_deleted\u0027: False,"},{"line_number":7076,"context_line":"                                           \u0027host\u0027: self.compute.host})"},{"line_number":7077,"context_line":"        mock_power.assert_has_calls([mock.call(inst1), mock.call(inst2)])"},{"line_number":7078,"context_line":"        mock_set.assert_has_calls([mock.call(inst1, False),"},{"line_number":7079,"context_line":"                                   mock.call(inst2, False)])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_0f94eb43","line":7076,"range":{"start_line":7076,"start_character":42,"end_line":7076,"end_character":43},"updated":"2020-07-27 09:55:22.000000000","message":"nit","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"}],"nova/virt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b09c887136dec2a06740ac8f74f1fb7c2db0f36d","unresolved":false,"context_lines":[{"line_number":1855,"context_line":"        \"\"\""},{"line_number":1856,"context_line":"        return False"},{"line_number":1857,"context_line":""},{"line_number":1858,"context_line":"    def cleanup_specific_resources(self, instance):"},{"line_number":1859,"context_line":"        \"\"\"Cleanup specific resources like vpmem.\"\"\""},{"line_number":1860,"context_line":"        pass"},{"line_number":1861,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_cf279364","line":1858,"updated":"2020-07-27 09:55:22.000000000","message":"Is there any reason to add this new API, rather than include it in \u0027cleanup\u0027 or make it private for the libvirt driver (e.g. \u0027_cleanup_resources\u0027)? Is this something that you envision being supported by non-libvirt drivers?","commit_id":"04acddbc26ed9e6d3f426ca58ca145c5e1730a1a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7a04520c085c0d6f9a3a92e47c255c6700f06e5a","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"                      {\u0027event\u0027: event, \u0027ex\u0027: ex})"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"    def cleanup_instance(self, instance):"},{"line_number":1691,"context_line":"        \"\"\"Cleanup resources occupied by lingering instance. For example,"},{"line_number":1692,"context_line":"        delete any lingering instance files."},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"        :param instance: nova.objects.instance.Instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_4a5dc313","line":1691,"range":{"start_line":1691,"start_character":60,"end_line":1691,"end_character":73},"updated":"2020-08-20 09:37:00.000000000","message":"nit: Can you put this on a newline.\n\n  Short summary of function here.\n\n  Longer description here with lots and lots of text. Blah\n  blah blah.\n\n  :param foo: bleh\n  :returns: bloop","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"                      {\u0027event\u0027: event, \u0027ex\u0027: ex})"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"    def cleanup_instance(self, instance):"},{"line_number":1691,"context_line":"        \"\"\"Cleanup resources occupied by lingering instance. For example,"},{"line_number":1692,"context_line":"        delete any lingering instance files."},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"        :param instance: nova.objects.instance.Instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_7ef5b756","line":1691,"range":{"start_line":1691,"start_character":60,"end_line":1691,"end_character":73},"in_reply_to":"9f560f44_4a5dc313","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"043cd08a0bf84e25da822ebfd2f1f27f9f213ea6","unresolved":false,"context_lines":[{"line_number":1692,"context_line":"        delete any lingering instance files."},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":1695,"context_line":"        :returns: True if the cleanup is successful."},{"line_number":1696,"context_line":"        \"\"\""},{"line_number":1697,"context_line":"        return True"},{"line_number":1698,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_4a4e6338","line":1695,"range":{"start_line":1695,"start_character":51,"end_line":1695,"end_character":52},"updated":"2020-08-20 09:45:32.000000000","message":", else False.","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"5eb1d35145b8e03fa6298bb6db9dd5dc0cdb27f5","unresolved":false,"context_lines":[{"line_number":1692,"context_line":"        delete any lingering instance files."},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":1695,"context_line":"        :returns: True if the cleanup is successful."},{"line_number":1696,"context_line":"        \"\"\""},{"line_number":1697,"context_line":"        return True"},{"line_number":1698,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_dee683b0","line":1695,"range":{"start_line":1695,"start_character":51,"end_line":1695,"end_character":52},"in_reply_to":"9f560f44_4a4e6338","updated":"2020-08-24 09:11:41.000000000","message":"Done","commit_id":"adb6d60889cccbc8bee575d889db8760f1979950"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"387fb2e0a59f40cf05a556d1ef8b36140e04e506","unresolved":false,"context_lines":[{"line_number":1693,"context_line":"        For example, delete any lingering instance files."},{"line_number":1694,"context_line":""},{"line_number":1695,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":1696,"context_line":"        :returns: True if the cleanup is successful, else false."},{"line_number":1697,"context_line":"        \"\"\""},{"line_number":1698,"context_line":"        return True"},{"line_number":1699,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_984a7a24","line":1696,"range":{"start_line":1696,"start_character":58,"end_line":1696,"end_character":63},"updated":"2020-09-08 09:01:45.000000000","message":"False","commit_id":"8eb20054c5e3cd34efab273cbd15ad1c27c5fb29"}]}
