diff --git a/ChangeLog.md b/ChangeLog.md index 2d45ef3d9..d043ce63c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,10 @@ ## Upcoming Release +Blob: + +- GetBlob on Archive tier blobs now fails as expected. + ## 2024.10 Version 3.33.0 General: diff --git a/src/blob/handlers/BlobHandler.ts b/src/blob/handlers/BlobHandler.ts index ef3625cee..9d5f9f4df 100644 --- a/src/blob/handlers/BlobHandler.ts +++ b/src/blob/handlers/BlobHandler.ts @@ -80,6 +80,10 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler { options.modifiedAccessConditions ); + if (blob.properties.accessTier === Models.AccessTier.Archive) { + throw StorageErrorFactory.getBlobArchived(context.contextId!); + } + if (blob.properties.blobType === Models.BlobType.BlockBlob) { return this.downloadBlockBlobOrAppendBlob(options, context, blob); } else if (blob.properties.blobType === Models.BlobType.PageBlob) { diff --git a/tests/blob/apis/blob.test.ts b/tests/blob/apis/blob.test.ts index 6b33cedf4..f7a7847fa 100644 --- a/tests/blob/apis/blob.test.ts +++ b/tests/blob/apis/blob.test.ts @@ -253,6 +253,22 @@ describe("BlobAPIs", () => { assert.fail(); }); + it("download should not work when blob in Archive tier @loki @sql", async () => { + try { + + const result = await blobClient.setAccessTier("Archive"); + assert.equal( + result._response.request.headers.get("x-ms-client-request-id"), + result.clientRequestId + ); + await blobClient.download(0); + } catch (error) { + assert.deepStrictEqual(error.statusCode, 409); + return; + } + assert.fail(); + }); + it("download should not work with conditional header ifUnmodifiedSince @loki @sql", async () => { try { await blobClient.download(0, undefined, { diff --git a/tests/blob/sas.test.ts b/tests/blob/sas.test.ts index 956f10f2d..49a30df88 100644 --- a/tests/blob/sas.test.ts +++ b/tests/blob/sas.test.ts @@ -2110,7 +2110,7 @@ describe("Shared Access Signature (SAS) authentication", () => { const sourceBlob = sourceContainerClient.getBlockBlobClient(blobName); await sourceBlob.upload("hello", 5); - sourceBlob.setAccessTier("Archive"); + await sourceBlob.setAccessTier("Archive"); const targetBlob = targetContainerClient.getBlockBlobClient(blobName); @@ -2122,7 +2122,7 @@ describe("Shared Access Signature (SAS) authentication", () => { } assert.ok(error !== undefined); assert.equal(error.statusCode, 409); - assert.equal(error.details.code, "BlobArchived"); + assert.equal(error.details.code, "CannotVerifyCopySource"); }); it("Sync Copy blob across accounts should work and honor metadata when provided @loki", async () => {