From 315de4c7825519408cd1ece09e8fa4bee3eaa9d9 Mon Sep 17 00:00:00 2001 From: Krasi Georgiev Date: Wed, 30 Jan 2019 11:40:40 +0200 Subject: [PATCH] fix windows tests Signed-off-by: Krasi Georgiev --- block.go | 20 ++++++++++++++++++-- db.go | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/block.go b/block.go index 3ed8c4a64..26853ea30 100644 --- a/block.go +++ b/block.go @@ -269,7 +269,7 @@ type Block struct { // OpenBlock opens the block in the directory. It can be passed a chunk pool, which is used // to instantiate chunk structs. -func OpenBlock(logger log.Logger, dir string, pool chunkenc.Pool) (*Block, error) { +func OpenBlock(logger log.Logger, dir string, pool chunkenc.Pool) (pb *Block, err error) { if logger == nil { logger = log.NewNopLogger() } @@ -282,15 +282,31 @@ func OpenBlock(logger log.Logger, dir string, pool chunkenc.Pool) (*Block, error if err != nil { return nil, err } + defer func() { + if err != nil { + cr.Close() + } + }() ir, err := index.NewFileReader(filepath.Join(dir, indexFilename)) if err != nil { return nil, err } + defer func() { + if err != nil { + ir.Close() + } + }() + tr, tsr, err := readTombstones(dir) if err != nil { return nil, err } + defer func() { + if err != nil { + tr.Close() + } + }() // TODO refactor to set this at block creation time as // that would be the logical place for a block size to be calculated. @@ -301,7 +317,7 @@ func OpenBlock(logger log.Logger, dir string, pool chunkenc.Pool) (*Block, error level.Warn(logger).Log("msg", "couldn't write the meta file for the block size", "block", dir, "err", err) } - pb := &Block{ + pb = &Block{ dir: dir, meta: *meta, chunkr: cr, diff --git a/db.go b/db.go index 8b2e795ca..5063b6837 100644 --- a/db.go +++ b/db.go @@ -512,6 +512,12 @@ func (db *DB) reload() (err error) { } } if len(corrupted) > 0 { + // Close all new blocks to release the lock for windows. + for _, block := range loadable { + if _, loaded := db.getBlock(block.Meta().ULID); !loaded { + block.Close() + } + } return fmt.Errorf("unexpected corrupted block:%v", corrupted) }