【问题标题】:Azure blob Storage: Copy blobs with access tier ARCHIVE within the same Azure storage account is not workingAzure blob 存储:在同一 Azure 存储帐户中使用访问层 ARCHIVE 复制 blob 不起作用
【发布时间】:2020-12-30 11:07:37
【问题描述】:

我正在使用 azure-storage java sdk 8.6.5 版中的 startCopy API 在同一存储帐户内的容器之间复制 blob。根据文档,它将块 blob 的内容、属性和元数据复制到新的块 blob。这是否也意味着源和目标访问层将匹配?

String copyJobId = cloudBlockBlob.startCopy(sourceBlob);

如果源 blob 访问层是 ARCHIVE,我会收到以下异常 -

com.microsoft.azure.storage.StorageException: This operation is not permitted on an archived blob.
    at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:87) ~[azure-storage-8.6.5.jar:?]
    at com.microsoft.azure.storage.core.StorageRequest.materializeException(StorageRequest.java:305) ~[azure-storage-8.6.5.jar:?]
    at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:196) ~[azure-storage-8.6.5.jar:?]
    at com.microsoft.azure.storage.blob.CloudBlob.startCopy(CloudBlob.java:791) ~[azure-storage-8.6.5.jar:?]
    at com.microsoft.azure.storage.blob.CloudBlockBlob.startCopy(CloudBlockBlob.java:302) ~[azure-storage-8.6.5.jar:?]
    at com.microsoft.azure.storage.blob.CloudBlockBlob.startCopy(CloudBlockBlob.java:180) ~[azure-storage-8.6.5.jar:?]

如下所示,我使用 startCopy API 将 container02(src) 中的所有 blob 复制到 container03(destination)。访问层 ARCHIVE 的 Blob 失败,并且 test1.txt blob 的访问层与源中的不同。

我只是想确认这是否是预期的,或者我没有使用正确的 API,如果我需要源和目标看起来相同,则需要明确设置这些属性??

提前致谢!!!

【问题讨论】:

  • 这似乎与这个问题有关:stackoverflow.com/questions/62759750/…。我认为您需要确保为存档项目传递 RehydraPriority 参数。
  • 添加 RehydraPriority 参数有效。谢谢@Bryan

标签: azure-storage azure-blob-storage


【解决方案1】:

1. 访问层 ARCHIVE 的 Blob 失败

当访问层为ARCHIVE时,不能执行startCopy操作。

请参考这个official documentation

当 Blob 位于存档存储中时,该 Blob 数据处于脱机状态,无法读取、覆盖或修改。要读取或下载存档中的 blob,您必须首先将其重新水化到在线层。您不能在存档存储中拍摄 Blob 的快照。但是,blob 元数据保持在线且可用,允许您列出 blob、其属性、元数据和 blob 索引标记。不允许在存档时设置或修改 blob 元数据;但是您可以设置和修改 blob 索引标签。对于存档中的 blob,唯一有效的操作是 GetBlobProperties、GetBlobMetadata、SetBlobTags、GetBlobTags、FindBlobsByTags、ListBlobs、SetBlobTier、CopyBlob 和 DeleteBlob。

2. test1.txt blob 的访问层与源中的不同。

复制的 blob 的访问层可能与默认访问层有关。

解决方案:

您可能需要将文件从存档存储移动到热访问层或冷访问层。或者你可以使用这个API并指定standardBlobTierrehydratePriority

public final String startCopy(final CloudBlockBlob sourceBlob, String contentMd5, boolean syncCopy, final StandardBlobTier standardBlobTier, RehydratePriority rehydratePriority, final AccessCondition sourceAccessCondition, final AccessCondition destinationAccessCondition, BlobRequestOptions options, OperationContext opContext)

【讨论】:

  • 非常感谢@Frank 的详细解答。
猜你喜欢
  • 1970-01-01
  • 2021-11-20
  • 2019-01-15
  • 2013-01-28
  • 2021-06-27
  • 2017-01-03
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多