mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 13:44:05 -08:00
index: add a test to trigger fd leak on corrupted index (#576)
The test is designed to fail for windows when the function leaves open files.
This commit is contained in:
parent
8eeb70fee1
commit
520b1d858f
|
@ -4,7 +4,8 @@
|
||||||
- [REMOVED] `FromData` is considered unused so was removed.
|
- [REMOVED] `FromData` is considered unused so was removed.
|
||||||
- [FEATURE] Added option WALSegmentSize -1 to disable the WAL.
|
- [FEATURE] Added option WALSegmentSize -1 to disable the WAL.
|
||||||
- [BUGFIX] Fsync the meta file to persist it on disk to avoid data loss in case of a host crash.
|
- [BUGFIX] Fsync the meta file to persist it on disk to avoid data loss in case of a host crash.
|
||||||
- [BUGFIX] Fix fd and vm_area leak on error path in chunks.NewDirReader
|
- [BUGFIX] Fix fd and vm_area leak on error path in chunks.NewDirReader.
|
||||||
|
- [BUGFIX] Fix fd and vm_area leak on error path in index.NewFileReader.
|
||||||
|
|
||||||
## 0.6.1
|
## 0.6.1
|
||||||
- [BUGFIX] Update `last` after appending a non-overlapping chunk in `chunks.MergeOverlappingChunks`. [#539](https://github.com/prometheus/tsdb/pull/539)
|
- [BUGFIX] Update `last` after appending a non-overlapping chunk in `chunks.MergeOverlappingChunks`. [#539](https://github.com/prometheus/tsdb/pull/539)
|
||||||
|
|
|
@ -29,6 +29,7 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/prometheus/tsdb/chunks"
|
"github.com/prometheus/tsdb/chunks"
|
||||||
"github.com/prometheus/tsdb/encoding"
|
"github.com/prometheus/tsdb/encoding"
|
||||||
|
tsdb_errors "github.com/prometheus/tsdb/errors"
|
||||||
"github.com/prometheus/tsdb/fileutil"
|
"github.com/prometheus/tsdb/fileutil"
|
||||||
"github.com/prometheus/tsdb/labels"
|
"github.com/prometheus/tsdb/labels"
|
||||||
)
|
)
|
||||||
|
@ -625,7 +626,15 @@ func NewFileReader(path string) (*Reader, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return newReader(realByteSlice(f.Bytes()), f)
|
r, err := newReader(realByteSlice(f.Bytes()), f)
|
||||||
|
if err != nil {
|
||||||
|
var merr tsdb_errors.MultiError
|
||||||
|
merr.Add(err)
|
||||||
|
merr.Add(f.Close())
|
||||||
|
return nil, merr
|
||||||
|
}
|
||||||
|
|
||||||
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newReader(b ByteSlice, c io.Closer) (*Reader, error) {
|
func newReader(b ByteSlice, c io.Closer) (*Reader, error) {
|
||||||
|
|
|
@ -412,3 +412,18 @@ func TestReaderWithInvalidBuffer(t *testing.T) {
|
||||||
_, err := NewReader(b)
|
_, err := NewReader(b)
|
||||||
testutil.NotOk(t, err)
|
testutil.NotOk(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestNewFileReaderErrorNoOpenFiles ensures that in case of an error no file remains open.
|
||||||
|
func TestNewFileReaderErrorNoOpenFiles(t *testing.T) {
|
||||||
|
dir := testutil.NewTemporaryDirectory("block", t)
|
||||||
|
|
||||||
|
idxName := filepath.Join(dir.Path(), "index")
|
||||||
|
err := ioutil.WriteFile(idxName, []byte("corrupted contents"), 0644)
|
||||||
|
testutil.Ok(t, err)
|
||||||
|
|
||||||
|
_, err = NewFileReader(idxName)
|
||||||
|
testutil.NotOk(t, err)
|
||||||
|
|
||||||
|
// dir.Close will fail on Win if idxName fd is not closed on error path.
|
||||||
|
dir.Close()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue