概要
CO-Colors ほたて 2022年1月版 (Updated 2022/11/28) 以前をご利用の環境において、端末を更新モードで起動したあと、更新端末を更新前のバージョンで起動すると、キャッシュ不整合が発生することがあります。その結果として、アプリケーションが異常終了するなどの異常な動作が発生することがあります。
本問題は CO-Colors ほたて 2022年1月版 (Updated 2023/2/17) で解決されています。 本問題によるキャッシュ不整合が疑われる場合は、モジュールを更新した上で、問題が起きている端末のキャッシュをクリアしてください。
詳細
再現条件
この問題は、更新端末において、次の条件を満たしたときに発生することが分かっています。
- CO-Colors ほたて 2022年1月版 (Updated 2022/11/28) までの HotateCache.sys ドライバー (バージョン 2022.1.6.1~2022.1.6.8) が導入されている。
- 端末を更新モードで起動中に 2MB 以上のファイルを削除したあとに、デフラグ処理やウィルススキャン処理によって削除した領域への読み取り処理が発生する
- 更新を中断する。または、更新を完了するが、更新端末を更新前のバージョンで起動する。
WriteCache モードを Server cache に設定している環境では、次の条件でも問題が発生することがあります。
- CO-Colors ほたて 2022年1月版 (Updated 2022/11/28) までの HotateCache.sys ドライバー (バージョン 2022.1.6.1~2022.1.6.8) が導入されている。
- 端末を更新モードで起動中に 2MB 以上のファイルを削除したあとに、デフラグ処理やウィルススキャン処理によって削除した領域への読み取り処理が発生する
本問題は 2022年1月版で Stream Server に導入された Trim 通知の処理 (HOTA-308) がきっかけで発生するようになったため、2021年版が導入されている環境では発生しません。
修正手順
CO-Colors ほたて 2022年1月版 (Updated 2023/2/17) (HotateCache バージョン 2022.1.6.14) で解決されています。 リリースノート (【文章番号22-001】CO-Colors ほたて 2022年1月版の変更点一覧) では HOTA-948 として記載しています)
本問題によるキャッシュ不整合が疑われる場合は、問題が起きている端末のキャッシュをクリアしたあと、モジュールを更新してください。
問題が発生しているかどうかの確認方法
本問題は更新作業に用いた端末で最も発生しやすいため、この調査は「更新作業に普段用いる端末」で優先的に行ってください。
現象が発生している環境では 【文章番号22-007】CO-Colors ほたて SetupServer 2024年8月版の変更点一覧【文章番号22-007】CO-Colors ほたて SetupServer 2023年8月版の変更点一覧【文章番号22-007】(CO-Colors ほたて) キャッシュデータの検証を行う手順 を実行すると、!!! 0x...000 is corrupted !!!
という出力とともに不整合が検出されます。
(実行例)
3% 完了... (8,178,944 / 272,629,760, 不整合 0 個)
!!! 0x125124000 is corrupted !!!
offset | server | cache
125124000 | *4d*5a*90 00*03 00 00 00*04 00 00 00*ff*ff 00 00 MZ.............. | *00*00*00 00*00 00 00 00*00 00 00 00*00*00 00 00 ................
125124010 | *b8 00 00 00 00 00 00 00*40 00 00 00 00 00 00 00 ........@....... | *00 00 00 00 00 00 00 00*00 00 00 00 00 00 00 00 ................
125124020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
:
上記の例のように、右側のデータに 00
だけが並んでいる場合は、本問題が発生している可能性が高いです。
原因
端末側で内蔵ディスクに対する Trim が発生したときに、サーバー上のディスクイメージで対象領域のデータは空データに書き換えられるため、本来なら端末上の書き込みキャッシュ上でも書き換え済みとして扱うべきなのですが、未書き換えとして扱ってしまっていました。
その結果、端末側で Trim が発生した領域に対しての読み込みリクエストが発生すると、当該領域をサーバから読み込んだ上で ReadCache 領域にキャッシュしてしまっていました。(読み込んだ「0」のデータをキャッシュしていた)
その後、「更新処理を中断する」ないしは「端末再起動に伴う Server Cache の消去」が行われた際には、サーバ側のデータは元のデータに復元されるにもかかわらず端末側には「0」がキャッシュされているため、キャッシュの不整合が発生していました。