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:
parent
fa6ebb26b7
commit
f872841ffc
@ -2,5 +2,5 @@
|
||||
"AssetsRepo": "Azure/azure-sdk-assets",
|
||||
"AssetsRepoPrefixPath": "cpp",
|
||||
"TagPrefix": "cpp/storage",
|
||||
"Tag": "cpp/storage_1d5e4a5574"
|
||||
"Tag": "cpp/storage_90ac51538b"
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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: >
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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";
|
||||
```
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user