Application down, no graceful degradation despite checking the capabilities API

33 views
Skip to first unread message

Per

unread,
Mar 7, 2012, 7:32:42 PM3/7/12
to google-a...@googlegroups.com
Hi there,

during previous maintenance periods our application degraded gracefully, as we do check the Capabilities API before each request, and don't write anything to the datastore if the Capabilities API tells us that it's not available.

This time around though I just get a Google Exception, and the stacktrace doesn't look like our code is being called at all. Are we doing something wrong, any suggestions how to avoid this next time? Or is it a Google problem?


Uncaught exception from servlet
com.google.apphosting.api.ApiProxy$CapabilityDisabledException: The API call datastore_v3.Put() is temporarily unavailable: Datastore writes are temporarily unavailable. Please see http://code.google.com/status/appengine for more information.
	at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher$1.runInContext(RpcStub.java:746)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
	at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
	at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher.rpcFinished(RpcStub.java:788)
	at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher.success(RpcStub.java:773)
	at com.google.net.rpc3.impl.client.RpcClientInternalContext.runCallbacks(RpcClientInternalContext.java:888)
	at com.google.net.rpc3.impl.client.RpcClientInternalContext.finishRpcAndNotifyApp(RpcClientInternalContext.java:793)
	at com.google.net.rpc3.impl.client.RpcNetChannel.afterFinishingActiveRpc(RpcNetChannel.java:1049)
	at com.google.net.rpc3.impl.client.RpcNetChannel.finishRpc(RpcNetChannel.java:895)
	at com.google.net.rpc3.impl.client.RpcNetChannel.handleResponse(RpcNetChannel.java:2248)
	at com.google.net.rpc3.impl.client.RpcNetChannel.messageReceived(RpcNetChannel.java:2060)
	at com.google.net.rpc3.impl.client.RpcNetChannel.access$2000(RpcNetChannel.java:147)
	at com.google.net.rpc3.impl.client.RpcNetChannel$TransportCallback.receivedMessage(RpcNetChannel.java:3097)
	at com.google.net.rpc3.impl.client.RpcChannelTransportData$TransportCallback.receivedMessage(RpcChannelTransportData.java:602)
	at com.google.net.rpc3.impl.wire.RpcBaseTransport.receivedMessage(RpcBaseTransport.java:420)
	at com.google.net.rpc3.impl.wire.RpcClientTcpTransport.parseOneMessage(RpcClientTcpTransport.java:773)
	at com.google.net.rpc3.impl.wire.RpcClientTcpTransport.parseMessages(RpcClientTcpTransport.java:651)
	at com.google.net.rpc3.impl.wire.RpcClientTcpTransport.access$100(RpcClientTcpTransport.java:38)
	at com.google.net.rpc3.impl.wire.RpcClientTcpTransport$1.dataReceived(RpcClientTcpTransport.java:293)
	at com.google.net.async3.SocketConnection.handleNetworkReadEvent(SocketConnection.java:843)
	at com.google.net.async3.SocketConnection.access$400(SocketConnection.java:40)
	at com.google.net.async3.SocketConnection$NetworkReadHandlerImpl.run(SocketConnection.java:872)
	at com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:260)
	at com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:121)
	at com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:576)
	at com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:997)
	at com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:878)
	at com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:134)
	at com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:1833)



Cheers,
Per

Per

unread,
Mar 7, 2012, 7:37:48 PM3/7/12
to google-a...@googlegroups.com
Ok, turns out this is only happening when you already have a session. The capability check does work if you don't have a session. So it's not as bad, but I'm still puzzled. Any ideas?

Reply all
Reply to author
Forward
0 new messages