我有一种情况,我将大量的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;
}
}
答案 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
。