pq报出EOF错误

前天生产环境突然出现大量操作pg报错-EOF错误,没有其他提示。问题本身比较容易查明。elb配置了错误的映射端口,导致app已经建立的连接,不能正常访问pg,然后elb切断与app的连接导致的错误。不过这里有几个问题需要讨论下:

  • pq库遇到连接被切断的情况会通过panicEOF传递给上层,然后上层就处于蒙逼状态,因为EOF潜在的意思就是io.reader读到了输入流的末尾,流返回空字符。所以第一个问题就是,作为sdk的pg库是否能应该把EOF错误在具体场景下处理成相应的具体错误。但实际上,上层也是知道当前在什么情况下报出的EOF错误,所以这个问题只能待定,期望将来能看到大牛对这种问题的处理方式。
  • elb切断与app的连接,推测是内部进行系统调用传入相应的sockfd,在tcp层进行的交互,即app server收到了FIN进入CLOSE_WAIT状态,应用层没有收到任何一个byte。开始,我以为肯定会发送一些协议字节,或者起码发送错误描述字符串过来(因为elb是同通用负载均衡中间件,不会了解具体协议),但连一个自己都没有收到,并导致io.reader报出EOF,虽然粗暴,但我认为这种处理方式值得借鉴。作为请求的中介,与双端交互尽量保持干净,不做多余处理很重要。
pq报出EOF错误
Share this