block record service and default impl

master
Thomas Rudin 2018-11-27 14:08:30 +01:00
parent 7de4d370ad
commit 958f93ee94
7 changed files with 48 additions and 36 deletions

4
.gitignore vendored
View File

@ -1 +1,5 @@
tiles
target
mapblocks
.idea
*.iml

View File

@ -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<Coordinate, Optional<MapBlock>
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<Coordinate, Optional<MapBlock>
private final LoadingCache<Coordinate, Optional<MapBlock>> cache;
private final BlocksRecordAccessor recordAccessor;
private final BlocksRecordService blocksRecordService;
public Optional<MapBlock> get(Coordinate coords){
try {
@ -64,7 +65,7 @@ public class MapBlockAccessor extends CacheLoader<Coordinate, Optional<MapBlock>
}
//do prefetch
List<BlocksRecord> blocks = recordAccessor.getTopDownYStride(x, z, minY, maxY);
List<BlocksRecord> 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<Coordinate, Optional<MapBlock>
@Override
public Optional<MapBlock> load(Coordinate coordinate) throws Exception {
Optional<BlocksRecord> optionalRecord = recordAccessor.get(coordinate);
Optional<BlocksRecord> optionalRecord = blocksRecordService.get(coordinate);
if (optionalRecord.isPresent()) {

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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 {

View File

@ -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<BlocksRecord> getTopDownYStride(int x, int z, int minY, int maxY);
Optional<BlocksRecord> get(Coordinate coords);
void update(BlocksRecord block);
}

View File

@ -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<Coordinate, Optional<BlocksRecord>> {
public class BlocksRecordDatabaseService
extends CacheLoader<Coordinate, Optional<BlocksRecord>>
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<Coordinate, Optional<Block
private final DSLContext ctx;
@Override
public Optional<BlocksRecord> get(Coordinate coords){
try {
return cache.get(coords);
@ -53,6 +58,7 @@ public class BlocksRecordAccessor extends CacheLoader<Coordinate, Optional<Block
}
}
@Override
public List<BlocksRecord> getTopDownYStride(int x, int z, int minY, int maxY) {
long start = System.currentTimeMillis();
@ -102,7 +108,7 @@ public class BlocksRecordAccessor extends CacheLoader<Coordinate, Optional<Block
}
@Override
public void update(BlocksRecord block){
Coordinate coordinate = new Coordinate(block);
cache.put(coordinate, Optional.of(block));
@ -135,4 +141,5 @@ public class BlocksRecordAccessor extends CacheLoader<Coordinate, Optional<Block
return record;
}
}