mirror of https://github.com/docker/cli.git
bump hashicorp/golang-lru v0.5.3
full diff: 0fb14efe8c
...v0.5.3
- hashicorp/golang-lru#53 remove defer keyword to avoid overhead
- hashicorp/golang-lru#56 lru.Get(): avoid nil pointer dereference
- hashicorp/golang-lru#57 Adds LRU cache resize
- hashicorp/golang-lru#58 lru: don't kill the return values of Remove and RemoveOldest
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
b104da4a09
commit
4b267469b9
|
@ -32,7 +32,7 @@ github.com/googleapis/gnostic 7c663266750e7d82587642f65e60
|
||||||
github.com/gorilla/mux 00bdffe0f3c77e27d2cf6f5c70232a2d3e4d9c15 # v1.7.3
|
github.com/gorilla/mux 00bdffe0f3c77e27d2cf6f5c70232a2d3e4d9c15 # v1.7.3
|
||||||
github.com/grpc-ecosystem/grpc-gateway 1a03ca3bad1e1ebadaedd3abb76bc58d4ac8143b
|
github.com/grpc-ecosystem/grpc-gateway 1a03ca3bad1e1ebadaedd3abb76bc58d4ac8143b
|
||||||
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
||||||
github.com/hashicorp/golang-lru 0fb14efe8c47ae851c0034ed7a448854d3d34cf3
|
github.com/hashicorp/golang-lru 7f827b33c0f158ec5dfbba01bb0b14a4541fd81d # v0.5.3
|
||||||
github.com/imdario/mergo 7c29201646fa3de8506f701213473dd407f19646 # v0.3.7
|
github.com/imdario/mergo 7c29201646fa3de8506f701213473dd407f19646 # v0.3.7
|
||||||
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 # v1.0.0
|
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 # v1.0.0
|
||||||
github.com/jaguilar/vt100 ad4c4a5743050fb7f88ce968dca9422f72a0e3f2 git://github.com/tonistiigi/vt100.git
|
github.com/jaguilar/vt100 ad4c4a5743050fb7f88ce968dca9422f72a0e3f2 git://github.com/tonistiigi/vt100.git
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/hashicorp/golang-lru
|
||||||
|
|
||||||
|
go 1.12
|
|
@ -40,31 +40,35 @@ func (c *Cache) Purge() {
|
||||||
// Add adds a value to the cache. Returns true if an eviction occurred.
|
// Add adds a value to the cache. Returns true if an eviction occurred.
|
||||||
func (c *Cache) Add(key, value interface{}) (evicted bool) {
|
func (c *Cache) Add(key, value interface{}) (evicted bool) {
|
||||||
c.lock.Lock()
|
c.lock.Lock()
|
||||||
defer c.lock.Unlock()
|
evicted = c.lru.Add(key, value)
|
||||||
return c.lru.Add(key, value)
|
c.lock.Unlock()
|
||||||
|
return evicted
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get looks up a key's value from the cache.
|
// Get looks up a key's value from the cache.
|
||||||
func (c *Cache) Get(key interface{}) (value interface{}, ok bool) {
|
func (c *Cache) Get(key interface{}) (value interface{}, ok bool) {
|
||||||
c.lock.Lock()
|
c.lock.Lock()
|
||||||
defer c.lock.Unlock()
|
value, ok = c.lru.Get(key)
|
||||||
return c.lru.Get(key)
|
c.lock.Unlock()
|
||||||
|
return value, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// Contains checks if a key is in the cache, without updating the
|
// Contains checks if a key is in the cache, without updating the
|
||||||
// recent-ness or deleting it for being stale.
|
// recent-ness or deleting it for being stale.
|
||||||
func (c *Cache) Contains(key interface{}) bool {
|
func (c *Cache) Contains(key interface{}) bool {
|
||||||
c.lock.RLock()
|
c.lock.RLock()
|
||||||
defer c.lock.RUnlock()
|
containKey := c.lru.Contains(key)
|
||||||
return c.lru.Contains(key)
|
c.lock.RUnlock()
|
||||||
|
return containKey
|
||||||
}
|
}
|
||||||
|
|
||||||
// Peek returns the key value (or undefined if not found) without updating
|
// Peek returns the key value (or undefined if not found) without updating
|
||||||
// the "recently used"-ness of the key.
|
// the "recently used"-ness of the key.
|
||||||
func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) {
|
func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) {
|
||||||
c.lock.RLock()
|
c.lock.RLock()
|
||||||
defer c.lock.RUnlock()
|
value, ok = c.lru.Peek(key)
|
||||||
return c.lru.Peek(key)
|
c.lock.RUnlock()
|
||||||
|
return value, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainsOrAdd checks if a key is in the cache without updating the
|
// ContainsOrAdd checks if a key is in the cache without updating the
|
||||||
|
@ -82,29 +86,49 @@ func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove removes the provided key from the cache.
|
// Remove removes the provided key from the cache.
|
||||||
func (c *Cache) Remove(key interface{}) {
|
func (c *Cache) Remove(key interface{}) (present bool) {
|
||||||
c.lock.Lock()
|
c.lock.Lock()
|
||||||
c.lru.Remove(key)
|
present = c.lru.Remove(key)
|
||||||
c.lock.Unlock()
|
c.lock.Unlock()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resize changes the cache size.
|
||||||
|
func (c *Cache) Resize(size int) (evicted int) {
|
||||||
|
c.lock.Lock()
|
||||||
|
evicted = c.lru.Resize(size)
|
||||||
|
c.lock.Unlock()
|
||||||
|
return evicted
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveOldest removes the oldest item from the cache.
|
// RemoveOldest removes the oldest item from the cache.
|
||||||
func (c *Cache) RemoveOldest() {
|
func (c *Cache) RemoveOldest() (key interface{}, value interface{}, ok bool) {
|
||||||
c.lock.Lock()
|
c.lock.Lock()
|
||||||
c.lru.RemoveOldest()
|
key, value, ok = c.lru.RemoveOldest()
|
||||||
c.lock.Unlock()
|
c.lock.Unlock()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOldest returns the oldest entry
|
||||||
|
func (c *Cache) GetOldest() (key interface{}, value interface{}, ok bool) {
|
||||||
|
c.lock.Lock()
|
||||||
|
key, value, ok = c.lru.GetOldest()
|
||||||
|
c.lock.Unlock()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keys returns a slice of the keys in the cache, from oldest to newest.
|
// Keys returns a slice of the keys in the cache, from oldest to newest.
|
||||||
func (c *Cache) Keys() []interface{} {
|
func (c *Cache) Keys() []interface{} {
|
||||||
c.lock.RLock()
|
c.lock.RLock()
|
||||||
defer c.lock.RUnlock()
|
keys := c.lru.Keys()
|
||||||
return c.lru.Keys()
|
c.lock.RUnlock()
|
||||||
|
return keys
|
||||||
}
|
}
|
||||||
|
|
||||||
// Len returns the number of items in the cache.
|
// Len returns the number of items in the cache.
|
||||||
func (c *Cache) Len() int {
|
func (c *Cache) Len() int {
|
||||||
c.lock.RLock()
|
c.lock.RLock()
|
||||||
defer c.lock.RUnlock()
|
length := c.lru.Len()
|
||||||
return c.lru.Len()
|
c.lock.RUnlock()
|
||||||
|
return length
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,9 @@ func (c *LRU) Add(key, value interface{}) (evicted bool) {
|
||||||
func (c *LRU) Get(key interface{}) (value interface{}, ok bool) {
|
func (c *LRU) Get(key interface{}) (value interface{}, ok bool) {
|
||||||
if ent, ok := c.items[key]; ok {
|
if ent, ok := c.items[key]; ok {
|
||||||
c.evictList.MoveToFront(ent)
|
c.evictList.MoveToFront(ent)
|
||||||
|
if ent.Value.(*entry) == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
return ent.Value.(*entry).value, true
|
return ent.Value.(*entry).value, true
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -142,6 +145,19 @@ func (c *LRU) Len() int {
|
||||||
return c.evictList.Len()
|
return c.evictList.Len()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resize changes the cache size.
|
||||||
|
func (c *LRU) Resize(size int) (evicted int) {
|
||||||
|
diff := c.Len() - size
|
||||||
|
if diff < 0 {
|
||||||
|
diff = 0
|
||||||
|
}
|
||||||
|
for i := 0; i < diff; i++ {
|
||||||
|
c.removeOldest()
|
||||||
|
}
|
||||||
|
c.size = size
|
||||||
|
return diff
|
||||||
|
}
|
||||||
|
|
||||||
// removeOldest removes the oldest item from the cache.
|
// removeOldest removes the oldest item from the cache.
|
||||||
func (c *LRU) removeOldest() {
|
func (c *LRU) removeOldest() {
|
||||||
ent := c.evictList.Back()
|
ent := c.evictList.Back()
|
||||||
|
|
|
@ -1,37 +1,39 @@
|
||||||
package simplelru
|
package simplelru
|
||||||
|
|
||||||
|
|
||||||
// LRUCache is the interface for simple LRU cache.
|
// LRUCache is the interface for simple LRU cache.
|
||||||
type LRUCache interface {
|
type LRUCache interface {
|
||||||
// Adds a value to the cache, returns true if an eviction occurred and
|
// Adds a value to the cache, returns true if an eviction occurred and
|
||||||
// updates the "recently used"-ness of the key.
|
// updates the "recently used"-ness of the key.
|
||||||
Add(key, value interface{}) bool
|
Add(key, value interface{}) bool
|
||||||
|
|
||||||
// Returns key's value from the cache and
|
// Returns key's value from the cache and
|
||||||
// updates the "recently used"-ness of the key. #value, isFound
|
// updates the "recently used"-ness of the key. #value, isFound
|
||||||
Get(key interface{}) (value interface{}, ok bool)
|
Get(key interface{}) (value interface{}, ok bool)
|
||||||
|
|
||||||
// Check if a key exsists in cache without updating the recent-ness.
|
// Checks if a key exists in cache without updating the recent-ness.
|
||||||
Contains(key interface{}) (ok bool)
|
Contains(key interface{}) (ok bool)
|
||||||
|
|
||||||
// Returns key's value without updating the "recently used"-ness of the key.
|
// Returns key's value without updating the "recently used"-ness of the key.
|
||||||
Peek(key interface{}) (value interface{}, ok bool)
|
Peek(key interface{}) (value interface{}, ok bool)
|
||||||
|
|
||||||
// Removes a key from the cache.
|
// Removes a key from the cache.
|
||||||
Remove(key interface{}) bool
|
Remove(key interface{}) bool
|
||||||
|
|
||||||
// Removes the oldest entry from cache.
|
// Removes the oldest entry from cache.
|
||||||
RemoveOldest() (interface{}, interface{}, bool)
|
RemoveOldest() (interface{}, interface{}, bool)
|
||||||
|
|
||||||
// Returns the oldest entry from the cache. #key, value, isFound
|
// Returns the oldest entry from the cache. #key, value, isFound
|
||||||
GetOldest() (interface{}, interface{}, bool)
|
GetOldest() (interface{}, interface{}, bool)
|
||||||
|
|
||||||
// Returns a slice of the keys in the cache, from oldest to newest.
|
// Returns a slice of the keys in the cache, from oldest to newest.
|
||||||
Keys() []interface{}
|
Keys() []interface{}
|
||||||
|
|
||||||
// Returns the number of items in the cache.
|
// Returns the number of items in the cache.
|
||||||
Len() int
|
Len() int
|
||||||
|
|
||||||
// Clear all cache entries
|
// Clears all cache entries.
|
||||||
Purge()
|
Purge()
|
||||||
|
|
||||||
|
// Resizes cache, returning number evicted
|
||||||
|
Resize(int) int
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue