func newARCCachedBS(ctx context.Context, bs Blockstore, lruSize int) (*arccache, error) { arc, err := lru.NewARC(lruSize) if err != nil { return nil, err } c := &arccache{arc: arc, blockstore: bs} c.hits = metrics.NewCtx(ctx, "arc.hits_total", "Number of ARC cache hits").Counter() c.total = metrics.NewCtx(ctx, "arc_total", "Total number of ARC cache requests").Counter() return c, nil }
// bloomCached returns Blockstore that caches Has requests using Bloom filter // Size is size of bloom filter in bytes func bloomCached(bs Blockstore, ctx context.Context, bloomSize, hashCount, lruSize int) (*bloomcache, error) { bl, err := bloom.New(float64(bloomSize), float64(hashCount)) if err != nil { return nil, err } arc, err := lru.NewARC(lruSize) if err != nil { return nil, err } bc := &bloomcache{blockstore: bs, bloom: bl, arc: arc} bc.Invalidate() go bc.Rebuild(ctx) return bc, nil }