Implement accounts* warm-cache command
Scan all accounts from ReviewDb and load them by all criteria
to populate the in-memory cache.
Change-Id: I37d6fddf4ef55031f5232d760bad60b635c1da4b
diff --git a/admin/warm-cache-1.0.groovy b/admin/warm-cache-1.0.groovy
index 26b480c..5b1d75b 100644
--- a/admin/warm-cache-1.0.groovy
+++ b/admin/warm-cache-1.0.groovy
@@ -15,6 +15,9 @@
import com.google.gerrit.sshd.*
import com.google.gerrit.extensions.annotations.*
import com.google.gerrit.server.project.*
+import com.google.gerrit.server.account.*
+import com.google.gerrit.reviewdb.client.AccountGroup
+import com.google.gerrit.reviewdb.server.ReviewDb
import com.google.inject.*
import org.kohsuke.args4j.*
@@ -98,5 +101,39 @@
}
}
-commands = [ WarmProjectsCache, WarmGroupsCache ]
+@Export("accounts")
+class WarmAccountsCache extends BaseSshCommand {
+
+ @Inject
+ AccountCache cache
+
+ @Inject
+ AccountByEmailCache cacheByEmail
+
+ @Inject
+ Provider<ReviewDb> db
+
+ public void run() {
+ println "Loading accounts ..."
+ def start = System.currentTimeMillis()
+ def allAccounts = db.get().accounts().all()
+ def loaded = 0
+
+ for (account in allAccounts) {
+ cache.get(account.accountId)
+ if (account.preferredEmail != null) {
+ cacheByEmail.get(account.preferredEmail)
+ }
+ loaded++
+ if (loaded%1000==0) {
+ println "$loaded accounts"
+ }
+ }
+
+ def elapsed = (System.currentTimeMillis()-start)/1000
+ println "$loaded accounts loaded in $elapsed secs"
+ }
+}
+
+commands = [ WarmProjectsCache, WarmGroupsCache, WarmAccountsCache ]