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.

Reply via email to