いろいろやってみるにっき

てきとーに生きている奴の日記

古いエントリのサムネイル画像がリンク切れになってたりするけど、チマチマ修正中


今さらはてなハイクのメール投稿の不具合を見つけてしまった。

朝のねこ写真の投稿でたまに違う写真が混ざることがある。朝の散歩には眼鏡を持って行っていないし、乱視が酷い日もあるので写真を選択ミスしていたのかなと思っていた。

 

ハイクの機能で複数写真を簡単にアップするためには、スマホからならメール投稿が一番簡単。メール投稿ならreCAPTCHAが出てくることもないし。投稿にはGmailクライアントを使用している。

 

昨日もこんな形で一枚別の写真が紛れ込んでしまった。

f:id:shigeo-t:20170623013131p:plain

ミスに気付いたので、たまたま送信メールを見てみた。間違っていなかった。

f:id:shigeo-t:20170623013216p:plain

そこで今度はFotolifeを見てみると、エントリから落ちた写真(上記の一番左)が登録されていなかった。

f:id:shigeo-t:20170623013634p:plain

そもそも投稿順は なかよし(^-^) → けさのもふもふ(ΦωΦ)の順なのに、けさのもふもふ(ΦωΦ)が先にエントリされていて6:45:45、なかよし(^-^)が6:46:07。

f:id:shigeo-t:20170623013747p:plain

f:id:shigeo-t:20170623014609p:plain

 

なんとなく理由は分かった。

  1. メール投稿は複数の処理キューを持っている
  2. 短時間に次投稿をすると前投稿の処理終了前に処理が開始され、同一ユーザでも並列で処理される可能性がある
  3. メール投稿に写真が添付されている場合、まずはFotolifeに対し写真の登録が行われる
  4. 写真の登録が終わったというリターンの後、FotolifeのHatena::Haiku::Mailフォルダの先頭から、メールに添付されていた枚数に応じて1~4枚をfotolife画像として埋め込んでハイクに投稿

 

Fotolifeのフォルダにははてなブログを使うとHatena Blogフォルダが、ハイクを使うとHatena::Haiku::Mailフォルダが自動的に作られる。

f:id:shigeo-t:20170623023556p:plain

 

これならFIFOで処理されていない理由もわかるし、別エントリの写真が使われてしまう理由も説明できる。基本的にタスクの追い越しを考慮せず、メール投稿とfotolifeをきちんと紐づけしていない上、FIFOで処理されることを前提にしているため起きる事象である。

 

複数の処理キューで処理するのは性能を考慮すれば当然。アプリを複数サーバにスケールアウトした構成なら当然こうなる。であれば結果はFIFOにならない可能性があるので、後続の処理もFIFOを前提としてはいけない。ハイクのメール投稿作った奴はACID特性を知らないんだろうな。ダサい。

金融機関システムでACID無視してシステム作って、結果が変になる事象が頻発したらその金融機関潰れるぞw

 

通知しても今さら直さないような気がするし、この手の不具合を直すように通知して「ハイク民うぜえハイク潰すぞ、儲からないし」になっても困るので、放置しようかなということでこのエントリ書いた。この不具合の修正、若手にはいいトレーニングだとは思うけど。以上。

お時間あったら、他のエントリもクリックして頂ければ幸いです。