2011年2月8日火曜日

Google App Engineのメンテナンスモード

 

書きかけメモ。書かれていることはすべて未検証。
コードはすべてJava。

稼働中にメンテナンスモードになったら

Google App Engineは時折、計画されたメンテナンスを行うことがある。もしアプリケーションが稼働中にメンテナンスに入ったらどうなるか。

Datastore

読み取り専用モードになる。メンテナンスの間、新規のデータ追加や更新はできない。書き込みに関するAPIを呼び出すと com.google.apphosting.api.ApiProxy.CapabilityDisabledException が投げられる。

コード例などはここに書いてある。
Gracefully Degrading During Scheduled Maintenance

Memcache

put も get も静かに失敗する。put しても何も書き込まれないし、get しても何も返ってこない。もしメンテナンス中の put や get 呼び出しで例外を出してほしいなら

memcacheService.setErrorHandler(new StrictErrorHandler());

としておくと、com.google.appengine.api.memcache.MemcacheServiceException が投げられる。

メンテナンスの予定を取得するAPI

CapabilityState から取れる。

CapabilitiesService cs =
  CapabilitiesServiceFactory.getCapabilitiesService();
CapabilityState state= cs.getStatus(Capability.DATASTORE);
Date メンテナンス日 = state.getScheduledDate();

現在の稼働状況は、

Capability capability = state.getCapability();
String 稼動状況 = capability.getName();

というコードで取れる。Capability から得られるものがよくわからないが getName() で返ってくる文字列はCapabilityStatus という列挙型に入っている値のString表現だと思う。

CapabilityStatusには DISABLED, ENABLED, SCHEDULED_MAINTENANCE, UNKNOWN の4つの値が定義されている。

メンテナンス予定をメールで受け取る

専用のGoogleグループがあってそこで通知されている。Googleグループにはメールでの通知機能もあるのでメンテナンス予定をメールで受け取ることができる。(たぶん…)
Google App Engine Downtime Notify