feat: add configurations for memory only, disk only, and memory & disk modes
All checks were successful
Release Tag / release (push) Successful in 14s

This commit is contained in:
2025-01-22 19:28:45 -06:00
parent ca069a20ee
commit 7401c040dc
8 changed files with 156 additions and 50 deletions

View File

@@ -47,26 +47,63 @@ func New(address string, memorySize string, memoryMultiplier int, diskSize strin
panic(err)
}
m := memory.New(memorysize)
d := disk.New(diskPath, disksize)
c := cache.New(
cachehandler,
)
var m *memory.MemoryFS
if memorysize > 0 {
m = memory.New(memorysize)
}
var d *disk.DiskFS
if disksize > 0 {
d = disk.New(diskPath, disksize)
}
// configure the cache to match the specified mode (memory only, disk only, or memory and disk) based on the provided sizes
if disksize == 0 && memorysize != 0 {
//memory only mode - no disk
logger.Logger.Info().Bool("memory", true).Bool("disk", false).Msg("configuration")
c.SetSlow(gc.New(
m,
memoryMultiplier,
memorygc,
))
} else if disksize != 0 && memorysize == 0 {
// disk only mode
logger.Logger.Info().Bool("memory", false).Bool("disk", true).Msg("configuration")
c.SetSlow(gc.New(
d,
diskMultiplier,
diskgc,
))
} else if disksize != 0 && memorysize != 0 {
// memory and disk mode
logger.Logger.Info().Bool("memory", true).Bool("disk", true).Msg("configuration")
c.SetFast(gc.New(
m,
memoryMultiplier,
memorygc,
))
c.SetSlow(gc.New(
d,
diskMultiplier,
diskgc,
))
} else {
// no memory or disk isn't a valid configuration
logger.Logger.Error().Bool("memory", false).Bool("disk", false).Msg("configuration invalid :( exiting")
os.Exit(1)
}
sc := &SteamCache{
address: address,
vfs: syncfs.New(
cache.New(
gc.New(
m,
memoryMultiplier,
memorygc,
),
gc.New(
d,
diskMultiplier,
diskgc,
),
cachehandler,
),
),
vfs: syncfs.New(c),
memory: m,
disk: d,
@@ -74,8 +111,10 @@ func New(address string, memorySize string, memoryMultiplier int, diskSize strin
hits: avgcachestate.New(10000),
}
if d.Size() > d.Capacity() {
diskgc(d, int(d.Size()-d.Capacity()))
if d != nil {
if d.Size() > d.Capacity() {
diskgc(d, int(d.Size()-d.Capacity()))
}
}
return sc
@@ -120,11 +159,13 @@ func (sc *SteamCache) LogStats() {
Msg("memory")
}
logger.Logger.Info().
Str("size", units.HumanSize(float64(sc.disk.Size()))).
Str("capacity", units.HumanSize(float64(sc.disk.Capacity()))).
Str("files", fmt.Sprintf("%d", len(sc.disk.StatAll()))).
Msg("disk")
if sc.disk != nil { // only log disk if disk is enabled
logger.Logger.Info().
Str("size", units.HumanSize(float64(sc.disk.Size()))).
Str("capacity", units.HumanSize(float64(sc.disk.Capacity()))).
Str("files", fmt.Sprintf("%d", len(sc.disk.StatAll()))).
Msg("disk")
}
logger.Logger.Info().
Str("hitrate", fmt.Sprintf("%.2f%%", sc.hits.Avg()*100)).