Fix multiple redis server bug, do not cache the TCP connections
Fixes #178
This commit is contained in:
parent
a55f6498c8
commit
f7a4317990
|
@ -11,6 +11,7 @@ will still be backwards compatible if only `url` is specified.
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
- [#170](https://github.com/influxdb/telegraf/issues/170): Systemd support
|
- [#170](https://github.com/influxdb/telegraf/issues/170): Systemd support
|
||||||
- [#175](https://github.com/influxdb/telegraf/issues/175): Set write precision before gathering metrics
|
- [#175](https://github.com/influxdb/telegraf/issues/175): Set write precision before gathering metrics
|
||||||
|
- [#178](https://github.com/influxdb/telegraf/issues/178): redis plugin, multiple server thread hang bug
|
||||||
|
|
||||||
## v0.1.8 [2015-09-04]
|
## v0.1.8 [2015-09-04]
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,6 @@ import (
|
||||||
|
|
||||||
type Redis struct {
|
type Redis struct {
|
||||||
Servers []string
|
Servers []string
|
||||||
|
|
||||||
c net.Conn
|
|
||||||
buf []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var sampleConfig = `
|
var sampleConfig = `
|
||||||
|
@ -112,41 +109,37 @@ func (r *Redis) Gather(acc plugins.Accumulator) error {
|
||||||
const defaultPort = "6379"
|
const defaultPort = "6379"
|
||||||
|
|
||||||
func (r *Redis) gatherServer(addr *url.URL, acc plugins.Accumulator) error {
|
func (r *Redis) gatherServer(addr *url.URL, acc plugins.Accumulator) error {
|
||||||
if r.c == nil {
|
_, _, err := net.SplitHostPort(addr.Host)
|
||||||
|
if err != nil {
|
||||||
_, _, err := net.SplitHostPort(addr.Host)
|
addr.Host = addr.Host + ":" + defaultPort
|
||||||
if err != nil {
|
|
||||||
addr.Host = addr.Host + ":" + defaultPort
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.Dial("tcp", addr.Host)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Unable to connect to redis server '%s': %s", addr.Host, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if addr.User != nil {
|
|
||||||
pwd, set := addr.User.Password()
|
|
||||||
if set && pwd != "" {
|
|
||||||
c.Write([]byte(fmt.Sprintf("AUTH %s\r\n", pwd)))
|
|
||||||
|
|
||||||
rdr := bufio.NewReader(c)
|
|
||||||
|
|
||||||
line, err := rdr.ReadString('\n')
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if line[0] != '+' {
|
|
||||||
return fmt.Errorf("%s", strings.TrimSpace(line)[1:])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r.c = c
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r.c.Write([]byte("info\r\n"))
|
c, err := net.Dial("tcp", addr.Host)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to connect to redis server '%s': %s", addr.Host, err)
|
||||||
|
}
|
||||||
|
defer c.Close()
|
||||||
|
|
||||||
rdr := bufio.NewReader(r.c)
|
if addr.User != nil {
|
||||||
|
pwd, set := addr.User.Password()
|
||||||
|
if set && pwd != "" {
|
||||||
|
c.Write([]byte(fmt.Sprintf("AUTH %s\r\n", pwd)))
|
||||||
|
|
||||||
|
rdr := bufio.NewReader(c)
|
||||||
|
|
||||||
|
line, err := rdr.ReadString('\n')
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if line[0] != '+' {
|
||||||
|
return fmt.Errorf("%s", strings.TrimSpace(line)[1:])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Write([]byte("info\r\n"))
|
||||||
|
|
||||||
|
rdr := bufio.NewReader(c)
|
||||||
|
|
||||||
line, err := rdr.ReadString('\n')
|
line, err := rdr.ReadString('\n')
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue