1

我一直在使用AWS android sdk(s)來處理我的android應用程序中S3上的文件。用戶遇到了一些問題,其中很少涉及連接超時。雖然在我的應用程序中設置的AmazonS3客戶端,我已經設置了超時,並使用下面的代碼的重試次數:AWS Android SDK連接超時和重試

ClientConfiguration clientConfiguration = new ClientConfiguration(); 
clientConfiguration.setMaxErrorRetry(4); 
clientConfiguration.setConnectionTimeout(10000); // default is 10 secs 
clientConfiguration.setSocketTimeout(15000); // default is 50 secs 

我到處看,它說,maxErrorRetry只做重試failed retryable requests。與連接超時和套接字連接超時相關的錯誤是否也屬於此類別?如果不是,這種情況的解決方案是什麼?我一直在尋找這個相當長的一段時間,但沒有得到任何明確的答案。

另外,我一直面臨兩個特殊的例外,我在TransferListener回調中遇到了這個例外。主要有:

  1. 無法對象的內容存儲到磁盤:讀取超時(所有誰面對任何AWS例外面對此異常的用戶的14%)
  2. 無法存儲對象的內容到硬盤:超時(17.4所有面臨任何AWS例外的用戶的百分比都面臨此例外)

上述兩個對我們來說是最痛苦的。我一直認爲這是因爲用戶設備上沒有更多的存儲空間。我一直在使用外部存儲器中的特定於應用程序的目錄來存儲這些文件,現在正在考慮將這些文件移動到緩存中,以便系統在設備上沒有剩餘空間的情況下處理清除文件。您認爲這是一個很好的解決方案,假設用戶設備上的空間不足。 有什麼其他的可能性,因爲上述存儲相關的異常可能發生?

回答

1

此錯誤發生在SDK中的三個地方,其中兩個地方是重要的並且適用於此處。

(1)https://github.com/aws/aws-sdk-android/blob/0958a37b4757c41cac40597b973ff417e0b758c4/aws-android-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/ServiceUtils.java#L284

(2)https://github.com/aws/aws-sdk-android/blob/3983fda8c2d8703399ac4e9bf6ec0464d000a5af/aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/DownloadTask.java#L161

我懷疑這是在(2)拋出異常,你的情況。這可能由於多種原因而發生,存儲空間不足僅僅是其中之一。

(1)S3對象不存在或S3存儲桶/對象沒有所需的權限。如果您擁有訪問內容所需的權限,請查看AWS S3控制檯。 (2)在下載過程中可能會出現網絡中斷。檢查整個傳輸過程中是否有適當的網絡

檢查AWS CloudWatch日誌以查看日誌中是否有任何故障。

+0

謝謝你的回覆。 S3存儲桶對象具有所需的權限。該應用程序正在投入生產,並且這些都是發生在小部分用戶中的例外情況。其他方面,我一定會考慮。 – Swapnil

+0

如果問題仍然存在,您可以使用堆棧跟蹤創建論壇帖子/ GitHub問題以及有關重現問題的更多詳細信息? – Karthikeyan