Enable/disable the accounts tracking preload mechanism
The default behaviour of preloading all the users in All-Users into the
tracking cache can now be disabled by configuration.
This enables a more accurate tracking of the real active users and avoid
the massive preload of the entire All-Users' accounts into the cache.
Change-Id: Ibf6d09f7a6c772f60e48f5c75ad0b2e587f8e681
diff --git a/admin/track-and-disable-inactive-users-1.3.groovy b/admin/track-and-disable-inactive-users-1.3.groovy
index 99471cf..71dcfc4 100644
--- a/admin/track-and-disable-inactive-users-1.3.groovy
+++ b/admin/track-and-disable-inactive-users-1.3.groovy
@@ -122,6 +122,7 @@
final Set<Account.Id> ignoreAccountIds
final Set<AccountGroup.UUID> ignoreGroupIds
+ final boolean preloadAccounts
private final PluginConfig config
@@ -138,6 +139,7 @@
ignoreAccountIds = ignoreAccountIdsFromConfig("ignoreAccountId")
ignoreGroupIds = ignoreGroupIdsFromConfig("ignoreGroup", groupCache)
+ preloadAccounts = config.getBoolean("preloadAccounts", true)
logger.atInfo().log("Accounts ids ignored for inactivity: %s", ignoreAccountIds)
logger.atInfo().log("Group ids ignored for inactivity: %s", ignoreGroupIds)
@@ -258,12 +260,18 @@
@Override
void start() {
- def currentMinutes = MILLISECONDS.toMinutes(System.currentTimeMillis())
- accounts.all()
- .findAll {
- it.account().isActive() && !serviceUserClassifier.isServiceUser(it.account().id()) && !trackActiveUsersCache.getIfPresent(it.account().id().get())
- }
- .each { trackActiveUsersCache.put(it.account().id().get(), currentMinutes) }
+ if (autoDisableConfig.preloadAccounts) {
+ def accountsToPreload = accounts.all()
+ .collect { it.account() }
+ .findAll { it.isActive() }
+ .findAll { !serviceUserClassifier.isServiceUser(it.id()) }
+ .findAll { !trackActiveUsersCache.getIfPresent(it.id().get()) }
+
+ def currentMinutes = MILLISECONDS.toMinutes(System.currentTimeMillis())
+ def numAccountsToPreload = accountsToPreload.size()
+ logger.atInfo().log("Preloading $numAccountsToPreload accounts into ${TrackActiveUsersCache.NAME} with TS=$currentMinutes")
+ accountsToPreload.each { trackActiveUsersCache.put(it.id().get(), currentMinutes) }
+ }
}
@Override
diff --git a/admin/track-and-disable-inactive-users.md b/admin/track-and-disable-inactive-users.md
index 025d5c0..b79e635 100644
--- a/admin/track-and-disable-inactive-users.md
+++ b/admin/track-and-disable-inactive-users.md
@@ -43,6 +43,16 @@
> **NOTE**: The `Service Users` group is always added to the list of groups of
> accounts to not disable.
+```plugin.@PLUGIN@.preloadAccounts```
+: Allow to preload the active users persistent cache with all the accounts that
+ are currently flagged as active on All-Users when the plugin starts.
+
+ > **NOTE**: When this option is enabled, all users configured in Gerrit will
+ > always be flagged as active when Gerrit or the plugin is started, even though
+ > they were not active for a long time.
+
+ Default: true.
+
```cache."@PLUGIN@.users_cache".maxAge```
: Maximum allowed inactivity time for user.
Value should use common time unit suffixes to express their setting: