Comments (4)
Looks like the key issue is items list being shared between the 2 models. Did some debugging in redhatsignedrpmsscanner actor and every time an rpm is added to one model's items list it immediately appears in the second model's list.
(Pdb) signed_pkgs.items,unsigned_pkgs.items
([], [])
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(38)process()
-> continue
(Pdb) signed_pkgs.items,unsigned_pkgs.items
([<leapp.models.installedrpm.RPM object at 0x7fa5d76b0890>], [<leapp.models.installedrpm.RPM object at 0x7fa5d76b0890>])
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(32)process()
-> for pkg in rpm_pkgs.items:
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(34)process()
-> if any(key in pkg.pgpsig for key in RH_SIGS) or \
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(35)process()
-> (pkg.name == 'gpg-pubkey' and pkg.packager.startswith('Red Hat, Inc.')):
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(40)process()
-> unsigned_pkgs.items.append(pkg)
(Pdb) n
> /home/ivasilev/projects/leapp-repository/repos/system_upgrade/el7toel8/actors/redhatsignedrpmscanner/actor.py(32)process()
-> for pkg in rpm_pkgs.items:
(Pdb) signed_pkgs.items,unsigned_pkgs.items
([<leapp.models.installedrpm.RPM object at 0x7fa5d76b0890>, <leapp.models.installedrpm.RPM object at 0x7fa5d76b08d0>], [<leapp.models.installedrpm.RPM object at 0x7fa5d76b0890>, <leapp.models.installedrpm.RPM object at 0x7fa5d76b08d0>])
(Pdb) signed_pkgs.items == unsigned_pkgs.items
True
from leapp-repository.
I suspect that base class fields are not copied correctly in ModelMeta.__new__
-> this causes base class and child class to share reference to the same object unless the field has been specifically redefined in child class
leapp/models/__init__.py:ModelMeta:__new__
kls_attrs = (getattr(klass, 'fields', None) or {}).copy()
iiuc this won't create proper copy of List field changing a reference to the actual underlying list object.
Created a leapp PR with bug localization\eye bleeding fix oamg/leapp#513
from leapp-repository.
@fernflower, isn't this fixed by oamg/leapp#513?
from leapp-repository.
@bocekm it is, thank you!
from leapp-repository.
Related Issues (20)
- leapp update failed on “check_installed_kernels” HOT 7
- Reply > leapp update failed on “check_installed_kernels” HOT 2
- "leapp update" failed on python problem after downloading pacages HOT 3
- leapp upgrade removes a lot packages on the upgrading process (as marked on report file) HOT 5
- Detect the correct kernel RPM name of the target installed kernel
- Replace long urls and remove lint silencer
- lvm2-cluster package breaks upgrade HOT 6
- error leap upgrade HOT 1
- Doing an EL8 to EL9 upgrade on raid1 /boot drives results in (potentially) unbootable system HOT 5
- CentOS 7,9 to Almalinux: missing named-user-options.conf HOT 7
- leapp preupgrade fails with python error HOT 3
- package leapp-upgrade-el7toel8-1:0.16.0-6.el7.elevate.8.noarch conflicts with leapp-upgrade-el8toel9 provided by leapp-upgrade-el8toel9-0.17.0-3.el8.noarch when upgrade almalinux 8 to 9 HOT 13
- Why does Leapp upgrade fails with 'NameError: global name 'dnf' is not defined' ? HOT 1
- NameError: global name 'dnf' is not defined HOT 1
- pes-events.json license HOT 5
- Leapp does not detect qemu64 CPU incompatibility with CentOS-9 HOT 4
- efibootmgr exit code 5 during leapp efi_finalization_fix HOT 2
- Unexpected format of target version: 7 HOT 3
- Enhancement: Support for luks encrypted root and non root filesystems HOT 6
- Nginx module is getting downgraded when migrate from centos to Rocky HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from leapp-repository.