From 0e00a3a52c0153574310d01b6eca82282e507a7c Mon Sep 17 00:00:00 2001 From: microzchang <110015819+microzchang@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:54:24 +0800 Subject: [PATCH] Compatibility improvement for striped blob (#3932) --- .../azure-storage-blobs/src/rest_client.cpp | 21 +++++++++++++------ .../azure-storage-blobs/swagger/README.md | 20 ++++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/sdk/storage/azure-storage-blobs/src/rest_client.cpp b/sdk/storage/azure-storage-blobs/src/rest_client.cpp index 1678ac9b7..22277f039 100644 --- a/sdk/storage/azure-storage-blobs/src/rest_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/rest_client.cpp @@ -6023,8 +6023,11 @@ namespace Azure { namespace Storage { namespace Blobs { = Core::Convert::Base64Decode(pRawResponse->GetHeaders().at("x-ms-content-crc64")); response.TransactionalContentHash.Value().Algorithm = HashAlgorithm::Crc64; } - response.SequenceNumber - = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + if (pRawResponse->GetHeaders().count("x-ms-blob-sequence-number") != 0) + { + response.SequenceNumber + = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + } response.IsServerEncrypted = pRawResponse->GetHeaders().at("x-ms-request-server-encrypted") == std::string("true"); if (pRawResponse->GetHeaders().count("x-ms-encryption-key-sha256") != 0) @@ -6132,8 +6135,11 @@ namespace Azure { namespace Storage { namespace Blobs { response.LastModified = DateTime::Parse( pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); } - response.SequenceNumber - = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + if (pRawResponse->GetHeaders().count("x-ms-blob-sequence-number") != 0) + { + response.SequenceNumber + = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + } return Response(std::move(response), std::move(pRawResponse)); } Response PageBlobClient::UploadPagesFromUri( @@ -6292,8 +6298,11 @@ namespace Azure { namespace Storage { namespace Blobs { = Core::Convert::Base64Decode(pRawResponse->GetHeaders().at("x-ms-content-crc64")); response.TransactionalContentHash.Value().Algorithm = HashAlgorithm::Crc64; } - response.SequenceNumber - = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + if (pRawResponse->GetHeaders().count("x-ms-blob-sequence-number") != 0) + { + response.SequenceNumber + = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); + } response.IsServerEncrypted = pRawResponse->GetHeaders().at("x-ms-request-server-encrypted") == std::string("true"); if (pRawResponse->GetHeaders().count("x-ms-encryption-key-sha256") != 0) diff --git a/sdk/storage/azure-storage-blobs/swagger/README.md b/sdk/storage/azure-storage-blobs/swagger/README.md index 2b34011ca..66b8270fd 100644 --- a/sdk/storage/azure-storage-blobs/swagger/README.md +++ b/sdk/storage/azure-storage-blobs/swagger/README.md @@ -515,6 +515,26 @@ directive: }); } } + - from: swagger-document + where: $ + transform: > + const operations = [ + "PageBlob_UploadPages", + "PageBlob_ClearPages", + "PageBlob_UploadPagesFromUri", + ]; + for (const url in $["x-ms-paths"]) { + for (const verb in $["x-ms-paths"][url]) { + if (!operations.includes($["x-ms-paths"][url][verb].operationId)) continue; + const operation = $["x-ms-paths"][url][verb]; + + const status_codes = Object.keys(operation.responses).filter(s => s !== "default"); + status_codes.forEach((status_code, i) => { + operation.responses[status_code].headers["x-ms-blob-sequence-number"]["x-ms-client-default"] = "int64_t()"; + operation.responses[status_code].headers["x-ms-blob-sequence-number"]["x-nullable"] = true; + }); + } + } ``` ### GetBlobServiceProperties