// MustOpenEngine returns a new, open instance of Engine. func MustOpenEngine() *Engine { e := NewEngine() if err := e.Open(); err != nil { panic(err) } if err := e.LoadMetadataIndex(nil, tsdb.NewDatabaseIndex("db")); err != nil { panic(err) } return e }
// MustOpenShard returns a temporary, opened shard. func MustOpenShard(id uint64) *Shard { path, err := ioutil.TempDir("", "copier-") if err != nil { panic(err) } sh := &Shard{ Shard: tsdb.NewShard(id, tsdb.NewDatabaseIndex("db"), filepath.Join(path, "data"), filepath.Join(path, "wal"), tsdb.NewEngineOptions(), ), path: path, } if err := sh.Open(); err != nil { sh.Close() panic(err) } return sh }
// Ensure engine can load the metadata index after reopening. func TestEngine_LoadMetadataIndex(t *testing.T) { e := MustOpenEngine() defer e.Close() if err := e.WritePointsString(`cpu,host=A value=1.1 1000000000`); err != nil { t.Fatalf("failed to write points: %s", err.Error()) } // Ensure we can close and load index from the WAL if err := e.Reopen(); err != nil { t.Fatal(err) } // Load metadata index. index := tsdb.NewDatabaseIndex("db") if err := e.LoadMetadataIndex(nil, index); err != nil { t.Fatal(err) } // Verify index is correct. if m := index.Measurement("cpu"); m == nil { t.Fatal("measurement not found") } else if s := m.SeriesByID(1); s.Key != "cpu,host=A" || !reflect.DeepEqual(s.Tags, map[string]string{"host": "A"}) { t.Fatalf("unexpected series: %q / %#v", s.Key, s.Tags) } // write the snapshot, ensure we can close and load index from TSM if err := e.WriteSnapshot(); err != nil { t.Fatalf("error writing snapshot: %s", err.Error()) } // Ensure we can close and load index from the WAL if err := e.Reopen(); err != nil { t.Fatal(err) } // Load metadata index. index = tsdb.NewDatabaseIndex("db") if err := e.LoadMetadataIndex(nil, index); err != nil { t.Fatal(err) } // Verify index is correct. if m := index.Measurement("cpu"); m == nil { t.Fatal("measurement not found") } else if s := m.SeriesByID(1); s.Key != "cpu,host=A" || !reflect.DeepEqual(s.Tags, map[string]string{"host": "A"}) { t.Fatalf("unexpected series: %q / %#v", s.Key, s.Tags) } // Write a new point and ensure we can close and load index from TSM and WAL if err := e.WritePoints([]models.Point{ MustParsePointString("cpu,host=B value=1.2 2000000000"), }); err != nil { t.Fatalf("failed to write points: %s", err.Error()) } // Ensure we can close and load index from the TSM & WAL if err := e.Reopen(); err != nil { t.Fatal(err) } // Load metadata index. index = tsdb.NewDatabaseIndex("db") if err := e.LoadMetadataIndex(nil, index); err != nil { t.Fatal(err) } // Verify index is correct. if m := index.Measurement("cpu"); m == nil { t.Fatal("measurement not found") } else if s := m.SeriesByID(1); s.Key != "cpu,host=A" || !reflect.DeepEqual(s.Tags, map[string]string{"host": "A"}) { t.Fatalf("unexpected series: %q / %#v", s.Key, s.Tags) } else if s := m.SeriesByID(2); s.Key != "cpu,host=B" || !reflect.DeepEqual(s.Tags, map[string]string{"host": "B"}) { t.Fatalf("unexpected series: %q / %#v", s.Key, s.Tags) } }