-
Sub-task
-
Resolution: Won't Do
-
Major
-
None
-
None
-
None
-
False
-
False
-
-
Testable
The parent issue RHELC-1153 has the label that triggered autocreation of this subtask to track the relative story point estimation for the integration test part of the issue.
The parent issue description at the time of creation of this issue was:
We have ported many of the things we need to backup and restore on rollback into the BackupController framework (by making a RestorableChange subclass to handle them) but there are some left:
- backup.changed_pkgs_control.restore_pkgs()
- repo.restore_varsdir()
- repo.restore_yum_repos()
- redhatrelease.system_release_file.restore()
- redhatrelease.os_release_file.restore()
- pkghandler.versionlock_file.restore()
It has become more important to port these because we have reached a point where we need to restore some of the things managed by the BackupController before or after the things managed manually.
In 1.4.0 we implemented an ugly hack to make that work (adding a partition to the Changes that BackupController manages so that Changes before the partition were restored first, then the unported changes, and finally, the rest of the changes managed by BackupController). Once everything is ported, we should get rid of this hack as well (It is ugly because it is fragile. Any Action can add a partition but [1]Actions don't have a set order so the partition might end up in a different place between releases [2] more than one Action adding partitions might cause the wrong set of Actions to be run before the manual rollback items.
Notes:
- BackupController is a stack. When going through the Actions in pre_ponr_changes we add new RestorableChanges to the stack. The act of adding the Change to the stack changes the system in a way that allows us to restore it during rollback (usually by making a backup. But it can be implemented in other ways as well (for instance, the Rpm GPG Keys) On rollback, the Changes are restored in reverse order.
- I implemented RestorableRpmKey in the backup.py file but I think it makes more sense to put these in the files for the subsystems they belong to. For instance, RestorableRpmKey should be moved to pkghandler.py.
- RestorableFile is used for three of the Changes that need to be ported: system_release_file, os_release_file, and versionlock_file
- Two others, restore_yum_repos and restore_varsdir are also file backup and restore with some extra logic to determine which files need to be handled.
- backup.changed_pkgs_control.restore_pkgs() (which is implemented in ChangedRPMPackagesController) is likely the most complicated on to port. At this time, it is only used for packages which we remove during pre_ponr_changes and have to reinstall during rollback. Installation during pre_ponr_changes is handled by pkghandler.RestorablePackageSet You will have to evaluate whether this port belongs in a separate class or as part of RestorablePackageSet.
Acceptance Criteria
- The Legacy backup and restore items above are ported into the backup controller.
- Rollback becomes just a matter of calling backup.backup_control.pop_all()
- The partition code is be removed (https://github.com/oamg/convert2rhel/pull/869, https://github.com/oamg/convert2rhel/pull/912)