Memcache操作失败,放弃异常是什么原因?
What causes Memcache operation failed, giving up exception?
我有一个应用程序引擎 java 项目并且正在使用 objectify。我偶尔会在与将项目放入内存缓存相关的应用程序引擎 Web 控制台的 "stack driver error reporting" 视图中获得堆栈跟踪。这是代码:
try {
TestItem t = new TestItem(...);
ofy().save().entity(t).now();
} catch (Exception e) {
}
这是我偶尔会看到的错误:
com.googlecode.objectify.cache.MemcacheServiceRetryProxy invoke: Memcache operation failed, giving up
java.lang.reflect.InvocationTargetException
at com.google.appengine.runtime.Request.process-i4dx9s2kED3CVcPe(Request.java)
at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:44)
at com.googlecode.objectify.cache.MemcacheServiceRetryProxy.invoke(MemcacheServiceRetryProxy.java:68)
at com.sun.proxy.$Proxy9.putAll(Unknown Source)
at com.googlecode.objectify.cache.KeyMemcacheService.putAll(KeyMemcacheService.java:91)
at com.googlecode.objectify.cache.EntityMemcache.empty(EntityMemcache.java:319)
at com.googlecode.objectify.cache.CachingAsyncDatastoreService.trigger(CachingAsyncDatastoreService.java:445)
at com.googlecode.objectify.cache.TriggerFuture.isDone(TriggerFuture.java:87)
at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:102)
at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:34)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.me.test.Test.putSomethinInMemcache(Test.java:13)
...
Caused by: com.google.appengine.api.memcache.MemcacheServiceException: Memcache putAll: Unknown exception setting 1 keys
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:69)
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$RpcResponseHandlerForPut.handleApiProxyException(AsyncMemcacheServiceImpl.java:349)
at com.google.appengine.api.memcache.MemcacheServiceApiHelper.absorbParentException(MemcacheServiceApiHelper.java:111)
at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:52)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:91)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:89)
at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26)
at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll(MemcacheServiceImpl.java:115)
... 52 more
它似乎没有被 try 语句捕获。我只是在前面提到的管理控制台中看到它。
有谁知道这是什么意思,或者我怎样才能抓住它?我主要担心的是,在此操作失败后,可能会有对象的旧副本卡在 memcache 中。
使用 objectify 5.1.10.
谢谢
这是一个 get() 操作。如果 memcache 在 get() 操作期间不可用,Objectify 只会从数据存储中读取。错误已记录且性能有所下降,但应用程序继续运行。
从技术上讲,写入操作期间可能会出现错误(任何 save() 都会清除缓存条目;读取操作会重新填充缓存)。这在理论上可能会在缓存中留下陈旧的信息。对此无能为力 - 如果您无法清除缓存条目,它就会卡在那里。我的建议是,如果您有敏感数据但希望将其缓存,请在缓存条目上设置合理的超时时间(@Cache(expirationSeconds=60)
或诸如此类)。
我有一个应用程序引擎 java 项目并且正在使用 objectify。我偶尔会在与将项目放入内存缓存相关的应用程序引擎 Web 控制台的 "stack driver error reporting" 视图中获得堆栈跟踪。这是代码:
try {
TestItem t = new TestItem(...);
ofy().save().entity(t).now();
} catch (Exception e) {
}
这是我偶尔会看到的错误:
com.googlecode.objectify.cache.MemcacheServiceRetryProxy invoke: Memcache operation failed, giving up java.lang.reflect.InvocationTargetException at com.google.appengine.runtime.Request.process-i4dx9s2kED3CVcPe(Request.java) at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:44) at com.googlecode.objectify.cache.MemcacheServiceRetryProxy.invoke(MemcacheServiceRetryProxy.java:68) at com.sun.proxy.$Proxy9.putAll(Unknown Source) at com.googlecode.objectify.cache.KeyMemcacheService.putAll(KeyMemcacheService.java:91) at com.googlecode.objectify.cache.EntityMemcache.empty(EntityMemcache.java:319) at com.googlecode.objectify.cache.CachingAsyncDatastoreService.trigger(CachingAsyncDatastoreService.java:445) at com.googlecode.objectify.cache.TriggerFuture.isDone(TriggerFuture.java:87) at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:102) at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:34) at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22) at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10) at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21) at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30) at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22) at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10) at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21) at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30) at com.me.test.Test.putSomethinInMemcache(Test.java:13) ... Caused by: com.google.appengine.api.memcache.MemcacheServiceException: Memcache putAll: Unknown exception setting 1 keys at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:69) at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$RpcResponseHandlerForPut.handleApiProxyException(AsyncMemcacheServiceImpl.java:349) at com.google.appengine.api.memcache.MemcacheServiceApiHelper.absorbParentException(MemcacheServiceApiHelper.java:111) at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:52) at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:91) at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:89) at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26) at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll(MemcacheServiceImpl.java:115) ... 52 more
它似乎没有被 try 语句捕获。我只是在前面提到的管理控制台中看到它。
有谁知道这是什么意思,或者我怎样才能抓住它?我主要担心的是,在此操作失败后,可能会有对象的旧副本卡在 memcache 中。
使用 objectify 5.1.10.
谢谢
这是一个 get() 操作。如果 memcache 在 get() 操作期间不可用,Objectify 只会从数据存储中读取。错误已记录且性能有所下降,但应用程序继续运行。
从技术上讲,写入操作期间可能会出现错误(任何 save() 都会清除缓存条目;读取操作会重新填充缓存)。这在理论上可能会在缓存中留下陈旧的信息。对此无能为力 - 如果您无法清除缓存条目,它就会卡在那里。我的建议是,如果您有敏感数据但希望将其缓存,请在缓存条目上设置合理的超时时间(@Cache(expirationSeconds=60)
或诸如此类)。