azure - CloudBlob.CopyState 在直接帐户到帐户复制完成后为空
问题描述
编辑:扩展代码示例以显示如何destinationBlob
加载。
我们正在使用直接帐户到帐户复制来传输一组 blob。因为在进程启动时属性会被覆盖,所以我们会定期监控目标 blob,然后在复制完成时设置属性。在大多数情况下,此过程运行良好。
但是,对于其中几个 blob,目标 blob ( CloudBlob.CopyState
is 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 文档指出CopyState
将null
在没有复制状态时出现,但没有概述何时是。根据我自己的实验,目标 blob 似乎是立即创建的,并且在复制操作完成后,复制状态似乎会保留在 blob 上一段时间。当问题发生时,从开始复制到检查CopyState
.
可能是什么问题?是否有在目标 blob 上设置属性的替代方法?
解决方案
这个问题最终是由于逻辑错误导致 blob 被“触摸”导致复制状态被删除。围绕复制状态数据生命周期的文档肯定会更好,尽管希望这种见解可以帮助遇到类似问题的其他人。
推荐阅读
- awk - awk:在原始值旁边打印累积和
- php - 致命错误:未捕获的错误:在 plugins/custom/index.php:131 中调用 null 上的成员函数 get_cart()
- sql - SQL DENSE_RANK 和 PARTITION BY
- c - 对数组中的整数求和并将结果存储在数组中
- python - 遍历页面上的按钮/图块时出现 StaleElementReferenceException
- python - 用于生成 selenium 代码问题的 JSON 文件
- php - 使用 woo 优惠券获取某个属性无效(完成一些代码)
- python - 如何继续搜索大写字母的循环,直到用户输入正确的输入格式?
- r - 是否有 R 功能在主面板内有过滤器
- java - 当使用 throws 关键字调用 void 时,所有抛出的错误都适用于我调用 void 的位置