Currently, we only have local caches assigned to each partition :
- a so called "global" cache which stores the partition entries
- a cache for each declared index
We also have real global caches :
- a cache for referrals
- a cache for ACIs (tuples)
- a cache for subentries
- a cache for principals
- a cache for Groups
- a cache for notAlias entries
Up to this point, it becomes to be a full mess. We have so many different caches, with so many different configurations, that it's almost impossible to know how to correctly tune the server. Moreover, we may have empty caches when other are heavily hit.
After having discussed about this situation with Alex, we think wit would be better to have a global cache shared between all the partitions, but with added functionnalities :
- the possibility to balance the cache between partitions (for instance, 20% for 'ou=system', 80% for 'dc=example, dc=com'
- the possibility to change this balance dynamically, depending on the actual hit rate
- the possibility to dedicate a part of this cach to pin some entries in memory (like the schema partition entries, for instance)
- the possibility to increase or decrease the cache size dynamically, without having to stop and restart the server
It would be also a good idea to be able to have a global Interface for all the cache we have, and may be a cache manager instead of a specific implementation for each cache
Feel free to add comments in this JIRA !