1
0
forked from MTSR/mapserver

optional multithreading

This commit is contained in:
NatureFreshMilk 2019-01-23 16:06:56 +01:00
parent 1fb671f71a
commit 3383c492c4
6 changed files with 36 additions and 32 deletions

View File

@ -18,6 +18,8 @@ type Config struct {
RenderState *RenderStateType `json:"renderstate"`
Layers []layer.Layer `json:"layers"`
InitialRenderingFetchLimit int `json:"initialrenderingfetchlimit"`
InitialRenderingJobs int `json:"initialrenderingjobs"`
InitialRenderingQueue int `json:"initialrenderingqueue"`
UpdateRenderingFetchLimit int `json:"updaterenderingfetchlimit"`
}
@ -99,6 +101,8 @@ func ParseConfig(filename string) (*Config, error) {
RenderState: &rstate,
Layers: layers,
InitialRenderingFetchLimit: 1000,
InitialRenderingJobs: 1,
InitialRenderingQueue: 0,
UpdateRenderingFetchLimit: 1000,
}

View File

@ -1,18 +1,18 @@
package initialrenderer
import (
"github.com/sirupsen/logrus"
"mapserver/app"
"mapserver/coords"
"strconv"
"time"
"github.com/sirupsen/logrus"
)
func getTileKey(tc *coords.TileCoords) string {
return strconv.Itoa(tc.X) + "/" + strconv.Itoa(tc.Y) + "/" + strconv.Itoa(tc.Zoom)
}
func worker(ctx *app.App, coords <-chan *coords.TileCoords){
func worker(ctx *app.App, coords <-chan *coords.TileCoords) {
for tc := range coords {
ctx.Objectdb.RemoveTile(tc)
_, err := ctx.Tilerenderer.Render(tc, 2)
@ -38,9 +38,11 @@ func Job(ctx *app.App) {
rstate := ctx.Config.RenderState
lastcoords := coords.NewMapBlockCoords(rstate.LastX, rstate.LastY, rstate.LastZ)
jobs := make(chan *coords.TileCoords, 0)
jobs := make(chan *coords.TileCoords, ctx.Config.InitialRenderingQueue)
go worker(ctx, jobs)
for i := 0; i < ctx.Config.InitialRenderingJobs; i++ {
go worker(ctx, jobs)
}
for true {
start := time.Now()

View File

@ -2,24 +2,24 @@ package mapobject
import (
"mapserver/app"
"mapserver/mapblockparser"
"mapserver/mapblockparser"
)
type Listener struct {
ctx *app.App
ctx *app.App
}
func (this *Listener) OnParsedMapBlock(block *mapblockparser.MapBlock) {
err := this.ctx.Objectdb.RemoveMapData(block.Pos)
if err != nil {
panic(err)
}
err := this.ctx.Objectdb.RemoveMapData(block.Pos)
if err != nil {
panic(err)
}
for id, name := range block.BlockMapping {
if name == "mapserver:poi" {
onPoiBlock(id, block, this.ctx.Objectdb)
}
}
for id, name := range block.BlockMapping {
if name == "mapserver:poi" {
onPoiBlock(id, block, this.ctx.Objectdb)
}
}
}
func Setup(ctx *app.App) {

View File

@ -37,9 +37,9 @@ func (db *Sqlite3Accessor) AddMapData(data MapObject) error {
}
res, err := db.db.Exec(addMapDataQuery,
data.X, data.Y, data.Z,
data.MBPos.X, data.MBPos.Y, data.MBPos.Z,
data.Type, data.Mtime)
data.X, data.Y, data.Z,
data.MBPos.X, data.MBPos.Y, data.MBPos.Z,
data.Type, data.Mtime)
if err != nil {
tx.Rollback()
@ -57,10 +57,10 @@ func (db *Sqlite3Accessor) AddMapData(data MapObject) error {
//TODO: batch insert
_, err := db.db.Exec(addMapDataAttributeQuery, id, k, v)
if err != nil {
tx.Rollback()
return err
}
if err != nil {
tx.Rollback()
return err
}
}
tx.Commit()

View File

@ -64,7 +64,6 @@ func TestMigrate(t *testing.T) {
}
func TestMapObjects(t *testing.T) {
tmpfile, err := ioutil.TempFile("", "TestMapObjects.*.sqlite")
if err != nil {
@ -85,15 +84,15 @@ func TestMapObjects(t *testing.T) {
attrs := make(map[string]string)
attrs["X"] = "y"
pos := coords.NewMapBlockCoords(0,0,0)
pos := coords.NewMapBlockCoords(0, 0, 0)
o := MapObject{
MBPos: &pos,
X: 1,
Y: 2,
Z: 3,
Type: "xy",
Mtime: 1234,
MBPos: &pos,
X: 1,
Y: 2,
Z: 3,
Type: "xy",
Mtime: 1234,
Attributes: attrs,
}

View File

@ -47,7 +47,6 @@ func (db *Sqlite3Accessor) GetTile(pos *coords.TileCoords) (*Tile, error) {
return nil, nil
}
const setTileQuery = `
insert or replace into tiles(x,y,zoom,layerid,data,mtime)
values(?, ?, ?, ?, ?, ?)
@ -69,7 +68,7 @@ func (db *Sqlite3Accessor) RemoveTile(pos *coords.TileCoords) error {
}
func NewSqliteAccessor(filename string) (*Sqlite3Accessor, error) {
db, err := sql.Open("sqlite3", filename + "?_timeout=500")
db, err := sql.Open("sqlite3", filename+"?_timeout=500")
if err != nil {
return nil, err
}