Skip to content

Commit

Permalink
fix: add database to MaxSeriesPerDatabase error message (influxdata#2…
Browse files Browse the repository at this point in the history
…3113) (influxdata#23115)

To simplify debugging, print the database name when the
max-series-per-database limit is exceeded in InMem indices.

closes influxdata#23112

(cherry picked from commit 7d18215)

closes influxdata#23114
  • Loading branch information
davidby-influx authored Feb 8, 2022
1 parent f04ccfd commit 72989c5
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
11 changes: 6 additions & 5 deletions tsdb/index/inmem/inmem.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func (i *Index) CreateSeriesListIfNotExists(seriesIDSet *tsdb.SeriesIDSet, measu
i.mu.RLock()
if max := opt.Config.MaxSeriesPerDatabase; max > 0 && len(i.series)+len(keys) > max {
i.mu.RUnlock()
return errMaxSeriesPerDatabaseExceeded{limit: opt.Config.MaxSeriesPerDatabase, series: len(i.series), keys: len(keys)}
return errMaxSeriesPerDatabaseExceeded{database: i.database, limit: opt.Config.MaxSeriesPerDatabase, series: len(i.series), keys: len(keys)}
}
i.mu.RUnlock()
}
Expand Down Expand Up @@ -1362,11 +1362,12 @@ func (itr *seriesIDIterator) nextKeys() error {
// errMaxSeriesPerDatabaseExceeded is a marker error returned during series creation
// to indicate that a new series would exceed the limits of the database.
type errMaxSeriesPerDatabaseExceeded struct {
limit int
series int
keys int
limit int
series int
keys int
database string
}

func (e errMaxSeriesPerDatabaseExceeded) Error() string {
return fmt.Sprintf("max-series-per-database exceeded limit=%d series=%d keys=%d", e.limit, e.series, e.keys)
return fmt.Sprintf("max-series-per-database exceeded database=%s limit=%d series=%d keys=%d", e.database, e.limit, e.series, e.keys)
}
6 changes: 4 additions & 2 deletions tsdb/shard_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,8 @@ func TestMaxSeriesLimit(t *testing.T) {
opts := tsdb.NewEngineOptions()
opts.Config.WALDir = filepath.Join(tmpDir, "wal")
opts.Config.MaxSeriesPerDatabase = 1000
opts.InmemIndex = inmem.NewIndex(filepath.Base(tmpDir), sfile.SeriesFile)
index := inmem.NewIndex(filepath.Base(tmpDir), sfile.SeriesFile)
opts.InmemIndex = index

sh := tsdb.NewShard(1, tmpShard, tmpWal, sfile.SeriesFile, opts)

Expand Down Expand Up @@ -206,7 +207,8 @@ func TestMaxSeriesLimit(t *testing.T) {
err = sh.WritePoints([]models.Point{pt}, tsdb.NoopStatsTracker())
if err == nil {
t.Fatal("expected error")
} else if exp, got := `partial write: max-series-per-database exceeded limit=1000 series=1000 keys=1 dropped=1`, err.Error(); exp != got {
} else if exp, got :=
fmt.Sprintf(`partial write: max-series-per-database exceeded database=%s limit=1000 series=1000 keys=1 dropped=1`, index.Database()), err.Error(); exp != got {
t.Fatalf("unexpected error message:\n\texp = %s\n\tgot = %s", exp, got)
} else {
st := sh.Statistics(map[string]string{})
Expand Down
2 changes: 1 addition & 1 deletion tsdb/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1366,7 +1366,7 @@ func TestStore_Cardinality_Limit_On_InMem_Index(t *testing.T) {
to := from + pointsPerShard

if err := store.Store.WriteToShard(tsdb.WriteContext{}, uint64(shardID), points[from:to]); err != nil {
if !strings.Contains(err.Error(), "partial write: max-series-per-database exceeded limit") {
if !strings.Contains(err.Error(), "partial write: max-series-per-database exceeded") {
t.Fatal(err)
}
}
Expand Down

0 comments on commit 72989c5

Please sign in to comment.