Add test for block meta version and comments
This commit is contained in:
parent
04d5ac5aae
commit
a345231a0e
|
@ -23,6 +23,21 @@ import (
|
||||||
"github.com/prometheus/tsdb/testutil"
|
"github.com/prometheus/tsdb/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// In Prometheus 2.1.0 we had a bug where the meta.json version was falsely bumped
|
||||||
|
// to 2. We had a migration in place resetting it to 1 but we should move immediately to
|
||||||
|
// version 3 next time to avoid confusion and issues.
|
||||||
|
func TestBlockMetaMustNeverBeVersion2(t *testing.T) {
|
||||||
|
dir, err := ioutil.TempDir("", "metaversion")
|
||||||
|
testutil.Ok(t, err)
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
|
testutil.Ok(t, writeMetaFile(dir, &BlockMeta{}))
|
||||||
|
|
||||||
|
meta, err := readMetaFile(dir)
|
||||||
|
testutil.Ok(t, err)
|
||||||
|
testutil.Assert(t, meta.Version != 2, "meta.json version must never be 2")
|
||||||
|
}
|
||||||
|
|
||||||
func TestSetCompactionFailed(t *testing.T) {
|
func TestSetCompactionFailed(t *testing.T) {
|
||||||
tmpdir, err := ioutil.TempDir("", "test-tsdb")
|
tmpdir, err := ioutil.TempDir("", "test-tsdb")
|
||||||
testutil.Ok(t, err)
|
testutil.Ok(t, err)
|
||||||
|
|
1
db.go
1
db.go
|
@ -188,6 +188,7 @@ func Open(dir string, l log.Logger, r prometheus.Registerer, opts *Options) (db
|
||||||
if opts == nil {
|
if opts == nil {
|
||||||
opts = DefaultOptions
|
opts = DefaultOptions
|
||||||
}
|
}
|
||||||
|
// Fixup bad format written by Prometheus 2.1.
|
||||||
if err := repairBadIndexVersion(l, dir); err != nil {
|
if err := repairBadIndexVersion(l, dir); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,7 @@ type indexTOC struct {
|
||||||
postingsTable uint64
|
postingsTable uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWriter returns a new Writer to the given filename.
|
// NewWriter returns a new Writer to the given filename. It serializes data in format version 2.
|
||||||
func NewWriter(fn string) (*Writer, error) {
|
func NewWriter(fn string) (*Writer, error) {
|
||||||
dir := filepath.Dir(fn)
|
dir := filepath.Dir(fn)
|
||||||
|
|
||||||
|
@ -577,7 +577,8 @@ func (b realByteSlice) Sub(start, end int) ByteSlice {
|
||||||
return b[start:end]
|
return b[start:end]
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewReader returns a new IndexReader on the given byte slice.
|
// NewReader returns a new IndexReader on the given byte slice. It automatically
|
||||||
|
// handles different format versions.
|
||||||
func NewReader(b ByteSlice) (*Reader, error) {
|
func NewReader(b ByteSlice) (*Reader, error) {
|
||||||
return newReader(b, nil)
|
return newReader(b, nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ import (
|
||||||
"github.com/prometheus/tsdb/fileutil"
|
"github.com/prometheus/tsdb/fileutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// repairBadIndexVersion repairs an issue in index and meta.json persistence introduced in
|
||||||
|
// commit 129773b41a565fde5156301e37f9a87158030443.
|
||||||
func repairBadIndexVersion(logger log.Logger, dir string) error {
|
func repairBadIndexVersion(logger log.Logger, dir string) error {
|
||||||
// All blocks written by Prometheus 2.1 with a meta.json version of 2 are affected.
|
// All blocks written by Prometheus 2.1 with a meta.json version of 2 are affected.
|
||||||
// We must actually set the index file version to 2 and revert the meta.json version back to 1.
|
// We must actually set the index file version to 2 and revert the meta.json version back to 1.
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package tsdb
|
package tsdb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/prometheus/tsdb/chunks"
|
"github.com/prometheus/tsdb/chunks"
|
||||||
|
|
||||||
"github.com/go-kit/kit/log"
|
|
||||||
"github.com/prometheus/tsdb/index"
|
"github.com/prometheus/tsdb/index"
|
||||||
"github.com/prometheus/tsdb/labels"
|
"github.com/prometheus/tsdb/labels"
|
||||||
)
|
)
|
||||||
|
@ -52,6 +52,8 @@ func TestRepairBadIndexVersion(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("error expected but got none")
|
t.Fatal("error expected but got none")
|
||||||
}
|
}
|
||||||
|
// Touch chunks dir in block.
|
||||||
|
os.MkdirAll(dir+"chunks", 0777)
|
||||||
|
|
||||||
r, err := index.NewFileReader(dir + "index")
|
r, err := index.NewFileReader(dir + "index")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -73,9 +75,12 @@ func TestRepairBadIndexVersion(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := repairBadIndexVersion(log.NewNopLogger(), "testdata/repair_index_version"); err != nil {
|
// On DB opening all blocks in the base dir should be repaired.
|
||||||
|
db, _ := Open("testdata/repair_index_version", nil, nil, nil)
|
||||||
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
db.Close()
|
||||||
|
|
||||||
r, err = index.NewFileReader(dir + "index")
|
r, err = index.NewFileReader(dir + "index")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue