Skip to content

Commit a451d72

Browse files
Integrate feedback and upstream fixes
- Ensure correct locking in GetOrCreateSecondaryCache - Fetch now returns a *Item
1 parent d2c2442 commit a451d72

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

layeredcache.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ func (c *LayeredCache) Get(primary, secondary string) *Item {
7070
func (c *LayeredCache) GetOrCreateSecondaryCache(primary string) *SecondaryCache {
7171
primaryBkt := c.bucket(primary)
7272
bkt := primaryBkt.getSecondaryBucket(primary)
73+
primaryBkt.Lock()
7374
if bkt == nil {
7475
bkt = &bucket{lookup: make(map[string]*Item)}
7576
primaryBkt.buckets[primary] = bkt
7677
}
78+
primaryBkt.Unlock()
7779
return &SecondaryCache{
7880
bucket: bkt,
7981
pCache: c,

secondarycache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func (s *SecondaryCache) Set(secondary string, value interface{}, duration time.
2626

2727
// Fetch or set a secondary key.
2828
// The semantics are the same as for LayeredCache.Fetch
29-
func (s *SecondaryCache) Fetch(secondary string, duration time.Duration, fetch func() (interface{}, error)) (interface{}, error) {
29+
func (s *SecondaryCache) Fetch(secondary string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error) {
3030
item := s.Get(secondary)
3131
if item != nil {
3232
return item, nil

secondarycache_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ func (_ SecondaryCacheTests) FetchReturnsAnExistingValue() {
7878
cache.Set("spice", "flow", "value-a", time.Minute)
7979
sCache := cache.GetOrCreateSecondaryCache("spice")
8080
val, _ := sCache.Fetch("flow", time.Minute, func() (interface{}, error) {return "a fetched value", nil})
81-
Expect(val.(*Item).Value().(string)).To.Equal("value-a")
81+
Expect(val.Value().(string)).To.Equal("value-a")
8282
}
8383

8484
func (_ SecondaryCacheTests) FetchReturnsANewValue() {
8585
cache := newLayered()
8686
sCache := cache.GetOrCreateSecondaryCache("spice")
8787
val, _ := sCache.Fetch("flow", time.Minute, func() (interface{}, error) {return "a fetched value", nil})
88-
Expect(val.(*Item).Value().(string)).To.Equal("a fetched value")
88+
Expect(val.Value().(string)).To.Equal("a fetched value")
8989
}
9090

9191
func (_ SecondaryCacheTests) TrackerDoesNotCleanupHeldInstance() {

0 commit comments

Comments
 (0)