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

时间:2013-05-23 02:45:13

标签: c# .net azure azure-storage azure-storage-blobs

我有一种情况,我将大量的blob从一个存储容器复制到另一个存储容器,并且一些blob已经复制,但是在我启动副本两天后,很多blob仍在等待。我根据以下事实做出这个决定:如果我尝试对目标blob做任何事情,我会收到以下错误:

  

Microsoft.WindowsAzure.StorageClient.StorageClientException:有   目前是待定的复制操作。 ----> System.Net.WebException:   远程服务器返回错误:(409)冲突。

我能做些什么吗?例如,我可以在事后中止副本吗?

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

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;
    }
}

1 个答案:

答案 0 :(得分:8)

正如您已经知道Copy Blob operation is now asynchronous。因此,当您对Blob调用StartCopyFromBlob操作时,Blob Storage Service会将复制操作放入队列中。由于它是异步操作,因此您不知道何时处理它。据我所知,最长时间是2周 7天,即复制操作最多可能需要2周 7天,如果没有完成2周 7天,它将被服务取消。

现在回答你的问题:

  

我能做些什么吗?

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

  

例如,我可以在事后中止副本吗?

是的,你可以。当您调用StartCopyFromBlob时,会返回一个标识复制操作的字符串(称为复制ID)。您可以使用此副本ID并在该Blob上调用AbortCopy操作。您也可以通过使用FetchAttributes方法获取blob属性来获取此副本ID。您要检查的属性是CopyState