mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-28 18:21:02 +01:00
Prevent save task overlaps (#1588)
This commit is contained in:
parent
232d9097cf
commit
b74eeb95d8
@ -203,8 +203,16 @@ public class BentoBox extends JavaPlugin {
|
||||
|
||||
// Save islands & players data every X minutes
|
||||
Bukkit.getScheduler().runTaskTimer(instance, () -> {
|
||||
playersManager.saveAll(true);
|
||||
islandsManager.saveAll(true);
|
||||
if (!playersManager.isSaveTaskRunning()) {
|
||||
playersManager.saveAll(true);
|
||||
} else {
|
||||
getLogger().warning("Tried to start a player data save task while the previous auto save was still running!");
|
||||
}
|
||||
if (!islandsManager.isSaveTaskRunning()) {
|
||||
islandsManager.saveAll(true);
|
||||
} else {
|
||||
getLogger().warning("Tried to start a island data save task while the previous auto save was still running!");
|
||||
}
|
||||
}, getSettings().getDatabaseBackupPeriod() * 20 * 60L, getSettings().getDatabaseBackupPeriod() * 20 * 60L);
|
||||
|
||||
// Make sure all flag listeners are registered.
|
||||
|
@ -88,6 +88,8 @@ public class IslandsManager {
|
||||
@NonNull
|
||||
private List<String> deletedIslands;
|
||||
|
||||
private boolean isSaveTaskRunning;
|
||||
|
||||
/**
|
||||
* Islands Manager
|
||||
* @param plugin - plugin
|
||||
@ -1209,6 +1211,10 @@ public class IslandsManager {
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isSaveTaskRunning() {
|
||||
return isSaveTaskRunning;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the all the islands to the database
|
||||
*/
|
||||
@ -1232,6 +1238,8 @@ public class IslandsManager {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
isSaveTaskRunning = true;
|
||||
Queue<Island> queue = new LinkedList<>(islandCache.getIslands());
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
@ -1239,6 +1247,7 @@ public class IslandsManager {
|
||||
for (int i = 0; i < plugin.getSettings().getMaxSavedIslandsPerTick(); i++) {
|
||||
Island island = queue.poll();
|
||||
if (island == null) {
|
||||
isSaveTaskRunning = false;
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ public class PlayersManager {
|
||||
private Map<UUID, Players> playerCache;
|
||||
private Set<UUID> inTeleport;
|
||||
|
||||
private boolean isSaveTaskRunning;
|
||||
|
||||
/**
|
||||
* Provides a memory cache of online player information
|
||||
* This is the one-stop-shop of player info
|
||||
@ -59,6 +61,10 @@ public class PlayersManager {
|
||||
handler.loadObjects().forEach(p -> playerCache.put(p.getPlayerUUID(), p));
|
||||
}
|
||||
|
||||
public boolean isSaveTaskRunning() {
|
||||
return isSaveTaskRunning;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save all players
|
||||
*/
|
||||
@ -82,6 +88,7 @@ public class PlayersManager {
|
||||
return;
|
||||
}
|
||||
|
||||
isSaveTaskRunning = true;
|
||||
Queue<Players> queue = new LinkedList<>(playerCache.values());
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
@ -89,6 +96,7 @@ public class PlayersManager {
|
||||
for (int i = 0; i < plugin.getSettings().getMaxSavedPlayersPerTick(); i++) {
|
||||
Players player = queue.poll();
|
||||
if (player == null) {
|
||||
isSaveTaskRunning = false;
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user