2020年5月17日teocraft障害報告書

2020年5月17日
teocraft運営委員会

2020年5月16日に当サーバにて稼働しているMicrosoft社の製品「Minecraft」のサードパーティサービス「teocraft」が利用できない問題が発生したため報告致します。

ご迷惑をおかけいたしましたこと深くお詫び申し上げますと共に、以下に障害の内容と今後の対応について報告させていただきます。

障害発生日

2020/5/16 20:46 〜 5/17 0:52

障害内容

プレイヤーがteocraftにログインした直後にサーバがクラッシュし、コネクションが切断される状況が発生しました。

被害

障害時間中にサービスが利用できなかった事以外に、以下の被害が確認されております。

  • ディメンション「the_end」(以下、エンド)の座標(0,64,0)にある構造物「エンドポータル」(以下、帰還ポータル)の半分が消滅
  • エンドに飛んでいたMOB「bee」(以下、蜂)1体の死亡

原因

エンドにて、帰還ポータルの構成ブロックである「end_portal」(以下、エンドポータル)に、蜂が侵入しました。

それにより、Minecraftサーバがクラッシュし、当サーバの再起動システムによりサーバが再起動するものの、そのチャンクがロードされると再びサーバがクラッシュする状態が発生しました。まさに泣きっ面に蜂でございます。

クラッシュログを調査しましたところ、[MC-155739] Crash when opening the game in the ender dragon boss fight (java.lang.NullPointerException: Colliding entity with block) - Jira(以下、MC-155739)に報告されているとおり、MOBがエンドポータルに触れてディメンションをまたいで転移を試みる時に発生する既知のバグと状況及びエラーログが一致しました。

暫定対応

原因となった蜂周辺を、fillコマンドを用いてstone(以下、石ブロック)に置き換え、エンドポータルを取り除き、蜂がエンドポータルに接触しないように対応しました。

execute in minecraft:the_end run fill -4 61 0 2 63 5 minecraft:stone

fillコマンドはロードされていないチャンクが対象に含まれるとエラーとなるため、プレイヤーがログインしてから蜂の転移判定が始まるまでの間にコマンドを実行する必要があったため、今回は当委員会のMinecraft運用システムmiku_craftに、本件対応用に開発したwindows updateプラグインを配備し、ゴリ押しで置き換えを行いました。

対応経緯

月日 時分 事象
5/16 20:30 プレイヤーたちがエンドで帰還ポータルを利用してwither(以下、ウィザー)のリンチを決行
20:40 プレイヤーのひとりがエンドのウィザーリンチ現場に駆けつけ、その場に居たプレイヤーに蜂3体が入ったbeehive(以下、養蜂箱)を土産として渡す
20:42 先の養蜂箱を受け取ったプレイヤーのひとりが養蜂箱を帰還ポータル近くに設置し、蜂が逃げ出す
20:45 プレイヤー2人が、蜂がエンドポータルに接触したことを目撃。同時にサーバがクラッシュ
20:46 本現象を確認、サービスを緊急停止。Mastodonにて速報を発信
21:00頃 teocraftのワールドデータ(13GB)をステージ環境(ローカル)にコピーし、現象の再現を確認
22:00頃 MinecraftのバグトラッキングシステムにてMC-155739を発見。エラーログと照合し、本件と同様の内容であることを確認。
23:00頃 MC-155739に記載されている対応方法は困難であることが判明し、miku_craftを用いて問題の蜂がいるチャンクがロードされた瞬間にコマンドを実行することを検討
5/17 0:00頃 コマンドの失敗を検知できるfillコマンドを利用した方法で、windows updateプラグインを作成。ステージ環境にて復旧できることを確認
0:30頃 本番環境を起動し、windows updateを適用。復旧を確認。fillコマンドによって生成された石ブロックに原因となった蜂がめり込んで死ぬ音を確認
0:40 endermanや蜂などのMOBが入らないように帰還ポータルの残った部分を簡単に囲うなどの処置
0:52 Mastodonにて復旧を報告
2:00 windows updateを停止

恒久対応

teocraftではMicrosoft社がMinecraft公式サイトで配布している公式のサーバソフトウェアを適切な方法で配置して運用しています。今回のサービス停止の原因となった現象は、エンドポータルブロックにMOBが接触するとディメンション「overworld」の初期スポーン地点に転移するという公式Wikiによる説明と異なっていることからminecraftのバグであると結論づけ、当委員会に過失はないと判断しました。

しかし、2018年に報告されたMC-155739が未だ解決されていないことや、新規ワールドで同様のことをしても再現しないことから、今後根本的な対応がMicrosoft社によって為されることは期待できないと判断しました。プレイヤーに本件を周知し、teocraftでは今後nether_portalやエンドポータルにMOBが近づかないようにするポータルディスタンシング及び、ディメンションをまたいだ不要不急のMOBの移送の自粛を呼びかけることとします。