Screenshot_from_2013-02-26 17:11:09LibreOffice4.0がリリースされたので、恐る恐る使ってみた。

動作はいたって普通。とくに問題がないと思われました。

しかし、Ubuntuでは、LibreOfficeのマクロを動作させると、1分間、応答なしになり、
停止したようになりました。

私は、てっきり、LibreOffice4.0のバグとばかり早合点して、3.6に戻しました。
が、変化ありません。たしかに、3.6でマクロはきちんと動作していたのですが、おかしいですね。

(今、思えば、このとき原因がわかっていたのですが…)

そこで、マクロのどの部分で応答がなくなるのか調べてみました。

直感的に、データベース(postgres)に接続するときだということはわかっていました。

しかし、具体的にどのコードかはわからないので、MsgBoxを埋め込み、動作の流れを
追ってみました。(もっとスマートなデバッグもあるのでしょうが)

すると、次のコードで応答が極端に遅くなっていることがわかりました。

Connection = DatabaseContext.getConnectionWithInfo(sURL, oProps())
‘MsgBox “Connection作成中!”

どうやら、getConnectionWithInfo()メソッドの実行で応答が極端に遅くなっているよです。
メソッドに渡した引数がおかしいのかgoogle先生にお尋ねしましたが、引数はよさそうです。

ちなみに、接続ドライバのJDBCをpostgresのサイトからダウンロードして入れ替えてみましたが、
まったく、変化なしです。

次に、データベースに接続するときのパケットの流れを追って見ることにしました。

WireSharkを起動して、マクロを実行し、そのときのパケットをキャプチャしてみました。
すると、データベースに接続してSYN、ACKパケットのやり取りをしてパスワードで認証されるまで
1秒もかかっていないのです。(ちなみに、パスワードはMD5で暗号化されていました。正確には
ハッシュ値に変換されていた。)

あれ?私はてっきり、この段階で1分間くらい応答が返ってこないと思っていたので意外でした。

予想が外れました。

ちなみに、接続前までのパケットの流れをボーッと眺めていると不思議なパケット
があることに気づきました。
IPアドレスがfe08::で始まる、ICMPv6がキャプチャされています。

あれ?IPv6は無効化しているはずなのに???

ちなみに、ウィンドウズにインストールしたLibreOffice4.0では、まったくこのような現象はおきていません。

もう、お手上げ状態です。(ここまで、ゆうに3時間は経っている)

こうなったときは、トラブルが起きる前、自分が何をしたのかを冷静に振り返ることです。
UbuntuでやってWindowsでやっていないこと、…それは、IPv6の無効化。

パケットキャプチャでも挙動がおかしかったので、これは正解かも。

で、さっそく端末を起動して。

sudo vi /etc/sysctl.conf(図)

#ipv6 disable
#net.ipv6.conf.all.disable_ipv6 = 1
#net.ipv6.conf.default.disable_ipv6 = 1
コメントアウト、IPv6の無効化を解除、つまり、IPv6を有効化して再起動。

さて、結果は…お〜〜!お見事!ちゃんと普通にデータベース接続(5秒くらい)して必要なデータを取得してきました。解決!

(といっても、これが当たり前なんですけどね。それに、3.6に戻したときに変化がなかったことが大きなヒントになっていた)

結論、IPv6の無効化は私には危険!

おそらく、他に無効化の手順があるはずです。それは後日調べて再挑戦です。