Tatsu still writes something... Fourth season

これからも私はなにかをしてなにかを書く

せこいことはするものじゃない(MulSync Version 1.3.12)

自作ファイル同期ツールMulSync。サブマシンとのファイルの同期に普段から使っているのだが、ファイルバックアップ用のLinuxマシンのFATパーティションとファイルを同期していると何回同期しても同期対象としてファイルが現れるという現象に悩んでいた。

ということで、MulSync Version 1.3.12をリリースしたというわけである。

従来のマシンで同期を済ませてからおもむろにVisual Studioのデバッガで同期ファイルのリストアップ部分を見ているとあることが分かった。ファイル検索の高速化のためにWindowsAPIを使っているところでファイルの比較にはFILETIME構造体を使っている。これを比較する際、ファイル検索の速度短縮化狙いで上位32ビットが異なるときはその時点で時刻が異なるものとしていたので秒単位では同じ時刻でもファイルの時刻がミリ秒単位で異なり、上位32ビットが異なった場合に無条件で異なる時刻としてしまったのが原因だった。せこいことはするものではないというものである。

どうしてこの現象が出たか。同じ時刻のファイルでもNTFSの時間の単位とFATの時間の単位が異なるため時刻の値が異なることがあり、その際に上位32ビットの境目にぶつかってしまったというのが原因である。NTFS同士だとこのような現象は出ないし、ext4相手でもある程度の時刻の解像度があるので上位32ビットの境目にぶつからなかったというわけである。なのでNTFS同士やNTFSとネットワーク越しのext4では現象が顕在化しなかったというわけである。

改めて書く。せこいことはするものではないというものである。