mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2025-12-21 07:05:34 +01:00
mtredisalize: Add infrastructure to send backend store changes to separate daemons.
This commit is contained in:
@@ -16,8 +16,9 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
Version = "0.3"
|
||||
GCDuration = "24h"
|
||||
Version = "0.3"
|
||||
GCDuration = "24h"
|
||||
ChangeDuration = "30s"
|
||||
)
|
||||
|
||||
func usage() {
|
||||
@@ -30,13 +31,15 @@ func usage() {
|
||||
func main() {
|
||||
|
||||
var (
|
||||
port int
|
||||
host string
|
||||
driver string
|
||||
cacheSize int
|
||||
version bool
|
||||
interleaved bool
|
||||
gcDuration string
|
||||
port int
|
||||
host string
|
||||
driver string
|
||||
cacheSize int
|
||||
version bool
|
||||
interleaved bool
|
||||
changeUrl string
|
||||
gcDuration string
|
||||
changeDuration string
|
||||
)
|
||||
|
||||
flag.Usage = usage
|
||||
@@ -46,8 +49,13 @@ func main() {
|
||||
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.BoolVar(&interleaved, "interleaved", false, "Backend stores key in interleaved form.")
|
||||
flag.StringVar(&gcDuration, "gc-duration", GCDuration, "Duration between forced GCs.")
|
||||
flag.BoolVar(&interleaved,
|
||||
"interleaved", false, "Backend stores key in interleaved form.")
|
||||
flag.StringVar(&gcDuration,
|
||||
"gc-duration", GCDuration, "Duration between forced GCs.")
|
||||
flag.StringVar(&changeDuration,
|
||||
"change-duration", ChangeDuration, "Duration to aggregate changes.")
|
||||
flag.StringVar(&changeUrl, "change-url", "", "URL to send changes to.")
|
||||
flag.Parse()
|
||||
|
||||
if version {
|
||||
@@ -60,26 +68,47 @@ func main() {
|
||||
}
|
||||
|
||||
var (
|
||||
err error
|
||||
backend Backend
|
||||
gcDur time.Duration
|
||||
err error
|
||||
backend Backend
|
||||
gcDur time.Duration
|
||||
chDur time.Duration
|
||||
changeTracker *ChangeTracker
|
||||
)
|
||||
|
||||
if gcDur, err = time.ParseDuration(gcDuration); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Setup the change listening stuff.
|
||||
|
||||
var changeChan <-chan time.Time
|
||||
|
||||
useChangeNotification := changeUrl != ""
|
||||
|
||||
if useChangeNotification {
|
||||
if chDur, err = time.ParseDuration(changeDuration); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
changeChan = time.Tick(chDur)
|
||||
changeTracker = NewChangeTracker()
|
||||
} else {
|
||||
// We will never receive ticks on this.
|
||||
changeChan = make(<-chan time.Time)
|
||||
}
|
||||
|
||||
path := flag.Arg(0)
|
||||
|
||||
if driver == "sqlite" {
|
||||
if backend, err = NewSqliteBackend(path, interleaved); err != nil {
|
||||
if backend, err = NewSqliteBackend(path, changeTracker, interleaved); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
if backend, err = NewLeveDBBackend(path, interleaved, cacheSize); err != nil {
|
||||
if backend, err = NewLeveDBBackend(
|
||||
path, changeTracker, interleaved, cacheSize); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
defer backend.Shutdown()
|
||||
|
||||
var listener net.Listener
|
||||
@@ -127,6 +156,10 @@ func main() {
|
||||
log.Println("Starting garbage collection.")
|
||||
runtime.GC()
|
||||
log.Println("Garbage collection done.")
|
||||
case <-changeChan:
|
||||
if changeTracker != nil {
|
||||
changeTracker.FlushChanges(changeUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user