From 9546987970d9cbb124cae2587e3973fd0d19f930 Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 3 Feb 2020 00:44:08 +0000 Subject: [PATCH] Fix AbstractUserManager to only load users once in #loadAllUsers --- .../manager/user/AbstractUserManager.java | 24 +++++++++++-------- .../model/manager/user/UserManager.java | 2 +- .../plugin/AbstractLuckPermsPlugin.java | 2 +- .../luckperms/common/tasks/SyncTask.java | 18 ++++---------- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java index 4870f4cc7..e3515d6bb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java @@ -34,15 +34,18 @@ import me.lucko.luckperms.common.model.manager.AbstractManager; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.node.types.Inheritance; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import me.lucko.luckperms.common.util.Iterators; import net.luckperms.api.model.data.DataType; import net.luckperms.api.node.Node; import net.luckperms.api.node.types.InheritanceNode; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import java.util.stream.Stream; public abstract class AbstractUserManager extends AbstractManager implements UserManager { @@ -132,16 +135,17 @@ public abstract class AbstractUserManager extends AbstractManage } @Override - public CompletableFuture updateAllUsers() { - return CompletableFuture.runAsync( - () -> { - Stream.concat( - getAll().keySet().stream(), - this.plugin.getBootstrap().getOnlinePlayers() - ).forEach(u -> this.plugin.getStorage().loadUser(u, null).join()); - }, - this.plugin.getBootstrap().getScheduler().async() - ); + public CompletableFuture loadAllUsers() { + Set ids = Stream.concat( + getAll().keySet().stream(), + this.plugin.getBootstrap().getOnlinePlayers() + ).collect(Collectors.toSet()); + + return CompletableFuture.runAsync(() -> { + Iterators.tryIterate(ids, id -> { + this.plugin.getStorage().loadUser(id, null).join(); + }); + }, this.plugin.getBootstrap().getScheduler().async()); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java index 73b62f429..656dae71c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java @@ -77,7 +77,7 @@ public interface UserManager extends Manager { /** * Reloads the data of all *online* users */ - CompletableFuture updateAllUsers(); + CompletableFuture loadAllUsers(); /** * Invalidates the cached data for *loaded* users. diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java b/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java index dde6709d4..e96abf04b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java @@ -189,7 +189,7 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin { // run an update instantly. getLogger().info("Performing initial data load..."); try { - new SyncTask(this, true).run(); + new SyncTask(this).run(); } catch (Exception e) { e.printStackTrace(); } diff --git a/common/src/main/java/me/lucko/luckperms/common/tasks/SyncTask.java b/common/src/main/java/me/lucko/luckperms/common/tasks/SyncTask.java index 3636cdce9..f2c8fb565 100644 --- a/common/src/main/java/me/lucko/luckperms/common/tasks/SyncTask.java +++ b/common/src/main/java/me/lucko/luckperms/common/tasks/SyncTask.java @@ -31,7 +31,6 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.event.cause.CreationCause; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; /** @@ -42,14 +41,8 @@ import java.util.concurrent.TimeUnit; public class SyncTask implements Runnable { private final LuckPermsPlugin plugin; - /** - * If this task is being called before the server has fully started - */ - private final boolean initialUpdate; - - public SyncTask(LuckPermsPlugin plugin, boolean initialUpdate) { + public SyncTask(LuckPermsPlugin plugin) { this.plugin = plugin; - this.initialUpdate = initialUpdate; } /** @@ -72,11 +65,8 @@ public class SyncTask implements Runnable { // Reload all tracks this.plugin.getStorage().loadAllTracks().join(); - // Refresh all online users. - CompletableFuture userUpdateFut = this.plugin.getUserManager().updateAllUsers(); - if (!this.initialUpdate) { - userUpdateFut.join(); - } + // Reload all online users. + this.plugin.getUserManager().loadAllUsers().join(); this.plugin.performPlatformDataSync(); @@ -97,7 +87,7 @@ public class SyncTask implements Runnable { @Override protected Void perform() { - new SyncTask(this.plugin, false).run(); + new SyncTask(this.plugin).run(); return null; } }