New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Memberof plugins compute 'memberof' using internal searches that can be costly #1916
Comments
Comment from firstyear (@Firstyear) at 2016-05-31 14:08:36 I think that this is a good (stop gap) solution for the addition problem. Relying on the existing memeberOf data is likely the correct solution here. However, Del and Mod will still need full re-computations to maintain state of the graph. |
Comment from tbordaz (@tbordaz) at 2016-05-31 15:08:04 Replying to [comment:1 Firstyear]:
This solution can help with ADD and MOD_ADD of/on a group. |
Comment from nhosoi (@nhosoi) at 2016-06-03 00:43:47 Input from Thierry.
|
Comment from nhosoi (@nhosoi) at 2016-11-04 23:05:40 Per triage, set this ticket to 1.3.7. |
Comment from firstyear (@Firstyear) at 2016-11-08 09:09:27 attachment |
Comment from tbordaz (@tbordaz) at 2016-11-21 22:27:40 attachment |
Comment from tbordaz (@tbordaz) at 2016-11-21 22:33:16 Hi William The python script looks really cool. It fixes http://www.port389.org/docs/389ds/design/memberof-scalability.html#problematic-case. |
Comment from firstyear (@Firstyear) at 2017-01-09 07:22:48 It does actually work! There was a fault in the algo2.py. I'm going to attach the updated algo patch with it fixed for multipath. Please see this log of events also:
|
Comment from firstyear (@Firstyear) at 2017-01-09 07:23:37 Add thierry's multipath test. |
Comment from firstyear (@Firstyear) at 2017-02-11 22:58:14 Metadata Update from @Firstyear:
|
Comment from mreynolds (@mreynolds389) at 2017-07-12 22:16:45 Status of this issue? 1.3.7, or? |
Comment from mreynolds (@mreynolds389) at 2017-07-12 22:16:45 Metadata Update from @mreynolds389:
|
Comment from tbordaz (@tbordaz) at 2017-07-13 11:55:54 With the improvement #2090 (in 1.3.6), performance hit of memberof reduced a lot. Now I think POC of 48856 gives track of futur improvement but is a major rewrite of the update part of the plugin. I would vote for 'futur'. If there is enough bandwidth for 1.3.7, it can be '1.3.7' as well |
Comment from mreynolds (@mreynolds389) at 2019-08-23 21:12:58 Metadata Update from @mreynolds389:
|
Comment from tbordaz (@tbordaz) at 2019-12-16 15:23:07 Since 49031 and 50542 there is no more performance issue related to memberof update. I am closing this ticket as wont fix. It will be reopened if memberof perf is still a concern. |
Comment from tbordaz (@tbordaz) at 2019-12-16 15:23:19 Metadata Update from @tbordaz:
|
Comment from firstyear (@Firstyear) at 2019-12-16 23:33:03 As a "for the record" making it a virtual attribute would likely cause it to perform worse than it currently does. Memberof is a trade off between "time in the write path" to reduce "time in the read path". If member of is read only once or twice, maybe virtual would be fine, but memberof is the absolute core of ipa and modern ldap group data, so it's read all the time with sssd. This means the trade into the write path is always going to be the most effective solution. |
Cloned from Pagure issue: https://pagure.io/389-ds-base/issue/48856
When adding an entry 'E' to a group, memberof plugin recalculate the 'memberof' attribute values.
To do this 'memberof_get_groups' builds a complete list of all the parents (direct and indirect) of the added entry 'E'. This task is done with internal searches of all the parents.
So if 'E' is member of N groups, it triggers N+1 internal searches.
The problem is that internal searches are costly and can create performance issue.
An other possibility would be to rely on the already calculated 'memberof' value.
For example 'E' is member of G1..G10 and is added to G11. Instead of searching 'E', G1..G10, G11, we may only search for all groups containing G11 (for example G1,G3, and G20) and merge the current value of memberof (G1..G10) with (G11,G1,G3,G20).
The text was updated successfully, but these errors were encountered: