package keepclient
import (
- "bytes"
"io"
"sort"
"sync"
}
c.cache[cacheKey] = b
go func() {
- rdr, _, _, err := kc.Get(locator)
- data := bytes.NewBuffer(make([]byte, 0, BLOCKSIZE))
+ rdr, size, _, err := kc.Get(locator)
+ var data []byte
if err == nil {
- _, err = io.Copy(data, rdr)
+ data = make([]byte, size, BLOCKSIZE)
+ _, err = io.ReadFull(rdr, data)
err2 := rdr.Close()
if err == nil {
err = err2
}
}
c.mtx.Lock()
- b.data, b.err = data.Bytes(), err
+ b.data, b.err = data, err
c.mtx.Unlock()
close(b.fetched)
go c.Sweep()
}
func (c *BlockCache) setup() {
+ c.mtx.Lock()
c.cache = make(map[string]*cacheBlock)
+ c.mtx.Unlock()
}
func (c *BlockCache) Clear() {
- c.mtx.Lock()
c.setup()
- c.mtx.Unlock()
}
type timeSlice []time.Time