rafthttp: not log expected timeout as error

The network timeout from stream with etcd 2.0 is expected because etcd
2.0 doesn't heartbeat on idle connections.
This commit is contained in:
Yicheng Qin 2015-05-07 17:51:45 -07:00
parent 38b8e848ac
commit fad2c09fa8

View File

@ -282,7 +282,15 @@ func (cr *streamReader) run() {
}
} else {
err := cr.decodeLoop(rc, t)
if err != io.EOF && !isClosedConnectionError(err) {
switch {
// all data is read out
case err == io.EOF:
// connection is closed by the remote
case isClosedConnectionError(err):
// stream msgapp is only used for etcd 2.0, and etcd 2.0 doesn't
// heartbeat on the idle stream, so it is expected to time out.
case t == streamTypeMsgApp && isNetworkTimeoutError(err):
default:
log.Printf("rafthttp: failed to read message on stream %s due to %v", t, err)
}
}
@ -481,3 +489,8 @@ func checkStreamSupport(v *semver.Version, t streamType) bool {
}
return false
}
func isNetworkTimeoutError(err error) bool {
nerr, ok := err.(net.Error)
return ok && nerr.Timeout()
}