Azure Java SDK - 如何知道容器何时被真正删除

时间:2017-10-28 14:20:11

标签: java azure sdk containers

我需要从容器中删除所有blob。我认为这样做的简单方法是删除并重新创建容器。没那么多......

这是等待的代码:

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

1 个答案:

答案 0 :(得分:0)

要回答您的问题,您无法进行API调用,这将告诉您实际删除了容器,因为删除过程是异步过程。

来自文档link

  

删除容器时,不能使用同名的容器   创造至少30秒;容器可能无法使用   如果服务仍在处理,则超过30秒   请求。在删除容器时,尝试创建一个   同名的容器将失败,状态码为409(Conflict),   与服务返回附加的错误信息指示   正在删除容器。所有其他操作,包括   容器下任何blob上的操作都将失败并显示状态   正在删除容器时代码404(未找到)。

您需要做的是继续重试创建blob容器。如果操作失败,状态代码为409,错误代码为ContainerBeingDeleted,则表示容器仍在删除。您可以在等待一段时间后重试该操作。

我仍然建议删除容器方法而不是删除容器中的每个blob,因为删除容器是单个操作,而要删除所有blob,你必须进行与该容器中的blob一样多的操作。