2012-05-20 87 views
2

我正在嘗試將Google App Engine中的文件寫入Google Cloud,並使用後端處理將一堆文件寫入Google雲存儲的請求。但似乎我在大約5分鐘內得到了IOException(我嘗試了不同的文件大小,爲每個文件睡了30秒等等,只有時間似乎是一致的)。將文件寫入Google Cloud Storage時發生IO異常

然後,我測試了以下代碼:

  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) 

在谷歌雲存儲桶,11個文件被寫入和良好(各有160字節),並且該請求在創建第十二個文件時失敗。對於我的真實應用程序,它將在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) 

btw。我確信我可以完全控制GAE應用程序的Google服務帳戶,以寫入相應的存儲分區。

非常感謝!

+0

什麼10MB大小限制? Google Storage或Blobstore中的文件沒有大小限制。 –

+0

@StuartLangley:每個請求的限制都在此處指定(http://code.google.com/p/google-file-service/)。我基本上想要將谷歌應用程序引擎中的數據傳輸到谷歌雲存儲,但是在寫入大約40MB數據(以多個塊)之後,我不斷收到IO異常。我更新了一些錯誤stacktrace的問題。謝謝你的幫助! –

+0

沒有10MB的限制 - 每個通話限制爲32MB。您是否已將應用程序服務帳戶添加到Google Storage存儲分區,以便應用程序可以寫入存儲分區? –

回答

0

文件API仍然是實驗性的 - 我認爲你現在只是遇到了有關該服務的常見問題,因爲它仍然是實驗性的。

我知道在提高此服務的可靠性方面存在一些非常活躍的工作,所以現在您應該可以進行防禦性編碼並在您看到類似這樣的短暫錯誤時執行重試。

+0

感謝您的回答。實際上這個問題是非常一致的,每次我運行上面的代碼時,都會以相同的方式失敗。希望將來能夠解決這個問題。 –

+0

你的應用程序ID是什麼? –

+0

您是否對此問題有任何解決? –

相關問題