From 23f34f1182628258a0e1bbf7165c46be486271c6 Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris@kearneymail.com> Date: Sun, 7 May 2017 09:56:36 -0700 Subject: [PATCH] upgrade to mapdb3 --- pom.xml | 7 +---- .../java/com/comandante/creeper/Main.java | 7 +++-- .../creeper/entity/EntityManager.java | 28 ++++++++++++------- .../creeper/items/EffectSerializer.java | 10 +++++-- .../creeper/items/ItemSerializer.java | 9 ++++-- .../player/PlayerManagementManager.java | 7 +++-- .../creeper/player/PlayerManager.java | 18 ++++-------- .../player/PlayerMetadataSerializer.java | 10 +++++-- .../creeper/player/PlayerManagerTest.java | 2 +- .../combat_simuation/NpcTestHarness.java | 3 +- 10 files changed, 57 insertions(+), 44 deletions(-) diff --git a/pom.xml b/pom.xml index 9e057403..2593a7ca 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ <dependency> <groupId>org.mapdb</groupId> <artifactId>mapdb</artifactId> - <version>1.0.9</version> + <version>3.0.4</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> @@ -75,11 +75,6 @@ <artifactId>metrics-graphite</artifactId> <version>3.1.2</version> </dependency> - <dependency> - <groupId>com.googlecode.concurrentlinkedhashmap</groupId> - <artifactId>concurrentlinkedhashmap-lru</artifactId> - <version>1.4</version> - </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java index 62746b7d..fffcae93 100644 --- a/src/main/java/com/comandante/creeper/Main.java +++ b/src/main/java/com/comandante/creeper/Main.java @@ -15,6 +15,7 @@ import com.comandante.creeper.player.PlayerManagementManager; import com.comandante.creeper.player.PlayerManager; import com.comandante.creeper.server.player_communication.ChannelUtils; import com.comandante.creeper.server.telnet.CreeperServer; +import com.comandante.creeper.storage.MapDbAutoCommitService; import com.comandante.creeper.storage.WorldStorage; import com.comandante.creeper.world.MapsManager; import com.comandante.creeper.world.RoomManager; @@ -81,11 +82,13 @@ public class Main { Files.isDirectory().apply(new File("world/")); - DB db = DBMaker.newFileDB(new File("world/" + creeperConfiguration.databaseFileName)) + DB db = DBMaker.fileDB(new File("world/" + creeperConfiguration.databaseFileName)) + .transactionEnable() .closeOnJvmShutdown() .make(); - Gson gson = new GsonBuilder().create(); + MapDbAutoCommitService mapDbAutoCommitService = new MapDbAutoCommitService(db); + mapDbAutoCommitService.startAsync(); PlayerManager playerManager = new PlayerManager(db, new SessionManager()); playerManager.createAllGauges(); diff --git a/src/main/java/com/comandante/creeper/entity/EntityManager.java b/src/main/java/com/comandante/creeper/entity/EntityManager.java index dece67f9..2778b8a1 100644 --- a/src/main/java/com/comandante/creeper/entity/EntityManager.java +++ b/src/main/java/com/comandante/creeper/entity/EntityManager.java @@ -15,6 +15,7 @@ import com.google.gson.Gson; import org.apache.log4j.Logger; import org.mapdb.DB; import org.mapdb.HTreeMap; +import org.mapdb.Serializer; import java.util.Iterator; import java.util.Map; @@ -35,18 +36,21 @@ public class EntityManager { private final RoomManager roomManager; private final PlayerManager playerManager; + private final static String ITEM_MAP = "itemMap"; + private final static String EFFECTS_MAP = "effectsMap"; + public EntityManager(RoomManager roomManager, PlayerManager playerManager, DB db) { this.roomManager = roomManager; - if (db.exists("itemMap")) { - this.items = db.get("itemMap"); - } else { - this.items = db.createHashMap("itemMap").valueSerializer(new ItemSerializer()).make(); - } - if (db.exists("effectsMap")) { - this.effects = db.get("effectsMap"); - } else { - this.effects = db.createHashMap("effectsMap").valueSerializer(new EffectSerializer()).make(); - } + this.items = db.hashMap(ITEM_MAP) + .keySerializer(Serializer.STRING) + .valueSerializer(new ItemSerializer()) + .createOrOpen(); + + this.effects = db.hashMap(EFFECTS_MAP) + .keySerializer(Serializer.STRING) + .valueSerializer(new EffectSerializer()) + .createOrOpen(); + this.playerManager = playerManager; ExecutorService tickOrchestratorService = Executors.newFixedThreadPool(5); tickOrchestratorService.submit(new PlayerTicker()); @@ -123,6 +127,7 @@ public class EntityManager { class PlayerTicker implements Runnable { private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "player_tick_time")); + @Override public void run() { while (true) { @@ -145,6 +150,7 @@ public class EntityManager { class RoomTicker implements Runnable { private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "room_tick_time")); + @Override public void run() { while (true) { @@ -167,6 +173,7 @@ public class EntityManager { class NpcTicker implements Runnable { private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "npc_tick_time")); + @Override public void run() { while (true) { @@ -187,6 +194,7 @@ public class EntityManager { class EntityTicker implements Runnable { private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "entity_tick_time")); + @Override public void run() { while (true) { diff --git a/src/main/java/com/comandante/creeper/items/EffectSerializer.java b/src/main/java/com/comandante/creeper/items/EffectSerializer.java index b4ce934c..538141d2 100644 --- a/src/main/java/com/comandante/creeper/items/EffectSerializer.java +++ b/src/main/java/com/comandante/creeper/items/EffectSerializer.java @@ -2,6 +2,9 @@ package com.comandante.creeper.items; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.jetbrains.annotations.NotNull; +import org.mapdb.DataInput2; +import org.mapdb.DataOutput2; import org.mapdb.Serializer; import java.io.DataInput; @@ -14,13 +17,14 @@ public class EffectSerializer implements Serializer<Effect>, Serializable { private final static Gson GSON = new GsonBuilder().create(); @Override - public void serialize(DataOutput out, Effect value) throws IOException { + public void serialize(@NotNull DataOutput2 out, @NotNull Effect value) throws IOException { out.writeUTF(GSON.toJson(value, Effect.class)); + } @Override - public Effect deserialize(DataInput in, int available) throws IOException { - return GSON.fromJson(in.readUTF(), Effect.class); + public Effect deserialize(@NotNull DataInput2 input, int available) throws IOException { + return GSON.fromJson(input.readUTF(), Effect.class); } @Override diff --git a/src/main/java/com/comandante/creeper/items/ItemSerializer.java b/src/main/java/com/comandante/creeper/items/ItemSerializer.java index 7b911ff0..2d6a1851 100644 --- a/src/main/java/com/comandante/creeper/items/ItemSerializer.java +++ b/src/main/java/com/comandante/creeper/items/ItemSerializer.java @@ -2,6 +2,9 @@ package com.comandante.creeper.items; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.jetbrains.annotations.NotNull; +import org.mapdb.DataInput2; +import org.mapdb.DataOutput2; import org.mapdb.Serializer; import java.io.DataInput; @@ -14,13 +17,13 @@ public class ItemSerializer implements Serializer<Item>, Serializable { private final static Gson GSON = new GsonBuilder().create(); @Override - public void serialize(DataOutput out, Item value) throws IOException { + public void serialize(@NotNull DataOutput2 out, @NotNull Item value) throws IOException { out.writeUTF(GSON.toJson(value, Item.class)); } @Override - public Item deserialize(DataInput in, int available) throws IOException { - return GSON.fromJson(in.readUTF(), Item.class); + public Item deserialize(@NotNull DataInput2 input, int available) throws IOException { + return GSON.fromJson(input.readUTF(), Item.class); } @Override diff --git a/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java b/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java index 33ea2f8d..724633ab 100644 --- a/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java +++ b/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; import javax.management.*; import java.lang.management.ManagementFactory; import java.util.Map; +import java.util.Set; public class PlayerManagementManager { @@ -18,13 +19,15 @@ public class PlayerManagementManager { } public void createAndRegisterAllPlayerManagementMBeans() throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException { - for (Map.Entry<String, PlayerMetadata> entry : gameManager.getPlayerManager().getPlayerMetadataStore().entrySet()) { + Set<Map.Entry<String, PlayerMetadata>> entrySet = gameManager.getPlayerManager().getPlayerMetadataStore().entrySet(); + for (Map.Entry<String, PlayerMetadata> entry : entrySet) { registerPlayer(entry.getValue().getPlayerName(), entry.getValue().getPlayerId(), gameManager); } } public void processPlayersMarkedForDeletion(){ - for (Map.Entry<String, PlayerMetadata> entry : gameManager.getPlayerManager().getPlayerMetadataStore().entrySet()) { + Set<Map.Entry<String, PlayerMetadata>> entrySet = gameManager.getPlayerManager().getPlayerMetadataStore().entrySet(); + for (Map.Entry<String, PlayerMetadata> entry : entrySet) { String playerId = entry.getKey(); PlayerMetadata playerMetadata = entry.getValue(); if (playerMetadata.isMarkedForDelete()) { diff --git a/src/main/java/com/comandante/creeper/player/PlayerManager.java b/src/main/java/com/comandante/creeper/player/PlayerManager.java index c00297e9..e7cc5653 100644 --- a/src/main/java/com/comandante/creeper/player/PlayerManager.java +++ b/src/main/java/com/comandante/creeper/player/PlayerManager.java @@ -10,6 +10,7 @@ import com.google.gson.Gson; import org.apache.commons.codec.binary.Base64; import org.mapdb.DB; import org.mapdb.HTreeMap; +import org.mapdb.Serializer; import java.util.Iterator; import java.util.Map; @@ -20,24 +21,17 @@ import java.util.concurrent.ConcurrentHashMap; import static com.codahale.metrics.MetricRegistry.name; public class PlayerManager { - - private final DB db; private final SessionManager sessionManager; private ConcurrentHashMap<String, Player> players = new ConcurrentHashMap<String, Player>(); private HTreeMap<String, PlayerMetadata> playerMetadataStore; + private final static String PLAYER_METADATA_MAP = "playerMetadata"; + public PlayerManager(DB db, SessionManager sessionManager) { - this.db = db; - if (db.exists("playerMetadata")) { - this.playerMetadataStore = db.get("playerMetadata"); - } else { - this.playerMetadataStore = db - .createHashMap("playerMetadata") + this.playerMetadataStore = db.hashMap(PLAYER_METADATA_MAP) + .keySerializer(Serializer.STRING) .valueSerializer(new PlayerMetadataSerializer()) - .make(); - } - MapDbAutoCommitService mapDbAutoCommitService = new MapDbAutoCommitService(db); - mapDbAutoCommitService.startAsync(); + .createOrOpen(); this.sessionManager = sessionManager; } diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java index fdc2f58f..c236d3cd 100644 --- a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java +++ b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java @@ -2,6 +2,9 @@ package com.comandante.creeper.player; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.jetbrains.annotations.NotNull; +import org.mapdb.DataInput2; +import org.mapdb.DataOutput2; import org.mapdb.Serializer; import java.io.DataInput; @@ -14,13 +17,14 @@ public class PlayerMetadataSerializer implements Serializer<PlayerMetadata>, Ser private final static Gson GSON = new GsonBuilder().create(); @Override - public void serialize(DataOutput out, PlayerMetadata value) throws IOException { + public void serialize(@NotNull DataOutput2 out, @NotNull PlayerMetadata value) throws IOException { out.writeUTF(GSON.toJson(value, PlayerMetadata.class)); + } @Override - public PlayerMetadata deserialize(DataInput in, int available) throws IOException { - return GSON.fromJson(in.readUTF(), PlayerMetadata.class); + public PlayerMetadata deserialize(@NotNull DataInput2 input, int available) throws IOException { + return GSON.fromJson(input.readUTF(), PlayerMetadata.class); } @Override diff --git a/src/test/com/comandante/creeper/player/PlayerManagerTest.java b/src/test/com/comandante/creeper/player/PlayerManagerTest.java index b3daba5e..db379c9c 100644 --- a/src/test/com/comandante/creeper/player/PlayerManagerTest.java +++ b/src/test/com/comandante/creeper/player/PlayerManagerTest.java @@ -31,7 +31,7 @@ public class PlayerManagerTest { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - DB db = DBMaker.newMemoryDB().make(); + DB db = DBMaker.memoryDB().transactionEnable().make(); playerManager = new PlayerManager(db, sessionManager); } diff --git a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java index 31b66a18..be926b52 100644 --- a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java +++ b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java @@ -302,8 +302,7 @@ public class NpcTestHarness { } }; CreeperConfiguration creeperConfiguration = new CreeperConfiguration(new MapConfiguration(Maps.newHashMap())); - DB db = DBMaker.newMemoryDB().closeOnJvmShutdown().make(); - Gson gson = new GsonBuilder().create(); + DB db = DBMaker.memoryDB().transactionEnable().closeOnJvmShutdown().make(); PlayerManager playerManager = new PlayerManager(db, new SessionManager()); RoomManager roomManager = new RoomManager(playerManager); MapsManager mapsManager = new MapsManager(creeperConfiguration, roomManager); -- GitLab