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

View File

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

View File

@ -8,14 +8,14 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"time"
) )
const ( const (
// IndexDataFileDefaultSuffix 是 IndexDataFileStorage 的文件默认后缀 // IndexDataFileDefaultSuffix 是 IndexDataFileStorage 的文件默认后缀
IndexDataFileDefaultSuffix = "stock" IndexDataFileDefaultSuffix = "stock"
indexNameFormat = "%s.%v.%s" indexNameFormat = "%s.%v.%s"
indexNameFormatTemp = "%s.%v.%s.temp"
) )
// NewIndexDataFileStorage 创建索引数据文件存储器 // 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) 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 index, data := range data {
for { bytes, err := slf.encoder(data)
if err := slf.Save(name, index, data); err != nil { if err != nil {
if !errHandle(err) { return err
time.Sleep(retryInterval) }
continue path := filepath.Join(slf.dir, fmt.Sprintf(indexNameFormatTemp, name, index, slf.suffix))
} temps = append(temps, path)
break if err = file.WriterFile(path, bytes); err != nil {
} return err
break
} }
} }
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) { func (slf *IndexDataFileStorage[I, T]) Delete(name string, index I) {