2017-10-28 229 views
0

我需要從容器中移除所有的blob。我認爲簡單的方法是刪除並重新創建容器。與其說...Azure Java SDK - 如何知道容器何時被刪除

這裏是等待代碼:

while (saClient.getContainerReference(myContainerName.exists()) { 
    try { 
     Thread.sleep(20 * 1000); 
    } catch (InterruptedException ie) { 
     Thread.interrupted(); 
     System.out.println("<: interrupted"); 
     return; 
    } 
} 

當我走出這個循環中,我嘗試重新創建容器並得到異常:

com.microsoft.azure.storage.StorageException: The specified container is being deleted. Try operation later. 

我可以重新編碼刪除每個blob,但很好奇這個接口的行爲。我可能會遇到同樣的問題,每個blob都不會被刪除。

我使用這些庫的版本:

com.microsoft.azure:azure-storage:4.2.0 
com.microsoft.azure:azure:1.1.0 

回答

0

要回答你的問題,有沒有API調用,你可以做它會告訴你,容器實際上是刪除,刪除過程是一個異步過程。

從文檔link

當容器被刪除時,具有相同名稱的容器不能用於 至少30秒創建的;如果服務仍處理 請求,容器可能不可用 超過30秒。容器正在被刪除時,嘗試創建同名的容器將失敗,狀態碼爲409(衝突), ,服務返回指示 容器正在被刪除的附加錯誤信息。所有其他操作(包括對容器下任何Blob的 操作)將在容器被刪除時失敗,並顯示 代碼404(Not Found)。

你需要做的是繼續重試創建一個blob容器。如果操作失敗,狀態碼爲409,錯誤碼爲ContainerBeingDeleted,則表示容器仍在刪除。等待一段時間後,您可以重試該操作。

我仍然會推薦刪除容器方法而不是刪除容器中的每個blob,因爲刪除容器是單個操作,而刪除所有blob時,必須執行與該容器中的blob一樣多的操作。

+0

謝謝!我會盡量記住將來檢查REST API文檔。 Java SDK文檔不是特定的。 – ddnamaste

相關問題