Explorar o código

Lock lru before write; add benchmark

Ian Lozinski %!s(int64=9) %!d(string=hai) anos
pai
achega
e9d36ad83c
Modificáronse 2 ficheiros con 24 adicións e 0 borrados
  1. 2 0
      prepared_cache.go
  2. 22 0
      prepared_cache_test.go

+ 2 - 0
prepared_cache.go

@@ -55,6 +55,8 @@ func (p *preparedLRU) execIfMissing(key string, fn func(lru *lru.Cache) *infligh
 		return val.(*inflightPrepare), true
 	}
 
+	p.mu.Lock()
+	defer p.mu.Unlock()
 	return fn(p.lru), false
 }
 

+ 22 - 0
prepared_cache_test.go

@@ -0,0 +1,22 @@
+package gocql
+
+import (
+	"testing"
+
+	"github.com/gocql/gocql/internal/lru"
+)
+
+func BenchmarkLRU(b *testing.B) {
+	pl := preparedLRU{
+		lru: lru.New(10),
+	}
+
+	b.RunParallel(func(pb *testing.PB) {
+		for pb.Next() {
+			pl.execIfMissing("foo", func(c *lru.Cache) *inflightPrepare {
+				c.Add("foo", (*inflightPrepare)(nil))
+				return nil
+			})
+		}
+	})
+}