From b11308133a62484fc494425466f3d437274ce617 Mon Sep 17 00:00:00 2001 From: Paul Dix <paul@pauldix.net> Date: Tue, 6 Oct 2015 15:49:37 -0700 Subject: [PATCH] Only limit field count for non-tsm engines --- tsdb/engine/b1/b1_test.go | 4 ++-- tsdb/engine/tsm1/tsm1_test.go | 2 +- tsdb/shard.go | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/tsdb/engine/b1/b1_test.go b/tsdb/engine/b1/b1_test.go index 5c3c19ee3b..31b90344c3 100644 --- a/tsdb/engine/b1/b1_test.go +++ b/tsdb/engine/b1/b1_test.go @@ -21,7 +21,7 @@ func TestEngine_WritePoints(t *testing.T) { // Create metadata. mf := &tsdb.MeasurementFields{Fields: make(map[string]*tsdb.Field)} - mf.CreateFieldIfNotExists("value", influxql.Float) + mf.CreateFieldIfNotExists("value", influxql.Float, true) seriesToCreate := []*tsdb.SeriesCreate{ {Series: tsdb.NewSeries(string(models.MakeKey([]byte("temperature"), nil)), nil)}, } @@ -84,7 +84,7 @@ func TestEngine_WritePoints_Reverse(t *testing.T) { // Create metadata. mf := &tsdb.MeasurementFields{Fields: make(map[string]*tsdb.Field)} - mf.CreateFieldIfNotExists("value", influxql.Float) + mf.CreateFieldIfNotExists("value", influxql.Float, true) seriesToCreate := []*tsdb.SeriesCreate{ {Series: tsdb.NewSeries(string(models.MakeKey([]byte("temperature"), nil)), nil)}, } diff --git a/tsdb/engine/tsm1/tsm1_test.go b/tsdb/engine/tsm1/tsm1_test.go index 40e9f86241..dbd353d7ee 100644 --- a/tsdb/engine/tsm1/tsm1_test.go +++ b/tsdb/engine/tsm1/tsm1_test.go @@ -1078,7 +1078,7 @@ func TestEngine_Deletes(t *testing.T) { fields := []string{"value"} // Create metadata. mf := &tsdb.MeasurementFields{Fields: make(map[string]*tsdb.Field)} - mf.CreateFieldIfNotExists("value", influxql.Float) + mf.CreateFieldIfNotExists("value", influxql.Float, false) atag := map[string]string{"host": "A"} btag := map[string]string{"host": "B"} seriesToCreate := []*tsdb.SeriesCreate{ diff --git a/tsdb/shard.go b/tsdb/shard.go index b258944316..3a7215e085 100644 --- a/tsdb/shard.go +++ b/tsdb/shard.go @@ -367,7 +367,9 @@ func (s *Shard) createFieldsAndMeasurements(fieldsToCreate []*FieldCreate) (map[ measurementsToSave[f.Measurement] = m // add the field to the in memory index - if err := m.CreateFieldIfNotExists(f.Field.Name, f.Field.Type); err != nil { + // only limit the field count for non-tsm eninges + limitFieldCount := s.engine.Format() == B1Format || s.engine.Format() == BZ1Format + if err := m.CreateFieldIfNotExists(f.Field.Name, f.Field.Type, limitFieldCount); err != nil { return nil, err } @@ -475,7 +477,7 @@ func (m *MeasurementFields) UnmarshalBinary(buf []byte) error { // CreateFieldIfNotExists creates a new field with an autoincrementing ID. // Returns an error if 255 fields have already been created on the measurement or // the fields already exists with a different type. -func (m *MeasurementFields) CreateFieldIfNotExists(name string, typ influxql.DataType) error { +func (m *MeasurementFields) CreateFieldIfNotExists(name string, typ influxql.DataType, limitCount bool) error { // Ignore if the field already exists. if f := m.Fields[name]; f != nil { if f.Type != typ { @@ -484,8 +486,8 @@ func (m *MeasurementFields) CreateFieldIfNotExists(name string, typ influxql.Dat return nil } - // Only 255 fields are allowed. If we go over that then return an error. - if len(m.Fields)+1 > math.MaxUint8 { + // If we're supposed to limit the number of fields, only 255 are allowed. If we go over that then return an error. + if len(m.Fields)+1 > math.MaxUint8 && limitCount { return ErrFieldOverflow }