2017-10-28 195 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

相关问题