Verifies the integrety of the projects, as builds are executed immediately after a code change was detected. This plan provides no artifiacts (use a nightly build instead).
Improve GroupProvider thread safety
Making the field volatile guarantees that any thread reading provider (in createGroup, deleteGroup, search, getProvider, etc.) will always observe the value last written, not a stale cached copy from a CPU register or L1 cache.
Harden GroupManager unit test around 'share with own group'
The 'share with own group' option is currently persisted as 'share with list of groups' where the value is only the name of the own group.
Although implementation-wise, this is identical to what's already being tested, behavioral, this is different. To capture bugs introduced by potential future changes, this commit adds tests for the 'share with own group' case.
OF-3287: evict per-user group caches for source group members
Ensure cache invalidation also includes members/admins of the group being processed, not only groups returned by shared-group traversal.
Previously, `evictCachedUsersForGroup(...)` could miss users in the source group (especially non-shared groups), leaving stale cache entries. This caused group create/rename/delete and shared-roster target-list changes to not be reflected immediately for affected users.
Refactor GroupManager to facilitate unit testing
A conservative refactoring: the public API is untouched and the seams needed for testing are now in place.
Existing tests have been adapted to the new API where sensible. Wording has been adjusted to reflect behavioral nature of tests, where applicable.
OF-3286: Unify GroupManager metadata locking
Replace the fragmented metadata locking scheme in GroupManager with a single shared lock around groupMetaCache access. This removes the previous mix of separate lock objects and per-user interning, making cache synchronization easier to reason about and reducing the risk of inconsistent updates.
Adds unit tests that verify some of the concurrent behavior.