4.3. Ceph ファイルシステム
ユーザー空間の Ceph ファイルシステム (CephFS) はアップグレード後に期待どおりに動作します
以前は、クラスターのアップグレード中に、ユーザー空間の CephFS クライアントがクラッシュすることがありました。これは、ユーザー空間側で保持されていた MDS 側の機能ビットが古いことが原因でした。
この修正により、ユーザー空間の CephFS クライアントの MDS 機能ビットが更新され、クラスターのアップグレード後にクライアントが期待どおりに動作できるようになります。
大量のセッションメタデータがあるクライアントをブロックリストに登録してエビクトします
以前は、MDS 内に大量のクライアントメタデータが蓄積されると、MDS が読み取り専用モードに切り替わることがありました。
この修正により、蓄積の原因となっているクライアントをブロックリストに登録してエビクトするようになりました。これにより、MDS は期待どおりに動作します。
リンク解除リクエストと再統合リクエストの間でデッドロックが発生しなくなりました
以前は、非同期の dirop バグを修正するときに、以前のコミットによってリグレッションが導入され、リンク解除リクエストと再統合リクエストの間でデッドロックが発生していました。
この修正により、古いコミットが元に戻され、リンク解除リクエストと再統合リクエストの間でデッドロックが発生しなくなりました。
クライアントは常にキャップ取り消し確認応答を MDS デーモンに送信します
以前は、MDS デーモンがキャップ取り消しリクエストをクライアントに送信し、この間にクライアントがキャップを解放して inode を削除した場合、クライアントはリクエストを直接破棄していました。しかし、MDS デーモンはクライアントからのキャップ取り消し確認応答を待つ必要がありました。このため、キャップを取り消す必要がない場合でも、MDS デーモンはクライアントからの確認応答を待ち続け、MDS デーモンの健全性ステータスに警告が発生していました。
この修正により、inode が存在せず、MDS デーモンが停止状態にならない場合でも例外なく、クライアントはキャップ取り消し確認応答を MDS デーモンに送信するようになりました。
MDS ロックが正しい順序で取得されます
以前は、MDS がメタデータツリーロックを誤った順序で取得し、create
および getattr
RPC リクエストでデッドロックが発生していました。
この修正により、MDS でロックが正しい順序で取得され、リクエストのデッドロックが発生しなくなりました。
CephFS MDS が split_realms
情報の送信をスキップします
以前は、CephFS MDS が誤って split_realms
情報を送信し、kclient
はこの情報を正しくデコードできませんでした。このため、クライアントは、split_realms
を考慮せず、破損したスナップトレースとして扱っていました。
この修正により、split_realms
は kclient
に送信されなくなり、クラッシュは発生しなくなりました。
writing
フラグを設定してもスナップショットデータが失われなくなりました
以前は、クライアントで Fb
キャップの使用時に writing
フラグを ‘1’ に設定していた場合、ダーティーキャップの場合はスキップし、既存のキャップスナップを再利用していました。しかし、これは正しくありませんでした。このことが原因で、2 つの連続したスナップショットが上書きされ、データが失われていました。
この修正により、writing
フラグが正しく設定され、スナップショットデータが失われなくなりました。
スレッド名の変更が失敗しなくなりました
以前は、まれに名前変更中に別のスレッドが dst dentry を検索しようとした場合、src dentry と dst dentry の両方が同じ inode に同時にリンクされ、スレッドが取得する検索結果に一貫性が欠ける場合がありました。したがって、2 つの異なる dentry が同じ inode にリンクされることで、名前変更リクエストは失敗していました。
この修正により、スレッドは名前変更アクションが完了するまで待機し、すべてが期待どおりに動作するようになりました。
取り消しリクエストがスタックしなくなりました
以前は、'seq' を増やす取り消しリクエストの送信前に、クライアントが対応するキャップを解放し、古い seq
でキャップ更新リクエストを送信した場合、MDS は seq
とキャップの計算を確認しそこなっていました。このため、取り消しリクエストが無限にスタックし、クライアントから応答のない取り消しリクエストに関する警告が出力されていました。
この修正により、取り消しリクエストに対して常に確認応答が送信されるようになり、取り消しリクエストがスタックしなくなりました。
エラーが MDLog::_recovery_thread
で適切に処理されます
以前は、QA テストによって発行された fs fail
により MDS がすでにブロックリストに登録されていた場合、書き込みが失敗していました。たとえば、QA テスト test_rebuild_moved_file
(tasks/data-scan) は、この理由で失敗していました。
この修正により、書き込みの失敗は MDLog::_recovery_thread
で適切に処理されるようになりました。
Ceph クライアントが、アラームを送信する前に遅延の原因を検証するようになりました
以前は、Ceph は OSD の遅延を警告する誤ったアラートを送信することがありました。たとえば、X client(s) laggy due to laggy OSDs
などです。これらのアラートは、遅延が実際に OSD によるものであり、他の原因によるものではないことを検証せずに送信されていました。
この修正により、X client(s) laggy due to laggy OSDs
というメッセージは、一部のクライアントと OSD に遅延がある場合にのみ送信されるようになりました。