diff options
author | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-21 18:24:35 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-21 18:24:35 +0530 |
commit | a470aa89cbdabba813636b8a29be8ae3836c03a0 (patch) | |
tree | 2551bebaff980cc93bf8fcf60dd8ff50bd7efc48 /conn.go | |
parent | Add Tests and benchmarks (diff) | |
download | cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.gz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.bz2 cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.lz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.xz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.zst cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.zip |
Added LTR Eviction
Diffstat (limited to '')
-rw-r--r-- | conn.go | 39 |
1 files changed, 19 insertions, 20 deletions
@@ -7,16 +7,15 @@ import ( "sync" "time" - "github.com/vmihailenco/msgpack" + "github.com/rogpeppe/go-internal/lockedfile" + "github.com/vmihailenco/msgpack/v5" ) type db struct { - File io.WriteSeeker - Store store - SnapshotTicker *pauseTimer - CleanupTicker *pauseTimer - Stop chan struct{} - wg sync.WaitGroup + File io.WriteSeeker + Store store + Stop chan struct{} + wg sync.WaitGroup } type Option func(*db) error @@ -26,7 +25,7 @@ func openFile(filename string, options ...Option) (*db, error) { if err != nil { return nil, err } - file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0666) + file, err := lockedfile.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0666) if err != nil { return nil, err } @@ -49,10 +48,7 @@ func openFile(filename string, options ...Option) (*db, error) { } func openMem(options ...Option) (*db, error) { - ret := &db{ - SnapshotTicker: newPauseTimerStopped(0), - CleanupTicker: newPauseTimerStopped(10 * time.Second), - } + ret := &db{} ret.Store.Init() ret.SetConfig(options...) return ret, nil @@ -65,6 +61,9 @@ func (d *db) Start() { } func (d *db) SetConfig(options ...Option) error { + d.Store.mu.Lock() + defer d.Store.mu.Unlock() + for _, opt := range options { if err := opt(d); err != nil { return err @@ -88,14 +87,14 @@ func WithMaxCost(maxCost uint64) Option { func SetSnapshotTime(t time.Duration) Option { return func(d *db) error { - d.SnapshotTicker.Reset(t) + d.Store.SnapshotTicker.Reset(t) return nil } } func SetCleanupTime(t time.Duration) Option { return func(d *db) error { - d.CleanupTicker.Reset(t) + d.Store.CleanupTicker.Reset(t) return nil } } @@ -103,19 +102,19 @@ func SetCleanupTime(t time.Duration) Option { func (d *db) backgroundWorker() { defer d.wg.Done() - d.SnapshotTicker.Resume() - defer d.SnapshotTicker.Stop() + d.Store.SnapshotTicker.Resume() + defer d.Store.SnapshotTicker.Stop() - d.CleanupTicker.Resume() - defer d.CleanupTicker.Stop() + d.Store.CleanupTicker.Resume() + defer d.Store.CleanupTicker.Stop() for { select { case <-d.Stop: return - case <-d.SnapshotTicker.C: + case <-d.Store.SnapshotTicker.C: d.Flush() - case <-d.CleanupTicker.C: + case <-d.Store.CleanupTicker.C: cleanup(&d.Store) evict(&d.Store) } |