From 958f93ee94947cff8e893c45c1825ee527b0c32f Mon Sep 17 00:00:00 2001 From: Thomas Rudin Date: Tue, 27 Nov 2018 14:08:30 +0100 Subject: [PATCH] block record service and default impl --- .gitignore | 4 ++++ .../tileserver/accessor/MapBlockAccessor.java | 11 +++++----- .../tileserver/job/UpdateChangedTilesJob.java | 15 +++++-------- .../tileserver/module/ServiceModule.java | 7 +++---- .../tileserver/route/PlayerRoute.java | 10 --------- .../service/BlocksRecordService.java | 16 ++++++++++++++ .../impl/BlocksRecordDatabaseService.java} | 21 ++++++++++++------- 7 files changed, 48 insertions(+), 36 deletions(-) create mode 100644 src/main/java/io/rudin/minetest/tileserver/service/BlocksRecordService.java rename src/main/java/io/rudin/minetest/tileserver/{accessor/BlocksRecordAccessor.java => service/impl/BlocksRecordDatabaseService.java} (88%) diff --git a/.gitignore b/.gitignore index 70b8406..afb3ea8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ tiles +target +mapblocks +.idea +*.iml diff --git a/src/main/java/io/rudin/minetest/tileserver/accessor/MapBlockAccessor.java b/src/main/java/io/rudin/minetest/tileserver/accessor/MapBlockAccessor.java index 4842367..670314c 100644 --- a/src/main/java/io/rudin/minetest/tileserver/accessor/MapBlockAccessor.java +++ b/src/main/java/io/rudin/minetest/tileserver/accessor/MapBlockAccessor.java @@ -7,6 +7,7 @@ import io.rudin.minetest.tileserver.MapBlock; import io.rudin.minetest.tileserver.MapBlockParser; import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord; import io.rudin.minetest.tileserver.config.TileServerConfig; +import io.rudin.minetest.tileserver.service.BlocksRecordService; import io.rudin.minetest.tileserver.service.EventBus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,8 +27,8 @@ public class MapBlockAccessor extends CacheLoader private static final Logger logger = LoggerFactory.getLogger(MapBlockAccessor.class); @Inject - public MapBlockAccessor(BlocksRecordAccessor recordAccessor, EventBus eventBus, TileServerConfig cfg){ - this.recordAccessor = recordAccessor; + public MapBlockAccessor(BlocksRecordService blocksRecordService, EventBus eventBus, TileServerConfig cfg){ + this.blocksRecordService = blocksRecordService; this.eventBus = eventBus; //TODO: disk based cache, ehcache @@ -45,7 +46,7 @@ public class MapBlockAccessor extends CacheLoader private final LoadingCache> cache; - private final BlocksRecordAccessor recordAccessor; + private final BlocksRecordService blocksRecordService; public Optional get(Coordinate coords){ try { @@ -64,7 +65,7 @@ public class MapBlockAccessor extends CacheLoader } //do prefetch - List blocks = recordAccessor.getTopDownYStride(x, z, minY, maxY); + List blocks = blocksRecordService.getTopDownYStride(x, z, minY, maxY); for (BlocksRecord record: blocks){ MapBlock mapBlock = MapBlockParser.parse(record); @@ -86,7 +87,7 @@ public class MapBlockAccessor extends CacheLoader @Override public Optional load(Coordinate coordinate) throws Exception { - Optional optionalRecord = recordAccessor.get(coordinate); + Optional optionalRecord = blocksRecordService.get(coordinate); if (optionalRecord.isPresent()) { diff --git a/src/main/java/io/rudin/minetest/tileserver/job/UpdateChangedTilesJob.java b/src/main/java/io/rudin/minetest/tileserver/job/UpdateChangedTilesJob.java index c7e30df..4b42c60 100644 --- a/src/main/java/io/rudin/minetest/tileserver/job/UpdateChangedTilesJob.java +++ b/src/main/java/io/rudin/minetest/tileserver/job/UpdateChangedTilesJob.java @@ -1,7 +1,6 @@ package io.rudin.minetest.tileserver.job; import static io.rudin.minetest.tileserver.blockdb.tables.Blocks.BLOCKS; -import static io.rudin.minetest.tileserver.tiledb.tables.Tiles.TILES; import javax.inject.Inject; import javax.inject.Singleton; @@ -10,7 +9,6 @@ import io.prometheus.client.Counter; import io.prometheus.client.Gauge; import io.prometheus.client.Histogram; import io.rudin.minetest.tileserver.TileRenderer; -import io.rudin.minetest.tileserver.accessor.BlocksRecordAccessor; import io.rudin.minetest.tileserver.accessor.Coordinate; import io.rudin.minetest.tileserver.accessor.MapBlockAccessor; import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord; @@ -18,21 +16,18 @@ import io.rudin.minetest.tileserver.config.Layer; import io.rudin.minetest.tileserver.config.LayerConfig; import io.rudin.minetest.tileserver.config.TileServerConfig; import io.rudin.minetest.tileserver.qualifier.MapDB; -import io.rudin.minetest.tileserver.qualifier.TileDB; import io.rudin.minetest.tileserver.query.YQueryBuilder; +import io.rudin.minetest.tileserver.service.BlocksRecordService; import io.rudin.minetest.tileserver.service.EventBus; import org.jooq.*; import io.rudin.minetest.tileserver.service.TileCache; import io.rudin.minetest.tileserver.util.CoordinateResolver; import io.rudin.minetest.tileserver.util.CoordinateResolver.TileInfo; -import org.jooq.impl.DSL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.Timestamp; import java.util.*; -import java.util.stream.Collectors; @Singleton public class UpdateChangedTilesJob implements Runnable { @@ -54,7 +49,7 @@ public class UpdateChangedTilesJob implements Runnable { @Inject public UpdateChangedTilesJob(@MapDB DSLContext ctx, TileCache tileCache, EventBus eventBus, TileServerConfig cfg, - MapBlockAccessor mapBlockAccessor, BlocksRecordAccessor blocksRecordAccessor, + MapBlockAccessor mapBlockAccessor, BlocksRecordService blocksRecordService, TileRenderer tileRenderer, YQueryBuilder yQueryBuilder, LayerConfig layerCfg) { this.ctx = ctx; this.tileCache = tileCache; @@ -66,7 +61,7 @@ public class UpdateChangedTilesJob implements Runnable { this.cfg = cfg; this.mapBlockAccessor = mapBlockAccessor; - this.blocksRecordAccessor = blocksRecordAccessor; + this.blocksRecordService = blocksRecordService; for (Layer layer: layerCfg.layers){ layerBlockChangeGaugeMap.put(layer.id, Gauge.build() @@ -90,7 +85,7 @@ public class UpdateChangedTilesJob implements Runnable { private final MapBlockAccessor mapBlockAccessor; - private final BlocksRecordAccessor blocksRecordAccessor; + private final BlocksRecordService blocksRecordService; private final TileServerConfig cfg; @@ -212,7 +207,7 @@ public class UpdateChangedTilesJob implements Runnable { for (BlocksRecord record : blocks) { - blocksRecordAccessor.update(record); + blocksRecordService.update(record); mapBlockAccessor.invalidate(new Coordinate(record)); Integer x = record.getPosx(); diff --git a/src/main/java/io/rudin/minetest/tileserver/module/ServiceModule.java b/src/main/java/io/rudin/minetest/tileserver/module/ServiceModule.java index 6438f92..b50b816 100644 --- a/src/main/java/io/rudin/minetest/tileserver/module/ServiceModule.java +++ b/src/main/java/io/rudin/minetest/tileserver/module/ServiceModule.java @@ -11,12 +11,10 @@ import io.rudin.minetest.tileserver.config.TileServerConfig; import io.rudin.minetest.tileserver.provider.ColorTableProvider; import io.rudin.minetest.tileserver.provider.ExecutorProvider; import io.rudin.minetest.tileserver.provider.LayerConfigProvider; +import io.rudin.minetest.tileserver.service.BlocksRecordService; import io.rudin.minetest.tileserver.service.EventBus; import io.rudin.minetest.tileserver.service.TileCache; -import io.rudin.minetest.tileserver.service.impl.DatabaseTileCache; -import io.rudin.minetest.tileserver.service.impl.EHTileCache; -import io.rudin.minetest.tileserver.service.impl.EventBusImpl; -import io.rudin.minetest.tileserver.service.impl.FileTileCache; +import io.rudin.minetest.tileserver.service.impl.*; import org.jooq.util.jaxb.Database; public class ServiceModule extends AbstractModule { @@ -45,5 +43,6 @@ public class ServiceModule extends AbstractModule { bind(ExecutorService.class).toProvider(ExecutorProvider.class); bind(ScheduledExecutorService.class).toProvider(ExecutorProvider.class); bind(LayerConfig.class).toProvider(LayerConfigProvider.class); + bind(BlocksRecordService.class).to(BlocksRecordDatabaseService.class); } } diff --git a/src/main/java/io/rudin/minetest/tileserver/route/PlayerRoute.java b/src/main/java/io/rudin/minetest/tileserver/route/PlayerRoute.java index e7255ed..1e193de 100644 --- a/src/main/java/io/rudin/minetest/tileserver/route/PlayerRoute.java +++ b/src/main/java/io/rudin/minetest/tileserver/route/PlayerRoute.java @@ -1,19 +1,11 @@ package io.rudin.minetest.tileserver.route; -import static io.rudin.minetest.tileserver.blockdb.tables.Player.PLAYER; -import static io.rudin.minetest.tileserver.blockdb.tables.PlayerMetadata.PLAYER_METADATA; - import javax.inject.Inject; import javax.inject.Singleton; -import io.rudin.minetest.tileserver.accessor.BlocksRecordAccessor; import io.rudin.minetest.tileserver.accessor.PlayerInfoAccessor; -import io.rudin.minetest.tileserver.blockdb.tables.pojos.PlayerMetadata; import io.rudin.minetest.tileserver.config.TileServerConfig; -import io.rudin.minetest.tileserver.entity.PlayerInfo; -import org.jooq.DSLContext; -import io.rudin.minetest.tileserver.blockdb.tables.pojos.Player; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import spark.Request; @@ -21,8 +13,6 @@ import spark.Response; import spark.Route; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Singleton public class PlayerRoute implements Route { diff --git a/src/main/java/io/rudin/minetest/tileserver/service/BlocksRecordService.java b/src/main/java/io/rudin/minetest/tileserver/service/BlocksRecordService.java new file mode 100644 index 0000000..d808a80 --- /dev/null +++ b/src/main/java/io/rudin/minetest/tileserver/service/BlocksRecordService.java @@ -0,0 +1,16 @@ +package io.rudin.minetest.tileserver.service; + +import io.rudin.minetest.tileserver.accessor.Coordinate; +import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord; + +import java.util.List; +import java.util.Optional; + +public interface BlocksRecordService { + + List getTopDownYStride(int x, int z, int minY, int maxY); + + Optional get(Coordinate coords); + + void update(BlocksRecord block); +} diff --git a/src/main/java/io/rudin/minetest/tileserver/accessor/BlocksRecordAccessor.java b/src/main/java/io/rudin/minetest/tileserver/service/impl/BlocksRecordDatabaseService.java similarity index 88% rename from src/main/java/io/rudin/minetest/tileserver/accessor/BlocksRecordAccessor.java rename to src/main/java/io/rudin/minetest/tileserver/service/impl/BlocksRecordDatabaseService.java index 638ba5d..d4042a3 100644 --- a/src/main/java/io/rudin/minetest/tileserver/accessor/BlocksRecordAccessor.java +++ b/src/main/java/io/rudin/minetest/tileserver/service/impl/BlocksRecordDatabaseService.java @@ -1,12 +1,13 @@ -package io.rudin.minetest.tileserver.accessor; +package io.rudin.minetest.tileserver.service.impl; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import io.rudin.minetest.tileserver.MapBlock; +import io.rudin.minetest.tileserver.accessor.Coordinate; import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord; import io.rudin.minetest.tileserver.config.TileServerConfig; import io.rudin.minetest.tileserver.qualifier.MapDB; +import io.rudin.minetest.tileserver.service.BlocksRecordService; import org.jooq.DSLContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,7 +18,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -25,12 +25,15 @@ import java.util.concurrent.TimeUnit; import static io.rudin.minetest.tileserver.blockdb.tables.Blocks.BLOCKS; @Singleton -public class BlocksRecordAccessor extends CacheLoader> { +public class BlocksRecordDatabaseService + extends CacheLoader> + implements BlocksRecordService { - private static final Logger logger = LoggerFactory.getLogger(BlocksRecordAccessor.class); + + private static final Logger logger = LoggerFactory.getLogger(BlocksRecordDatabaseService.class); @Inject - public BlocksRecordAccessor(@MapDB DSLContext ctx, TileServerConfig cfg){ + public BlocksRecordDatabaseService(@MapDB DSLContext ctx, TileServerConfig cfg){ this.ctx = ctx; this.cfg = cfg; this.cache = CacheBuilder.newBuilder() @@ -45,6 +48,8 @@ public class BlocksRecordAccessor extends CacheLoader get(Coordinate coords){ try { return cache.get(coords); @@ -53,6 +58,7 @@ public class BlocksRecordAccessor extends CacheLoader getTopDownYStride(int x, int z, int minY, int maxY) { long start = System.currentTimeMillis(); @@ -102,7 +108,7 @@ public class BlocksRecordAccessor extends CacheLoader