diff --git a/internal/caches/list_file_hash_map.go b/internal/caches/list_file_hash_map.go index 3016813..e46174f 100644 --- a/internal/caches/list_file_hash_map.go +++ b/internal/caches/list_file_hash_map.go @@ -3,25 +3,36 @@ package caches import ( + "github.com/TeaOSLab/EdgeNode/internal/utils" "github.com/TeaOSLab/EdgeNode/internal/zero" "sync" ) -// FileListHashMap +// FileListHashMap 文件Hash列表 type FileListHashMap struct { - m map[string]zero.Zero - locker sync.RWMutex - isReady bool + m map[string]zero.Zero + + locker sync.RWMutex + isAvailable bool + isReady bool } func NewFileListHashMap() *FileListHashMap { return &FileListHashMap{ - m: map[string]zero.Zero{}, - isReady: false, + m: map[string]zero.Zero{}, + isAvailable: false, + isReady: false, } } func (this *FileListHashMap) Load(db *FileListDB) error { + // 如果系统内存过小,我们不缓存 + if utils.SystemMemoryGB() < 3 { + return nil + } + + this.isAvailable = true + var lastId int64 for { hashList, maxId, err := db.ListHashes(lastId) @@ -42,18 +53,29 @@ func (this *FileListHashMap) Load(db *FileListDB) error { } func (this *FileListHashMap) Add(hash string) { + if !this.isAvailable { + return + } + this.locker.Lock() this.m[hash] = zero.New() this.locker.Unlock() } func (this *FileListHashMap) Delete(hash string) { + if !this.isAvailable { + return + } + this.locker.Lock() delete(this.m, hash) this.locker.Unlock() } func (this *FileListHashMap) Exist(hash string) bool { + if !this.isAvailable { + return true + } if !this.isReady { // 只有完全Ready时才能判断是否为false return true