Community
Participate
Working Groups
Build: I20080513-2000 In the available software tab, each keystroke in the filter field brings a delay of several seconds. This is because the filter code is performing a query against the localized IU names. Retrieving the localized value for an IU property requires a query over all repositories in the system. Thus each repository is being queried once per IU per keystroke (a lot).
Created attachment 100311 [details] Stack trace during property retrieval while filtering
We are addressing the issue in several ways: - cache the result of translated strings into the IU object. - address bug 232173 If this was not enough we could also cache the result of the query looking for translation IUs.
Created attachment 100313 [details] Optimization This quick and dirty optimization stores the localized value in the InstallableUnit object. This will be flushed from memory once the repository is no longer referenced, but gives a huge gain in performance while the dialog is open.
Unfortunately this patch requires accessing non-API to store the value on the IU object. I think eventually we should provide a method IInstallableUnit.getLocalizedProperty that can push this kind of optimization further down.
After this is fixed we should check the auto-updates scenario. That is one workflow I know of where we might launch a wizard (update wizard) without first loading repos. Most UI that hits repos (expanding in the software list, viewing by category or name, filtering over all repos) happens in jobs with some kind of deferred UI update. But I just had a case where I went to click the "updates available" affordance and it seemed to lock up the UI for a long time. This was probably the first time those IU's names were being accessed for the purpose of showing names in the update wizard. If we determine that the problem is that repos that don't matter are being loaded, we should look at using QueryableMetadataRepositoryManager rather than the real metadata repository manager in IUPropertyUtils for the query. I can help with that. That queryable allows you to set repo flags. Because I would have thought that any repo that mattered for updates was already loaded by the time the updates were found
Created attachment 100316 [details] Patch with manifest changes
Created attachment 100324 [details] Patch v03 We realized my previous fix would cause the localized properties to be stored in the profile registry, and possibly in the metadata repository if it was local. This new patch stores the localized properties in a separate map that is never persisted.
Released (Pascal reviewed).