Storage January release (#4212)

* January release protocol layer (#4102)

* stg85/86 protocol layer

* datalake append/flush with lease (#4110)

* unit_test_for_file_invalid_xml (#4113)

* remove version id inTaggedBlobItem and add unit test for cold tier (#4121)

* fix conversation
This commit is contained in:
microzchang 2022-12-27 14:44:26 +08:00 committed by GitHub
parent fa6ebb26b7
commit f872841ffc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 815 additions and 220 deletions

View File

@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "cpp",
"TagPrefix": "cpp/storage",
"Tag": "cpp/storage_1d5e4a5574"
"Tag": "cpp/storage_90ac51538b"
}

View File

@ -31,7 +31,7 @@ namespace Azure { namespace Storage { namespace Blobs {
/**
* The version used for the operations to Azure storage services.
*/
constexpr static const char* ApiVersion = "2021-04-10";
constexpr static const char* ApiVersion = "2021-12-02";
} // namespace _detail
namespace Models {
/**
@ -977,6 +977,7 @@ namespace Azure { namespace Storage { namespace Blobs {
AZ_STORAGE_BLOBS_DLLEXPORT const static AccessTier Cool;
AZ_STORAGE_BLOBS_DLLEXPORT const static AccessTier Archive;
AZ_STORAGE_BLOBS_DLLEXPORT const static AccessTier Premium;
AZ_STORAGE_BLOBS_DLLEXPORT const static AccessTier Cold;
private:
std::string m_value;

View File

@ -134,24 +134,25 @@ namespace Azure { namespace Storage { namespace Blobs {
const CopyStatus CopyStatus::Success("success");
const CopyStatus CopyStatus::Aborted("aborted");
const CopyStatus CopyStatus::Failed("failed");
const AccessTier AccessTier::P1("P1");
const AccessTier AccessTier::P2("P2");
const AccessTier AccessTier::P3("P3");
const AccessTier AccessTier::P4("P4");
const AccessTier AccessTier::P6("P6");
const AccessTier AccessTier::P10("P10");
const AccessTier AccessTier::P15("P15");
const AccessTier AccessTier::P20("P20");
const AccessTier AccessTier::P30("P30");
const AccessTier AccessTier::P40("P40");
const AccessTier AccessTier::P50("P50");
const AccessTier AccessTier::P60("P60");
const AccessTier AccessTier::P70("P70");
const AccessTier AccessTier::P80("P80");
const AccessTier AccessTier::P1("p1");
const AccessTier AccessTier::P2("p2");
const AccessTier AccessTier::P3("p3");
const AccessTier AccessTier::P4("p4");
const AccessTier AccessTier::P6("p6");
const AccessTier AccessTier::P10("p10");
const AccessTier AccessTier::P15("p15");
const AccessTier AccessTier::P20("p20");
const AccessTier AccessTier::P30("p30");
const AccessTier AccessTier::P40("p40");
const AccessTier AccessTier::P50("p50");
const AccessTier AccessTier::P60("p60");
const AccessTier AccessTier::P70("p70");
const AccessTier AccessTier::P80("p80");
const AccessTier AccessTier::Hot("Hot");
const AccessTier AccessTier::Cool("Cool");
const AccessTier AccessTier::Archive("Archive");
const AccessTier AccessTier::Premium("Premium");
const AccessTier AccessTier::Cold("Cold");
const ArchiveStatus ArchiveStatus::RehydratePendingToHot("rehydrate-pending-to-hot");
const ArchiveStatus ArchiveStatus::RehydratePendingToCool("rehydrate-pending-to-cool");
const RehydratePriority RehydratePriority::High("High");
@ -376,7 +377,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -396,7 +397,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -692,7 +693,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "stats");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -792,7 +793,7 @@ namespace Azure { namespace Storage { namespace Blobs {
_internal::UrlEncodeQueryParameter(
ListBlobContainersIncludeFlagsToString(options.Include.Value())));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1077,7 +1078,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "userdelegationkey");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1192,7 +1193,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "account");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -1222,7 +1223,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("Content-Type", options.MultipartContentType);
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -1243,7 +1244,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("comp", "blobs");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Where.HasValue() && !options.Where.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1399,7 +1400,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-blob-public-access", options.Access.ToString());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.DefaultEncryptionScope.HasValue()
&& !options.DefaultEncryptionScope.Value().empty())
{
@ -1436,7 +1437,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1514,7 +1515,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -1548,7 +1549,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Modified-Since",
options.IfModifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1575,7 +1576,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1744,7 +1745,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1767,7 +1768,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("restype", "container");
request.GetUrl().AppendQueryParameter("comp", "undelete");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.DeletedContainerName.HasValue() && !options.DeletedContainerName.Value().empty())
{
request.SetHeader("x-ms-deleted-container-name", options.DeletedContainerName.Value());
@ -1797,7 +1798,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("restype", "container");
request.GetUrl().AppendQueryParameter("comp", "rename");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (!options.SourceContainerName.empty())
{
request.SetHeader("x-ms-source-container-name", options.SourceContainerName);
@ -1831,7 +1832,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("Content-Type", options.MultipartContentType);
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -1853,7 +1854,7 @@ namespace Azure { namespace Storage { namespace Blobs {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "container");
request.GetUrl().AppendQueryParameter("comp", "blobs");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Where.HasValue() && !options.Where.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -2023,7 +2024,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -2064,7 +2065,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2104,7 +2105,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2145,7 +2146,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -2190,7 +2191,7 @@ namespace Azure { namespace Storage { namespace Blobs {
"If-Unmodified-Since",
options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2237,7 +2238,7 @@ namespace Azure { namespace Storage { namespace Blobs {
_internal::UrlEncodeQueryParameter(
ListBlobsIncludeFlagsToString(options.Include.Value())));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2916,7 +2917,7 @@ namespace Azure { namespace Storage { namespace Blobs {
_internal::UrlEncodeQueryParameter(
ListBlobsIncludeFlagsToString(options.Include.Value())));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.ShowOnly.HasValue() && !options.ShowOnly.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -3671,7 +3672,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (!(httpStatusCode == Core::Http::HttpStatusCode::Ok
@ -3947,7 +3948,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4209,7 +4210,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -4227,7 +4228,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "undelete");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -4246,7 +4247,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "expiry");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (!options.ExpiryOptions.ToString().empty())
{
request.SetHeader("x-ms-expiry-option", options.ExpiryOptions.ToString());
@ -4334,7 +4335,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-blob-content-disposition", options.BlobContentDisposition);
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4367,7 +4368,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "immutabilityPolicies");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.IfUnmodifiedSince.HasValue())
{
request.SetHeader(
@ -4410,7 +4411,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Delete, url);
request.GetUrl().AppendQueryParameter("comp", "immutabilityPolicies");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -4430,7 +4431,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "legalhold");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
request.SetHeader("x-ms-legal-hold", options.LegalHold ? "true" : "false");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -4502,7 +4503,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4577,7 +4578,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -4635,7 +4636,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4692,7 +4693,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4754,7 +4755,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -4812,7 +4813,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -4892,7 +4893,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -4999,7 +5000,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty())
{
request.SetHeader("x-ms-tags", options.BlobTagsString.Value());
@ -5118,7 +5119,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.SourceContentMD5.HasValue()
&& !Core::Convert::Base64Encode(options.SourceContentMD5.Value()).empty())
{
@ -5228,7 +5229,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::NoContent)
@ -5266,7 +5267,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-rehydrate-priority", options.RehydratePriority.Value().ToString());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -5568,7 +5569,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.EncryptionScope.HasValue() && !options.EncryptionScope.Value().empty())
{
request.SetHeader("x-ms-encryption-scope", options.EncryptionScope.Value());
@ -5617,7 +5618,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("comp", "tags");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Snapshot.HasValue() && !options.Snapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -5744,7 +5745,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader("Content-Type", "application/xml; charset=UTF-8");
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("comp", "tags");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.VersionId.HasValue() && !options.VersionId.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -5875,7 +5876,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader(
"x-ms-blob-sequence-number", std::to_string(options.BlobSequenceNumber.Value()));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty())
{
request.SetHeader("x-ms-tags", options.BlobTagsString.Value());
@ -6021,7 +6022,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -6147,7 +6148,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -6290,7 +6291,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.CopySourceAuthorization.HasValue()
&& !options.CopySourceAuthorization.Value().empty())
{
@ -6391,7 +6392,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Marker.HasValue() && !options.Marker.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -6569,7 +6570,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Marker.HasValue() && !options.Marker.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -6749,7 +6750,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-blob-content-length", std::to_string(options.BlobContentLength));
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -6815,7 +6816,7 @@ namespace Azure { namespace Storage { namespace Blobs {
request.SetHeader(
"x-ms-blob-sequence-number", std::to_string(options.BlobSequenceNumber.Value()));
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -6873,7 +6874,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-copy-source", options.CopySource);
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -6984,7 +6985,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty())
{
request.SetHeader("x-ms-tags", options.BlobTagsString.Value());
@ -7112,7 +7113,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -7266,7 +7267,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.CopySourceAuthorization.HasValue()
&& !options.CopySourceAuthorization.Value().empty())
{
@ -7322,7 +7323,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "seal");
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -7461,7 +7462,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty())
{
request.SetHeader("x-ms-tags", options.BlobTagsString.Value());
@ -7644,7 +7645,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-source-if-tags", options.SourceIfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.SourceContentMD5.HasValue()
&& !Core::Convert::Base64Encode(options.SourceContentMD5.Value()).empty())
{
@ -7776,7 +7777,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-encryption-scope", options.EncryptionScope.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -7890,7 +7891,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.CopySourceAuthorization.HasValue()
&& !options.CopySourceAuthorization.Value().empty())
{
@ -8057,7 +8058,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty())
{
request.SetHeader("x-ms-tags", options.BlobTagsString.Value());
@ -8146,7 +8147,7 @@ namespace Azure { namespace Storage { namespace Blobs {
{
request.SetHeader("x-ms-if-tags", options.IfTags.Value());
}
request.SetHeader("x-ms-version", "2021-04-10");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)

View File

@ -9,7 +9,7 @@ package-name: azure-storage-blobs
namespace: Azure::Storage::Blobs
output-folder: generated
clear-output-folder: true
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.BlobStorage/preview/2021-04-10/blob.json
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.BlobStorage/preview/2021-12-02/blob.json
```
## ModelFour Options
@ -102,7 +102,7 @@ directive:
"name": "ApiVersion",
"modelAsString": false
},
"enum": ["2021-04-10"],
"enum": ["2021-12-02"],
"description": "The version used for the operations to Azure storage services."
};
```
@ -290,6 +290,7 @@ directive:
delete $.EncryptionAlgorithm["x-ms-enum"];
$.ImmutabilityPolicyMode.enum = $.ImmutabilityPolicyMode.enum.map(e => e.toLowerCase());
$.CopySourceTags["x-ms-enum"]["name"] = "BlobCopySourceTagsMode";
delete $.FilterBlobsInclude;
- from: swagger-document
where: $.definitions
transform: >
@ -299,7 +300,27 @@ directive:
$.CopyStatus["x-ms-enum"]["name"] = "CopyStatus";
$.PublicAccessType["x-ms-enum"]["values"] = [{"value": "container", "name": "BlobContainer"}, {"value": "blob", "name": "Blob"}, {"value": "", "name": "None"}];
$.PublicAccessType.description = "Specifies whether data in the container may be accessed publicly and the level of access";
$.AccessTier.enum.unshift("P1", "P2", "P3");
$.AccessTier["x-ms-enum"]["values"] = [
{"value": "p1", "name": "P1"},
{"value": "p2", "name": "P2"},
{"value": "p3", "name": "P3"},
{"value": "p4", "name": "P4"},
{"value": "p6", "name": "P6"},
{"value": "p10", "name": "P10"},
{"value": "p15", "name": "P15"},
{"value": "p20", "name": "P20"},
{"value": "p30", "name": "P30"},
{"value": "p40", "name": "P40"},
{"value": "p50", "name": "P50"},
{"value": "p60", "name": "P60"},
{"value": "p70", "name": "P70"},
{"value": "p80", "name": "P80"},
{"value": "Hot", "name": "Hot"},
{"value": "Cool", "name": "Cool"},
{"value": "Archive", "name": "Archive"},
{"value": "Premium", "name": "Premium"},
{"value": "Cold", "name": "Cold"}
];
$.AccessTier.description = "The tier of page blob on a premium storage account or tier of block blob on blob storage or general purpose v2 account.";
$.EncryptionAlgorithm = {
"type": "string",
@ -688,6 +709,14 @@ directive:
```yaml
directive:
- from: swagger-document
where: $["x-ms-paths"]["/?comp=blobs"].get.parameters
transform: >
$ = $.filter(p => !p["$ref"] || !p["$ref"].endsWith("#/parameters/FilterBlobsInclude"));
- from: swagger-document
where: $["x-ms-paths"]["/{containerName}?restype=container&comp=blobs"].get.parameters
transform: >
$ = $.filter(p => !p["$ref"] || !p["$ref"].endsWith("#/parameters/FilterBlobsInclude"));
- from: swagger-document
where: $.definitions
transform: >
@ -695,6 +724,8 @@ directive:
$.FilterBlobItem.properties["Name"]["x-ms-client-name"] = "BlobName";
$.FilterBlobItem.properties["ContainerName"]["x-ms-client-name"] = "BlobContainerName";
delete $.FilterBlobItem.properties["TagValue"];
delete $.FilterBlobItem.properties["VersionId"];
delete $.FilterBlobItem.properties["IsCurrentVersion"];
$.FilterBlobItem.properties["Name"].description = "Blob name.";
$.FilterBlobItem.properties["ContainerName"].description = "Blob container name.";
$.FilterBlobItem.properties["Tags"]["x-ms-xml"] = {"name": "Tags/TagSet"};
@ -1596,10 +1627,6 @@ directive:
```yaml
directive:
- from: swagger-document
where: $["x-ms-paths"]["/{containerName}/{blob}?BlockBlob"].put.parameters
transform: >
$.push({"$ref": "#/parameters/ContentCrc64"});
- from: swagger-document
where: $["x-ms-paths"]["/{containerName}/{blob}?BlockBlob"].put.responses["201"].headers
transform: >

View File

@ -1509,6 +1509,22 @@ namespace Azure { namespace Storage { namespace Test {
blobItem.Details.RehydratePriority.Value(), Blobs::Models::RehydratePriority::Standard);
}
TEST_F(BlockBlobClientTest, DISABLED_SetTierCold)
{
auto const testName(GetTestName());
auto blobClient = GetBlockBlobClient(testName);
std::vector<uint8_t> emptyContent;
std::string blobName(testName);
blobClient.UploadFrom(emptyContent.data(), emptyContent.size());
// set to cold
blobClient.SetAccessTier(Blobs::Models::AccessTier::Cold);
auto properties = blobClient.GetProperties().Value;
EXPECT_EQ(properties.AccessTier.Value(), Blobs::Models::AccessTier::Cold);
}
TEST_F(BlockBlobClientTest, SetTierWithLeaseId)
{
auto const testName(GetTestName());

View File

@ -371,6 +371,28 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* If true, the file will be flushed after the append.
*/
Azure::Nullable<bool> Flush;
/**
* If "acquire" it will acquire the lease.
* If "auto-renew" it will renew the lease.
* If "release" it will release the lease only on flush. Only applicable if Flush is set to
* true.
* If "acquire-release" it will acquire & complete the operation & release the lease once
* operation is done. Only applicable if Flush is set to true.
*/
Azure::Nullable<Models::LeaseAction> LeaseAction;
/**
* Proposed LeaseId.
*/
Azure::Nullable<std::string> LeaseId;
/**
* Specifies the duration of the lease, in seconds, or InfiniteLeaseDuration for a lease that
* never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration cannot
* be changed using renew or change.
*/
Azure::Nullable<std::chrono::seconds> LeaseDuration;
};
/**
@ -418,6 +440,28 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* Specify the access condition for the path.
*/
PathAccessConditions AccessConditions;
/**
* If "acquire" it will acquire the lease.
* If "auto-renew" it will renew the lease.
* If "release" it will release the lease only on flush. Only applicable if Flush is set to
* true.
* If "acquire-release" it will acquire & complete the operation & release the lease once
* operation is done. Only applicable if Flush is set to true.
*/
Azure::Nullable<Models::LeaseAction> LeaseAction;
/**
* Proposed LeaseId.
*/
Azure::Nullable<std::string> LeaseId;
/**
* Specifies the duration of the lease, in seconds, or InfiniteLeaseDuration for a lease that
* never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration cannot
* be changed using renew or change.
*/
Azure::Nullable<std::chrono::seconds> LeaseDuration;
};
/**

View File

@ -276,6 +276,26 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
std::string Acl;
};
} // namespace _detail
/**
* @brief Optional. If "acquire" it will acquire the lease. If "auto-renew" it will renew the
* lease. If "release" it will release the lease only on flush. If "acquire-release" it will
* acquire & complete the operation & release the lease once operation is done.
*/
class LeaseAction final {
public:
LeaseAction() = default;
explicit LeaseAction(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseAction& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseAction& other) const { return !(*this == other); }
const std::string& ToString() const { return m_value; }
AZ_STORAGE_FILES_DATALAKE_DLLEXPORT const static LeaseAction Acquire;
AZ_STORAGE_FILES_DATALAKE_DLLEXPORT const static LeaseAction AutoRenew;
AZ_STORAGE_FILES_DATALAKE_DLLEXPORT const static LeaseAction Release;
AZ_STORAGE_FILES_DATALAKE_DLLEXPORT const static LeaseAction AcquireRelease;
private:
std::string m_value;
};
/**
* @brief Response type for #Azure::Storage::Files::DataLake::FileClient::Flush.
*/
@ -304,6 +324,10 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* returned when the blob was encrypted with a customer-provided key.
*/
Nullable<std::vector<uint8_t>> EncryptionKeySha256;
/**
* If the lease was auto-renewed with this request.
*/
Nullable<bool> IsLeaseRenewed;
};
/**
* @brief Response type for #Azure::Storage::Files::DataLake::FileClient::Append.
@ -325,6 +349,10 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* returned when the blob was encrypted with a customer-provided key.
*/
Nullable<std::vector<uint8_t>> EncryptionKeySha256;
/**
* If the lease was auto-renewed with this request.
*/
Nullable<bool> IsLeaseRenewed;
};
} // namespace Models
namespace _detail {
@ -471,6 +499,9 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Nullable<bool> Close;
Nullable<std::vector<uint8_t>> ContentMD5;
Nullable<std::string> LeaseId;
Nullable<Models::LeaseAction> LeaseAction;
Nullable<int64_t> LeaseDuration;
Nullable<std::string> ProposedLeaseId;
Nullable<std::string> CacheControl;
Nullable<std::string> ContentType;
Nullable<std::string> ContentDisposition;
@ -495,6 +526,9 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Nullable<std::vector<uint8_t>> TransactionalContentHash;
Nullable<std::vector<uint8_t>> TransactionalContentCrc64;
Nullable<std::string> LeaseId;
Nullable<Models::LeaseAction> LeaseAction;
Nullable<int64_t> LeaseDuration;
Nullable<std::string> ProposedLeaseId;
Nullable<std::string> EncryptionKey;
Nullable<std::vector<uint8_t>> EncryptionKeySha256;
Nullable<std::string> EncryptionAlgorithm;

View File

@ -88,6 +88,12 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
protocolLayerOptions.EncryptionKeySha256 = m_customerProvidedKey.Value().KeyHash;
protocolLayerOptions.EncryptionAlgorithm = m_customerProvidedKey.Value().Algorithm.ToString();
}
protocolLayerOptions.LeaseAction = options.LeaseAction;
protocolLayerOptions.ProposedLeaseId = options.LeaseId;
if (options.LeaseDuration.HasValue())
{
protocolLayerOptions.LeaseDuration = static_cast<int64_t>(options.LeaseDuration->count());
}
return _detail::FileClient::Append(
*m_pipeline, m_pathUrl, content, protocolLayerOptions, context);
}
@ -124,6 +130,12 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
protocolLayerOptions.EncryptionKeySha256 = m_customerProvidedKey.Value().KeyHash;
protocolLayerOptions.EncryptionAlgorithm = m_customerProvidedKey.Value().Algorithm.ToString();
}
protocolLayerOptions.LeaseAction = options.LeaseAction;
protocolLayerOptions.ProposedLeaseId = options.LeaseId;
if (options.LeaseDuration.HasValue())
{
protocolLayerOptions.LeaseDuration = static_cast<int64_t>(options.LeaseDuration->count());
}
return _detail::FileClient::Flush(*m_pipeline, m_pathUrl, protocolLayerOptions, context);
}

View File

@ -40,6 +40,10 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
const PublicAccessType PublicAccessType::Path("blob");
const PathResourceType PathResourceType::Directory("directory");
const PathResourceType PathResourceType::File("file");
const LeaseAction LeaseAction::Acquire("acquire");
const LeaseAction LeaseAction::AutoRenew("auto-renew");
const LeaseAction LeaseAction::Release("release");
const LeaseAction LeaseAction::AcquireRelease("acquire-release");
} // namespace Models
namespace _detail {
Response<Models::_detail::PathList> FileSystemClient::ListPaths(
@ -624,6 +628,18 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
if (options.LeaseAction.HasValue() && !options.LeaseAction.Value().ToString().empty())
{
request.SetHeader("x-ms-lease-action", options.LeaseAction.Value().ToString());
}
if (options.LeaseDuration.HasValue())
{
request.SetHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration.Value()));
}
if (options.ProposedLeaseId.HasValue() && !options.ProposedLeaseId.Value().empty())
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
if (options.CacheControl.HasValue() && !options.CacheControl.Value().empty())
{
request.SetHeader("x-ms-cache-control", options.CacheControl.Value());
@ -698,6 +714,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
response.EncryptionKeySha256 = Core::Convert::Base64Decode(
pRawResponse->GetHeaders().at("x-ms-encryption-key-sha256"));
}
if (pRawResponse->GetHeaders().count("x-ms-lease-renewed") != 0)
{
response.IsLeaseRenewed
= pRawResponse->GetHeaders().at("x-ms-lease-renewed") == std::string("true");
}
return Response<Models::FlushFileResult>(std::move(response), std::move(pRawResponse));
}
Response<Models::AppendFileResult> FileClient::Append(
@ -731,6 +752,18 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
if (options.LeaseAction.HasValue() && !options.LeaseAction.Value().ToString().empty())
{
request.SetHeader("x-ms-lease-action", options.LeaseAction.Value().ToString());
}
if (options.LeaseDuration.HasValue())
{
request.SetHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration.Value()));
}
if (options.ProposedLeaseId.HasValue() && !options.ProposedLeaseId.Value().empty())
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
if (options.EncryptionKey.HasValue() && !options.EncryptionKey.Value().empty())
{
@ -779,6 +812,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
response.EncryptionKeySha256 = Core::Convert::Base64Decode(
pRawResponse->GetHeaders().at("x-ms-encryption-key-sha256"));
}
if (pRawResponse->GetHeaders().count("x-ms-lease-renewed") != 0)
{
response.IsLeaseRenewed
= pRawResponse->GetHeaders().at("x-ms-lease-renewed") == std::string("true");
}
return Response<Models::AppendFileResult>(std::move(response), std::move(pRawResponse));
}
} // namespace _detail

View File

@ -438,6 +438,8 @@ directive:
$["x-ms-content-crc64"]["x-ms-client-name"] = "TransactionalContentHash";
$["x-ms-content-crc64"]["x-nullable"] = true;
$["x-ms-encryption-key-sha256"]["x-nullable"] = true;
$["x-ms-lease-renewed"]["x-nullable"] = true;
$["x-ms-lease-renewed"]["x-ms-client-name"] = "IsLeaseRenewed";
delete $["ETag"];
```
@ -450,4 +452,6 @@ directive:
transform: >
$["Content-Length"]["x-ms-client-name"] = "FileSize";
$["x-ms-encryption-key-sha256"]["x-nullable"] = true;
$["x-ms-lease-renewed"]["x-nullable"] = true;
$["x-ms-lease-renewed"]["x-ms-client-name"] = "IsLeaseRenewed";
```

View File

@ -279,6 +279,196 @@ namespace Azure { namespace Storage { namespace Test {
}
}
TEST_F(DataLakeFileClientTest, AppendFileWithLease)
{
const int32_t bufferSize = 4 * 1024; // 4KB data size
std::vector<uint8_t> buffer(bufferSize, 'x');
auto bufferStream = std::make_unique<Azure::Core::IO::MemoryBodyStream>(
Azure::Core::IO::MemoryBodyStream(buffer));
// Append Lease Acquire
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_acquire");
client.Create();
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::Acquire;
options.LeaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
options.LeaseDuration = std::chrono::seconds(20);
bufferStream->Rewind();
client.Append(*bufferStream, 0, options);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseStatus::Locked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseState::Leased, properties.Value.LeaseState.Value());
EXPECT_TRUE(properties.Value.LeaseDuration.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseDurationType::Fixed,
properties.Value.LeaseDuration.Value());
}
// Append Lease AutoRenew
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_auto_renew");
client.Create();
const std::string leaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
Files::DataLake::DataLakeLeaseClient leaseClient(client, leaseId);
leaseClient.Acquire(std::chrono::seconds(20));
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::AutoRenew;
options.AccessConditions.LeaseId = leaseId;
bufferStream->Rewind();
auto response = client.Append(*bufferStream, 0, options);
EXPECT_TRUE(response.Value.IsLeaseRenewed.HasValue());
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseStatus::Locked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseState::Leased, properties.Value.LeaseState.Value());
EXPECT_TRUE(properties.Value.LeaseDuration.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseDurationType::Fixed,
properties.Value.LeaseDuration.Value());
}
// Append Lease Release
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_release");
client.Create();
const std::string leaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
Files::DataLake::DataLakeLeaseClient leaseClient(client, leaseId);
leaseClient.Acquire(std::chrono::seconds(20));
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::Release;
options.AccessConditions.LeaseId = leaseId;
options.Flush = true;
bufferStream->Rewind();
client.Append(*bufferStream, 0, options);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseStatus::Unlocked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseState::Available, properties.Value.LeaseState.Value());
}
// Append Lease AcquireRelease
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_acquire_release");
client.Create();
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::AcquireRelease;
options.LeaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
options.LeaseDuration = std::chrono::seconds(20);
options.Flush = true;
bufferStream->Rewind();
client.Append(*bufferStream, 0, options);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseStatus::Unlocked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseState::Available, properties.Value.LeaseState.Value());
}
}
TEST_F(DataLakeFileClientTest, FlushFileWithLease)
{
const int32_t bufferSize = 4 * 1024; // 4KB data size
std::vector<uint8_t> buffer(bufferSize, 'x');
auto bufferStream = std::make_unique<Azure::Core::IO::MemoryBodyStream>(
Azure::Core::IO::MemoryBodyStream(buffer));
// Flush Lease Acquire
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_acquire");
client.Create();
bufferStream->Rewind();
client.Append(*bufferStream, 0);
Files::DataLake::FlushFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::Acquire;
options.LeaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
options.LeaseDuration = std::chrono::seconds(20);
client.Flush(bufferSize, options);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseStatus::Locked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseState::Leased, properties.Value.LeaseState.Value());
EXPECT_TRUE(properties.Value.LeaseDuration.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseDurationType::Fixed,
properties.Value.LeaseDuration.Value());
}
// Flush Lease AutoRenew
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_auto_renew");
client.Create();
const std::string leaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::Acquire;
options.LeaseId = leaseId;
options.LeaseDuration = std::chrono::seconds(20);
bufferStream->Rewind();
client.Append(*bufferStream, 0, options);
Files::DataLake::FlushFileOptions flushOptions;
flushOptions.LeaseAction = Files::DataLake::Models::LeaseAction::AutoRenew;
flushOptions.AccessConditions.LeaseId = leaseId;
auto response = client.Flush(bufferSize, flushOptions);
EXPECT_TRUE(response.Value.IsLeaseRenewed.HasValue());
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseStatus::Locked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(Files::DataLake::Models::LeaseState::Leased, properties.Value.LeaseState.Value());
EXPECT_TRUE(properties.Value.LeaseDuration.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseDurationType::Fixed,
properties.Value.LeaseDuration.Value());
}
// Flush Lease Release
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_release");
client.Create();
const std::string leaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
Files::DataLake::AppendFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::Acquire;
options.LeaseId = leaseId;
options.LeaseDuration = std::chrono::seconds(20);
bufferStream->Rewind();
client.Append(*bufferStream, 0, options);
Files::DataLake::FlushFileOptions flushOptions;
flushOptions.LeaseAction = Files::DataLake::Models::LeaseAction::Release;
flushOptions.AccessConditions.LeaseId = leaseId;
client.Flush(bufferSize, flushOptions);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseStatus::Unlocked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseState::Available, properties.Value.LeaseState.Value());
}
// Flush Lease AcquireRelease
{
auto client = m_fileSystemClient->GetFileClient(GetTestNameLowerCase() + "_acquire_release");
client.Create();
bufferStream->Rewind();
client.Append(*bufferStream, 0);
Files::DataLake::FlushFileOptions options;
options.LeaseAction = Files::DataLake::Models::LeaseAction::AcquireRelease;
options.LeaseId = Files::DataLake::DataLakeLeaseClient::CreateUniqueLeaseId();
options.LeaseDuration = std::chrono::seconds(20);
client.Flush(bufferSize, options);
auto properties = client.GetProperties();
EXPECT_TRUE(properties.Value.LeaseStatus.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseStatus::Unlocked, properties.Value.LeaseStatus.Value());
EXPECT_TRUE(properties.Value.LeaseState.HasValue());
EXPECT_EQ(
Files::DataLake::Models::LeaseState::Available, properties.Value.LeaseState.Value());
}
}
TEST_F(DataLakeFileClientTest, FileReadReturns)
{
const int32_t bufferSize = 4 * 1024; // 4KB data size

View File

@ -31,7 +31,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
/**
* The version used for the operations to Azure storage services.
*/
constexpr static const char* ApiVersion = "2021-06-08";
constexpr static const char* ApiVersion = "2021-12-02";
} // namespace _detail
namespace Models {
/**
@ -956,6 +956,13 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
*/
bool IsServerEncrypted = bool();
};
namespace _detail {
struct StringEncoded final
{
bool Encoded = bool();
std::string Content;
};
} // namespace _detail
/**
* @brief File properties.
*/
@ -969,17 +976,19 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
*/
FileSmbProperties SmbProperties;
};
/**
* @brief A listed directory item.
*/
struct DirectoryItem final
{
std::string Name;
namespace _detail {
/**
* File properties.
* @brief A listed directory item.
*/
DirectoryItemDetails Details;
};
struct DirectoryItem final
{
StringEncoded Name;
/**
* File properties.
*/
DirectoryItemDetails Details;
};
} // namespace _detail
/**
* @brief File properties.
*/
@ -1000,18 +1009,18 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
*/
FileSmbProperties SmbProperties;
};
/**
* @brief A listed file item.
*/
struct FileItem final
{
std::string Name;
/**
* File properties.
*/
FileItemDetails Details;
};
namespace _detail {
/**
* @brief A listed file item.
*/
struct FileItem final
{
StringEncoded Name;
/**
* File properties.
*/
FileItemDetails Details;
};
/**
* @brief Abstract for entries that can be listed from Directory.
*/
@ -1067,8 +1076,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::string ServiceEndpoint;
std::string ShareName;
Nullable<std::string> ShareSnapshot;
Nullable<bool> Encoded;
std::string DirectoryPath;
std::string Prefix;
StringEncoded Prefix;
Nullable<std::string> Marker;
Nullable<int32_t> MaxResults;
/**
@ -1078,46 +1088,44 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::string NextMarker;
Nullable<std::string> DirectoryId;
};
} // namespace _detail
/**
* @brief A listed Azure Storage handle item.
*/
struct HandleItem final
{
/**
* XSMB service handle ID.
* @brief A listed Azure Storage handle item.
*/
std::string HandleId;
/**
* File or directory name including full path starting from share root.
*/
std::string Path;
/**
* FileId uniquely identifies the file or directory.
*/
std::string FileId;
/**
* ParentId uniquely identifies the parent directory of the object.
*/
std::string ParentId;
/**
* SMB session ID in context of which the file handle was opened.
*/
std::string SessionId;
/**
* Client IP that opened the handle.
*/
std::string ClientIp;
/**
* Time when the session that previously opened the handle has last been reconnected. (UTC).
*/
DateTime OpenedOn;
/**
* Time handle was last connected to (UTC).
*/
DateTime LastReconnectedOn;
};
namespace _detail {
struct HandleItem final
{
/**
* XSMB service handle ID.
*/
std::string HandleId;
/**
* File or directory name including full path starting from share root.
*/
StringEncoded Path;
/**
* FileId uniquely identifies the file or directory.
*/
std::string FileId;
/**
* ParentId uniquely identifies the parent directory of the object.
*/
std::string ParentId;
/**
* SMB session ID in context of which the file handle was opened.
*/
std::string SessionId;
/**
* Client IP that opened the handle.
*/
std::string ClientIp;
/**
* Time when the session that previously opened the handle has last been reconnected. (UTC).
*/
DateTime OpenedOn;
/**
* Time handle was last connected to (UTC).
*/
DateTime LastReconnectedOn;
};
/**
* @brief Response type for
* #Azure::Storage::Files::Shares::DirectoryClient::ForceCloseHandles.

View File

@ -189,6 +189,69 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
*/
DateTime LastModified;
};
/**
* @brief A listed directory item.
*/
struct DirectoryItem final
{
std::string Name;
/**
* File properties.
*/
DirectoryItemDetails Details;
};
/**
* @brief A listed file item.
*/
struct FileItem final
{
std::string Name;
/**
* File properties.
*/
FileItemDetails Details;
};
/**
* @brief A listed Azure Storage handle item.
*/
struct HandleItem final
{
/**
* XSMB service handle ID.
*/
std::string HandleId;
/**
* File or directory name including full path starting from share root.
*/
std::string Path;
/**
* FileId uniquely identifies the file or directory.
*/
std::string FileId;
/**
* ParentId uniquely identifies the parent directory of the object.
*/
std::string ParentId;
/**
* SMB session ID in context of which the file handle was opened.
*/
std::string SessionId;
/**
* Client IP that opened the handle.
*/
std::string ClientIp;
/**
* Time when the session that previously opened the handle has last been reconnected. (UTC).
*/
DateTime OpenedOn;
/**
* Time handle was last connected to (UTC).
*/
DateTime LastReconnectedOn;
};
} // namespace Models
/**

View File

@ -312,7 +312,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -332,7 +332,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -564,7 +564,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
_internal::UrlEncodeQueryParameter(
ListSharesIncludeFlagsToString(options.Include.Value())));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -917,7 +917,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-access-tier", options.AccessTier.Value().ToString());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.EnabledProtocols.HasValue()
&& !options.EnabledProtocols.Value().ToString().empty())
{
@ -952,7 +952,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -1054,7 +1054,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.DeleteSnapshots.HasValue() && !options.DeleteSnapshots.Value().ToString().empty())
{
request.SetHeader("x-ms-delete-snapshots", options.DeleteSnapshots.Value().ToString());
@ -1090,7 +1090,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1124,7 +1124,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-lease-id", options.LeaseId);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1161,7 +1161,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1195,7 +1195,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-lease-id", options.LeaseId);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1233,7 +1233,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
@ -1266,7 +1266,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -1300,7 +1300,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "share");
request.GetUrl().AppendQueryParameter("comp", "filepermission");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -1325,7 +1325,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-file-permission-key", options.FilePermissionKey);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1351,7 +1351,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("restype", "share");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Quota.HasValue())
{
request.SetHeader("x-ms-share-quota", std::to_string(options.Quota.Value()));
@ -1394,7 +1394,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -1420,7 +1420,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "share");
request.GetUrl().AppendQueryParameter("comp", "acl");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -1567,7 +1567,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "share");
request.GetUrl().AppendQueryParameter("comp", "acl");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -1594,7 +1594,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "share");
request.GetUrl().AppendQueryParameter("comp", "stats");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -1669,7 +1669,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.FilePermission.HasValue() && !options.FilePermission.Value().empty())
{
request.SetHeader("x-ms-file-permission", options.FilePermission.Value());
@ -1748,7 +1748,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1804,7 +1804,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Delete, url);
request.GetUrl().AppendQueryParameter("restype", "directory");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
(void)options;
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
@ -1824,7 +1824,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("restype", "directory");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.FilePermission.HasValue() && !options.FilePermission.Value().empty())
{
request.SetHeader("x-ms-file-permission", options.FilePermission.Value());
@ -1904,7 +1904,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -1948,7 +1948,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"maxresults", std::to_string(options.MaxResults.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Include.HasValue()
&& !ListFilesIncludeFlagsToString(options.Include.Value()).empty())
{
@ -2022,8 +2022,8 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{"DirectoryId", XmlTagEnum::kDirectoryId},
};
std::vector<XmlTagEnum> xmlPath;
Models::DirectoryItem vectorElement1;
Models::FileItem vectorElement2;
Models::_detail::DirectoryItem vectorElement1;
Models::_detail::FileItem vectorElement2;
while (true)
{
auto node = reader.Read();
@ -2041,7 +2041,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
if (xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kPrefix)
{
response.Prefix = node.Value;
response.Prefix.Content = node.Value;
}
else if (
xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults
@ -2060,7 +2060,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kDirectory
&& xmlPath[3] == XmlTagEnum::kName)
{
vectorElement1.Name = node.Value;
vectorElement1.Name.Content = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
@ -2137,7 +2137,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kFile
&& xmlPath[3] == XmlTagEnum::kName)
{
vectorElement2.Name = node.Value;
vectorElement2.Name.Content = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
@ -2249,12 +2249,38 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
response.ShareSnapshot = node.Value;
}
else if (
xmlPath.size() == 1 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& node.Name == "Encoded")
{
response.Encoded = node.Value == std::string("true");
}
else if (
xmlPath.size() == 1 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& node.Name == "DirectoryPath")
{
response.DirectoryPath = node.Value;
}
else if (
xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kPrefix && node.Name == "Encoded")
{
response.Prefix.Encoded = node.Value == std::string("true");
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kDirectory
&& xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded")
{
vectorElement1.Name.Encoded = node.Value == std::string("true");
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kFile
&& xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded")
{
vectorElement2.Name.Encoded = node.Value == std::string("true");
}
}
else if (node.Type == _internal::XmlNodeType::EndTag)
{
@ -2262,14 +2288,14 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kDirectory)
{
response.Segment.DirectoryItems.push_back(std::move(vectorElement1));
vectorElement1 = Models::DirectoryItem();
vectorElement1 = Models::_detail::DirectoryItem();
}
else if (
xmlPath.size() == 3 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kEntries && xmlPath[2] == XmlTagEnum::kFile)
{
response.Segment.FileItems.push_back(std::move(vectorElement2));
vectorElement2 = Models::FileItem();
vectorElement2 = Models::_detail::FileItem();
}
xmlPath.pop_back();
}
@ -2305,7 +2331,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-recursive", options.Recursive.Value() ? "true" : "false");
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2348,7 +2374,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{"NextMarker", XmlTagEnum::kNextMarker},
};
std::vector<XmlTagEnum> xmlPath;
Models::HandleItem vectorElement1;
Models::_detail::HandleItem vectorElement1;
while (true)
{
auto node = reader.Read();
@ -2374,7 +2400,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle
&& xmlPath[3] == XmlTagEnum::kPath)
{
vectorElement1.Path = node.Value;
vectorElement1.Path.Content = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
@ -2429,6 +2455,12 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
}
else if (node.Type == _internal::XmlNodeType::Attribute)
{
if (xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle
&& xmlPath[3] == XmlTagEnum::kPath && node.Name == "Encoded")
{
vectorElement1.Path.Encoded = node.Value == std::string("true");
}
}
else if (node.Type == _internal::XmlNodeType::EndTag)
{
@ -2436,7 +2468,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle)
{
response.HandleList.push_back(std::move(vectorElement1));
vectorElement1 = Models::HandleItem();
vectorElement1 = Models::_detail::HandleItem();
}
xmlPath.pop_back();
}
@ -2471,7 +2503,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-recursive", options.Recursive.Value() ? "true" : "false");
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -2499,7 +2531,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("restype", "directory");
request.GetUrl().AppendQueryParameter("comp", "rename");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (!options.RenameSource.empty())
{
request.SetHeader("x-ms-file-rename-source", options.RenameSource);
@ -2586,7 +2618,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
request.SetHeader("x-ms-content-length", std::to_string(options.FileContentLength));
request.SetHeader("x-ms-type", "file");
if (options.FileContentType.HasValue() && !options.FileContentType.Value().empty())
@ -2696,7 +2728,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url, false);
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Range.HasValue() && !options.Range.Value().empty())
{
request.SetHeader("x-ms-range", options.Range.Value());
@ -2871,7 +2903,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -2999,7 +3031,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Delete, url);
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -3021,7 +3053,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.FileContentLength.HasValue())
{
request.SetHeader("x-ms-content-length", std::to_string(options.FileContentLength.Value()));
@ -3135,7 +3167,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -3169,7 +3201,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
@ -3197,7 +3229,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-lease-id", options.LeaseId);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -3228,7 +3260,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -3256,7 +3288,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
@ -3293,7 +3325,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("Content-MD5", Core::Convert::Base64Encode(options.ContentMD5.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -3370,7 +3402,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
"x-ms-source-if-none-match-crc64",
Core::Convert::Base64Encode(options.SourceIfNoneMatchCrc64.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -3430,7 +3462,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
"prevsharesnapshot",
_internal::UrlEncodeQueryParameter(options.Prevsharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.Range.HasValue() && !options.Range.Value().empty())
{
request.SetHeader("x-ms-range", options.Range.Value());
@ -3544,7 +3576,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
for (const auto& p : options.Metadata)
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
@ -3626,7 +3658,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
"copyid", _internal::UrlEncodeQueryParameter(options.CopyId));
}
request.SetHeader("x-ms-copy-action", "abort");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
@ -3663,7 +3695,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -3706,7 +3738,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{"NextMarker", XmlTagEnum::kNextMarker},
};
std::vector<XmlTagEnum> xmlPath;
Models::HandleItem vectorElement1;
Models::_detail::HandleItem vectorElement1;
while (true)
{
auto node = reader.Read();
@ -3732,7 +3764,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle
&& xmlPath[3] == XmlTagEnum::kPath)
{
vectorElement1.Path = node.Value;
vectorElement1.Path.Content = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
@ -3787,6 +3819,12 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
}
else if (node.Type == _internal::XmlNodeType::Attribute)
{
if (xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle
&& xmlPath[3] == XmlTagEnum::kPath && node.Name == "Encoded")
{
vectorElement1.Path.Encoded = node.Value == std::string("true");
}
}
else if (node.Type == _internal::XmlNodeType::EndTag)
{
@ -3794,7 +3832,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
&& xmlPath[1] == XmlTagEnum::kHandleList && xmlPath[2] == XmlTagEnum::kHandle)
{
response.HandleList.push_back(std::move(vectorElement1));
vectorElement1 = Models::HandleItem();
vectorElement1 = Models::_detail::HandleItem();
}
xmlPath.pop_back();
}
@ -3825,7 +3863,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.SetHeader("x-ms-handle-id", options.HandleId);
}
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
@ -3852,7 +3890,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
request.GetUrl().AppendQueryParameter("comp", "rename");
request.SetHeader("x-ms-version", "2021-06-08");
request.SetHeader("x-ms-version", "2021-12-02");
if (!options.RenameSource.empty())
{
request.SetHeader("x-ms-file-rename-source", options.RenameSource);

View File

@ -437,10 +437,50 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
pagedResponse.ServiceEndpoint = std::move(response.Value.ServiceEndpoint);
pagedResponse.ShareName = std::move(response.Value.ShareName);
pagedResponse.ShareSnapshot = response.Value.ShareSnapshot.ValueOr(std::string());
pagedResponse.DirectoryPath = std::move(response.Value.DirectoryPath);
pagedResponse.Prefix = std::move(response.Value.Prefix);
pagedResponse.Directories = std::move(response.Value.Segment.DirectoryItems);
pagedResponse.Files = std::move(response.Value.Segment.FileItems);
if (response.Value.Encoded)
{
pagedResponse.DirectoryPath = Core::Url::Decode(response.Value.DirectoryPath);
}
else
{
pagedResponse.DirectoryPath = std::move(response.Value.DirectoryPath);
}
if (response.Value.Prefix.Encoded)
{
pagedResponse.Prefix = Core::Url::Decode(response.Value.Prefix.Content);
}
else
{
pagedResponse.Prefix = std::move(response.Value.Prefix.Content);
}
for (auto& item : response.Value.Segment.DirectoryItems)
{
Models::DirectoryItem directoryItem;
if (item.Name.Encoded)
{
directoryItem.Name = Core::Url::Decode(item.Name.Content);
}
else
{
directoryItem.Name = std::move(item.Name.Content);
}
directoryItem.Details = std::move(item.Details);
pagedResponse.Directories.push_back(std::move(directoryItem));
}
for (auto& item : response.Value.Segment.FileItems)
{
Models::FileItem fileItem;
if (item.Name.Encoded)
{
fileItem.Name = Core::Url::Decode(item.Name.Content);
}
else
{
fileItem.Name = std::move(item.Name.Content);
}
fileItem.Details = std::move(item.Details);
pagedResponse.Files.push_back(std::move(fileItem));
}
pagedResponse.DirectoryId = response.Value.DirectoryId.ValueOr(std::string());
pagedResponse.m_shareDirectoryClient = std::make_shared<ShareDirectoryClient>(*this);
pagedResponse.m_operationOptions = options;
@ -464,7 +504,27 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
ListDirectoryHandlesPagedResponse pagedResponse;
pagedResponse.DirectoryHandles = std::move(response.Value.HandleList);
for (auto& handle : response.Value.HandleList)
{
Models::HandleItem directoryHandle;
if (handle.Path.Encoded)
{
directoryHandle.Path = Core::Url::Decode(handle.Path.Content);
}
else
{
directoryHandle.Path = std::move(handle.Path.Content);
}
directoryHandle.ClientIp = std::move(handle.ClientIp);
directoryHandle.FileId = std::move(handle.FileId);
directoryHandle.HandleId = std::move(handle.HandleId);
directoryHandle.LastReconnectedOn = std::move(handle.LastReconnectedOn);
directoryHandle.OpenedOn = std::move(handle.OpenedOn);
directoryHandle.ParentId = std::move(handle.ParentId);
directoryHandle.SessionId = std::move(handle.SessionId);
pagedResponse.DirectoryHandles.push_back(std::move(directoryHandle));
}
pagedResponse.m_shareDirectoryClient = std::make_shared<ShareDirectoryClient>(*this);
pagedResponse.m_operationOptions = options;
pagedResponse.CurrentPageToken = options.ContinuationToken.ValueOr(std::string());

View File

@ -617,7 +617,27 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
ListFileHandlesPagedResponse pagedResponse;
pagedResponse.FileHandles = std::move(response.Value.HandleList);
for (auto& handle : response.Value.HandleList)
{
Models::HandleItem fileHandle;
if (handle.Path.Encoded)
{
fileHandle.Path = Core::Url::Decode(handle.Path.Content);
}
else
{
fileHandle.Path = std::move(handle.Path.Content);
}
fileHandle.ClientIp = std::move(handle.ClientIp);
fileHandle.FileId = std::move(handle.FileId);
fileHandle.HandleId = std::move(handle.HandleId);
fileHandle.LastReconnectedOn = std::move(handle.LastReconnectedOn);
fileHandle.OpenedOn = std::move(handle.OpenedOn);
fileHandle.ParentId = std::move(handle.ParentId);
fileHandle.SessionId = std::move(handle.SessionId);
pagedResponse.FileHandles.push_back(std::move(fileHandle));
}
pagedResponse.m_shareFileClient = std::make_shared<ShareFileClient>(*this);
pagedResponse.m_operationOptions = options;
pagedResponse.CurrentPageToken = options.ContinuationToken.ValueOr(std::string());

View File

@ -9,7 +9,7 @@ package-name: azure-storage-files-shares
namespace: Azure::Storage::Files::Shares
output-folder: generated
clear-output-folder: true
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.FileStorage/preview/2021-06-08/file.json
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.FileStorage/preview/2021-12-02/file.json
```
## ModelFour Options
@ -79,13 +79,13 @@ directive:
"name": "ApiVersion",
"modelAsString": false
},
"enum": ["2021-06-08"],
"enum": ["2021-12-02"],
"description": "The version used for the operations to Azure storage services."
};
- from: swagger-document
where: $.parameters
transform: >
$.ApiVersionParameter.enum[0] = "2021-06-08";
$.ApiVersionParameter.enum[0] = "2021-12-02";
```
### Rename Operations
@ -307,6 +307,10 @@ directive:
$.ShareEnabledProtocols["enum"] = ["Smb", "Nfs"];
$.ShareEnabledProtocols["x-ms-enum"] = {"name": "ShareProtocols", "modelAsString": false};
$.ShareEnabledProtocols["x-ms-enum"]["values"] = [{"value": "SMB", "name": "Smb"},{"value": "NFS", "name": "Nfs"}];
$.StringEncoded["x-namespace"] = "_detail";
delete $.StringEncoded.properties["content"]["xml"];
$.StringEncoded["xml"] = {"name": "Name"};
$.StringEncoded.properties["content"]["x-ms-xml"] = {"name": "."};
- from: swagger-document
where: $["x-ms-paths"].*.*.responses.*.headers
transform: >
@ -553,7 +557,8 @@ directive:
delete $.FileItem.properties["PermissionKey"];
delete $.FileItem.required;
$.FileItem.properties["Details"] = {"$ref": "#/definitions/FileItemDetails", "x-ms-xml" : {"name": "Properties"}};
$.FileItem["x-namespace"] = "_detail";
delete $.DirectoryItem.properties["Properties"];
delete $.DirectoryItem.properties["FileId"];
delete $.DirectoryItem.properties["Attributes"];
@ -562,7 +567,8 @@ directive:
$.DirectoryItemDetails = JSON.parse(JSON.stringify($.FileItemDetails));
delete $.DirectoryItemDetails.properties["Content-Length"];
$.DirectoryItem.properties["Details"] = {"$ref": "#/definitions/DirectoryItemDetails", "x-ms-xml" : {"name": "Properties"}};
$.DirectoryItem["x-namespace"] = "_detail";
$.FilesAndDirectoriesListSegment.properties["DirectoryItems"]["x-ms-xml"] = {"name": "."};
$.FilesAndDirectoriesListSegment.properties["FileItems"]["x-ms-xml"] = {"name": "."};
```
@ -577,6 +583,8 @@ directive:
delete $.HandleItem.required;
$.HandleItem.properties["OpenTime"]["x-ms-client-name"] = "OpenedOn";
$.HandleItem.properties["LastReconnectTime"]["x-ms-client-name"] = "LastReconnectedOn";
$.HandleItem.properties["Path"]["description"] = "File or directory name including full path starting from share root.";
$.HandleItem["x-namespace"] = "_detail";
```
### ForceCloseFileHandles

View File

@ -820,6 +820,37 @@ namespace Azure { namespace Storage { namespace Test {
}
}
TEST_F(FileShareDirectoryClientTest, ListFilesAndDirectoriesEncoded)
{
const std::string prefix = "prefix\xEF\xBF\xBF";
const std::string specialParentDirectoryName = prefix + "directory_parent";
const std::string specialFileName = prefix + "file";
const std::string specialDirectoryName = prefix + "directory";
auto parentDirectoryClient
= m_shareClient->GetRootDirectoryClient().GetSubdirectoryClient(specialParentDirectoryName);
auto fileClient = parentDirectoryClient.GetFileClient(specialFileName);
auto directoryClient = parentDirectoryClient.GetSubdirectoryClient(specialDirectoryName);
parentDirectoryClient.Create();
fileClient.Create(1024);
directoryClient.Create();
auto fileUrl = fileClient.GetUrl();
EXPECT_EQ(
fileUrl, parentDirectoryClient.GetUrl() + "/" + _internal::UrlEncodePath(specialFileName));
auto directoryUrl = directoryClient.GetUrl();
EXPECT_EQ(
directoryUrl,
parentDirectoryClient.GetUrl() + "/" + _internal::UrlEncodePath(specialDirectoryName));
Files::Shares::ListFilesAndDirectoriesOptions options;
options.Prefix = prefix;
auto response = parentDirectoryClient.ListFilesAndDirectories(options);
EXPECT_EQ(response.DirectoryPath, specialParentDirectoryName);
EXPECT_EQ(response.Prefix, prefix);
EXPECT_EQ(response.Directories.size(), 1L);
EXPECT_EQ(response.Directories[0].Name, specialDirectoryName);
EXPECT_EQ(response.Files.size(), 1L);
EXPECT_EQ(response.Files[0].Name, specialFileName);
}
TEST_F(FileShareDirectoryClientTest, HandlesFunctionalityWorks)
{
auto result = m_fileShareDirectoryClient->ListHandles();