Azure SDK 2.0中的StartCopyFromBlob需要几天时间

本文关键字:时间 几天 SDK 中的 StartCopyFromBlob Azure | 更新日期: 2023-09-27 18:14:51

我有一种情况,我正在从一个存储容器复制大量blobs到另一个存储容器,其中一些blobs已经复制,但自我开始复制以来的两天后,其中许多blobs仍然悬而未决。我是基于这样一个事实做出这个决定的:如果我试图对目标blob做任何事情,我就会得到以下错误:

Microsoft.WindowsAzure.StorageClient。StorageClientException: There is当前是一个挂起的复制操作。----> system.net.webeexception:远程服务器返回错误:(409)Conflict.

我能做点什么吗?例如,我可以在事后中止复制吗?

这是我用来执行复制的复制代码。

try
{
    destinationBlob.StartCopyFromBlob(
       new Uri(sourceBlob.Uri.AbsoluteUri + signature));
    System.Diagnostics.Trace.TraceInformation(
       "Copying: {0}", destinationEndpoint.EndpointState.BlobName);
}
catch (Exception ex)
{
    var we = ex.InnerException as WebException;
    if (we != null && we.Status == WebExceptionStatus.ProtocolError)
    {
    System.Diagnostics.Trace.TraceError(
           "conflict with blob copy for blob {0}", sourceBlob.Uri.AbsoluteUri);
        return 0;
    }
}

Azure SDK 2.0中的StartCopyFromBlob需要几天时间

正如您已经知道的,Copy Blob操作现在是异步的。因此,当您在blob上调用StartCopyFromBlob操作时,blob存储服务将复制操作放入队列中。因为这是一个异步操作,所以你不知道它什么时候会被处理。据我所知,最长时间为2周

7天,即复制操作最多需要2周7天,如果在2周7天内未完成,将被服务取消。

现在来回答你的问题:

我能做点什么吗?

我不这么认为。您不能更改队列优先级。

例如,我可以在事后中止复制吗?

是的,你可以。当您调用StartCopyFromBlob时,您将返回一个标识复制操作的字符串(称为复制id)。您可以使用这个副本id并对该blob调用AbortCopy操作。您还可以在使用FetchAttributes方法获取blob属性之后获得此副本id。您想要检查的属性是CopyState