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;
}
}
正如您已经知道的,Copy Blob操作现在是异步的。因此,当您在blob上调用StartCopyFromBlob
操作时,blob存储服务将复制操作放入队列中。因为这是一个异步操作,所以你不知道它什么时候会被处理。据我所知,最长时间为2周
现在来回答你的问题:
我能做点什么吗?
我不这么认为。您不能更改队列优先级。
例如,我可以在事后中止复制吗?
是的,你可以。当您调用StartCopyFromBlob
时,您将返回一个标识复制操作的字符串(称为复制id)。您可以使用这个副本id并对该blob调用AbortCopy
操作。您还可以在使用FetchAttributes
方法获取blob属性之后获得此副本id。您想要检查的属性是CopyState
。