disk cache: add a path based API

This allows maintaining only a single cache entry per path when the
path's contents change.
This commit is contained in:
Kovid Goyal
2025-10-08 06:41:12 +05:30
parent 3d5200e1ce
commit a6335777d9
4 changed files with 198 additions and 54 deletions

View File

@@ -17,6 +17,7 @@ type Entry struct {
type Metadata struct {
TotalSize int64
PathMap map[string]string
SortedEntries []*Entry
}
@@ -29,29 +30,45 @@ type DiskCache struct {
entries Metadata
entry_map map[string]*Entry
entries_mod_time time.Time
entries_dirty bool
get_dir string
read_count int
}
func NewDiskCache(path string, max_size int64) (dc *DiskCache, err error) {
return new_disk_cache(path, max_size)
}
func KeyForPath(path string) (key string, err error) {
return key_for_path(path)
}
func (dc *DiskCache) Get(key string, items ...string) map[string]string {
func (dc *DiskCache) Get(key string, items ...string) (map[string]string, error) {
dc.lock()
defer dc.unlock()
return dc.get(key, items)
}
func (dc *DiskCache) GetPath(path string, items ...string) (string, map[string]string, error) {
dc.lock()
defer dc.unlock()
key, err := key_for_path(path)
if err != nil {
return "", nil, err
}
ans, err := dc.get(key, items)
return key, ans, err
}
func (dc *DiskCache) Remove(key string) (err error) {
dc.lock()
defer dc.unlock()
return dc.remove(key)
}
func (dc *DiskCache) AddPath(path, key string, items map[string][]byte) (ans map[string]string, err error) {
dc.lock()
defer dc.unlock()
ans, err = dc.add_path(path, key, items)
return
}
func (dc *DiskCache) Add(key string, items map[string][]byte) (ans map[string]string, err error) {
dc.lock()
defer dc.unlock()