fix: improve performance when updating member role #1680
+32
−86
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation and Context
When updating member roles the operation could take anywhere from a few seconds to over a minute (eventually failing).
Checklist
Both operations were executed with 7400 organizations.
Before:

After:

Analysis
The
organizations
are created as groups insideKeycloak
and the roles are subgroups of the organizations.To find the identifier of the role in
Keycloak
we were searching by the role name, for exampleadmin
, this causesKeycloak
to return all the organizations as theadmin
role should exist in all of them. This issue scales with the amount of organizations created inKeycloak
.Something that added to the issue is that we were performing this operation 3 times in a row to load the relevant organization roles.
Solution
The solution is to use the organization identifier (
kcGroupId
) to list the subgroups (roles) of the organization and filter them by name.Additionally, to avoid performing this operation multiple times in a row just with different role, a new method was introduced to load all organization roles at once and filter in memory.