【发布时间】:2014-10-13 14:21:38
【问题描述】:
在 GAE 的生产环境中将文件写入谷歌云存储运行良好。 但是当我尝试将我的生产数据(6-7GB)导入开发服务器时,当我尝试写入超过 1200 个文件时,我总是遇到错误。前 1200 个文件工作正常,但后来我总是遇到异常。这种情况下我需要删除一些文件,然后才能成功将其他文件写入GCS。
我的测试环境是:
- appengine-gcs-client 0.4.2.
- appengine-java-sdk-1.9.13
- Win 7 Prof (x64)、NTFS、Eclipse Kepler
这是我使用的代码:
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 尝试写入 blob 时出现 IOException 15:43:40 INFO com.google.appengine.tools.cloudstorage.RetryHelper:doRetry:RetryHelper(11,88 毫秒,1 次尝试, com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1@6abbeea): 尝试 #1 失败 [java.io.IOException],休眠 281 毫秒
...
com.google.appengine.tools.cloudstorage.RetriesExhaustedException: RetryHelper(8,866 秒,6 次尝试, com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1@6abbeea): 失败太多,放弃 com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:127) 在 com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166) 在 com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156) 在 com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl.close(GcsOutputChannelImpl.java:198) 在 de.daysout.generic.filesystem.gcs.GoogleCloudStorage.write(GoogleCloudStorage.java:45)
...
原因:com.google.appengine.api.files.FinalizationException 在 com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617) 在 com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:594) 在 com.google.appengine.api.files.FileServiceImpl.open(FileServiceImpl.java:527) 在 com.google.appengine.api.files.FileServiceImpl.openForAppend(FileServiceImpl.java:471) 在 com.google.appengine.api.files.FileServiceImpl.openForAppend(FileServiceImpl.java:190) 在 com.google.appengine.api.files.FileServiceImpl.openWriteChannel(FileServiceImpl.java:171) 在 com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.append(LocalRawGcsService.java:181) 在 com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.finishObjectCreation(LocalRawGcsService.java:245) 在 com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1.call(GcsOutputChannelImpl.java:201) 在 com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl$1.call(GcsOutputChannelImpl.java:198) 在 com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:108)
... 72 更多原因:
com.google.apphosting.api.ApiProxy$ApplicationException: 应用程序错误:101: /gs/writable:oOUcuZuodalavuikpIHUFA?name=cms-gi-pdf%2Fzip-dwdwos--Nwrg1aTk7DSRn9gAWnT 已经在 com.google.appengine.api.files.dev.LocalFileService.throwError(LocalFileService.java:201) 在 com.google.appengine.api.files.dev.LocalFileService.open(LocalFileService.java:299) ...
这是可重现的。直到昨天我还在使用 appengine-gcs-client 0.2。但我对那个版本有同样的问题。这很烦人,因为我无法使用生产数据测试我的软件。
这是我的问题:
- 这是一个错误还是开发服务器有任何限制?
- 有没有人在开发服务器中使用过 appengine-gcs-client 的文件超过 1200 个?
【问题讨论】:
标签: java google-app-engine development-environment google-cloud-storage