55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package nodecache
|
|
|
|
import (
|
|
"context"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/cache"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/ocache"
|
|
"time"
|
|
)
|
|
|
|
var log = logger.NewNamed("treecache")
|
|
|
|
type treeCache struct {
|
|
gcttl int
|
|
cache ocache.OCache
|
|
}
|
|
|
|
func NewNodeCache(ttl int) cache.TreeCache {
|
|
return &treeCache{
|
|
gcttl: ttl,
|
|
}
|
|
}
|
|
|
|
func (c *treeCache) SetBuildFunc(buildFunc cache.BuildFunc) {
|
|
c.cache = ocache.New(
|
|
func(ctx context.Context, id string) (value ocache.Object, err error) {
|
|
return buildFunc(ctx, id, nil)
|
|
},
|
|
ocache.WithLogger(log.Sugar()),
|
|
ocache.WithGCPeriod(time.Minute),
|
|
ocache.WithTTL(time.Duration(c.gcttl)*time.Second),
|
|
ocache.WithRefCounter(false),
|
|
)
|
|
}
|
|
|
|
func (c *treeCache) Close() (err error) {
|
|
return c.cache.Close()
|
|
}
|
|
|
|
func (c *treeCache) GetTree(ctx context.Context, id string) (res cache.TreeResult, err error) {
|
|
var cacheRes ocache.Object
|
|
cacheRes, err = c.cache.Get(ctx, id)
|
|
if err != nil {
|
|
return cache.TreeResult{}, err
|
|
}
|
|
|
|
res = cache.TreeResult{
|
|
Release: func() {
|
|
c.cache.Release(id)
|
|
},
|
|
TreeContainer: cacheRes.(cache.TreeContainer),
|
|
}
|
|
return
|
|
}
|