block record service and default impl
parent
7de4d370ad
commit
958f93ee94
|
@ -1 +1,5 @@
|
|||
tiles
|
||||
target
|
||||
mapblocks
|
||||
.idea
|
||||
*.iml
|
||||
|
|
|
@ -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()) {
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue