1
0
Fork 0
forked from External/grumble

Freeze a full snapshot of the server to disk after 100 log ops. (This removes the current log and opens a new one)

This commit is contained in:
Mikkel Krautz 2011-08-27 15:46:26 +02:00
parent eb4f3319fd
commit 9194e578e3
3 changed files with 23 additions and 1 deletions

View file

@ -667,6 +667,7 @@ func (server *Server) UpdateFrozenUser(user *User) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Mark a user as deleted in the datstore.
@ -675,6 +676,7 @@ func (server *Server) DeleteFrozenUser(user *User) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Given a target channel and a ChannelState protocol message, create a freezer.Channel that
@ -706,6 +708,7 @@ func (server *Server) UpdateFrozenChannel(channel *Channel, state *mumbleproto.C
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Write a channel's ACL and Group data to disk. Mumble doesn't support
@ -741,6 +744,7 @@ func (server *Server) UpdateFrozenChannelACLs(channel *Channel) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Mark a channel as deleted in the datastore.
@ -749,6 +753,7 @@ func (server *Server) DeleteFrozenChannel(channel *Channel) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Write the server's banlist to the datastore.
@ -761,6 +766,7 @@ func (server *Server) UpdateFrozenBans(bans []ban.Ban) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Write an updated config value to the datastore.
@ -773,6 +779,7 @@ func (server *Server) UpdateConfig(key, value string) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}
// Delete the config value identified by the given key from the datastore.
@ -784,4 +791,5 @@ func (server *Server) ResetConfig(key string) {
if err != nil {
server.Fatal(err)
}
server.numLogOps += 1
}

View file

@ -79,6 +79,7 @@ func main() {
}
log.SetPrefix("[G] ")
log.SetFlags(log.LstdFlags|log.Lmicroseconds)
log.Printf("Grumble")
log.Printf("Using blob directory: %s", *blobdir)

View file

@ -36,6 +36,7 @@ import (
const DefaultPort = 64738
const UDPPacketSize = 1024
const LogOpsBeforeSync = 100
const CeltCompatBitstream = -2147483637
const (
StateClientConnected = iota
@ -96,6 +97,7 @@ type Server struct {
pool *sessionpool.SessionPool
// Freezer
numLogOps int
freezelog *freezer.Log
// ACL cache
@ -160,7 +162,7 @@ func NewServer(id int64, addr string, port int) (s *Server, err os.Error) {
s.Channels[0] = NewChannel(0, "Root")
s.nextChanId = 1
s.Logger = log.New(os.Stdout, fmt.Sprintf("[%v] ", s.Id), log.Ldate|log.Ltime)
s.Logger = log.New(os.Stdout, fmt.Sprintf("[%v] ", s.Id), log.LstdFlags|log.Lmicroseconds)
return
}
@ -388,6 +390,17 @@ func (server *Server) handler() {
case <-regtick:
server.RegisterPublicServer()
}
// Check if its time to sync the server state and re-open the log
if server.numLogOps >= LogOpsBeforeSync {
server.Print("Writing full server snapshot to disk")
err := server.FreezeToFile()
if err != nil {
server.Fatal(err)
}
server.numLogOps = 0
server.Print("Wrote full server snapshot to disk")
}
}
}