We're surfacing a bad error here. Basically, you get this error message if you hold the file open too long; we recommend around 30 seconds.
I'll file a bug internally to get a better error message. Can you break this up into multiple writes? -- Ikai Lan Developer Programs Engineer, Google App Engine plus.ikailan.com | twitter.com/ikai On Wed, Aug 17, 2011 at 5:32 PM, Mike Prince <m...@mikeprince.com> wrote: > I'm trying to write a Java serialized HashMap<String,Long> to the > blobstore using the FileService and getting an "Unknown" error 10. > I'm guessing there's 10,000+ items in the map. > > Below is the code I'm using, followed by the stack trace. > > Can someone clue me in on what I'm doing wrong? And yes, it works > fine in the development environment ;) > > Thanks, > > Mike > > > public class Filer > { > private static final FileService fileService = > FileServiceFactory.getFileService(); > private static final BlobstoreService blobstoreService = > BlobstoreServiceFactory.getBlobstoreService(); > > public static String save( Object value ) > throws IOException > { > if( value == null ) return null; > > AppEngineFile file = fileService.createNewBlobFile( > "text/plain" ); > return save( file, value ); > } > > private static String save( AppEngineFile file, Object value ) > throws IOException > { > // Open a channel and write out object > FileWriteChannel writeChannel = > fileService.openWriteChannel( file, > true ); > ObjectOutputStream out = new > ObjectOutputStream( Channels.newOutputStream( writeChannel ) ); > out.writeObject( value ); > > // Close it up > out.close(); > writeChannel.closeFinally(); > > return file.getFullPath(); > } > > > > And here's the exception... > > > org.apache.jsp.tasks.create_002duser_002dsegment_jsp _jspService: > Failed to create user segment > java.io.IOException > at > > com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java: > 501) > at > > com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java: > 479) > at > com.google.appengine.api.files.FileServiceImpl.append(FileServiceImpl.java: > 426) > at > com.google.appengine.api.files.FileServiceImpl.append(FileServiceImpl.java: > 171) > at > > com.google.appengine.api.files.FileWriteChannelImpl.write(FileWriteChannelImpl.java: > 49) > at > > com.google.appengine.api.files.FileWriteChannelImpl.write(FileWriteChannelImpl.java: > 41) > at java.nio.channels.Channels.write(Channels.java:80) > at java.nio.channels.Channels.access$000(Channels.java:64) > at java.nio.channels.Channels$1.write(Channels.java:151) > at java.io.ObjectOutputStream > $BlockDataOutputStream.drain(ObjectOutputStream.java:1855) > at java.io.ObjectOutputStream > $BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1764) > at > java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java: > 1558) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java: > 346) > at > com.yumyumlabs.foundation.appengine.util.Filer.save(Filer.java:42) > at > com.yumyumlabs.foundation.appengine.util.Filer.save(Filer.java:33) > at > com.yumyumlabs.server.recipe.model.UserSegment.saveUsers(UserSegment.java: > 51) > at > > org.apache.jsp.tasks.create_002duser_002dsegment_jsp._jspService(create_002duser_002dsegment_jsp.java: > 104) > at > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: > 511) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: > 390) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: > 216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: > 182) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: > 765) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: > 418) > at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) > at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) > at > > org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java: > 213) > at > org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java: > 171) > at > org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java: > 145) > at > > org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java: > 92) > at > > org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java: > 381) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at > org.machino.servlet.PageTimerFilter.doFilter(PageTimerFilter.java: > 63) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at org.machino.servlet.LoginFilter.doFilter(LoginFilter.java:121) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at org.machino.servlet.RedirectFilter.doFilter(RedirectFilter.java: > 53) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at > > com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: > 97) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at > > com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: > 35) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at > > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: > 43) > at org.mortbay.jetty.servlet.ServletHandler > $CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: > 388) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: > 216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: > 182) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: > 765) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: > 418) > at > > com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: > 249) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: > 152) > at org.mortbay.jetty.Server.handle(Server.java:326) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: > 542) > at org.mortbay.jetty.HttpConnection > $RequestHandler.headerComplete(HttpConnection.java:923) > at > > com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: > 76) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > at > > com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: > 135) > at > com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: > 262) > at com.google.apphosting.base.RuntimePb$EvaluationRuntime > $2.handleRequest(RuntimePb.java:9819) > at com.google.net.rpc.impl.RpcUtil.handleRequest(RpcUtil.java:445) > at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: > 414) > at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java: > 579) > at com.google.tracing.TraceContext$TraceContextRunnable > $1.run(TraceContext.java:454) > at com.google.tracing.TraceContext.runInContext(TraceContext.java: > 694) > at com.google.tracing.TraceContext > > $AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java: > 332) > at com.google.tracing.TraceContext > $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java: > 324) > at com.google.tracing.TraceContext > $TraceContextRunnable.run(TraceContext.java:452) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: > 1110) > at java.util.concurrent.ThreadPoolExecutor > $Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:636) > Caused by: com.google.apphosting.api.ApiProxy$ApplicationException: > ApplicationError: 10: Unknown > at com.google.apphosting.runtime.ApiProxyImpl > $AsyncApiFuture.rpcFinished(ApiProxyImpl.java:474) > at com.google.net.rpc.RpcStub$RpcCallbackDispatcher > $1.runInContext(RpcStub.java:1050) > at com.google.tracing.TraceContext$TraceContextRunnable > $1.run(TraceContext.java:454) > at com.google.tracing.TraceContext.runInContext(TraceContext.java: > 694) > at com.google.tracing.TraceContext > > $AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java: > 332) > at com.google.tracing.TraceContext > $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java: > 324) > at com.google.tracing.TraceContext > $TraceContextRunnable.run(TraceContext.java:452) > at com.google.net.rpc.RpcStub > $RpcCallbackDispatcher.rpcFinished(RpcStub.java:1071) > at com.google.net.rpc.RPC.internalFinish(RPC.java:2240) > at > com.google.net.rpc.impl.RpcNetChannel.finishRpc(RpcNetChannel.java: > 2338) > at > com.google.net.rpc.impl.RpcNetChannel.messageReceived(RpcNetChannel.java: > 1267) > at > com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: > 328) > at > com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: > 299) > at com.google.net.async.Connection.handleReadEvent(Connection.java: > 474) > at > > com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: > 856) > at > com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: > 222) > at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: > 116) > at com.google.net.async.GlobalEventRegistry > $2.runLoop(GlobalEventRegistry.java:95) > at com.google.net.async.LoopingEventDispatcher > $EventDispatcherThread.run(LoopingEventDispatcher.java:385) > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > google-appengine-java@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.