mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-24 11:38:40 +01:00
propagate i/o errors to the futures returned by the dao
This commit is contained in:
parent
9dd4f71526
commit
322b522a52
@ -299,6 +299,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
|
|||||||
// Load any online users (in the case of a reload)
|
// Load any online users (in the case of a reload)
|
||||||
for (Player player : getServer().getOnlinePlayers()) {
|
for (Player player : getServer().getOnlinePlayers()) {
|
||||||
scheduler.doAsync(() -> {
|
scheduler.doAsync(() -> {
|
||||||
|
try {
|
||||||
LoginHelper.loadUser(this, player.getUniqueId(), player.getName(), false);
|
LoginHelper.loadUser(this, player.getUniqueId(), player.getName(), false);
|
||||||
User user = getUserManager().getIfLoaded(getUuidCache().getUUID(player.getUniqueId()));
|
User user = getUserManager().getIfLoaded(getUuidCache().getUUID(player.getUniqueId()));
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
@ -311,6 +312,9 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +323,7 @@ data:
|
|||||||
|
|
||||||
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
||||||
# connection from the pool, before timing out.
|
# connection from the pool, before timing out.
|
||||||
connection-timeout: 15000 # 15 seconds
|
connection-timeout: 5000 # 5 seconds
|
||||||
|
|
||||||
# This setting allows you to define extra properties for connections.
|
# This setting allows you to define extra properties for connections.
|
||||||
properties:
|
properties:
|
||||||
|
@ -269,7 +269,7 @@ data:
|
|||||||
|
|
||||||
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
||||||
# connection from the pool, before timing out.
|
# connection from the pool, before timing out.
|
||||||
connection-timeout: 15000 # 15 seconds
|
connection-timeout: 5000 # 5 seconds
|
||||||
|
|
||||||
# This setting allows you to define extra properties for connections.
|
# This setting allows you to define extra properties for connections.
|
||||||
properties:
|
properties:
|
||||||
|
@ -367,7 +367,7 @@ public class ConfigKeys {
|
|||||||
int maxPoolSize = c.getInt("data.pool-settings.maximum-pool-size", c.getInt("data.pool-size", 10));
|
int maxPoolSize = c.getInt("data.pool-settings.maximum-pool-size", c.getInt("data.pool-size", 10));
|
||||||
int minIdle = c.getInt("data.pool-settings.minimum-idle", maxPoolSize);
|
int minIdle = c.getInt("data.pool-settings.minimum-idle", maxPoolSize);
|
||||||
int maxLifetime = c.getInt("data.pool-settings.maximum-lifetime", 1800000);
|
int maxLifetime = c.getInt("data.pool-settings.maximum-lifetime", 1800000);
|
||||||
int connectionTimeout = c.getInt("data.pool-settings.connection-timeout", 15000);
|
int connectionTimeout = c.getInt("data.pool-settings.connection-timeout", 5000);
|
||||||
Map<String, String> props = ImmutableMap.copyOf(c.getMap("data.pool-settings.properties", ImmutableMap.of("useUnicode", "true", "characterEncoding", "utf8")));
|
Map<String, String> props = ImmutableMap.copyOf(c.getMap("data.pool-settings.properties", ImmutableMap.of("useUnicode", "true", "characterEncoding", "utf8")));
|
||||||
|
|
||||||
return new StorageCredentials(
|
return new StorageCredentials(
|
||||||
|
@ -46,6 +46,7 @@ import java.security.MessageDigest;
|
|||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -86,7 +87,7 @@ public class DependencyManager {
|
|||||||
public DependencyManager(LuckPermsPlugin plugin) {
|
public DependencyManager(LuckPermsPlugin plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
try {
|
try {
|
||||||
this.digest = MessageDigest.getInstance("SHA-1");
|
this.digest = MessageDigest.getInstance("SHA-256");
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@ -168,8 +169,11 @@ public class DependencyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte[] hash = this.digest.digest(bytes);
|
byte[] hash = this.digest.digest(bytes);
|
||||||
|
|
||||||
|
plugin.getLog().info("Successfully downloaded '" + fileName + "' with checksum: " + Base64.getEncoder().encodeToString(hash));
|
||||||
|
|
||||||
if (!Arrays.equals(hash, dependency.getChecksum())) {
|
if (!Arrays.equals(hash, dependency.getChecksum())) {
|
||||||
throw new RuntimeException("Downloaded file had an invalid hash.");
|
throw new RuntimeException("Downloaded file had an invalid hash. Expected: " + Base64.getEncoder().encodeToString(dependency.getChecksum()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Files.write(file.toPath(), bytes);
|
Files.write(file.toPath(), bytes);
|
||||||
@ -178,7 +182,6 @@ public class DependencyManager {
|
|||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
throw new IllegalStateException("File not present. - " + file.toString());
|
throw new IllegalStateException("File not present. - " + file.toString());
|
||||||
} else {
|
} else {
|
||||||
plugin.getLog().info("Dependency '" + fileName + "' successfully downloaded.");
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,8 @@ import lombok.AccessLevel;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
|
|
||||||
import me.lucko.luckperms.api.HeldPermission;
|
import me.lucko.luckperms.api.HeldPermission;
|
||||||
import me.lucko.luckperms.api.LogEntry;
|
import me.lucko.luckperms.api.LogEntry;
|
||||||
import me.lucko.luckperms.api.event.cause.CreationCause;
|
import me.lucko.luckperms.api.event.cause.CreationCause;
|
||||||
@ -48,8 +50,9 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.Supplier;
|
import java.util.concurrent.CompletionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a {@link AbstractDao} to use {@link CompletableFuture}s
|
* Converts a {@link AbstractDao} to use {@link CompletableFuture}s
|
||||||
@ -74,8 +77,15 @@ public class AbstractStorage implements Storage {
|
|||||||
this.delegate = new ApiStorage(plugin, this);
|
this.delegate = new ApiStorage(plugin, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> CompletableFuture<T> makeFuture(Supplier<T> supplier) {
|
private <T> CompletableFuture<T> makeFuture(Callable<T> supplier) {
|
||||||
return CompletableFuture.supplyAsync(supplier, dao.getPlugin().getScheduler().async());
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return supplier.call();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Throwables.propagateIfPossible(e);
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
}, dao.getPlugin().getScheduler().async());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -61,46 +61,46 @@ public abstract class AbstractDao {
|
|||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract boolean logAction(LogEntry entry);
|
public abstract boolean logAction(LogEntry entry) throws Exception;
|
||||||
|
|
||||||
public abstract Log getLog();
|
public abstract Log getLog() throws Exception;
|
||||||
|
|
||||||
public abstract boolean applyBulkUpdate(BulkUpdate bulkUpdate);
|
public abstract boolean applyBulkUpdate(BulkUpdate bulkUpdate) throws Exception;
|
||||||
|
|
||||||
public abstract boolean loadUser(UUID uuid, String username);
|
public abstract boolean loadUser(UUID uuid, String username) throws Exception;
|
||||||
|
|
||||||
public abstract boolean saveUser(User user);
|
public abstract boolean saveUser(User user) throws Exception;
|
||||||
|
|
||||||
public abstract Set<UUID> getUniqueUsers();
|
public abstract Set<UUID> getUniqueUsers() throws Exception;
|
||||||
|
|
||||||
public abstract List<HeldPermission<UUID>> getUsersWithPermission(String permission);
|
public abstract List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception;
|
||||||
|
|
||||||
public abstract boolean createAndLoadGroup(String name);
|
public abstract boolean createAndLoadGroup(String name) throws Exception;
|
||||||
|
|
||||||
public abstract boolean loadGroup(String name);
|
public abstract boolean loadGroup(String name) throws Exception;
|
||||||
|
|
||||||
public abstract boolean loadAllGroups();
|
public abstract boolean loadAllGroups() throws Exception;
|
||||||
|
|
||||||
public abstract boolean saveGroup(Group group);
|
public abstract boolean saveGroup(Group group) throws Exception;
|
||||||
|
|
||||||
public abstract boolean deleteGroup(Group group);
|
public abstract boolean deleteGroup(Group group) throws Exception;
|
||||||
|
|
||||||
public abstract List<HeldPermission<String>> getGroupsWithPermission(String permission);
|
public abstract List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception;
|
||||||
|
|
||||||
public abstract boolean createAndLoadTrack(String name);
|
public abstract boolean createAndLoadTrack(String name) throws Exception;
|
||||||
|
|
||||||
public abstract boolean loadTrack(String name);
|
public abstract boolean loadTrack(String name) throws Exception;
|
||||||
|
|
||||||
public abstract boolean loadAllTracks();
|
public abstract boolean loadAllTracks() throws Exception;
|
||||||
|
|
||||||
public abstract boolean saveTrack(Track track);
|
public abstract boolean saveTrack(Track track) throws Exception;
|
||||||
|
|
||||||
public abstract boolean deleteTrack(Track track);
|
public abstract boolean deleteTrack(Track track) throws Exception;
|
||||||
|
|
||||||
public abstract boolean saveUUIDData(UUID uuid, String username);
|
public abstract boolean saveUUIDData(UUID uuid, String username) throws Exception;
|
||||||
|
|
||||||
public abstract UUID getUUID(String username);
|
public abstract UUID getUUID(String username) throws Exception;
|
||||||
|
|
||||||
public abstract String getName(UUID uuid);
|
public abstract String getName(UUID uuid) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,13 @@ public class SplitStorageDao extends AbstractDao {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
backing.values().forEach(AbstractDao::shutdown);
|
for (AbstractDao ds : backing.values()) {
|
||||||
|
try {
|
||||||
|
ds.shutdown();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -84,17 +90,17 @@ public class SplitStorageDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean logAction(LogEntry entry) {
|
public boolean logAction(LogEntry entry) throws Exception {
|
||||||
return backing.get(types.get("log")).logAction(entry);
|
return backing.get(types.get("log")).logAction(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Log getLog() {
|
public Log getLog() throws Exception {
|
||||||
return backing.get(types.get("log")).getLog();
|
return backing.get(types.get("log")).getLog();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) {
|
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) throws Exception {
|
||||||
String userType = types.get("user");
|
String userType = types.get("user");
|
||||||
String groupType = types.get("group");
|
String groupType = types.get("group");
|
||||||
|
|
||||||
@ -108,92 +114,92 @@ public class SplitStorageDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadUser(UUID uuid, String username) {
|
public boolean loadUser(UUID uuid, String username) throws Exception {
|
||||||
return backing.get(types.get("user")).loadUser(uuid, username);
|
return backing.get(types.get("user")).loadUser(uuid, username);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUser(User user) {
|
public boolean saveUser(User user) throws Exception {
|
||||||
return backing.get(types.get("user")).saveUser(user);
|
return backing.get(types.get("user")).saveUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<UUID> getUniqueUsers() {
|
public Set<UUID> getUniqueUsers() throws Exception {
|
||||||
return backing.get(types.get("user")).getUniqueUsers();
|
return backing.get(types.get("user")).getUniqueUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception {
|
||||||
return backing.get(types.get("user")).getUsersWithPermission(permission);
|
return backing.get(types.get("user")).getUsersWithPermission(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadGroup(String name) {
|
public boolean createAndLoadGroup(String name) throws Exception {
|
||||||
return backing.get(types.get("group")).createAndLoadGroup(name);
|
return backing.get(types.get("group")).createAndLoadGroup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadGroup(String name) {
|
public boolean loadGroup(String name) throws Exception {
|
||||||
return backing.get(types.get("group")).loadGroup(name);
|
return backing.get(types.get("group")).loadGroup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadAllGroups() {
|
public boolean loadAllGroups() throws Exception {
|
||||||
return backing.get(types.get("group")).loadAllGroups();
|
return backing.get(types.get("group")).loadAllGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveGroup(Group group) {
|
public boolean saveGroup(Group group) throws Exception {
|
||||||
return backing.get(types.get("group")).saveGroup(group);
|
return backing.get(types.get("group")).saveGroup(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteGroup(Group group) {
|
public boolean deleteGroup(Group group) throws Exception {
|
||||||
return backing.get(types.get("group")).deleteGroup(group);
|
return backing.get(types.get("group")).deleteGroup(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception {
|
||||||
return backing.get(types.get("group")).getGroupsWithPermission(permission);
|
return backing.get(types.get("group")).getGroupsWithPermission(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadTrack(String name) {
|
public boolean createAndLoadTrack(String name) throws Exception {
|
||||||
return backing.get(types.get("track")).createAndLoadTrack(name);
|
return backing.get(types.get("track")).createAndLoadTrack(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadTrack(String name) {
|
public boolean loadTrack(String name) throws Exception {
|
||||||
return backing.get(types.get("track")).loadTrack(name);
|
return backing.get(types.get("track")).loadTrack(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadAllTracks() {
|
public boolean loadAllTracks() throws Exception {
|
||||||
return backing.get(types.get("track")).loadAllTracks();
|
return backing.get(types.get("track")).loadAllTracks();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveTrack(Track track) {
|
public boolean saveTrack(Track track) throws Exception {
|
||||||
return backing.get(types.get("track")).saveTrack(track);
|
return backing.get(types.get("track")).saveTrack(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteTrack(Track track) {
|
public boolean deleteTrack(Track track) throws Exception {
|
||||||
return backing.get(types.get("track")).deleteTrack(track);
|
return backing.get(types.get("track")).deleteTrack(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUUIDData(UUID uuid, String username) {
|
public boolean saveUUIDData(UUID uuid, String username) throws Exception {
|
||||||
return backing.get(types.get("uuid")).saveUUIDData(uuid, username);
|
return backing.get(types.get("uuid")).saveUUIDData(uuid, username);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUUID(String username) {
|
public UUID getUUID(String username) throws Exception {
|
||||||
return backing.get(types.get("uuid")).getUUID(username);
|
return backing.get(types.get("uuid")).getUUID(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(UUID uuid) {
|
public String getName(UUID uuid) throws Exception {
|
||||||
return backing.get(types.get("uuid")).getName(uuid);
|
return backing.get(types.get("uuid")).getName(uuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,10 +156,10 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
return (dir, name) -> name.endsWith(fileExtension);
|
return (dir, name) -> name.endsWith(fileExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean reportException(String file, Exception ex) {
|
private Exception reportException(String file, Exception ex) throws Exception {
|
||||||
plugin.getLog().warn("Exception thrown whilst performing i/o: " + file);
|
plugin.getLog().warn("Exception thrown whilst performing i/o: " + file);
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
return false;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerFileAction(StorageLocation type, File file) {
|
private void registerFileAction(StorageLocation type, File file) {
|
||||||
@ -322,8 +322,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) {
|
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) throws Exception {
|
||||||
try {
|
|
||||||
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
||||||
File[] files = getDirectory(StorageLocation.USER).listFiles(getFileTypeFilter());
|
File[] files = getDirectory(StorageLocation.USER).listFiles(getFileTypeFilter());
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
@ -345,7 +344,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
saveFile(file, object);
|
saveFile(file, object);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(file.getName(), e);
|
throw reportException(file.getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -371,19 +370,15 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
saveFile(file, object);
|
saveFile(file, object);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(file.getName(), e);
|
throw reportException(file.getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException("bulk update", e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadUser(UUID uuid, String username) {
|
public boolean loadUser(UUID uuid, String username) throws Exception {
|
||||||
User user = plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username));
|
User user = plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username));
|
||||||
user.getIoLock().lock();
|
user.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -412,7 +407,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(uuid.toString(), e);
|
throw reportException(uuid.toString(), e);
|
||||||
} finally {
|
} finally {
|
||||||
user.getIoLock().unlock();
|
user.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -421,7 +416,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUser(User user) {
|
public boolean saveUser(User user) throws Exception {
|
||||||
user.getIoLock().lock();
|
user.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
if (!GenericUserManager.shouldSave(user)) {
|
if (!GenericUserManager.shouldSave(user)) {
|
||||||
@ -438,7 +433,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
saveFile(StorageLocation.USER, user.getUuid().toString(), data);
|
saveFile(StorageLocation.USER, user.getUuid().toString(), data);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(user.getUuid().toString(), e);
|
throw reportException(user.getUuid().toString(), e);
|
||||||
} finally {
|
} finally {
|
||||||
user.getIoLock().unlock();
|
user.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -456,9 +451,8 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception {
|
||||||
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
||||||
try {
|
|
||||||
File[] files = getDirectory(StorageLocation.USER).listFiles(getFileTypeFilter());
|
File[] files = getDirectory(StorageLocation.USER).listFiles(getFileTypeFilter());
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
throw new IllegalStateException("Users directory matched no files.");
|
throw new IllegalStateException("Users directory matched no files.");
|
||||||
@ -477,18 +471,14 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
held.add(NodeHeldPermission.of(holder, e));
|
held.add(NodeHeldPermission.of(holder, e));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(file.getName(), e);
|
throw reportException(file.getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException("users", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadGroup(String name) {
|
public boolean createAndLoadGroup(String name) throws Exception {
|
||||||
Group group = plugin.getGroupManager().getOrMake(name);
|
Group group = plugin.getGroupManager().getOrMake(name);
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -507,7 +497,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
saveFile(StorageLocation.GROUP, name, data);
|
saveFile(StorageLocation.GROUP, name, data);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(name, e);
|
throw reportException(name, e);
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -516,7 +506,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadGroup(String name) {
|
public boolean loadGroup(String name) throws Exception {
|
||||||
Group group = plugin.getGroupManager().getIfLoaded(name);
|
Group group = plugin.getGroupManager().getIfLoaded(name);
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
@ -539,7 +529,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
group.setEnduringNodes(nodes);
|
group.setEnduringNodes(nodes);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(name, e);
|
throw reportException(name, e);
|
||||||
} finally {
|
} finally {
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
@ -557,17 +547,30 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
.map(s -> s.substring(0, s.length() - fileExtension.length()))
|
.map(s -> s.substring(0, s.length() - fileExtension.length()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
groups.forEach(this::loadGroup);
|
boolean success = true;
|
||||||
|
for (String g : groups) {
|
||||||
|
try {
|
||||||
|
loadGroup(g);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a group");
|
||||||
|
}
|
||||||
|
|
||||||
GroupManager gm = plugin.getGroupManager();
|
GroupManager gm = plugin.getGroupManager();
|
||||||
gm.getAll().values().stream()
|
gm.getAll().values().stream()
|
||||||
.filter(g -> !groups.contains(g.getName()))
|
.filter(g -> !groups.contains(g.getName()))
|
||||||
.forEach(gm::unload);
|
.forEach(gm::unload);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveGroup(Group group) {
|
public boolean saveGroup(Group group) throws Exception {
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
ConfigurationNode data = SimpleConfigurationNode.root();
|
ConfigurationNode data = SimpleConfigurationNode.root();
|
||||||
@ -578,7 +581,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
|
|
||||||
saveFile(StorageLocation.GROUP, group.getName(), data);
|
saveFile(StorageLocation.GROUP, group.getName(), data);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(group.getName(), e);
|
throw reportException(group.getName(), e);
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -586,7 +589,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteGroup(Group group) {
|
public boolean deleteGroup(Group group) throws Exception {
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
File groupFile = new File(groupsDirectory, group.getName() + fileExtension);
|
File groupFile = new File(groupsDirectory, group.getName() + fileExtension);
|
||||||
@ -596,7 +599,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
groupFile.delete();
|
groupFile.delete();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(group.getName(), e);
|
throw reportException(group.getName(), e);
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -604,9 +607,8 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception {
|
||||||
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
||||||
try {
|
|
||||||
File[] files = getDirectory(StorageLocation.GROUP).listFiles(getFileTypeFilter());
|
File[] files = getDirectory(StorageLocation.GROUP).listFiles(getFileTypeFilter());
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
throw new IllegalStateException("Groups directory matched no files.");
|
throw new IllegalStateException("Groups directory matched no files.");
|
||||||
@ -625,18 +627,14 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
held.add(NodeHeldPermission.of(holder, e));
|
held.add(NodeHeldPermission.of(holder, e));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(file.getName(), e);
|
throw reportException(file.getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException("groups", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadTrack(String name) {
|
public boolean createAndLoadTrack(String name) throws Exception {
|
||||||
Track track = plugin.getTrackManager().getOrMake(name);
|
Track track = plugin.getTrackManager().getOrMake(name);
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -656,7 +654,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(name, e);
|
throw reportException(name, e);
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -664,7 +662,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadTrack(String name) {
|
public boolean loadTrack(String name) throws Exception {
|
||||||
Track track = plugin.getTrackManager().getIfLoaded(name);
|
Track track = plugin.getTrackManager().getIfLoaded(name);
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
@ -689,7 +687,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
track.setGroups(groups);
|
track.setGroups(groups);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(name, e);
|
throw reportException(name, e);
|
||||||
} finally {
|
} finally {
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
@ -706,17 +704,30 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
.map(s -> s.substring(0, s.length() - fileExtension.length()))
|
.map(s -> s.substring(0, s.length() - fileExtension.length()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
tracks.forEach(this::loadTrack);
|
boolean success = true;
|
||||||
|
for (String t : tracks) {
|
||||||
|
try {
|
||||||
|
loadTrack(t);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a track");
|
||||||
|
}
|
||||||
|
|
||||||
TrackManager tm = plugin.getTrackManager();
|
TrackManager tm = plugin.getTrackManager();
|
||||||
tm.getAll().values().stream()
|
tm.getAll().values().stream()
|
||||||
.filter(t -> !tracks.contains(t.getName()))
|
.filter(t -> !tracks.contains(t.getName()))
|
||||||
.forEach(tm::unload);
|
.forEach(tm::unload);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveTrack(Track track) {
|
public boolean saveTrack(Track track) throws Exception {
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
ConfigurationNode data = SimpleConfigurationNode.root();
|
ConfigurationNode data = SimpleConfigurationNode.root();
|
||||||
@ -724,7 +735,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
data.getNode("groups").setValue(track.getGroups());
|
data.getNode("groups").setValue(track.getGroups());
|
||||||
saveFile(StorageLocation.TRACK, track.getName(), data);
|
saveFile(StorageLocation.TRACK, track.getName(), data);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(track.getName(), e);
|
throw reportException(track.getName(), e);
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -732,7 +743,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteTrack(Track track) {
|
public boolean deleteTrack(Track track) throws Exception {
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
File trackFile = new File(tracksDirectory, track.getName() + fileExtension);
|
File trackFile = new File(tracksDirectory, track.getName() + fileExtension);
|
||||||
@ -742,7 +753,7 @@ public abstract class ConfigurateDao extends AbstractDao {
|
|||||||
trackFile.delete();
|
trackFile.delete();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return reportException(track.getName(), e);
|
throw reportException(track.getName(), e);
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
|
@ -88,12 +88,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
this.prefix = prefix;
|
this.prefix = prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean reportException(Exception ex) {
|
|
||||||
plugin.getLog().warn("Exception thrown whilst performing i/o: ");
|
|
||||||
ex.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
MongoCredential credential = null;
|
MongoCredential credential = null;
|
||||||
@ -151,7 +145,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean logAction(LogEntry entry) {
|
public boolean logAction(LogEntry entry) {
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "action");
|
MongoCollection<Document> c = database.getCollection(prefix + "action");
|
||||||
Document doc = new Document()
|
Document doc = new Document()
|
||||||
.append("timestamp", entry.getTimestamp())
|
.append("timestamp", entry.getTimestamp())
|
||||||
@ -166,16 +159,12 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.insertOne(doc);
|
c.insertOne(doc);
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Log getLog() {
|
public Log getLog() {
|
||||||
Log.Builder log = Log.builder();
|
Log.Builder log = Log.builder();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "action");
|
MongoCollection<Document> c = database.getCollection(prefix + "action");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -199,16 +188,11 @@ public class MongoDao extends AbstractDao {
|
|||||||
log.add(e);
|
log.add(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return log.build();
|
return log.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) {
|
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) {
|
||||||
try {
|
|
||||||
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
@ -258,10 +242,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,8 +279,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
user.getIoLock().unlock();
|
user.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -318,8 +296,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
} else {
|
} else {
|
||||||
return c.replaceOne(new Document("_id", user.getUuid()), userToDoc(user), new UpdateOptions().upsert(true)).wasAcknowledged();
|
return c.replaceOne(new Document("_id", user.getUuid()), userToDoc(user), new UpdateOptions().upsert(true)).wasAcknowledged();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
user.getIoLock().unlock();
|
user.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -328,7 +304,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
@Override
|
@Override
|
||||||
public Set<UUID> getUniqueUsers() {
|
public Set<UUID> getUniqueUsers() {
|
||||||
Set<UUID> uuids = new HashSet<>();
|
Set<UUID> uuids = new HashSet<>();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -336,17 +311,12 @@ public class MongoDao extends AbstractDao {
|
|||||||
uuids.add(d.get("_id", UUID.class));
|
uuids.add(d.get("_id", UUID.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return uuids;
|
return uuids;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
||||||
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
MongoCollection<Document> c = database.getCollection(prefix + "users");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -362,10 +332,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,8 +350,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
c.insertOne(groupToDoc(group));
|
c.insertOne(groupToDoc(group));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -408,8 +372,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
|
Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
|
||||||
group.setEnduringNodes(nodes);
|
group.setEnduringNodes(nodes);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -420,7 +382,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
@Override
|
@Override
|
||||||
public boolean loadAllGroups() {
|
public boolean loadAllGroups() {
|
||||||
List<String> groups = new ArrayList<>();
|
List<String> groups = new ArrayList<>();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -428,17 +389,26 @@ public class MongoDao extends AbstractDao {
|
|||||||
groups.add(name);
|
groups.add(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean success = true;
|
||||||
|
for (String g : groups) {
|
||||||
|
try {
|
||||||
|
loadGroup(g);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(e);
|
e.printStackTrace();
|
||||||
return false;
|
success = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
groups.forEach(this::loadGroup);
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a group");
|
||||||
|
}
|
||||||
|
|
||||||
GroupManager gm = plugin.getGroupManager();
|
GroupManager gm = plugin.getGroupManager();
|
||||||
gm.getAll().values().stream()
|
gm.getAll().values().stream()
|
||||||
.filter(g -> !groups.contains(g.getName()))
|
.filter(g -> !groups.contains(g.getName()))
|
||||||
.forEach(gm::unload);
|
.forEach(gm::unload);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,8 +418,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
try {
|
try {
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
||||||
return c.replaceOne(new Document("_id", group.getName()), groupToDoc(group), new UpdateOptions().upsert(true)).wasAcknowledged();
|
return c.replaceOne(new Document("_id", group.getName()), groupToDoc(group), new UpdateOptions().upsert(true)).wasAcknowledged();
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -461,8 +429,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
try {
|
try {
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
||||||
return c.deleteOne(new Document("_id", group.getName())).wasAcknowledged();
|
return c.deleteOne(new Document("_id", group.getName())).wasAcknowledged();
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -471,7 +437,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
||||||
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
MongoCollection<Document> c = database.getCollection(prefix + "groups");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -487,10 +452,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,8 +470,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
track.setGroups((List<String>) d.get("groups"));
|
track.setGroups((List<String>) d.get("groups"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -532,8 +491,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -542,7 +499,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
@Override
|
@Override
|
||||||
public boolean loadAllTracks() {
|
public boolean loadAllTracks() {
|
||||||
List<String> tracks = new ArrayList<>();
|
List<String> tracks = new ArrayList<>();
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
||||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
@ -550,17 +506,26 @@ public class MongoDao extends AbstractDao {
|
|||||||
tracks.add(name);
|
tracks.add(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean success = true;
|
||||||
|
for (String t : tracks) {
|
||||||
|
try {
|
||||||
|
loadTrack(t);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
reportException(e);
|
e.printStackTrace();
|
||||||
return false;
|
success = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks.forEach(this::loadTrack);
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a track");
|
||||||
|
}
|
||||||
|
|
||||||
TrackManager tm = plugin.getTrackManager();
|
TrackManager tm = plugin.getTrackManager();
|
||||||
tm.getAll().values().stream()
|
tm.getAll().values().stream()
|
||||||
.filter(t -> !tracks.contains(t.getName()))
|
.filter(t -> !tracks.contains(t.getName()))
|
||||||
.forEach(tm::unload);
|
.forEach(tm::unload);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -570,8 +535,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
try {
|
try {
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
||||||
return c.replaceOne(new Document("_id", track.getName()), trackToDoc(track)).wasAcknowledged();
|
return c.replaceOne(new Document("_id", track.getName()), trackToDoc(track)).wasAcknowledged();
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -583,8 +546,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
try {
|
try {
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
MongoCollection<Document> c = database.getCollection(prefix + "tracks");
|
||||||
return c.deleteOne(new Document("_id", track.getName())).wasAcknowledged();
|
return c.deleteOne(new Document("_id", track.getName())).wasAcknowledged();
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
@ -592,18 +553,13 @@ public class MongoDao extends AbstractDao {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUUIDData(UUID uuid, String username) {
|
public boolean saveUUIDData(UUID uuid, String username) {
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
||||||
c.replaceOne(new Document("_id", uuid), new Document("_id", uuid).append("name", username.toLowerCase()), new UpdateOptions().upsert(true));
|
c.replaceOne(new Document("_id", uuid), new Document("_id", uuid).append("name", username.toLowerCase()), new UpdateOptions().upsert(true));
|
||||||
} catch (Exception e) {
|
|
||||||
return reportException(e);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUUID(String username) {
|
public UUID getUUID(String username) {
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
||||||
try (MongoCursor<Document> cursor = c.find(new Document("name", username.toLowerCase())).iterator()) {
|
try (MongoCursor<Document> cursor = c.find(new Document("name", username.toLowerCase())).iterator()) {
|
||||||
if (cursor.hasNext()) {
|
if (cursor.hasNext()) {
|
||||||
@ -611,15 +567,10 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(UUID uuid) {
|
public String getName(UUID uuid) {
|
||||||
try {
|
|
||||||
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
MongoCollection<Document> c = database.getCollection(prefix + "uuid");
|
||||||
try (MongoCursor<Document> cursor = c.find(new Document("_id", uuid)).iterator()) {
|
try (MongoCursor<Document> cursor = c.find(new Document("_id", uuid)).iterator()) {
|
||||||
if (cursor.hasNext()) {
|
if (cursor.hasNext()) {
|
||||||
@ -627,10 +578,6 @@ public class MongoDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} catch (Exception e) {
|
|
||||||
reportException(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Document userToDoc(User user) {
|
private static Document userToDoc(User user) {
|
||||||
|
@ -210,7 +210,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
plugin.getLog().severe("Error occurred whilst initialising the database.");
|
plugin.getLog().severe("Error occurred whilst initialising the database.");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
shutdown();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +228,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean logAction(LogEntry entry) {
|
public boolean logAction(LogEntry entry) throws SQLException {
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(ACTION_INSERT))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(ACTION_INSERT))) {
|
||||||
ps.setLong(1, entry.getTimestamp());
|
ps.setLong(1, entry.getTimestamp());
|
||||||
@ -240,16 +239,13 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(6, entry.getActedName());
|
ps.setString(6, entry.getActedName());
|
||||||
ps.setString(7, entry.getAction());
|
ps.setString(7, entry.getAction());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Log getLog() {
|
public Log getLog() throws SQLException {
|
||||||
final Log.Builder log = Log.builder();
|
final Log.Builder log = Log.builder();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(ACTION_SELECT_ALL))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(ACTION_SELECT_ALL))) {
|
||||||
@ -270,51 +266,35 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return log.build();
|
return log.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) {
|
public boolean applyBulkUpdate(BulkUpdate bulkUpdate) throws SQLException {
|
||||||
boolean success = true;
|
|
||||||
String queryString = bulkUpdate.buildAsSql();
|
String queryString = bulkUpdate.buildAsSql();
|
||||||
|
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
|
|
||||||
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
if (bulkUpdate.getDataType().isIncludingUsers()) {
|
||||||
String table = prefix.apply("{prefix}user_permissions");
|
String table = prefix.apply("{prefix}user_permissions");
|
||||||
|
|
||||||
try (Statement s = c.createStatement()) {
|
try (Statement s = c.createStatement()) {
|
||||||
s.execute(queryString.replace("{table}", table));
|
s.execute(queryString.replace("{table}", table));
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
success = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bulkUpdate.getDataType().isIncludingGroups()) {
|
if (bulkUpdate.getDataType().isIncludingGroups()) {
|
||||||
String table = prefix.apply("{prefix}group_permissions");
|
String table = prefix.apply("{prefix}group_permissions");
|
||||||
|
|
||||||
try (Statement s = c.createStatement()) {
|
try (Statement s = c.createStatement()) {
|
||||||
s.execute(queryString.replace("{table}", table));
|
s.execute(queryString.replace("{table}", table));
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
success = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
success = false;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
return success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadUser(UUID uuid, String username) {
|
public boolean loadUser(UUID uuid, String username) throws SQLException {
|
||||||
User user = plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username));
|
User user = plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username));
|
||||||
user.getIoLock().lock();
|
user.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -339,9 +319,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect user meta (username & primary group)
|
// Collect user meta (username & primary group)
|
||||||
@ -356,9 +333,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update username & primary group
|
// update username & primary group
|
||||||
@ -398,7 +372,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUser(User user) {
|
public boolean saveUser(User user) throws SQLException {
|
||||||
user.getIoLock().lock();
|
user.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
// Empty data - just delete from the DB.
|
// Empty data - just delete from the DB.
|
||||||
@ -413,9 +387,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(2, user.getUuid().toString());
|
ps.setString(2, user.getUuid().toString());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -438,8 +409,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<NodeModel> local = user.getEnduringNodes().values().stream().map(NodeModel::fromNode).collect(Collectors.toSet());
|
Set<NodeModel> local = user.getEnduringNodes().values().stream().map(NodeModel::fromNode).collect(Collectors.toSet());
|
||||||
@ -464,9 +433,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
ps.executeBatch();
|
ps.executeBatch();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,9 +451,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
ps.executeBatch();
|
ps.executeBatch();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,9 +481,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -530,7 +490,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<UUID> getUniqueUsers() {
|
public Set<UUID> getUniqueUsers() throws SQLException {
|
||||||
Set<UUID> uuids = new HashSet<>();
|
Set<UUID> uuids = new HashSet<>();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(USER_PERMISSIONS_SELECT_DISTINCT))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(USER_PERMISSIONS_SELECT_DISTINCT))) {
|
||||||
@ -541,15 +501,12 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return uuids;
|
return uuids;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws SQLException {
|
||||||
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<UUID>> held = ImmutableList.builder();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(USER_PERMISSIONS_SELECT_PERMISSION))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(USER_PERMISSIONS_SELECT_PERMISSION))) {
|
||||||
@ -568,15 +525,12 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadGroup(String name) {
|
public boolean createAndLoadGroup(String name) throws SQLException {
|
||||||
String query;
|
String query;
|
||||||
switch (provider.getName()) {
|
switch (provider.getName()) {
|
||||||
case "H2":
|
case "H2":
|
||||||
@ -598,16 +552,13 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(1, name);
|
ps.setString(1, name);
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return loadGroup(name);
|
return loadGroup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadGroup(String name) {
|
public boolean loadGroup(String name) throws SQLException {
|
||||||
// Check the group actually exists
|
// Check the group actually exists
|
||||||
List<String> groups = new ArrayList<>();
|
List<String> groups = new ArrayList<>();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
@ -619,9 +570,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!groups.contains(name)) {
|
if (!groups.contains(name)) {
|
||||||
@ -649,9 +597,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data.isEmpty()) {
|
if (!data.isEmpty()) {
|
||||||
@ -668,7 +613,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadAllGroups() {
|
public boolean loadAllGroups() throws SQLException {
|
||||||
List<String> groups = new ArrayList<>();
|
List<String> groups = new ArrayList<>();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_SELECT_ALL))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_SELECT_ALL))) {
|
||||||
@ -678,30 +623,32 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
for (String g : groups) {
|
for (String g : groups) {
|
||||||
if (!loadGroup(g)) {
|
try {
|
||||||
|
loadGroup(g);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a group");
|
||||||
|
}
|
||||||
|
|
||||||
GroupManager gm = plugin.getGroupManager();
|
GroupManager gm = plugin.getGroupManager();
|
||||||
gm.getAll().values().stream()
|
gm.getAll().values().stream()
|
||||||
.filter(g -> !groups.contains(g.getName()))
|
.filter(g -> !groups.contains(g.getName()))
|
||||||
.forEach(gm::unload);
|
.forEach(gm::unload);
|
||||||
}
|
|
||||||
return success;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveGroup(Group group) {
|
public boolean saveGroup(Group group) throws SQLException {
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
// Empty data, just delete.
|
// Empty data, just delete.
|
||||||
@ -711,9 +658,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(1, group.getName());
|
ps.setString(1, group.getName());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -736,9 +680,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<NodeModel> local = group.getEnduringNodes().values().stream().map(NodeModel::fromNode).collect(Collectors.toSet());
|
Set<NodeModel> local = group.getEnduringNodes().values().stream().map(NodeModel::fromNode).collect(Collectors.toSet());
|
||||||
@ -763,9 +704,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
ps.executeBatch();
|
ps.executeBatch();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -784,9 +722,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
ps.executeBatch();
|
ps.executeBatch();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -797,7 +732,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteGroup(Group group) {
|
public boolean deleteGroup(Group group) throws SQLException {
|
||||||
group.getIoLock().lock();
|
group.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
@ -810,20 +745,15 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(1, group.getName());
|
ps.setString(1, group.getName());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
group.getIoLock().unlock();
|
group.getIoLock().unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws SQLException {
|
||||||
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
ImmutableList.Builder<HeldPermission<String>> held = ImmutableList.builder();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_PERMISSIONS_SELECT_PERMISSION))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_PERMISSIONS_SELECT_PERMISSION))) {
|
||||||
@ -842,15 +772,12 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return held.build();
|
return held.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadTrack(String name) {
|
public boolean createAndLoadTrack(String name) throws SQLException {
|
||||||
Track track = plugin.getTrackManager().getOrMake(name);
|
Track track = plugin.getTrackManager().getOrMake(name);
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -867,9 +794,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists.get()) {
|
if (exists.get()) {
|
||||||
@ -884,9 +808,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(2, json);
|
ps.setString(2, json);
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -897,7 +818,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadTrack(String name) {
|
public boolean loadTrack(String name) throws SQLException {
|
||||||
Track track = plugin.getTrackManager().getOrMake(name);
|
Track track = plugin.getTrackManager().getOrMake(name);
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -913,9 +834,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
track.setGroups(gson.fromJson(groups.get(), LIST_STRING_TYPE));
|
track.setGroups(gson.fromJson(groups.get(), LIST_STRING_TYPE));
|
||||||
@ -927,7 +845,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadAllTracks() {
|
public boolean loadAllTracks() throws SQLException {
|
||||||
List<String> tracks = new ArrayList<>();
|
List<String> tracks = new ArrayList<>();
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(TRACK_SELECT_ALL))) {
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(TRACK_SELECT_ALL))) {
|
||||||
@ -937,29 +855,32 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
for (String t : tracks) {
|
for (String t : tracks) {
|
||||||
if (!loadTrack(t)) {
|
try {
|
||||||
|
loadTrack(t);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (!success) {
|
||||||
|
throw new RuntimeException("Exception occurred whilst loading a track");
|
||||||
|
}
|
||||||
|
|
||||||
TrackManager tm = plugin.getTrackManager();
|
TrackManager tm = plugin.getTrackManager();
|
||||||
tm.getAll().values().stream()
|
tm.getAll().values().stream()
|
||||||
.filter(t -> !tracks.contains(t.getName()))
|
.filter(t -> !tracks.contains(t.getName()))
|
||||||
.forEach(tm::unload);
|
.forEach(tm::unload);
|
||||||
}
|
|
||||||
return success;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveTrack(Track track) {
|
public boolean saveTrack(Track track) throws SQLException {
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
String s = gson.toJson(track.getGroups());
|
String s = gson.toJson(track.getGroups());
|
||||||
@ -969,9 +890,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(2, track.getName());
|
ps.setString(2, track.getName());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} finally {
|
} finally {
|
||||||
@ -980,7 +898,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteTrack(Track track) {
|
public boolean deleteTrack(Track track) throws SQLException {
|
||||||
track.getIoLock().lock();
|
track.getIoLock().lock();
|
||||||
try {
|
try {
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
@ -988,9 +906,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(1, track.getName());
|
ps.setString(1, track.getName());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
track.getIoLock().unlock();
|
track.getIoLock().unlock();
|
||||||
@ -1001,7 +916,7 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveUUIDData(UUID uuid, String username) {
|
public boolean saveUUIDData(UUID uuid, String username) throws SQLException {
|
||||||
final String u = username.toLowerCase();
|
final String u = username.toLowerCase();
|
||||||
AtomicReference<String> remoteUserName = new AtomicReference<>(null);
|
AtomicReference<String> remoteUserName = new AtomicReference<>(null);
|
||||||
|
|
||||||
@ -1012,8 +927,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(2, uuid.toString());
|
ps.setString(2, uuid.toString());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
@ -1025,9 +938,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remoteUserName.get() != null) {
|
if (remoteUserName.get() != null) {
|
||||||
@ -1042,9 +952,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(2, uuid.toString());
|
ps.setString(2, uuid.toString());
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -1056,16 +963,13 @@ public class SqlDao extends AbstractDao {
|
|||||||
ps.setString(3, "default");
|
ps.setString(3, "default");
|
||||||
ps.execute();
|
ps.execute();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUUID(String username) {
|
public UUID getUUID(String username) throws SQLException {
|
||||||
final String u = username.toLowerCase();
|
final String u = username.toLowerCase();
|
||||||
final AtomicReference<UUID> uuid = new AtomicReference<>(null);
|
final AtomicReference<UUID> uuid = new AtomicReference<>(null);
|
||||||
|
|
||||||
@ -1078,16 +982,13 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return uuid.get();
|
return uuid.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(UUID uuid) {
|
public String getName(UUID uuid) throws SQLException {
|
||||||
final AtomicReference<String> name = new AtomicReference<>(null);
|
final AtomicReference<String> name = new AtomicReference<>(null);
|
||||||
|
|
||||||
try (Connection c = provider.getConnection()) {
|
try (Connection c = provider.getConnection()) {
|
||||||
@ -1099,9 +1000,6 @@ public class SqlDao extends AbstractDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return name.get();
|
return name.get();
|
||||||
|
@ -41,7 +41,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@UtilityClass
|
@UtilityClass
|
||||||
public class LoginHelper {
|
public class LoginHelper {
|
||||||
|
|
||||||
public static User loadUser(LuckPermsPlugin plugin, UUID u, String username, boolean joinUuidSave) {
|
public static User loadUser(LuckPermsPlugin plugin, UUID u, String username, boolean joinUuidSave) throws Exception {
|
||||||
final long startTime = System.currentTimeMillis();
|
final long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
final UuidCache cache = plugin.getUuidCache();
|
final UuidCache cache = plugin.getUuidCache();
|
||||||
|
@ -273,7 +273,7 @@ data {
|
|||||||
|
|
||||||
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
# This setting controls the maximum number of milliseconds that the plugin will wait for a
|
||||||
# connection from the pool, before timing out.
|
# connection from the pool, before timing out.
|
||||||
connection-timeout=15000 # 15 seconds
|
connection-timeout=5000 # 5 seconds
|
||||||
|
|
||||||
# This setting allows you to define extra properties for connections.
|
# This setting allows you to define extra properties for connections.
|
||||||
properties {
|
properties {
|
||||||
|
Loading…
Reference in New Issue
Block a user