You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
746 B
Go
35 lines
746 B
Go
package store
|
|
|
|
import (
|
|
"expvar"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/hashicorp/raft"
|
|
)
|
|
|
|
// FSMSnapshot is a wrapper around raft.FSMSnapshot which adds instrumentation and
|
|
// logging.
|
|
type FSMSnapshot struct {
|
|
raft.FSMSnapshot
|
|
logger *log.Logger
|
|
}
|
|
|
|
// Persist writes the snapshot to the given sink.
|
|
func (f *FSMSnapshot) Persist(sink raft.SnapshotSink) (retError error) {
|
|
startT := time.Now()
|
|
defer func() {
|
|
if retError == nil {
|
|
dur := time.Since(startT)
|
|
stats.Get(snapshotPersistDuration).(*expvar.Int).Set(dur.Milliseconds())
|
|
f.logger.Printf("persisted snapshot %s in %s", sink.ID(), time.Since(startT))
|
|
}
|
|
}()
|
|
return f.FSMSnapshot.Persist(sink)
|
|
}
|
|
|
|
// Release is a no-op.
|
|
func (f *FSMSnapshot) Release() {
|
|
f.FSMSnapshot.Release()
|
|
}
|