webmagic-dev/irc.hect — pull request #2 by gongo (2014-01-27 10:27:24+00:00)
Title: 稼働し続けていると Can't contact LDAP server. が発生してしまう

経緯
-------

朝、出社するとだいたい IRC サーバに接続できない

* tiarra など IRC Proxy をかましていたり、IRC クライアントを常時起動している場合は問題ない
* あるタイミング以降に **新規で接続** しようとすると弾かれる模様。
* hector を再起動すると新規接続が可能になるが、また一定時間経つと接続不可になる

その時のエラーメッセージ in `/var/log/upstart/hector.log`

```
// xxxx はユーザ名
Ldap authentication error. Can't contact LDAP server. account => xxxx
```

気になること
-----------------

`/var/log/upstart/hector.log` を眺めていると

```
Ldap authentication error. Invalid credentials. account => xxxx
Ldap authentication error. Invalid credentials. account => xxxx
Ldap authentication error. Invalid credentials. account => xxxx
Ldap authentication error. Invalid credentials. account => xxxx
Ldap authentication error. Invalid credentials. account => xxxx
Ldap authentication error. Invalid credentials. account => xxxx
...
```

みたいな感じで、同じユーザがひたすらパスワードをミスっている様子が見える。(おそらく IRC クライアントは起動しっぱなしだけど、そのパスワードが間違ってて、リトライをエンドレス)

↑ から考えられること
----------------------------

https://github.com/webmagic-dev/irc.hect/blob/master/lib/ldap_identity_adapter.rb#L31-L36 ここも併せて考えると

1. パスワード認証に成功 → unbind → 問題なし
2. パスワード認証に失敗 → rescue に飛ぶ → unbind されない → connection が解放されずになんか起きてる？

そもそもパスワード認証失敗したら connection とか無いんじゃないかって勝手に思ってたけど、`LDAP::Conn.new` の時点で繋がってそう?

解決策案
------------

`ensure conn.unbind` をしてみてはどうだろう