2013-05-14 18:15:35 +04:00
|
|
|
package writer
|
|
|
|
|
|
|
|
import (
|
2013-08-29 17:44:15 +04:00
|
|
|
"imposm3/cache"
|
|
|
|
"imposm3/database"
|
|
|
|
"imposm3/expire"
|
|
|
|
"imposm3/geom/limit"
|
2013-11-07 18:48:55 +04:00
|
|
|
"imposm3/logging"
|
2013-08-29 17:44:15 +04:00
|
|
|
"imposm3/stats"
|
2013-05-21 09:52:03 +04:00
|
|
|
"runtime"
|
|
|
|
"sync"
|
2013-05-14 18:15:35 +04:00
|
|
|
)
|
|
|
|
|
2013-11-07 18:48:55 +04:00
|
|
|
var log = logging.NewLogger("writer")
|
|
|
|
|
2013-05-21 11:50:10 +04:00
|
|
|
type ErrorLevel interface {
|
|
|
|
Level() int
|
|
|
|
}
|
|
|
|
|
2013-05-28 14:54:19 +04:00
|
|
|
type looper interface {
|
|
|
|
loop()
|
|
|
|
}
|
|
|
|
|
|
|
|
type OsmElemWriter struct {
|
2013-10-28 11:26:51 +04:00
|
|
|
osmCache *cache.OSMCache
|
|
|
|
diffCache *cache.DiffCache
|
|
|
|
progress *stats.Statistics
|
|
|
|
inserter database.Inserter
|
|
|
|
wg *sync.WaitGroup
|
|
|
|
limiter *limit.Limiter
|
|
|
|
writer looper
|
|
|
|
srid int
|
|
|
|
expireTiles *expire.Tiles
|
2013-11-04 17:33:32 +04:00
|
|
|
concurrent bool
|
2013-05-28 14:54:19 +04:00
|
|
|
}
|
|
|
|
|
2013-07-30 10:17:47 +04:00
|
|
|
func (writer *OsmElemWriter) SetLimiter(limiter *limit.Limiter) {
|
|
|
|
writer.limiter = limiter
|
2013-05-28 14:54:19 +04:00
|
|
|
}
|
|
|
|
|
2013-11-04 17:33:32 +04:00
|
|
|
func (writer *OsmElemWriter) EnableConcurrent() {
|
|
|
|
writer.concurrent = true
|
|
|
|
}
|
|
|
|
|
2013-05-28 14:54:19 +04:00
|
|
|
func (writer *OsmElemWriter) Start() {
|
2013-11-04 17:33:32 +04:00
|
|
|
concurrency := 1
|
|
|
|
if writer.concurrent {
|
|
|
|
concurrency = runtime.NumCPU()
|
|
|
|
}
|
|
|
|
for i := 0; i < concurrency; i++ {
|
2013-05-28 14:54:19 +04:00
|
|
|
writer.wg.Add(1)
|
|
|
|
go writer.writer.loop()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-12 16:57:06 +04:00
|
|
|
func (writer *OsmElemWriter) SetExpireTiles(expireTiles *expire.Tiles) {
|
|
|
|
writer.expireTiles = expireTiles
|
|
|
|
}
|
|
|
|
|
2013-10-29 19:32:16 +04:00
|
|
|
func (writer *OsmElemWriter) Wait() {
|
2013-05-28 14:54:19 +04:00
|
|
|
writer.wg.Wait()
|
|
|
|
}
|