首页 > 解决方案 > CloudBlob.CopyState 在直接帐户到帐户复制完成后为空

问题描述

编辑:扩展代码示例以显示如何destinationBlob加载。

我们正在使用直接帐户到帐户复制来传输一组 blob。因为在进程启动时属性会被覆盖,所以我们会定期监控目标 blob,然后在复制完成时设置属性。在大多数情况下,此过程运行良好。

但是,对于其中几个 blob,目标 blob ( CloudBlob.CopyStateis null) 上没有复制状态。这些 blob 事先不存在,它们是由于调用而创建的CloudBlob.StartCopyAsync()

这里有一些简化的代码来概述它是如何工作的。

// Start copy operation
var operationId = await destinationBlob.StartCopyAsync(new Uri(sourceBlobUrlWithSas));

...

// In a separate process, check the status after a delay, then repeat on an interval
var destinationBlob = await _destinationContainer.GetBlobReferenceFromServerAsync(blobName);

if (destinationBlob.CopyState.Status == CopyStatus.Success) // <-- CopyState is null
{
    // Set properties
}

Microsoft 文档指出CopyStatenull在没有复制状态时出现,但没有概述何时是。根据我自己的实验,目标​​ blob 似乎是立即创建的,并且在复制操作完成后,复制状态似乎会保留在 blob 上一段时间。当问题发生时,从开始复制到检查CopyState.

可能是什么问题?是否有在目标 blob 上设置属性的替代方法?

标签: azureazure-storageazure-blob-storage

解决方案


这个问题最终是由于逻辑错误导致 blob 被“触摸”导致复制状态被删除。围绕复制状态数据生命周期的文档肯定会更好,尽管希望这种见解可以帮助遇到类似问题的其他人。


推荐阅读