2

Google App Engine から Google Cloud にファイルを書き込もうとしています。バックエンドを使用して、大量のファイルを Google Cloud Storage に書き込むリクエストを処理しています。しかし、約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 サービス アカウントへのフル コントロール アクセスを許可していると確信しています。

どうもありがとう!

4

1 に答える 1

0

ファイル API はまだ実験段階です。まだ実験段階であるため、サービスに関する一般的な問題が発生しているだけだと思います。

このサービスの信頼性を向上させるために非常に活発な作業が行われていることを私は知っています。そのため、現時点では、このような一時的なエラーが発生した場合は、おそらく防御的にコーディングし、再試行を実装する必要があります。

于 2012-05-24T17:50:56.893 に答える