From 596c2b122af0f810d19fbfdc0fb6f46a8e5fa93d Mon Sep 17 00:00:00 2001 From: Jarek Kowalski Date: Sun, 31 Dec 2017 11:19:49 -0800 Subject: [PATCH] disk cache: remove list after a write fix close --- block/block_cache.go | 1 + block/block_manager.go | 7 ++----- block/disk_block_cache.go | 12 ++++++++---- block/null_block_cache.go | 4 ++++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/block/block_cache.go b/block/block_cache.go index e95d15c7e..b928c4d44 100644 --- a/block/block_cache.go +++ b/block/block_cache.go @@ -10,6 +10,7 @@ type blockCache interface { getBlock(blockID string, offset, length int64) ([]byte, error) putBlock(blockID string, data []byte) error listIndexBlocks() ([]Info, error) + close() error } // CachingOptions specifies configuration of local cache. diff --git a/block/block_manager.go b/block/block_manager.go index 0d2b87fe4..96f4a828e 100644 --- a/block/block_manager.go +++ b/block/block_manager.go @@ -219,11 +219,8 @@ func (bm *Manager) ResetStats() { } // Close closes block manager. -func (bm *Manager) Close() error { - if c, ok := bm.cache.(io.Closer); ok { - return c.Close() - } - return nil +func (bm *Manager) close() error { + return bm.cache.close() } func (bm *Manager) ensurePackGroupLocked(packGroup string, unpacked bool) *packInfo { diff --git a/block/disk_block_cache.go b/block/disk_block_cache.go index 56da7ff54..d3dd44d17 100644 --- a/block/disk_block_cache.go +++ b/block/disk_block_cache.go @@ -34,7 +34,7 @@ type diskBlockCache struct { } func (c *diskBlockCache) getBlock(blockID string, offset, length int64) ([]byte, error) { - fn := filepath.Join(c.directory, blockID) + cachedSuffix + fn := c.cachedItemName(blockID) b, err := ioutil.ReadFile(fn) if err == nil { @@ -89,12 +89,12 @@ func (c *diskBlockCache) putBlock(blockID string, data []byte) error { } c.writeFileAtomic(filepath.Join(c.directory, blockID)+cachedSuffix, c.appendHMAC(data)) - + os.Remove(c.cachedItemName("list")) return nil } func (c *diskBlockCache) listIndexBlocks() ([]Info, error) { - cachedListFile := filepath.Join(c.directory, "list"+cachedSuffix) + cachedListFile := c.cachedItemName("list") f, err := os.Open(cachedListFile) if err == nil { defer f.Close() @@ -121,6 +121,10 @@ func (c *diskBlockCache) listIndexBlocks() ([]Info, error) { return blocks, err } +func (c *diskBlockCache) cachedItemName(name string) string { + return filepath.Join(c.directory, name+cachedSuffix) +} + func (c *diskBlockCache) readBlocksFromCacheFile(f *os.File) ([]Info, error) { var blocks []Info data, err := ioutil.ReadAll(f) @@ -210,7 +214,7 @@ func (c *diskBlockCache) writeFileAtomic(fname string, contents []byte) error { return nil } -func (c *diskBlockCache) lose() error { +func (c *diskBlockCache) close() error { close(c.closed) return nil } diff --git a/block/null_block_cache.go b/block/null_block_cache.go index 9b5e57715..3795fcbb9 100644 --- a/block/null_block_cache.go +++ b/block/null_block_cache.go @@ -33,3 +33,7 @@ func (c nullBlockCache) listIndexBlocks() ([]Info, error) { return results, nil } + +func (c nullBlockCache) close() error { + return nil +}