refactor: 去除 storage 中的 errHandle 参数
This commit is contained in:
parent
0d1a985e69
commit
3befe645b7
|
@ -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 删除数据
|
||||||
|
|
|
@ -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 删除所有数据
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -16,6 +15,7 @@ const (
|
||||||
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
|
|
||||||
}
|
}
|
||||||
break
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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) {
|
||||||
|
|
Loading…
Reference in New Issue