4.8. RBD ミラーリング
イメージの昇格後に、降格したミラースナップショットが削除されます
以前は、実装上の不具合により、セカンダリーイメージであってもプライマリーイメージであっても、イメージの昇格後に降格したミラースナップショットは削除されませんでした。このため、降格したミラースナップショットが蓄積し、ストレージ領域を消費していました。
この修正により、実装上の不具合が修正され、イメージの昇格後に適切な降格ミラースナップショットが削除されるようになりました。
プライマリーイメージが削除されると、プライマリー以外のイメージも削除されるようになりました
以前は、rbd-mirror デーモンイメージリプレーヤーの競合状態により、プライマリーイメージが削除されたときにプライマリー以外のイメージを削除することができませんでした。このため、プライマリー以外のイメージは削除されず、ストレージ領域が使用されていました。
この修正により、rbd-mirror イメージリプレーヤーが修正され、競合状態が解消するようになりました。プライマリーイメージが削除されると、プライマリー以外のイメージも削除されるようになりました。
librbd
クライアントが、呼び出し元にブロックリスト登録エラーを正しく伝播します
以前は、rbd_support
モジュールの RADOS クライアントがブロックリストに登録されていた場合、モジュールの mirror_snapshot_schedule
ハンドラーが常に正しくシャットダウンするとは限りませんでした。ハンドラーの librbd
クライアントはブロックリスト登録エラーを伝播しないため、ハンドラーのシャットダウンが停止していました。これにより、mirror_snapshot_schedule
ハンドラーと rbd_support
モジュールが、繰り返されるクライアントのブロックリスト登録から自動的に回復できなくなっていました。rbd_support
モジュールは、クライアントを繰り返しブロックリストに登録した後、ミラースナップショットのスケジューリングを停止していました。
この修正により、排他的ロックの取得とブロックリストの処理の間で生じていた librbd
クライアントでの競合が修正されました。これにより、librbd
クライアントは、排他的ロックの取得を待機している間に、呼び出し元 (mirror_snapshot_schedule
ハンドラーなど) にブロックリスト登録エラーを正しく伝播できます。mirror_snapshot_schedule
ハンドラーと rbd_support_module
は、繰り返されるクライアントのブロックリスト登録から自動的に回復します。