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
1 year ago
|
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()
|
||
|
}
|