summaryrefslogtreecommitdiff
path: root/vendor/go.opencensus.io/trace
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opencensus.io/trace')
-rw-r--r--vendor/go.opencensus.io/trace/lrumap.go40
-rw-r--r--vendor/go.opencensus.io/trace/trace.go6
2 files changed, 35 insertions, 11 deletions
diff --git a/vendor/go.opencensus.io/trace/lrumap.go b/vendor/go.opencensus.io/trace/lrumap.go
index 3f80a3368..dc7a295c7 100644
--- a/vendor/go.opencensus.io/trace/lrumap.go
+++ b/vendor/go.opencensus.io/trace/lrumap.go
@@ -15,23 +15,47 @@
package trace
import (
- "github.com/hashicorp/golang-lru/simplelru"
+ "github.com/golang/groupcache/lru"
)
+// A simple lru.Cache wrapper that tracks the keys of the current contents and
+// the cumulative number of evicted items.
type lruMap struct {
- simpleLruMap *simplelru.LRU
+ cacheKeys map[lru.Key]bool
+ cache *lru.Cache
droppedCount int
}
func newLruMap(size int) *lruMap {
- lm := &lruMap{}
- lm.simpleLruMap, _ = simplelru.NewLRU(size, nil)
+ lm := &lruMap{
+ cacheKeys: make(map[lru.Key]bool),
+ cache: lru.New(size),
+ droppedCount: 0,
+ }
+ lm.cache.OnEvicted = func(key lru.Key, value interface{}) {
+ delete(lm.cacheKeys, key)
+ lm.droppedCount++
+ }
return lm
}
-func (lm *lruMap) add(key, value interface{}) {
- evicted := lm.simpleLruMap.Add(key, value)
- if evicted {
- lm.droppedCount++
+func (lm lruMap) len() int {
+ return lm.cache.Len()
+}
+
+func (lm lruMap) keys() []interface{} {
+ keys := []interface{}{}
+ for k := range lm.cacheKeys {
+ keys = append(keys, k)
}
+ return keys
+}
+
+func (lm *lruMap) add(key, value interface{}) {
+ lm.cacheKeys[lru.Key(key)] = true
+ lm.cache.Add(lru.Key(key), value)
+}
+
+func (lm *lruMap) get(key interface{}) (interface{}, bool) {
+ return lm.cache.Get(key)
}
diff --git a/vendor/go.opencensus.io/trace/trace.go b/vendor/go.opencensus.io/trace/trace.go
index 38ead7bf0..3f8977b41 100644
--- a/vendor/go.opencensus.io/trace/trace.go
+++ b/vendor/go.opencensus.io/trace/trace.go
@@ -296,7 +296,7 @@ func (s *Span) makeSpanData() *SpanData {
var sd SpanData
s.mu.Lock()
sd = *s.data
- if s.lruAttributes.simpleLruMap.Len() > 0 {
+ if s.lruAttributes.len() > 0 {
sd.Attributes = s.lruAttributesToAttributeMap()
sd.DroppedAttributeCount = s.lruAttributes.droppedCount
}
@@ -370,8 +370,8 @@ func (s *Span) interfaceArrayToAnnotationArray() []Annotation {
func (s *Span) lruAttributesToAttributeMap() map[string]interface{} {
attributes := make(map[string]interface{})
- for _, key := range s.lruAttributes.simpleLruMap.Keys() {
- value, ok := s.lruAttributes.simpleLruMap.Get(key)
+ for _, key := range s.lruAttributes.keys() {
+ value, ok := s.lruAttributes.get(key)
if ok {
keyStr := key.(string)
attributes[keyStr] = value