mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2024-12-23 16:50:18 +01:00
Added cyclic garbage collection for a defined interval. Defaults to 24h
This commit is contained in:
parent
66b85f199c
commit
e38d8eb9fc
4
README
4
README
@ -51,7 +51,9 @@ Usage:
|
||||
-cache=32: cache size in MB # Cache size for LevelDB
|
||||
-driver="leveldb": type of database (leveldb, sqlite)
|
||||
-host="": host to bind
|
||||
-gc-duration="24h": Duration between forced GCs.
|
||||
-port=6379: port to bind
|
||||
-version=false: Print version and exit.
|
||||
|
||||
To use mtredisalize with your particular world you have to modify the
|
||||
world.mt of the world.
|
||||
@ -75,4 +77,4 @@ The mandatory path is the path to the database file: map.sqlite in case
|
||||
of SQLite3 and the directoy map.db in case of LevelDB right beside the world.mt file.
|
||||
|
||||
This is Free Software under the terms of the MIT license. See LICENSE file for details.
|
||||
(c) 2014 by Sascha L. Teichmann
|
||||
(c) 2014 by Sascha L. Teichmann
|
||||
|
39
main.go
39
main.go
@ -11,23 +11,32 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
const Version = "pre0.1"
|
||||
const (
|
||||
Version = "pre0.1"
|
||||
GCDuration = "24h"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
var port int
|
||||
var host string
|
||||
var driver string
|
||||
var cacheSize int
|
||||
var version bool
|
||||
var (
|
||||
port int
|
||||
host string
|
||||
driver string
|
||||
cacheSize int
|
||||
version bool
|
||||
gcDuration string
|
||||
)
|
||||
|
||||
flag.IntVar(&port, "port", 6379, "port to bind")
|
||||
flag.StringVar(&driver, "driver", "leveldb", "type of database (leveldb, sqlite)")
|
||||
flag.StringVar(&host, "host", "", "host to bind")
|
||||
flag.IntVar(&cacheSize, "cache", 32, "cache size in MB")
|
||||
flag.BoolVar(&version, "version", false, "Print version and exit.")
|
||||
flag.StringVar(&gcDuration, "gc-duration", GCDuration, "Duration between forced GCs.")
|
||||
flag.Parse()
|
||||
|
||||
if version {
|
||||
@ -41,8 +50,15 @@ func main() {
|
||||
log.Fatal("Missing path to world")
|
||||
}
|
||||
|
||||
var err error
|
||||
var backend Backend
|
||||
var (
|
||||
err error
|
||||
backend Backend
|
||||
gcDur time.Duration
|
||||
)
|
||||
|
||||
if gcDur, err = time.ParseDuration(gcDuration); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if driver == "sqlite" {
|
||||
if backend, err = NewSqliteBackend(args[0]); err != nil {
|
||||
@ -80,6 +96,9 @@ func main() {
|
||||
}
|
||||
}()
|
||||
|
||||
log.Printf("Doing garbage collection every: %s", gcDur)
|
||||
gcChan := time.Tick(gcDur)
|
||||
|
||||
for {
|
||||
select {
|
||||
case conn := <-connChan:
|
||||
@ -93,6 +112,10 @@ func main() {
|
||||
case <-sigChan:
|
||||
log.Println("Shutting down")
|
||||
return
|
||||
case <-gcChan:
|
||||
log.Println("Starting garbage collection.")
|
||||
runtime.GC()
|
||||
log.Println("Garbage collection done.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user