quintodrome/persistence/db_ledis/checksum_repository.go

53 lines
1.1 KiB
Go
Raw Normal View History

2020-01-10 15:41:35 -09:00
package db_ledis
import (
2020-01-08 16:45:07 -09:00
"github.com/cloudsonic/sonic-server/log"
2017-04-01 05:47:14 -08:00
"github.com/cloudsonic/sonic-server/scanner"
"github.com/siddontang/ledisdb/ledis"
)
var (
2016-03-16 16:51:03 -08:00
checkSumKeyName = []byte("checksums")
)
type checkSumRepository struct {
data map[string]string
}
func NewCheckSumRepository() scanner.CheckSumRepository {
r := &checkSumRepository{}
r.loadData()
return r
}
func (r *checkSumRepository) loadData() {
r.data = make(map[string]string)
2016-03-16 16:51:03 -08:00
pairs, err := Db().HGetAll(checkSumKeyName)
if err != nil {
2020-01-08 16:45:07 -09:00
log.Error("Error loading CheckSums", err)
}
for _, p := range pairs {
r.data[string(p.Field)] = string(p.Value)
}
2020-01-08 16:45:07 -09:00
log.Debug("Loaded checksums", "total", len(r.data))
}
func (r *checkSumRepository) Get(id string) (string, error) {
return r.data[id], nil
}
func (r *checkSumRepository) SetData(newSums map[string]string) error {
2016-03-16 16:51:03 -08:00
Db().HClear(checkSumKeyName)
pairs := make([]ledis.FVPair, len(newSums))
r.data = make(map[string]string)
i := 0
for id, sum := range newSums {
p := ledis.FVPair{Field: []byte(id), Value: []byte(sum)}
pairs[i] = p
r.data[id] = sum
i++
}
2016-03-16 16:51:03 -08:00
return Db().HMset(checkSumKeyName, pairs...)
}