Good call - I added BufferedInputStream and BufferedOutputStream and it solved the problem.
i.e. ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( Channels.newOutputStream( writeChannel ), 65536 ) ); Thanks! - Mike On Aug 19, 10:48 am, "Ikai Lan (Google)" <ika...@google.com> wrote: > 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(FileServi > > ceImpl.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(FileWriteChannelI > > mpl.java: > > 49) > > at > > > com.google.appengine.api.files.FileWriteChannelImpl.write(FileWriteChannelI > > mpl.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_002 > > duser_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(NormalRewrit > > tenUrl.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.ja > > va: > > 92) > > at > > > org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilte > > r.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(ParseBlo > > bUploadFilter.java: > > 97) > > at org.mortbay.jetty.servlet.ServletHandler > > $CachedChain.doFilter(ServletHandler.java:1157) > > at > > > com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionF > > ilter.java: > > 35) > > at org.mortbay.jetty.servlet.ServletHandler > > $CachedChain.doFilter(ServletHandler.java:1157) > > at > > > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans > > actionCleanupFilter.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(AppVersionH > > andlerMap.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(RpcRequ > > estParser.java: > > 76) > > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > > at > > > com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceReques > > t(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.jav > > a: > > 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.jav > > a: > > 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 > > ... > > read more » -- 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.