パスワードを忘れた? アカウント作成
2087877 story
Windows

2月29日に発生したWindows Azureのトラブルは証明書の有効期限計算が引き金だった 46

ストーリー by hylom
発端はよくありそうなミスだった 部門より
insiderman 曰く、

日本マイクロソフトが、2月29日に発生したWindows Azureのトラブルについて、その原因を米MicrosoftのBill Laing氏によるレポートの翻訳という形で報告している。

これによると、2月29日のトラブルはやはりうるう年が原因で、Windows Azureを提供するクラスターシステム内でやり取りする「転送証明書」の有効期限計算にミスがあったのが引き金になったという。これらの証明書では作成日の1年後が有効期限として設定されるのだが、2012年2月29日に作成された証明書では有効期限が「2013年2月19日」という存在しない日付に設定されてしまい、そのため証明書の作成自体が失敗してしまうという。

転送証明書は新しい仮想マシンを作成する場合などに作成され、証明書の作成に失敗した場合は仮想マシンの作成自体も失敗する。Windows Azureでは仮想マシンの作成に失敗するとリトライを試みるが、3回連続で失敗すると「ハードウェア故障」と見なされてそのサーバーは待機状態となり、そのサーバーで動いている仮想マシンがほかのサーバーに移動されるという。しかし、仮想マシンを他のサーバーに移動させる際にも転送証明書の作成が必要となり、結果的に他のサーバーでも同様のことが繰り返されて次々とサーバーが待機状態になっていったという。

問題が発生したのは28日の0:00(GMT)で、2:38に不具合を特定、
2:55にクラスターのサービスマネージメント機能を停止、ソフトウェアの更新コードは7:20に準備でき、テストしたうえで10:11には修正プログラムの展開を開始したという。ただし、一部のクラスターでは最新ではない管理ソフトウェアのままだったため個別の対応が行われたのだが、そこでミスが発生、ネットワークから切り離されるというトラブルも発生していたようだ。これらの問題を解決できたのは翌日の10:15分だったという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by kicchy (4711) on 2012年03月15日 8時47分 (#2117847)

    >2012年2月29日に作成された証明書では有効期限が「2013年2月19日」という存在しない日付に設定されてしまい

    なんてこったい、来年の2月19日にはまた別の問題が発生するじゃないか!!

    # ちなみに原文では2/29

  • by fareast (45345) on 2012年03月15日 8時55分 (#2117854) 日記
    不具合に対する賠償としてクラウディアさんのギリギリな画像を要求する

    # いやまあ Azure 使ったことないんだけどさ
  • by kogd9 (45248) on 2012年03月15日 8時57分 (#2117858) 日記
    年を+1するだけで一年後を算出していたとは・・
    日付型すら使っていないとか、予想よりはるかに低レベルで驚いた。
    • by Anonymous Coward

      ITスタッフの9割はスキル不足 [srad.jp]
      # スタージョンの法則の特殊例にすぎないよな

      • by Anonymous Coward

        Excelも使いこなせないMS技術者?

        • by Anonymous Coward

          クラスターの拡張は自動的にやっているのかと思いきや中の人がExcelで有効期限計算したりしてたのか…。
          正直そっちのほうが障害そのものよりはるかに恐ろしい

          • by Anonymous Coward

            いやいや、むしろExcelだったら問題なく処理してくれます。

            A1に2012/2/29と入力しておいて、適当なセルに=DATE(YEAR(A1)+1,MONTH(A1),DAY(A1))などと。

            • by Anonymous Coward

              Excelは間違えなくても人間が手動でやってたらミスるのは必然でしょ。
              ああ日本ではミスった担当者の資質の問題にすべて帰着されるんだっけ。(そしてミスはいつまでたってもなくならない)。

        • by Anonymous Coward

          方眼紙として便利に使ってます

    • by Anonymous Coward

      こんな典型的な「『車輪の再発明』の連鎖」が、21世紀になってもまだ解決されてないとか、もうね…。

      • by miyuri (33181) on 2012年03月15日 12時51分 (#2118021) 日記

        DateTime d = new DateTime(2012, 2, 29);
        Console.WriteLine(d);
        Console.WriteLine(d.AddDays(365));
        Console.WriteLine(d.AddYears(1));

        ふつーに書けばふつーに正しく計算するのだけど、やっぱり車輪の再発明をしていたのだろうね。

        親コメント
        • by Anonymous Coward

          DateTime d = new DateTime(2012 + 1, 2, 29);
          これで例外をcatchしてなかったんじゃね?

        • by Anonymous Coward

          2012/1/1〜2/28に呼ばれることも考慮する必要があるから、

          Console.WriteLine(d.AddDays(365));

          は、1年を満たさないという例?

          $d =`date -d "2012-02-29 1year" "+%Y-%m-%d"`;
          これは「ふつー」じゃない?

      • by Anonymous Coward

        月末日を求めるのに、一生懸命条件分岐で処理するコードって、困った事によく見かけるんですよね・・・

        # 月が1,3,5,7,8,10,12は31、2は年を4で割った余りが(以下略)なんてifの羅列が

        年、月、日とシリアル値の相互変換ができる言語なら、[翌月1日]-[1日]でいいじゃんと思いつつスルーしていますが。

        • by Anonymous Coward on 2012年03月15日 12時22分 (#2117997)

          > [翌月1日]-[1日]でいいじゃん
          そして翌月を求めるところで単に月に1を足してバグると。

          親コメント
          • by Anonymous Coward

            日付型使っても[翌月1日]のところを「1日を求める」→「翌月を求める」の順に処理しないとバグることがあるよ(日付型の仕様にもよるが)。
            「こんな簡単なことも…」とか言ってる奴に限ってこんな簡単なことをミスる。

    • 今回の問題とは直接関係ないですけど、
      いわゆる日付型で、『2012年2月29日の1年後』を取得すると、
      たぶん『2013年2月28日』か『2013年3月1日』か『日付取得エラー』になると思うんですけども。
      これはこれで何かのトラブルの元になりそうな気もする……

      #手近にあったPostgreSQLだと2013-2-28を返してきた。他の環境ではどうなんだろう。

      • by Anonymous Coward on 2012年03月15日 12時20分 (#2117996)

        日本の民法準拠なら「2013年2月28日」となるのが正解ですね。

        親コメント
        • by Anonymous Coward

          「民法準拠ならば」ですね。でも、サービスの期間にこれを適用すると、初日不算入やら「1年間有効って言ったじゃねーか」とクレームの嵐になる予感.したがって、対応する暦日がない場合や休日に当る場合は、翌日にするのが無難でしょう。

          #この間Symantecの有効期間最終日にLiveUpdateしようとしたら、延長権買わないとだめだと曰いやがった。あれもこれ絡みか?

      • by mickie (42685) on 2012年03月15日 17時36分 (#2118223)

        C#だと、2012/2/28と2012/2/29の1年後は2013/2/28でした。
        当然といえば当然ですが、2/28の1年後と365日後はちがいました。

        親コメント
      • by Anonymous Coward

        『2012年2月29日の365日後』を取得すれば良いのでは?(1日のズレが累積するのは仕様です!)

        • by Anonymous Coward

          2012年2月28日の1年後が2013年2月27日になるのか。それが原因で障害起こしたら背比べしてるどんぐりからボロクソに言われること間違いないね。

  • by Anonymous Coward on 2012年03月15日 22時31分 (#2118349)

    この記事の「前のストーリー」が
    コメント欄、本来あるべき姿から乖離していってる? [srad.jp]
    になってるんだけど???

typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...