Implement groups* warm-cache command Scan all groups that have permissions on all projects and triggers the warm-up of all group* related caches. Change-Id: I44b53373c996462db9c42c4999786616e7e6aa8e
diff --git a/admin/warm-cache-1.0.groovy b/admin/warm-cache-1.0.groovy index f422a96..26b480c 100644 --- a/admin/warm-cache-1.0.groovy +++ b/admin/warm-cache-1.0.groovy
@@ -52,5 +52,51 @@ } } -commands = [ WarmProjectsCache ] +@Export("groups") +class WarmGroupsCache extends WarmProjectsCache { + + @Inject + GroupCache groupCache + + @Inject + GroupIncludeCache groupIncludeCache + + private HashSet<AccountGroup.UUID> allGroupsUUIDs() { + def allGroupsUuids = new HashSet<AccountGroup.UUID>() + for (project in cache.all()) { + def groupUuids = cache.get(project)?.getConfig()?.getAllGroupUUIDs() + if (groupUuids != null) { allGroupsUuids.addAll(groupUuids) } + } + allGroupsUuids.addAll(groupIncludeCache.allExternalMembers()) + return allGroupsUuids; + } + + public void run() { + println "Loading groups list ..." + def start = System.currentTimeMillis() + def allGroupsUuids = allGroupsUUIDs(); + def totGroups = allGroupsUuids.size() + def groupsLoaded = 0 + + for (groupUuid in allGroupsUuids) { + groupIncludeCache.subgroupsOf(groupUuid) + groupIncludeCache.parentGroupsOf(groupUuid) + def group = groupCache.get(groupUuid) + if(group != null) { + groupCache.get(group.getNameKey()) + groupCache.get(group.getId()) + } + groupsLoaded++ + + if (groupsLoaded%1000==0) { + println "$groupsLoaded of $totGroups groups" + } + } + + def elapsed = (System.currentTimeMillis()-start)/1000 + println "$groupsLoaded groups loaded in $elapsed secs" + } +} + +commands = [ WarmProjectsCache, WarmGroupsCache ]