Some checks failed
PR Check / check-and-test (pull_request) Failing after 11m4s
- Updated disk_test.go to replace Set and Get with Create and Open methods for better clarity and functionality. - Modified fileinfo.go to include package comment. - Refactored gc.go to streamline garbage collection handling and removed unused statistics. - Updated gc_test.go to comment out large random tests for future implementation. - Enhanced memory.go to implement LRU caching and metrics for memory usage. - Updated memory_test.go to replace Set and Get with Create and Open methods. - Removed sync.go as it was redundant and not utilized. - Updated vfs.go to reflect changes in the VFS interface, replacing Set and Get with Create and Open. - Added package comments to vfserror.go for consistency.
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
// steamcache/gc.go
|
|
package steamcache
|
|
|
|
import (
|
|
"s1d3sw1ped/SteamCache2/vfs"
|
|
"s1d3sw1ped/SteamCache2/vfs/cachestate"
|
|
"s1d3sw1ped/SteamCache2/vfs/disk"
|
|
"s1d3sw1ped/SteamCache2/vfs/memory"
|
|
"time"
|
|
)
|
|
|
|
// lruGC deletes files in LRU order until enough space is reclaimed.
|
|
func lruGC(vfss vfs.VFS, size uint) {
|
|
deletions := 0
|
|
var reclaimed uint
|
|
|
|
for reclaimed < size {
|
|
switch fs := vfss.(type) {
|
|
case *disk.DiskFS:
|
|
fi := fs.LRU.Back()
|
|
if fi == nil {
|
|
break
|
|
}
|
|
sz := uint(fi.Size())
|
|
err := fs.Delete(fi.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
reclaimed += sz
|
|
deletions++
|
|
case *memory.MemoryFS:
|
|
fi := fs.LRU.Back()
|
|
if fi == nil {
|
|
break
|
|
}
|
|
sz := uint(fi.Size())
|
|
err := fs.Delete(fi.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
reclaimed += sz
|
|
deletions++
|
|
default:
|
|
// Fallback to old method if not supported
|
|
stats := vfss.StatAll()
|
|
if len(stats) == 0 {
|
|
break
|
|
}
|
|
fi := stats[0] // Assume sorted or pick first
|
|
sz := uint(fi.Size())
|
|
err := vfss.Delete(fi.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
reclaimed += sz
|
|
deletions++
|
|
}
|
|
}
|
|
}
|
|
|
|
func cachehandler(fi *vfs.FileInfo, cs cachestate.CacheState) bool {
|
|
return time.Since(fi.AccessTime()) < time.Second*60 // Put hot files in the fast vfs if equipped
|
|
}
|