feat: add configurations for memory only, disk only, and memory & disk modes
All checks were successful
Release Tag / release (push) Successful in 14s
All checks were successful
Release Tag / release (push) Successful in 14s
This commit is contained in:
@@ -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)).
|
||||
|
||||
Reference in New Issue
Block a user