diff options
author | Javi Fontan <jfontan@gmail.com> | 2018-01-16 11:48:12 +0000 |
---|---|---|
committer | Javi Fontan <jfontan@gmail.com> | 2018-01-16 11:48:12 +0000 |
commit | 5b1cde56bde4834805b14f1613e8f7fda1703bf8 (patch) | |
tree | c7a3a031684f56ccc9ca90f668a2ee1d356098b5 /plumbing/cache/object_lru.go | |
parent | 4d43799bf111a66b204312c79f1d0dd0d96108b1 (diff) | |
download | go-git-5b1cde56bde4834805b14f1613e8f7fda1703bf8.tar.gz |
Modify cache to delete more than one item to free space
The previous version could only delete the oldest used object. If the
object to cache was bigger than the space freed it could not be added.
Also the decoder adds bases to the cache when they are needed.
This change increases the speed creating indexes 2x.
Signed-off-by: Javi Fontan <jfontan@gmail.com>
Diffstat (limited to 'plumbing/cache/object_lru.go')
-rw-r--r-- | plumbing/cache/object_lru.go | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/plumbing/cache/object_lru.go b/plumbing/cache/object_lru.go index d99a5c9..9e850b2 100644 --- a/plumbing/cache/object_lru.go +++ b/plumbing/cache/object_lru.go @@ -55,7 +55,7 @@ func (c *ObjectLRU) Put(obj plumbing.EncodedObject) { return } - if c.actualSize+objSize > c.MaxSize { + for c.actualSize+objSize > c.MaxSize { last := c.ll.Back() lastObj := last.Value.(plumbing.EncodedObject) lastSize := FileSize(lastObj.Size()) @@ -63,10 +63,6 @@ func (c *ObjectLRU) Put(obj plumbing.EncodedObject) { c.ll.Remove(last) delete(c.cache, lastObj.Hash()) c.actualSize -= lastSize - - if c.actualSize+objSize > c.MaxSize { - return - } } ee := c.ll.PushFront(obj) |