From a90e59ec9756ff47121eb943eea25ff3324e4d2c Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 21 May 2018 18:48:47 +0100 Subject: [PATCH] Fix cache invalidation when group data changes (#1010) --- .../listener/AbstractConnectionListener.java | 22 +++++++++---------- .../common/storage/AbstractStorage.java | 10 ++++----- .../dao/file/AbstractConfigurateDao.java | 3 +++ .../common/storage/dao/mongodb/MongoDao.java | 3 +++ .../common/storage/dao/sql/SqlDao.java | 2 ++ 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java b/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java index d3765a16..c148ebb5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java @@ -77,21 +77,21 @@ public abstract class AbstractConnectionListener implements ConnectionListener { User user = this.plugin.getStorage().loadUser(u, username).join(); if (user == null) { throw new NullPointerException("User is null"); - } else { - // Setup defaults for the user - boolean save = false; - for (AssignmentRule rule : this.plugin.getConfiguration().get(ConfigKeys.DEFAULT_ASSIGNMENTS)) { - if (rule.apply(user)) { - save = true; - } - } + } - // If they were given a default, persist the new assignments back to the storage. - if (save) { - this.plugin.getStorage().saveUser(user).join(); + // Setup defaults for the user + boolean save = false; + for (AssignmentRule rule : this.plugin.getConfiguration().get(ConfigKeys.DEFAULT_ASSIGNMENTS)) { + if (rule.apply(user)) { + save = true; } } + // If they were given a default, persist the new assignments back to the storage. + if (save) { + this.plugin.getStorage().saveUser(user).join(); + } + final long time = System.currentTimeMillis() - startTime; if (time >= 1000) { this.plugin.getLogger().warn("Processing login for " + username + " took " + time + "ms."); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java index 590abb1d..990497bf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java @@ -80,6 +80,11 @@ public class AbstractStorage implements Storage { return this.dao; } + @Override + public ApiStorage getApiDelegate() { + return this.apiDelegate; + } + private CompletableFuture makeFuture(Callable supplier) { return CompletableFuture.supplyAsync(() -> { try { @@ -102,11 +107,6 @@ public class AbstractStorage implements Storage { }, this.dao.getPlugin().getBootstrap().getScheduler().async()); } - @Override - public ApiStorage getApiDelegate() { - return this.apiDelegate; - } - private interface ThrowingRunnable { void run() throws Exception; } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java index 6799a937..807986d3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java @@ -203,6 +203,7 @@ public abstract class AbstractConfigurateDao extends AbstractDao { } catch (Exception e) { throw reportException(uuid.toString(), e); } finally { + user.invalidateCachedData(); user.getIoLock().unlock(); } return user; @@ -258,6 +259,7 @@ public abstract class AbstractConfigurateDao extends AbstractDao { } catch (Exception e) { throw reportException(name, e); } finally { + group.invalidateCachedData(); group.getIoLock().unlock(); } return group; @@ -290,6 +292,7 @@ public abstract class AbstractConfigurateDao extends AbstractDao { throw reportException(name, e); } finally { if (group != null) { + group.invalidateCachedData(); group.getIoLock().unlock(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java index 34fca7ef..a13a9dfb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java @@ -286,6 +286,7 @@ public class MongoDao extends AbstractDao { } } } finally { + user.invalidateCachedData(); user.getIoLock().unlock(); } return user; @@ -356,6 +357,7 @@ public class MongoDao extends AbstractDao { } } } finally { + group.invalidateCachedData(); group.getIoLock().unlock(); } return group; @@ -385,6 +387,7 @@ public class MongoDao extends AbstractDao { } } finally { if (group != null) { + group.invalidateCachedData(); group.getIoLock().unlock(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java index ccb8e42a..f4a10589 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java @@ -355,6 +355,7 @@ public class SqlDao extends AbstractDao { } } } finally { + user.invalidateCachedData(); user.getIoLock().unlock(); } return user; @@ -596,6 +597,7 @@ public class SqlDao extends AbstractDao { group.clearNodes(); } } finally { + group.invalidateCachedData(); group.getIoLock().unlock(); } return Optional.of(group);