環境情報
OS: CentOS Linux release 7.5.1804 (Core)
Redis : 2.6.5
きっかけ
mattermost + hubotの構成でチャットボットを作成して
coffeescriptをいじっていた時に、突然以下のようなメッセージが
出現した。
[Fri May 18 2018 11:02:22 GMT+0900 (JST)] ERROR Error: Redis connection in broken state: connection timeout exceeded.
at RedisClient.connection_gone (/home/matter-bot/node_modules/redis/index.js:645:19)
at RedisClient.on_error (/home/matter-bot/node_modules/redis/index.js:406:10)
at Socket. (/home/matter-bot/node_modules/redis/index.js:280:14)
at Socket.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
原因
原因となったソースの箇所はここ。
ソース名:redis/index.js
this.connect_timeout = +options.connect_timeout || 3600000; // 60 * 60 * 1000 ms
周りのコメントや処理を見る限り、どうやら1時間までは再接続をするが、
それを超えると接続を切るらしい。
対処
個人の環境なので、以下の通り修正。
this.connect_timeout = +options.connect_timeout;
ちなみに、options.connect_timeoutはfalseが指定されているので、
timeoutしないようになるはず。
#結果
一応、不具合なく動いており、タイムアウトも発生していないですが、
こんな雑な修正は個人レベルのみにとどめておきたいなぁ。。。
たぶん、負荷とかメモリ消費とかがすごいことになりそう。