人柱という噂もあるけど、ACS使った
と書いた通りに、ACSに起因したトラブルが生じました(T_T)
今回のトラブルについてはACS - Event.Query suddenly returns Internal 500 responseというチケットが切られていますが、私は復旧してるのですが、人によっては、まだトラブル継続しているみたいです。
人柱の使命としてトラブル発生から解決するまでの流れをまとめておきました
あ、そうそうこういうので、
「やっぱりACSはダメだよね」
という結論には今のところ達しないですね。
結局のところ完璧なモノって世の中ないわけだし、トラブルが前提でアプリというかシステム全体を考えておくべきというのを、以前うちの会社主催でやったAWSワークショップで学んだわけだし。
自分が作ってるアプリは、最悪お店の名前、住所、緯度経度・・・をJSON化したファイルをスマフォ側に一定期間キャッシュしつつプラスαの機能を実装すれば、ある程度継続して利用できる可能性があるので、その辺り改善すればいいのかなと思っており、その辺りの考えを別エントリでまとめておこうかと思ってます
トラブル内容
この↓現在位置を取得して検索する機能だけが何故か利用できなくなった。
覚えてる範囲で時系列での流れ
8月27日の夕方頃
帰宅中の電車の中で、開発の続きをしようと思ってiPhoneシミュレーター起動した際に地図上に表示されるはずのお店が全く出てこない状況になりました。
当初は、自分が作ってる開発版のバグかなと思ったのですが、その後リリースしてるバージョンを自分のiPhoneにインストールしなおしたら、同様の症状が出たので、この時点でTitanium Cloud Services側の不具合かなと思い、以下のtweetをしてました
CraftBeerFanのサーバー側の不具合があるみたいで、現在地図上での検索が出来ないかもしれません。リストからの検索は機能していますのでひとまずそちらをご利用ください。
— hiroshi oyamada (@h5y1m141) August 27, 2013
その時に確認できたこととしては
- サーバー自体は稼働してた
- レスポンスもあり、status code 200返してる
- 都道府県から辿っていく検索も正常に稼働してた
8月27日の夜
都道府県のリストから辿っていく機能が正常化どうしてるのがわかった時点で、緯度経度情報をキーにしてクエリー発行する場合にトラブルが生じているのかと思ったのですが、切り分けのためにcURLで以下の様な2つを実行しました。
https://api.cloud.appcelerator.com/v1/places/show.json?key=xx&place_id=51e342db0cfccd0b7030c208
https://api.cloud.appcelerator.com/v1/places/search.json?key=xx&latitude=35.744674&longitude=139.608928
両方とも意図した値が得られたので、自分の勘違いかと思ったのですが、Titanium側の以下のcodeの部分の動作を確認しました
Cloud = require('ti.cloud') Cloud.Places.query page: 1 per_page: 200 where: state:'東京都'
これは正常に値が得られることがわかりました。
ただ、以下の緯度経度を検索条件にしたコード実行すると
- ステータスコードは200が返ってきた
- Places.queryで得られる値を調べるとper_page: 20としてるので本来なら20件分の情報が取得できるはずなのに、中身が空っぽの値が返ってきた
という感じだったので、やはり緯度経度を検索条件にした場合にのみ生じる不具合というので、間違いなさそうな感じになりました
Cloud = require('ti.cloud') Cloud.Places.query page: 1 per_page: 20 where: lnglat: $nearSphere:[longitude,latitude] $maxDistance: 0.01
8月28日の早朝
以下の様なtweetを見つけました
Q&A - ACS Reviews just broke - Cloud.Reviews.query suddenly buggy http://t.co/gFsWWCYqVu
— Appcelerator Q&A (@AppC_QA) August 27, 2013
完全に同じではないのですが、かなり似たような症状だったので、自分も同じようなトラブルに直面してるみたいなことを書き込みました
すると、元々質問をされた方が、
Some ACS query APIs have been reported as not working on this forum. Here's a question about events query: http://developer.appcelerator.com/question/156435.
というコメントを残しており、ACS Events Query BrokenというQ&Aのコメント欄に
I just submitted a ticket as well. Hopefully they escalate it. https://jira.appcelerator.org/browse/TC-2829
というのを見つけて、最終的にACS - Event.Query suddenly returns Internal 500 responseに辿り着き、自分のトラブルはこれだったことに行き着きました。
8月28日の早朝移行考えたこと
復旧を待つだけしか方法がないかなとやや諦めていたのですが、実は1つだけ回避方法を見つけていました。トラブルが発生してる最中に、お店の情報を2,3つ登録したら、なぜかそれだけは地図上に表示されていました。
新規登録し直すことでもしかしたら復旧するのかなという目論見があったので
- 既存のお店の情報を一旦全部消去
- お店を再登録
- 数人のユーザの方がいくつかのお店をお気に入り登録していたので、それを再設定
という流れで復旧するかもしれないという考えが浮かんで、以下の様なことをtweetしました
切り分けのために、お店のデータを新規登録すれば、地図上で検索できることは今朝の早い段階で確認できた。ただそれやると place_idが新規に作成されてしまい、旧place_idに紐付けられたお気に入り登録してる情報が失われるから何らかの形でお気に入り情報移行しないといけない
— hiroshi oyamada (@h5y1m141) August 27, 2013
今回のトラブルが生じる前に、お店の一括削除と一括登録するスクリプトをすでに作っていたのでその点はすぐに出来たのですが、問題はお気に入り情報の再設定。
再設定の流れとしては
- お気に入り登録してるユーザIDとお店の名前&place_idを調べる
- 新規登録したお店の中から、お気に入り登録されているお店のplace_idを調べる
- お気に入り登録を再設定
という感じです。
お気に入り登録してるユーザの方が20名程度でそれほど多くないとはいえ、手作業だと作業ミス生じるから、プログラム化しないとダメかと思ったのですが、IDとお店の名前&place_idを調べるためのスクリプトを書くか、それともcURLでチマチマ作業するか判断に悩むような感じでした。
- 日中は本業があるのでコードを書いたりする時間がない
- 自分以外の人にも生じてるトラブルなので、ある程度の段階で復旧するであろうという期待
を考えて、結局はお店の新規登録作業はせずに、その後
やっと復旧したっぽい!
— hiroshi oyamada (@h5y1m141) August 28, 2013
という形になりました
今後の教訓
今回トラブルが発生した段階で、Appceleratorのサポート関連のTwitterアカウントがないのか調べたりもしたのですが、すぐに見つからず、どうやって情報収集とか報告すればいいのかすらわかりませんでした。
今回の件で学んだこととしては
- AppceleratorのQ&Aサイトの情報をチェックする
- AppceleratorのIssueTrackerで、バグ報告が上がってないかチェックする
というのが取るべき道なんですね。
日本でACS使ってる人がどの程度いるかわかりませんが、このFashionistというアプリのように、全世界で見ると利用されてるユーザがいることがわかりました。