在GAE的生产环境中,将文件写入google云存储运行良好。但是,当我试图将生产数据(6-7GB)导入到开发服务器时,当我试图编写超过1200个文件时,总是会出现错误。第一个1200个文件工作正常,但我总是有异常。在这种情况下,我需要删除一些文件,然后我可以成功地将其他文件写入GCS。
我的测试环境是:
下面是我使用的代码:
byte[] content = ..
GcsFilename fn = new GcsFilename("cms-gi-pdf", "zip-dwdwos--Nwrg1aTk7DSRn9gAWnT");
GcsFileOptions options = new GcsFileOptions.Builder().mimeType("binary/octet-stream").acl("project-private").build();
GcsOutputChannel outputChannel = gcsService.createOrReplace(fn, options);
outputChannel.write(ByteBuffer.wrap(content));
outputChannel.close();异常发生在最后一行(close())。下面是堆栈跟踪:
15:43:40警告com.google.appengine.api.files.dev.FileMetadata:setFinalized:Caught IOException,同时尝试写blob 15:43:40信息com.google.appengine.tools.cloudstorage.RetryHelper:doRetry:RetryHelper(11,88 ms,1次尝试,com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1@6abbeea):尝试#1失败java.io.IOException,睡眠281 ms ..。 com.google.appengine.tools.cloudstorage.RetriesExhaustedException: RetryHelper(8,866年,6次尝试,多次失败,放弃在com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:127) at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166) at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156) at com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl.close(GcsOutputChannelImpl.java:198) at de.daysout.generic.filesystem.gcs.GoogleCloudStorage.write(GoogleCloudStorage.java:45) ..。 造成: com.google.appengine.api.files.FinalizationException at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617) at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:594) at com.google.appengine.api.files.FileServiceImpl.open(FileServiceImpl.java:527) at com.google.appengine.api.files.FileServiceImpl.openForAppend(FileServiceImpl.java:471) at com.google.appengine.api.files.FileServiceImpl.openForAppend(FileServiceImpl.java:190) at com.google.appengine.api.files.FileServiceImpl.openWriteChannel(FileServiceImpl.java:171) at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.append(LocalRawGcsService.java:181) at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.finishObjectCreation(LocalRawGcsService.java:245) at com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1.call(GcsOutputChannelImpl.java:201) at com。google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1.call(GcsOutputChannelImpl.java:198) at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:108) .又有72人因以下原因: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 101: /gs/writable:oOUcuZuodalavuikpIHUFA?name=cms-gi-pdf%2Fzip-dwdwos--Nwrg1aTk7DSRn9gAWnT已经在com.google.appengine.api.files.dev.LocalFileService.throwError(LocalFileService.java:201) at com.google.appengine.api.files.dev.LocalFileService.open(LocalFileService.java:299) .
这是可再生的。直到昨天我还用了appengine-gcs 0.2。但我对那个版本也有同样的问题。这很烦人,因为我无法用生产数据测试我的软件。
以下是我的问题:
发布于 2014-12-17 00:58:02
这听起来像是devserver上"GCS“的自然限制。正如您所看到的,在.close()期间,您的错误来自于试图最后完成写入。finalize写代码正在看到IOExceptions由于未能编写过限制而发生,因此试图重试写入。天真地,它不知道为什么会发生IOException,只是重试,好像磁盘正在故障或繁忙。您能否告诉我在启动devserver时是否指定了存储位置,或者磁盘是否已满?
事实上,devserver并不是产品。你可以做很多事情,但是在成千上万的对象中处理7GB的"GCS“显然不是其中之一。如果您打算在本地运行这些测试,我建议编写不需要使用那么多数据的测试。您应该在小的、精心选择的情况下进行测试,当您实际推送更多的对象时,您应该相信这个平台能够大规模地执行。您也可以编写完整性测试来运行生产数据。
https://stackoverflow.com/questions/26342264
复制相似问题