quintodrome/persistence/checksum_repository.go

63 lines
1.3 KiB
Go
Raw Normal View History

package persistence
import (
"errors"
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) Put(id, sum string) error {
if id == "" {
return errors.New("Id is required")
}
2016-03-16 16:51:03 -08:00
_, err := Db().HSet(checkSumKeyName, []byte(id), []byte(sum))
return err
}
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...)
}