Skip to content

Commit

Permalink
No save on disable (#231)
Browse files Browse the repository at this point in the history
* Release 2.6.4

* Remove saving to database on disable.

#229

First, the top ten tables are never actually used or loaded. They are
created in memory by loading the island levels. So there is no reason to
keep saving them.
Second, the island level data is saved every time it is changed, so
there is no need to save all of the cache on exit.

* Fixes tests
  • Loading branch information
tastybento committed Aug 8, 2021
1 parent 76a2688 commit d55f66f
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 41 deletions.
5 changes: 0 additions & 5 deletions src/main/java/world/bentobox/level/Level.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,6 @@ private void registerCommands(GameModeAddon gm) {
public void onDisable() {
// Stop the pipeline
this.getPipeliner().stop();
// Save player data and the top tens
if (manager != null) {
manager.save();
}

}

private void loadBlockSettings() {
Expand Down
28 changes: 2 additions & 26 deletions src/main/java/world/bentobox/level/LevelsManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ public class LevelsManager {
private final Database<IslandLevels> handler;
// A cache of island levels.
private final Map<String, IslandLevels> levelsCache;

private final Database<TopTenData> topTenHandler;
// Top ten lists
private final Map<World,TopTenData> topTenLists;
// Background
Expand All @@ -77,8 +75,6 @@ public LevelsManager(Level addon) {
// Set up the database handler to store and retrieve data
// Note that these are saved by the BentoBox database
handler = new Database<>(addon, IslandLevels.class);
// Top Ten handler
topTenHandler = new Database<>(addon, TopTenData.class);
// Initialize the cache
levelsCache = new HashMap<>();
// Initialize top ten lists
Expand Down Expand Up @@ -179,8 +175,6 @@ public CompletableFuture<Results> calculateLevel(UUID targetPlayer, Island islan
}
// Save result
setIslandResults(island.getWorld(), island.getOwner(), r);
// Save top ten
addon.getManager().saveTopTen(island.getWorld());
// Save the island scan details
result.complete(r);
});
Expand Down Expand Up @@ -462,15 +456,14 @@ boolean hasTopTenPerm(@NonNull World world, @NonNull UUID targetPlayer) {
void loadTopTens() {
topTenLists.clear();
Bukkit.getScheduler().runTaskAsynchronously(addon.getPlugin(), () -> {
addon.log("Generating Top Ten Tables");
addon.log("Generating rankings");
handler.loadObjects().forEach(il -> {
if (il.getLevel() > 0) {
addon.getIslands().getIslandById(il.getUniqueId()).ifPresent(i -> this.addToTopTen(i, il.getLevel()));
}
});
topTenLists.keySet().forEach(w -> {
addon.log("Loaded top ten for " + w.getName());
this.saveTopTen(w);
addon.log("Generated rankings for " + w.getName());
});

});
Expand All @@ -484,27 +477,10 @@ void loadTopTens() {
public void removeEntry(World world, UUID uuid) {
if (topTenLists.containsKey(world)) {
topTenLists.get(world).getTopTen().remove(uuid);
topTenHandler.saveObjectAsync(topTenLists.get(world));
}

}

/**
* Saves all player data and the top ten
*/
public void save() {
levelsCache.values().forEach(handler::saveObjectAsync);
topTenLists.values().forEach(topTenHandler::saveObjectAsync);
}

/**
* Save the top ten for world
* @param world - world
*/
public void saveTopTen(World world) {
topTenHandler.saveObjectAsync(topTenLists.get(world));
}

/**
* Set an initial island level
* @param island - the island to set. Must have a non-null world
Expand Down
12 changes: 2 additions & 10 deletions src/test/java/world/bentobox/level/LevelsManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,8 @@ public void testLoadTopTens() {
Bukkit.getScheduler();
verify(scheduler).runTaskAsynchronously(eq(plugin), task.capture());
task.getValue().run();
verify(addon).log(eq("Generating Top Ten Tables"));
verify(addon).log(eq("Loaded top ten for bskyblock-world"));
verify(addon).log(eq("Generating rankings"));
verify(addon).log(eq("Generated rankings for bskyblock-world"));

}

Expand All @@ -401,14 +401,6 @@ public void testRemoveEntry() {
assertFalse(tt.containsKey(uuid));
}

/**
* Test method for {@link world.bentobox.level.LevelsManager#save()}.
*/
@Test
public void testSave() {
lm.save();
}

/**
* Test method for {@link world.bentobox.level.LevelsManager#setInitialIslandLevel(world.bentobox.bentobox.database.objects.Island, long)}.
*/
Expand Down

0 comments on commit d55f66f

Please sign in to comment.