今日やっとクラスタでの動作確認が終了。Windows APIのGetComputerName()でクラスタの仮想コンピュータ名返すか、実コンピュータ名を返すかという点が問題だったのです。GetComputerNameの説明には
ローカルコンピュータの NetBIOS 名を取得します。この名前はシステムの起動時に確立されるもので、システムはレジストリからこの名前を読み取ります。
ローカルコンピュータがクラスタの 1 つのノードである場合、GetComputerName 関数はノード名を取得します。
と、書かれています。ちゃんと仮想コンピュータ名を返却してくれるかと少し期待したのですが…。この場合のクラスタとはWindows 2000 Advanced Editionに搭載されているクラスタのことのようです。サードパーティ製のクラスタでは任意のタイミングで仮想コンピュータのON/OFFができるので、GetComputerNameの仕様にそぐわないのでしょう。いやだったけれど、クラスタソフトの専用API使うしかないか…。ちなみにGetComputerNameExも同様に仮想コンピュータ名を返却してくれませんでした。ま、NetBIOSをひっかけてアナウンスしているみたいなので、仕方ないかなとも思います。
クラスタを2セット作って、別々に動作させているようなところはこれがもろやばいのだけれど、そんなところは一カ所だけだし、回避方法があるので、回避方法のアドバイザリを書いて、しばらくしのいでもらいましょう。隠すことなく、わかりやすいように書くのはなかなか大変だ。一時間くらい草案を練って、何度か書き直してから送信。
本日の労働は9:00〜20:15ってところ。なんとか豪雨の間隙を縫って帰宅することができました。