2005年6月 3日
EclipseとCVSとダイナミックDNS
カテゴリー: [プログラミング]自宅のサーバにCVSリポジトリをおいて,Eclipseからアクセスしたりしているのですが,Eclipseを長期間起動しっぱなしにしていると,そのうち,次のようなエラーが出るようになって,CVSリポジトリに全くアクセスできなくなってしまうことが,気になっていました.
認証エラー: com.jcraft.jsch.JSchException: Session.connect: java.net.ConnectException: Connection timed out: connect
でも,再起動すると直るのです.
ところが,ふと,実際にどこにつなぎに行っているのか調べてみたら,接続先が全然違うIPアドレスになっていました.サーバはダイナミックDNSなわけですが,そのIPアドレスは,古いIPアドレスでした.
どうも,名前解決の結果をずっとキャッシュしてしまっているようです.
どうしてこんな作りになっているんだろうと思いつつ,ダイナミックDNSみたいなものを使うのいけないのか,そもそもEclipseを動かしっぱなしにしているのがいけないのか,と思っていました.
しかし,どうも,Javaのライブラリ自体がキャッシュしているようです.それも,DNSレコードのTTLを無視して,無期限にキャッシュするようです.
しっかり読んだわけではないですが,このblogを書いた人はJavaのDNS Cacheに苦労させられたらしく,ちょっと怒ってるようですね.
EclipseのCVS機能がやっているのではなく,Java自体がやっているとすると,あちこちに影響するわけで,知らないと問題の元でしょうね.
試してませんが,この動作は,プロパティを定義することで変えられるようです.
Networking properties from java.sun.com
例えば,JVM起動時に -Dsun.net.inetaddr.ttl=0 の様な引数を渡します.
このデフォルト値が,-1 (cache forever) になっているので,無限にキャッシュしてしまうようです.DNSレコードのTTLを参照するようにさせることはできないらしく,固定の時間を指定する事しかできないようですね.
でも,やっぱりデフォルトが -1 というのは痛いと思います.
投稿者 shingo : 2005年6月 3日 23:28
トラックバック
このエントリーのトラックバックURL:
http://isolinear.info/cgi-bin/mt/mt-tb.cgi/117