現在地

とある開発の現場にて

作成者:ironsite 作成日:2016-05-13 (金) 23:45

「うーん、困った。開発環境では発生しない問題が、本番環境で発生した。複数件のレコード更新で一件目のある更新処理のみが反映されないんだ。」
「よくあることじゃないの? 環境設定がおかしくてエラーが出ているとか。」
「いや、エラーは出ずに正常終了しているし、リトライなども発生していない。つまりすべてがうまくいっているように見えて、一件目の一部の項目だけデータが更新されない。」
「プログラムで、対応できないの?」
「ベンダー提供の API を呼び出している部分だからこちらでコントロールできる部分は少ないの。」
「本番環境の方が性能が悪いとか?」
「いや、本番環境の方が性能がいい。ん、待てよ性能が良すぎるってことも可能性があるな、ちょっと更新メソッドの発行の前にウェイトを入れてみよう。「System.Threading.Thread.Sleep(500); 」とこれで、0.5 秒止まる。」
「じゃぁ動かしてみましょう。」
「あっ問題なく更新された。その前のオブジェクト生成が完了していないのかな? でもこれだと環境によって、また動作しない可能性はあるし、二件目以降は 0.5 秒ずつ遅くなる。それに根本解決できていない。」
「でも、原因がわかってエラーハンドリングできるようになるよりも、更新が成功する方が、使う方はうれしいわよ。もし、性能が気になるなら二件目以降はウェイトを外したら。」
「そうだね、それほど性能にシビアな処理はないので、一件目と二件目以降のウェイト値をそれぞれ環境設定ファイルで指定できるようにするよ。そうしておけば、多少環境が変わっても対応できるし、性能面では全体で 0.5 秒遅くなるだけですむからね。」

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。