Improve channels model generation performance (bsc#1259225)#11750
Improve channels model generation performance (bsc#1259225)#11750mackdk wants to merge 2 commits intouyuni-project:masterfrom
Conversation
|
👋 Hello! Thanks for contributing to our project. You can see the progress at the end of this page and at https://github.com/uyuni-project/uyuni/pull/11750/checks If you are unsure the failing tests are related to your code, you can check the "reference jobs". These are jobs that run on a scheduled time with code from master. If they fail for the same reason as your build, it means the tests or the infrastructure are broken. If they do not fail, but yours do, it means it is related to your code. Reference tests: KNOWN ISSUES Sometimes the build can fail when pulling new jar files from download.opensuse.org . This is a known limitation. Given this happens rarely, when it does, all you need to do is rerun the test. Sorry for the inconvenience. For more tips on troubleshooting, see the troubleshooting guide. Happy hacking! |
There was a problem hiding this comment.
Pull request overview
This PR targets faster rendering of the peripheral channel selection page by reducing expensive per-channel lookups and building the channel tree from a single “accessible channels” query.
Changes:
- Added a lightweight
ChannelInfoDTOrecord and a newChannelFactory.getAccessibleChannels(User)native query to fetch all channel metadata in one pass. - Refactored
HubManager.getChannelSyncModelForPeripheralto build children/clone relationships in-memory (avoids N+1 queries) and added timing logs for model-building steps. - Wrapped the controller’s channel model creation in
TimeUtils.logTimefor timing visibility and added a changelog entry.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| java/spacewalk-java.changes.mackdk.issv3-improve-channels-selection-performance | Adds changelog entry for the performance optimization. |
| java/core/src/main/java/com/suse/manager/webui/controllers/admin/AdminViewsController.java | Adds timing wrapper around peripheral channel sync page model creation. |
| java/core/src/main/java/com/suse/manager/model/hub/ChannelInfoDTO.java | Introduces DTO used to build channel tree without loading full entities. |
| java/core/src/main/java/com/suse/manager/hub/HubManager.java | Reworks channel sync model generation to use pre-fetched channel metadata; adds timing logs. |
| java/core/src/main/java/com/redhat/rhn/domain/channel/ChannelFactory.java | Adds getAccessibleChannels(User) native query returning ChannelInfoDTO. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| */ | ||
| private void addChannelWithParents(Channel channel, Set<Channel> result, Set<String> alreadySyncedLabels) { | ||
| private void addChannelWithParents(Channel channel, Set<Channel> result) { | ||
| // If this channel is already being synced or is already synced, nothing to do |
There was a problem hiding this comment.
The comment says the channel may be "already synced", but this method now only checks result.contains(channel) (and no longer receives already-synced labels). Update the comment to match the actual behavior to avoid confusion.
| // If this channel is already being synced or is already synced, nothing to do | |
| // If this channel was already added during this hierarchy build, nothing to do |
There was a problem hiding this comment.
The parameter was never used before my change, but I think copilot has a point. Maybe the comment implied that the check should have been
if (result.contains(channel) || alreadySyncedLabels.contains(channel.getLabel())) {
return;
}I dropped my commit to remove the parameter and will look into this in a separate PR.
721ca1d to
3b9f7c2
Compare
Avoid extracting the full channel object to speed up the process of creating the list of ChannelSyncDetail pojos.
3b9f7c2 to
6ab8b7d
Compare
What does this PR change?
This PR improves then channel model generation logic to speed up the page load of the peripheral channel selection page.
Codespace
Check if you already have a running container clicking on
GUI diff
No difference.
Documentation
No documentation needed: bugfix
DONE
Test coverage
ℹ️ If a major new functionality is added, it is strongly recommended that tests for the new functionality are added to the Cucumber test suite
No tests: already covered
DONE
Links
Issue(s): https://github.com/SUSE/spacewalk/issues/29948
Port(s): 5.1
Changelogs
Make sure the changelogs entries you are adding are compliant with https://github.com/uyuni-project/uyuni/wiki/Contributing#changelogs and https://github.com/uyuni-project/uyuni/wiki/Contributing#uyuni-projectuyuni-repository
If you don't need a changelog check, please mark this checkbox:
If you uncheck the checkbox after the PR is created, you will need to re-run
changelog_test(see below)Re-run a test
If you need to re-run a test, please mark the related checkbox, it will be unchecked automatically once it has re-run:
Before you merge
Check How to branch and merge properly!