将文件写入Google云端存储时出现IO异常

时间:2012-05-20 09:57:28

标签: google-app-engine google-cloud-storage

我正在尝试将文件从Google App Engine写入Google Cloud,我使用后端处理将一堆文件写入Google云存储的请求。但似乎我在大约5分钟内得到IOException(我尝试了不同的文件大小,为每个文件等待30秒的线程,并且只有时间似乎是一致的)。

然后我测试了以下代码:

         String testString = "1,1,1,1,1,1,1,1"; 
         for (int i = 0; i < 200; i++) {
            log.info("Dumping file " + i);
            String fileName = "test/test" + i + ".csv";
            FileService fs = FileServiceFactory.getFileService();
            GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
                .setBucket(BUCKET_NAME)
                .setKey(fileName)
                .setAcl("public_read");
            AppEngineFile writableFile = fs.createNewGSFile(optionsBuilder.build());
            FileWriteChannel writeChannel = fs.openWriteChannel(writableFile, true);
            PrintWriter out = new PrintWriter(Channels.newWriter(writeChannel, "UTF8"));
            for (int j = 0; j < 10; j++) { 
                out.println(testString);
            }
            out.close();
            writeChannel.closeFinally();
            Thread.sleep(30000);
        }

我得到IOException如下:

java.io.IOException
    at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617)
    at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:590)
    at com.google.appengine.api.files.FileServiceImpl.create(FileServiceImpl.java:498)
    at com.google.appengine.api.files.FileServiceImpl.createNewGSFile(FileServiceImpl.java:153)

在Google云端存储存储桶中,写入了11个文件且文件很好(每个文件有160个字节),并且在创建第12个文件时请求失败。对于我的实际应用程序,它将在writeChannel.closeFinally()上失败。

java.io.IOException
    at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617)
    at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:590)
    at com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:551)
    at com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:441)
    at com.google.appengine.api.files.FileWriteChannelImpl.closeFinally(FileWriteChannelImpl.java:81)

顺便说一句。我确信我可以完全控制访问我的GAE应用程序的Google服务帐户,以便写入相应的存储桶。

非常感谢!

1 个答案:

答案 0 :(得分:0)

文件API仍然是实验性的 - 我认为你现在只是遇到了服务的一般问题,因为它仍然是实验性的。

我知道在提高此服务的可靠性方面正在进行一些非常积极的工作,所以现在您应该进行防御性编码并在发现此类短暂错误时实施重试。