オンコール丘の向こうから何が来るんだ?金曜日かな?やったー!今日のオンコールでは、ピークを過ぎたシステムを過度に改造することの危険性について、じっくりとお話したいと思います。
本日のストーリーは「Ed」が寄稿したもので、iSeries で実行されていた取引システムに遡る約 10 年を振り返ります。
ソフトウェア自体は古いコードで、過去の認識に合わせてカスタマイズされており、主にターミナル エミュレーターを介して従来のグリーン スクリーンで実行されます。
はい、そのようなアプリケーションの 1 つです。元の目的をはるかに超えて変更され、元の機能と新しい機能の間で新しいエキサイティングな予期しない相互作用を特徴としています。
エドは、おそらく記憶に焼き付いていたであろうユーザー インターフェイスを思い出しました。「レコード リスト画面では、オプション 1 と Enter キーでレコードを選択し、アクションを実行するか、より一般的には、第 2 レベルの画面 (詳細レコードやアクションの Y/N プロンプトなど) を読み込むのが標準でした。」
あんたはもう二度と、10代のコンピューターの天才たちの前で私を叩き潰して辱めることはしない
続きを読む
ここまでは順調です。しかし、第2レベルの画面では、F4キーを軽く押すと、全レコード選択に対してオプション1を指定するのと同じ動作になります。
好奇心旺盛な読者は、一体何が問題になるのかと疑問に思うかもしれません。
「そのようなリスト画面の 1 つは、保留中のトランザクションのリストで、オプション 1 を選択するとトランザクションがキャンセルされます」と Ed 氏は説明します。
「20年前に元のアプリケーションでその画面を書いた人は、F4 自動選択機能を組み込むことに決めていました。」
これは「悪いアイデア™」でした。確認プロンプトがなかったからです。オプション1は単に取引をキャンセルするだけです。つまり、F4キーを押すと保留中の取引がすべてキャンセルされます。
「さらに悪いことに、オプションF4には『すべての取引をキャンセル』ではなく『自動選択』というラベルしか付いていなかった」と彼は付け加えた。
核兵器発射ボタンのラベルを「ふわふわのウサギを呼び出せ」と書き換えるようなものだ。
当時のコード開発者に公平を期すならば、当時はトランザクションは通常即座に処理されていたため、破壊の可能性など誰も考えもしなかったでしょう。しかし、それから数年の間に状況は変化し、ある高性能なカスタム製品が一晩で数千ものトランザクションを生成し、処理されるのを待って翌朝11時まで保留状態のまま放置されるようになりました。
神経質な人は今すぐ目をそらしてください。
9 時に、ユーザーから避けられない電話がかかってきました。「取引が停止してしまいました。保留中の取引画面で F4 キーを押そうとしたら、すべてが消えてしまいました。」
エドは、画面に何が表示されているかを調べながら、数秒間の至福の無知を楽しんだ。
おお。
「その時、本当にショックでした」と彼は言った。「ああ、もう11時前なのに…もしこれらの取引を復元できなければ、手動で修正するのに何ヶ月もかかるでしょう」
チームが大惨事を防ぐために残された時間は 2 時間未満でした。
エドは上司にそう伝え、電話を外して仕事に取り掛かりました。
「ジャーナルのロールバックは機能しませんでした。更新はユーザーのジョブによって実行されただけでなく、同時に他の多くのトランザクションを処理していた多数のバックグラウンドジョブによって、他の多くのテーブルにカスケードされていました。」
ああ、カスケードトランザクションの喜び。とても便利。ビジネスルールの適用に便利。でも、恐ろしいほど破壊的。
Ed は手動で問題に対処する必要があります。
システムが古すぎるため、エンドツーエンドのプロセスは十分に理解されていませんでしたが、おそらく大惨事が起こるかもしれないという予感から、エドは忠実にその文書化を開始し、ちょうど前の週に開始しました。
まだ終わってはいなかったが、少なくともその 2 時間のうちの一部は、数十年前のプログラマーたちが何を考えていたかを考えるのに費やす必要はなかっただろう。
「その後、約90分間、猛烈なコード分析とクエリが続きました」と彼は語った。「影響を受けたトランザクションのリストと実行されたすべての更新を特定し、更新を元に戻すためのSQLを記述しました。テストで問題を再現し、SQLが機能することを確認しました。ライブへの緊急更新アクセスを要求し、トランザクションリストをそこに転送し、SQLを実行しました。」
管理者の胃の最も強い人でも吐き気を催すような文章です。
「5分くらい余裕を持って、やりましたよ。」
彼はまた、緊急アクセス中に画面を更新し、彼が「死のボタン」と繊細に表現したボタン、つまり F4 キーに警告プロンプトを表示した。
ユーザーのことをよく知っている彼はため息をついた。「そうでなければ、いつかまた同じことが起こるのは必然だった…」
普段はIT業界の無名の英雄たちとしては異例なことに、彼への報酬は上司と、破滅のボタンを押してしまった不運な魂からの惜しみない感謝だった。「その後長い間、ビジネスユーザーは私のために何でもしてくれました」と彼は言った。
なんと、彼は 50 ポンドのギフト券までもらいました。
しかし、彼はまた、すべてがうまくいかないときに頼りになる人物としても評判を得ており、1992 年の映画「アンダー シージ」の一部を引用すると、「他の [罵り言葉削除] 人が作り出した不可能な問題に対して、土壇場で必死の解決策を思いつく人物」でもありました。
ビジネスが破綻するほんの数分前、何十年も前のコードに取り組まなければならなかった経験はありませんか?あるいは、危機を救ったのに、残念ながら役に立たないという評判を背負わされた経験はありませんか?もちろん、そんな経験はあります。そして、On Callのハゲタカたちに「あの時電話が鳴った」という体験談をぜひシェアしてください。®