2012-05-20 10 views
2

Google App Engine에서 Google Cloud로 파일을 쓰려고하는데 백엔드를 사용하여 수많은 파일을 Google 클라우드 저장소에 쓰는 요청을 처리합니다. 하지만 그것은 약 5 분 (나는 다른 파일 크기를 시도 각 파일 등 30s 스레드를 잠을 시도하고 단지 시간이 일관된 것 같다)에 IOException을 얻을 것으로 보인다. IO Google 클라우드 저장소에 파일을 쓸 때 예외가 발생합니다.

그런 다음 다음 코드 테스트 :

  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가 좋다 바이트), 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) 

btw. 해당 버켓에 글을 쓰려면 내 GAE 애플리케이션의 Google 서비스 계정에 대한 모든 권한을 부여해야합니다.

대단히 감사합니다.

+0

크기 제한은 10MB는 무엇입니까? Google Storage 또는 Blobstore에있는 파일의 크기 제한은 없습니다. –

+0

@StuartLangley : 요청 당 한도는 [여기] (http://code.google.com/p/google-file-service/)로 지정됩니다. 나는 기본적으로 구글 클라우드 스토리지 Google 애플 리케이션 엔진에서 데이터를 전송하고 싶지만, 40MB의 데이터 (여러 덩어리로) 작성 후 IO 예외를 계속. 일부 오류 스택 추적으로 질문을 업데이트했습니다. 당신의 도움을 주셔서 감사합니다! –

+0

10MB 제한이 없습니다 - 한 통화 당 32MB 제한이 있습니다. 앱이 양동이에 쓸 수 있도록 Google Storage 버킷에 애플리케이션 서비스 계정을 추가 했습니까? –

답변

0

파일 API는 아직 실험 중입니다. 아직 실험적이기 때문에 서비스에 대한 일반적인 문제가 발생하고 있다고 생각합니다.

이 서비스의 안정성을 향상시키는 데 매우 활발한 작업이 일어나고 있으므로 현재로서는 일시적으로 오류가 발생했을 때 방어 적으로 코드를 작성하고 재시도를 구현해야합니다.

+0

답변 해 주셔서 감사합니다. 실제로이 문제는 상당히 일관되며 위의 코드를 실행할 때마다 동일한 방식으로 실패합니다. 희망이 문제는 미래에 해결할 수 있습니다. –

+0

앱 ID는 무엇입니까? –

+0

이 호에 대해 어떤 결론을 얻었습니까? –

관련 문제