refactor: 去除 storage 中的 errHandle 参数
This commit is contained in:
parent
0d1a985e69
commit
3befe645b7
|
@ -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 删除数据
|
||||
|
|
|
@ -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 删除所有数据
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue