diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b7670dee..263cb959c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,7 @@ plugins, not just statsd. - [#1814](https://github.com/influxdata/telegraf/issues/1814): snmp: ensure proper context is present on error messages. - [#2299](https://github.com/influxdata/telegraf/issues/2299): opentsdb: add tcp:// prefix if no scheme provided. - [#2297](https://github.com/influxdata/telegraf/issues/2297): influx parser: parse line-protocol without newlines. +- [#2245](https://github.com/influxdata/telegraf/issues/2245): influxdb output: fix field type conflict blocking output buffer. ## v1.1.2 [2016-12-12] diff --git a/plugins/outputs/influxdb/influxdb.go b/plugins/outputs/influxdb/influxdb.go index 8c23b2c5a..999e1bc6f 100644 --- a/plugins/outputs/influxdb/influxdb.go +++ b/plugins/outputs/influxdb/influxdb.go @@ -200,8 +200,6 @@ func (i *InfluxDB) Write(metrics []telegraf.Metric) error { p := rand.Perm(len(i.conns)) for _, n := range p { if e := i.conns[n].Write(bp); e != nil { - // Log write failure - log.Printf("E! InfluxDB Output Error: %s", e) // If the database was not found, try to recreate it if strings.Contains(e.Error(), "database not found") { if errc := createDatabase(i.conns[n], i.Database); errc != nil { @@ -209,6 +207,15 @@ func (i *InfluxDB) Write(metrics []telegraf.Metric) error { i.Database) } } + if strings.Contains(e.Error(), "field type conflict") { + log.Printf("E! Field type conflict, dropping conflicted points: %s", e) + // setting err to nil, otherwise we will keep retrying and points + // w/ conflicting types will get stuck in the buffer forever. + err = nil + break + } + // Log write failure + log.Printf("E! InfluxDB Output Error: %s", e) } else { err = nil break