refactor: 去除 storage 中的 errHandle 参数

This commit is contained in:
kercylan98 2023-07-20 10:15:34 +08:00
parent 0d1a985e69
commit 3befe645b7
3 changed files with 26 additions and 17 deletions

View File

@ -2,7 +2,6 @@ package storage
import (
"github.com/kercylan98/minotaur/utils/generic"
"time"
)
// NewIndexData 创建索引数据
@ -69,8 +68,8 @@ func (slf *IndexData[I, T]) SaveData(index I) error {
// SaveAllData 保存所有数据
// - errHandle 错误处理中如果返回 false 将重试,否则跳过当前保存下一个
func (slf *IndexData[I, T]) SaveAllData(errHandle func(err error) bool, retryInterval time.Duration) {
slf.storage.SaveAll(slf.GetName(), slf.GetAllData(), errHandle, retryInterval)
func (slf *IndexData[I, T]) SaveAllData() error {
return slf.storage.SaveAll(slf.GetName(), slf.GetAllData())
}
// DeleteData 删除数据

View File

@ -2,7 +2,6 @@ package storage
import (
"github.com/kercylan98/minotaur/utils/generic"
"time"
)
// IndexDataStorage 全局数据存储器接口
@ -15,7 +14,7 @@ type IndexDataStorage[I generic.Ordered, T IndexDataItem[I]] interface {
// Save 保存特定索引数据
Save(name string, index I, data T) error
// SaveAll 保存所有数据
SaveAll(name string, data map[I]T, errHandle func(err error) bool, retryInterval time.Duration)
SaveAll(name string, data map[I]T) error
// Delete 删除特定索引数据
Delete(name string, index I)
// DeleteAll 删除所有数据

View File

@ -8,7 +8,6 @@ import (
"os"
"path/filepath"
"strings"
"time"
)
const (
@ -16,6 +15,7 @@ const (
IndexDataFileDefaultSuffix = "stock"
indexNameFormat = "%s.%v.%s"
indexNameFormatTemp = "%s.%v.%s.temp"
)
// NewIndexDataFileStorage 创建索引数据文件存储器
@ -83,19 +83,30 @@ func (slf *IndexDataFileStorage[I, T]) Save(name string, index I, data T) error
return file.WriterFile(filepath.Join(slf.dir, fmt.Sprintf(indexNameFormat, name, index, slf.suffix)), bytes)
}
func (slf *IndexDataFileStorage[I, T]) SaveAll(name string, data map[I]T, errHandle func(err error) bool, retryInterval time.Duration) {
func (slf *IndexDataFileStorage[I, T]) SaveAll(name string, data map[I]T) error {
var temps = make([]string, 0, len(data))
defer func() {
for _, temp := range temps {
_ = os.Remove(temp)
}
}()
for index, data := range data {
for {
if err := slf.Save(name, index, data); err != nil {
if !errHandle(err) {
time.Sleep(retryInterval)
continue
bytes, err := slf.encoder(data)
if err != nil {
return err
}
break
}
break
path := filepath.Join(slf.dir, fmt.Sprintf(indexNameFormatTemp, name, index, slf.suffix))
temps = append(temps, path)
if err = file.WriterFile(path, bytes); err != nil {
return err
}
}
for _, temp := range temps {
if err := os.Rename(temp, strings.TrimSuffix(temp, ".temp")); err != nil {
return err
}
}
return nil
}
func (slf *IndexDataFileStorage[I, T]) Delete(name string, index I) {