書きかけメモ。書かれていることはすべて未検証。
コードはすべて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