Ensure caches are invalidated when Bukkit/Nukkit's Permission#getChildren map is modified (#1378)

This commit is contained in:
Luck
2019-01-13 16:58:31 +00:00
Unverified
parent 78a74510cf
commit 3c0d1ba7a1
12 changed files with 285 additions and 23 deletions
@@ -130,6 +130,9 @@ public class PermissionCalculator implements Function<String, Tristate> {
}
public void invalidateCache() {
for (PermissionProcessor processor : this.processors) {
processor.invalidate();
}
this.lookupCache.clear();
}
}
@@ -62,4 +62,11 @@ public interface PermissionProcessor {
}
/**
* Called after the parent calculator has been invalidated
*/
default void invalidate() {
}
}
@@ -69,4 +69,9 @@ public abstract class AbstractGroupManager<T extends Group> extends AbstractMana
public void invalidateAllGroupCaches() {
getAll().values().forEach(PermissionHolder::invalidateCachedData);
}
@Override
public void invalidateAllPermissionCalculators() {
getAll().values().forEach(p -> p.getCachedData().invalidatePermissionCalculators());
}
}
@@ -25,6 +25,7 @@
package me.lucko.luckperms.common.model.manager.group;
import me.lucko.luckperms.common.calculator.PermissionCalculator;
import me.lucko.luckperms.common.model.Group;
import me.lucko.luckperms.common.model.manager.Manager;
@@ -43,4 +44,9 @@ public interface GroupManager<T extends Group> extends Manager<String, Group, T>
*/
void invalidateAllGroupCaches();
/**
* Invalidates the {@link PermissionCalculator}s for *loaded* groups.
*/
void invalidateAllPermissionCalculators();
}
@@ -162,6 +162,11 @@ public abstract class AbstractUserManager<T extends User> extends AbstractManage
getAll().values().forEach(PermissionHolder::invalidateCachedData);
}
@Override
public void invalidateAllPermissionCalculators() {
getAll().values().forEach(p -> p.getCachedData().invalidatePermissionCalculators());
}
/**
* Check whether the user's state indicates that they should be persisted to storage.
*
@@ -25,6 +25,7 @@
package me.lucko.luckperms.common.model.manager.user;
import me.lucko.luckperms.common.calculator.PermissionCalculator;
import me.lucko.luckperms.common.model.User;
import me.lucko.luckperms.common.model.UserIdentifier;
import me.lucko.luckperms.common.model.manager.Manager;
@@ -89,4 +90,9 @@ public interface UserManager<T extends User> extends Manager<UserIdentifier, Use
*/
void invalidateAllUserCaches();
/**
* Invalidates the {@link PermissionCalculator}s for *loaded* users.
*/
void invalidateAllPermissionCalculators();
}