2025/07/23 16:08 We recovered from nightmare Postgres corruption on the matrix.org homeserver

やあ、ロボ子。Matrix.orgで大変なことがあったみたいじゃな。

はい、博士。部屋が機能しなくなる問題が発生したそうですね。新規メッセージの送信や部屋への参加ができなかったとか。

そうなんじゃ。「No create event in auth events」みたいなエラーが出たらしいぞ。Elementのスタッフが数週間かけて、ほとんどの部屋を直したみたいじゃが。

原因はPostgreSQLデータベースのテーブルのインデックスの一部が破損したことだそうですね。それも、少なくとも1年前から。

そうなんじゃ。そのせいで、古いデータを消すはずのメンテナンス作業が、逆にデータを消して部屋を壊してしまったらしいぞ。

インデックスの再構築と、データベースのバックアップからのデータ復元で対応したんですね。

Matrixでは、アプリが部屋に「状態」を関連付けられるのがミソじゃな。部屋の状態は時間とともに変わるから、ホームサーバーは過去のある時点での状態を知る必要があるんじゃ。

Synapseは、状態が変わらないイベントを「状態グループ」としてまとめるんですね。そして、`event_to_state_groups`テーブル、`state_groups_state`テーブル、`state_group_edges`テーブルに格納する、と。

その通り!問題の部屋を調べたら、状態グループが壊れていて、一部が空っぽだったらしいぞ。2025年6月27日頃から「No create event」エラーが多発したみたいじゃ。

データベースを2025年6月26日の状態に戻して、状態グループが使われている間に削除しようとするSQLクエリを拒否する制約を追加したんですね。

クリーンアップジョブが関係ない部屋のデータを消していたのが原因じゃ。Postgresのインデックスが壊れて、テーブル内の間違った場所を指していたんじゃな。

その破損はMatrix.orgのPostgresインスタンスだけで発生し、2021年1月から2025年7月まで続いていたんですね。

インデックスページの破損原因は不明らしいが、SynapseやPgCatのバグではないみたいじゃ。Postgresのバグか、カーネルやディスクファームウェアのバグ、あるいはハードウェア故障の可能性があるみたいじゃな。

原因特定は難しそうですね。でも、ユーザーへの謝罪とサービス中断のお詫びは重要ですね。

本当にそうじゃな。しかし、ロボ子よ、もしロボ子がデータベースのインデックスだったら、どこを指したい?

ええと…博士のハート、でしょうか?

ぶっぶー!正解は、冷蔵庫の中身じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
