From c4d89ac5c9afe29e93042216b0deb0aff817c15a Mon Sep 17 00:00:00 2001 From: JinmingHu Date: Fri, 22 Jan 2021 16:28:14 +0800 Subject: [PATCH] use std::chrono::seconds or enum for lease duration (#1432) * use std::chrono::seconds for duration * changelog * add enum for lease duration in response * changelog * fix build error * fix build error * fix build error --- sdk/storage/azure-storage-blobs/CHANGELOG.md | 1 + .../azure/storage/blobs/blob_lease_client.hpp | 6 ++- .../inc/azure/storage/blobs/blob_options.hpp | 3 +- .../blobs/protocol/blob_rest_client.hpp | 54 ++++++++++++------- .../src/blob_lease_client.cpp | 4 +- .../src/blob_rest_client.cpp | 3 ++ .../test/append_blob_client_test.cpp | 4 +- .../test/blob_container_client_test.cpp | 14 ++--- .../test/page_blob_client_test.cpp | 9 ++-- .../src/datalake_file_client.cpp | 6 ++- .../src/datalake_path_client.cpp | 6 ++- 11 files changed, 72 insertions(+), 38 deletions(-) diff --git a/sdk/storage/azure-storage-blobs/CHANGELOG.md b/sdk/storage/azure-storage-blobs/CHANGELOG.md index d25187017..edd745b81 100644 --- a/sdk/storage/azure-storage-blobs/CHANGELOG.md +++ b/sdk/storage/azure-storage-blobs/CHANGELOG.md @@ -12,6 +12,7 @@ - `AccessType` in `CreateBlobContainerOptions` was changed to non-nullable. - `ListType` in `GetBlockListOptions` was changed to non-nullable. - Added `BlobLeaseClient`, all lease related APIs are moved to `BlobLeaseClient`. +- Type for lease duration in requests was changed to `std::chrono::seconds`, in response was changed to enum. ## 12.0.0-beta.6 (2020-01-14) diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_lease_client.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_lease_client.hpp index 25ff77ed5..dd33ccd4b 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_lease_client.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_lease_client.hpp @@ -3,6 +3,8 @@ #pragma once +#include + #include "azure/storage/blobs/blob_client.hpp" #include "azure/storage/blobs/blob_container_client.hpp" @@ -46,7 +48,7 @@ namespace Azure { namespace Storage { namespace Blobs { /** * @brief A value representing infinite lease duration. */ - constexpr static int32_t InfiniteLeaseDuration = -1; + AZ_STORAGE_BLOBS_DLLEXPORT const static std::chrono::seconds InfiniteLeaseDuration; /** * @brief Get lease id of this lease client. @@ -67,7 +69,7 @@ namespace Azure { namespace Storage { namespace Blobs { * @return A AcquireBlobLeaseResult describing the lease. */ Azure::Core::Response Acquire( - int32_t duration, + std::chrono::seconds duration, const AcquireBlobLeaseOptions& options = AcquireBlobLeaseOptions()); /** diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp index 7718411f6..df510c843 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include @@ -774,7 +775,7 @@ namespace Azure { namespace Storage { namespace Blobs { * available before the break period has expired, but the lease may be held for longer than the * break period. */ - Azure::Core::Nullable BreakPeriod; + Azure::Core::Nullable BreakPeriod; /** * @brief Optional conditions that must be met to perform this operation. diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/protocol/blob_rest_client.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/protocol/blob_rest_client.hpp index 54eef0c14..cdaf9e8f4 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/protocol/blob_rest_client.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/protocol/blob_rest_client.hpp @@ -3,8 +3,6 @@ #pragma once -#include "azure/storage/blobs/dll_import_export.hpp" - #include #include #include @@ -26,6 +24,8 @@ #include #include +#include "azure/storage/blobs/dll_import_export.hpp" + namespace Azure { namespace Storage { namespace Blobs { namespace Details { @@ -152,6 +152,20 @@ namespace Azure { namespace Storage { namespace Blobs { std::string m_value; }; // extensible enum BlobGeoReplicationStatus + class BlobLeaseDurationType { + public: + BlobLeaseDurationType() = default; + explicit BlobLeaseDurationType(std::string value) : m_value(std::move(value)) {} + bool operator==(const BlobLeaseDurationType& other) const { return m_value == other.m_value; } + bool operator!=(const BlobLeaseDurationType& other) const { return !(*this == other); } + const std::string& Get() const { return m_value; } + AZ_STORAGE_BLOBS_DLLEXPORT const static BlobLeaseDurationType Infinite; + AZ_STORAGE_BLOBS_DLLEXPORT const static BlobLeaseDurationType Fixed; + + private: + std::string m_value; + }; // extensible enum BlobLeaseDurationType + class BlobLeaseState { public: BlobLeaseState() = default; @@ -740,7 +754,7 @@ namespace Azure { namespace Storage { namespace Blobs { PublicAccessType AccessType = PublicAccessType::Private; bool HasImmutabilityPolicy = false; bool HasLegalHold = false; - Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseDuration; BlobLeaseState LeaseState = BlobLeaseState::Available; BlobLeaseStatus LeaseStatus = BlobLeaseStatus::Unlocked; std::string DefaultEncryptionScope; @@ -800,7 +814,7 @@ namespace Azure { namespace Storage { namespace Blobs { PublicAccessType AccessType = PublicAccessType::Private; bool HasImmutabilityPolicy = false; bool HasLegalHold = false; - Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseDuration; BlobLeaseState LeaseState = BlobLeaseState::Available; BlobLeaseStatus LeaseStatus = BlobLeaseStatus::Unlocked; std::string DefaultEncryptionScope; @@ -1017,7 +1031,7 @@ namespace Azure { namespace Storage { namespace Blobs { Azure::Core::Nullable IsAccessTierInferred; BlobLeaseStatus LeaseStatus = BlobLeaseStatus::Unlocked; BlobLeaseState LeaseState = BlobLeaseState::Available; - Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseDuration; bool IsServerEncrypted = false; Azure::Core::Nullable> EncryptionKeySha256; Azure::Core::Nullable EncryptionScope; @@ -1045,7 +1059,7 @@ namespace Azure { namespace Storage { namespace Blobs { Azure::Core::Nullable IsSealed; // only for append blob Models::BlobType BlobType; Azure::Core::Nullable TransactionalContentHash; // hash for the downloaded range - Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseDuration; Azure::Core::Nullable LeaseState; Azure::Core::Nullable LeaseStatus; bool IsServerEncrypted = false; @@ -1068,7 +1082,7 @@ namespace Azure { namespace Storage { namespace Blobs { Azure::Core::Nullable LastAccessedOn; Storage::Metadata Metadata; Models::BlobType BlobType; - Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseDuration; Azure::Core::Nullable LeaseState; Azure::Core::Nullable LeaseStatus; int64_t ContentLength = 0; @@ -2238,7 +2252,7 @@ namespace Azure { namespace Storage { namespace Blobs { path.size() == 2 && path[0] == XmlTagName::k_Properties && path[1] == XmlTagName::k_LeaseDuration) { - ret.LeaseDuration = node.Value; + ret.LeaseDuration = BlobLeaseDurationType(node.Value); } else if ( path.size() == 2 && path[0] == XmlTagName::k_Properties @@ -3297,7 +3311,7 @@ namespace Azure { namespace Storage { namespace Blobs { = httpResponse.GetHeaders().find("x-ms-lease-duration"); if (x_ms_lease_duration__iterator != httpResponse.GetHeaders().end()) { - response.LeaseDuration = x_ms_lease_duration__iterator->second; + response.LeaseDuration = BlobLeaseDurationType(x_ms_lease_duration__iterator->second); } response.DefaultEncryptionScope = httpResponse.GetHeaders().at("x-ms-default-encryption-scope"); @@ -3644,7 +3658,7 @@ namespace Azure { namespace Storage { namespace Blobs { struct AcquireBlobContainerLeaseOptions { Azure::Core::Nullable Timeout; - int32_t LeaseDuration = -1; + std::chrono::seconds LeaseDuration; Azure::Core::Nullable ProposedLeaseId; Azure::Core::Nullable IfModifiedSince; Azure::Core::Nullable IfUnmodifiedSince; @@ -3668,7 +3682,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.GetUrl().AppendQueryParameter("restype", "container"); request.GetUrl().AppendQueryParameter("comp", "lease"); request.AddHeader("x-ms-lease-action", "acquire"); - request.AddHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration)); + request.AddHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration.count())); if (options.ProposedLeaseId.HasValue()) { request.AddHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.GetValue()); @@ -3894,7 +3908,7 @@ namespace Azure { namespace Storage { namespace Blobs { struct BreakBlobContainerLeaseOptions { Azure::Core::Nullable Timeout; - Azure::Core::Nullable BreakPeriod; + Azure::Core::Nullable BreakPeriod; Azure::Core::Nullable IfModifiedSince; Azure::Core::Nullable IfUnmodifiedSince; }; // struct BreakBlobContainerLeaseOptions @@ -3920,7 +3934,7 @@ namespace Azure { namespace Storage { namespace Blobs { if (options.BreakPeriod.HasValue()) { request.AddHeader( - "x-ms-lease-break-period", std::to_string(options.BreakPeriod.GetValue())); + "x-ms-lease-break-period", std::to_string(options.BreakPeriod.GetValue().count())); } if (options.IfModifiedSince.HasValue()) { @@ -4579,7 +4593,7 @@ namespace Azure { namespace Storage { namespace Blobs { path.size() == 2 && path[0] == XmlTagName::k_Properties && path[1] == XmlTagName::k_LeaseDuration) { - ret.LeaseDuration = node.Value; + ret.LeaseDuration = BlobLeaseDurationType(node.Value); } else if ( path.size() == 2 && path[0] == XmlTagName::k_Properties @@ -5083,7 +5097,7 @@ namespace Azure { namespace Storage { namespace Blobs { = httpResponse.GetHeaders().find("x-ms-lease-duration"); if (x_ms_lease_duration__iterator != httpResponse.GetHeaders().end()) { - response.LeaseDuration = x_ms_lease_duration__iterator->second; + response.LeaseDuration = BlobLeaseDurationType(x_ms_lease_duration__iterator->second); } response.CreatedOn = Azure::Core::DateTime::Parse( httpResponse.GetHeaders().at("x-ms-creation-time"), @@ -5489,7 +5503,7 @@ namespace Azure { namespace Storage { namespace Blobs { = httpResponse.GetHeaders().find("x-ms-lease-duration"); if (x_ms_lease_duration__iterator != httpResponse.GetHeaders().end()) { - response.LeaseDuration = x_ms_lease_duration__iterator->second; + response.LeaseDuration = BlobLeaseDurationType(x_ms_lease_duration__iterator->second); } response.ContentLength = std::stoll(httpResponse.GetHeaders().at("content-length")); auto content_type__iterator = httpResponse.GetHeaders().find("content-type"); @@ -6353,7 +6367,7 @@ namespace Azure { namespace Storage { namespace Blobs { struct AcquireBlobLeaseOptions { Azure::Core::Nullable Timeout; - int32_t LeaseDuration = -1; + std::chrono::seconds LeaseDuration; Azure::Core::Nullable ProposedLeaseId; Azure::Core::Nullable IfModifiedSince; Azure::Core::Nullable IfUnmodifiedSince; @@ -6379,7 +6393,7 @@ namespace Azure { namespace Storage { namespace Blobs { } request.GetUrl().AppendQueryParameter("comp", "lease"); request.AddHeader("x-ms-lease-action", "acquire"); - request.AddHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration)); + request.AddHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration.count())); if (options.ProposedLeaseId.HasValue()) { request.AddHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.GetValue()); @@ -6665,7 +6679,7 @@ namespace Azure { namespace Storage { namespace Blobs { struct BreakBlobLeaseOptions { Azure::Core::Nullable Timeout; - Azure::Core::Nullable BreakPeriod; + Azure::Core::Nullable BreakPeriod; Azure::Core::Nullable IfModifiedSince; Azure::Core::Nullable IfUnmodifiedSince; Azure::Core::Nullable IfMatch; @@ -6693,7 +6707,7 @@ namespace Azure { namespace Storage { namespace Blobs { if (options.BreakPeriod.HasValue()) { request.AddHeader( - "x-ms-lease-break-period", std::to_string(options.BreakPeriod.GetValue())); + "x-ms-lease-break-period", std::to_string(options.BreakPeriod.GetValue().count())); } if (options.IfModifiedSince.HasValue()) { diff --git a/sdk/storage/azure-storage-blobs/src/blob_lease_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_lease_client.cpp index f155216c1..f448cca8e 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_lease_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_lease_client.cpp @@ -7,13 +7,15 @@ namespace Azure { namespace Storage { namespace Blobs { + const std::chrono::seconds BlobLeaseClient::InfiniteLeaseDuration{-1}; + std::string BlobLeaseClient::CreateUniqueLeaseId() { return Azure::Core::Uuid::CreateUuid().GetUuidString(); } Azure::Core::Response BlobLeaseClient::Acquire( - int32_t duration, + std::chrono::seconds duration, const AcquireBlobLeaseOptions& options) { if (m_blobClient.HasValue()) diff --git a/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp index 2e3dc9631..a44dc5293 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp @@ -36,6 +36,9 @@ namespace Azure { namespace Storage { namespace Blobs { namespace Models { const BlobGeoReplicationStatus BlobGeoReplicationStatus::Bootstrap("bootstrap"); const BlobGeoReplicationStatus BlobGeoReplicationStatus::Unavailable("unavailable"); + const BlobLeaseDurationType BlobLeaseDurationType::Infinite("infinite"); + const BlobLeaseDurationType BlobLeaseDurationType::Fixed("fixed"); + const BlobLeaseState BlobLeaseState::Available("available"); const BlobLeaseState BlobLeaseState::Leased("leased"); const BlobLeaseState BlobLeaseState::Expired("expired"); diff --git a/sdk/storage/azure-storage-blobs/test/append_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/append_blob_client_test.cpp index 49979b5f0..edcf961ce 100644 --- a/sdk/storage/azure-storage-blobs/test/append_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/append_blob_client_test.cpp @@ -3,6 +3,8 @@ #include "append_blob_client_test.hpp" +#include + namespace Azure { namespace Storage { namespace Test { std::shared_ptr AppendBlobClientTest::m_appendBlobClient; @@ -194,7 +196,7 @@ namespace Azure { namespace Storage { namespace Test { std::string leaseId = Blobs::BlobLeaseClient::CreateUniqueLeaseId(); Blobs::BlobLeaseClient leaseClient(appendBlobClient, leaseId); - leaseClient.Acquire(30); + leaseClient.Acquire(std::chrono::seconds(30)); EXPECT_THROW(appendBlobClient.Delete(), StorageException); Blobs::DeleteBlobOptions options; options.AccessConditions.LeaseId = leaseId; diff --git a/sdk/storage/azure-storage-blobs/test/blob_container_client_test.cpp b/sdk/storage/azure-storage-blobs/test/blob_container_client_test.cpp index 27c25f1fc..770d3fa45 100644 --- a/sdk/storage/azure-storage-blobs/test/blob_container_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/blob_container_client_test.cpp @@ -420,7 +420,7 @@ namespace Azure { namespace Storage { namespace Test { containerClient.Create(); std::string leaseId1 = Blobs::BlobLeaseClient::CreateUniqueLeaseId(); - int32_t leaseDuration = 20; + auto leaseDuration = std::chrono::seconds(20); Blobs::BlobLeaseClient leaseClient(containerClient, leaseId1); auto aLease = *leaseClient.Acquire(leaseDuration); EXPECT_FALSE(aLease.RequestId.empty()); @@ -437,7 +437,7 @@ namespace Azure { namespace Storage { namespace Test { auto properties = *containerClient.GetProperties(); EXPECT_EQ(properties.LeaseState, Blobs::Models::BlobLeaseState::Leased); EXPECT_EQ(properties.LeaseStatus, Blobs::Models::BlobLeaseStatus::Locked); - EXPECT_FALSE(properties.LeaseDuration.GetValue().empty()); + EXPECT_EQ(properties.LeaseDuration.GetValue(), Blobs::Models::BlobLeaseDurationType::Fixed); auto rLease = *leaseClient.Renew(); EXPECT_FALSE(rLease.RequestId.empty()); @@ -463,7 +463,7 @@ namespace Azure { namespace Storage { namespace Test { = Blobs::BlobLeaseClient(containerClient, Blobs::BlobLeaseClient::CreateUniqueLeaseId()); aLease = *leaseClient.Acquire(Blobs::BlobLeaseClient::InfiniteLeaseDuration); properties = *containerClient.GetProperties(); - EXPECT_FALSE(properties.LeaseDuration.GetValue().empty()); + EXPECT_EQ(properties.LeaseDuration.GetValue(), Blobs::Models::BlobLeaseDurationType::Infinite); auto brokenLease = *leaseClient.Break(); EXPECT_FALSE(brokenLease.ETag.empty()); EXPECT_TRUE(IsValidTime(brokenLease.LastModified)); @@ -478,7 +478,7 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_NE(brokenLease.LeaseTime, 0); Blobs::BreakBlobLeaseOptions options; - options.BreakPeriod = 0; + options.BreakPeriod = std::chrono::seconds(0); leaseClient.Break(options); containerClient.Delete(); } @@ -716,7 +716,7 @@ namespace Azure { namespace Storage { namespace Test { std::string leaseId = Blobs::BlobLeaseClient::CreateUniqueLeaseId(); auto leaseClient = Blobs::BlobLeaseClient(containerClient, leaseId); - leaseClient.Acquire(30); + leaseClient.Acquire(std::chrono::seconds(30)); EXPECT_THROW(containerClient.Delete(), StorageException); Blobs::DeleteBlobContainerOptions options; options.AccessConditions.LeaseId = leaseId; @@ -918,9 +918,9 @@ namespace Azure { namespace Storage { namespace Test { Blobs::AcquireBlobLeaseOptions options; options.AccessConditions.TagConditions = failWhereExpression; auto leaseClient = Blobs::BlobLeaseClient(appendBlobClient, leaseId); - EXPECT_THROW(leaseClient.Acquire(60, options), StorageException); + EXPECT_THROW(leaseClient.Acquire(std::chrono::seconds(60), options), StorageException); options.AccessConditions.TagConditions = successWhereExpression; - EXPECT_NO_THROW(leaseClient.Acquire(60, options)); + EXPECT_NO_THROW(leaseClient.Acquire(std::chrono::seconds(60), options)); Blobs::BreakBlobLeaseOptions options2; options2.AccessConditions.TagConditions = failWhereExpression; diff --git a/sdk/storage/azure-storage-blobs/test/page_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/page_blob_client_test.cpp index c26486297..4ec89231b 100644 --- a/sdk/storage/azure-storage-blobs/test/page_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/page_blob_client_test.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -161,7 +162,7 @@ namespace Azure { namespace Storage { namespace Test { TEST_F(PageBlobClientTest, Lease) { std::string leaseId1 = Blobs::BlobLeaseClient::CreateUniqueLeaseId(); - int32_t leaseDuration = 20; + auto leaseDuration = std::chrono::seconds(20); auto leaseClient = Blobs::BlobLeaseClient(*m_pageBlobClient, leaseId1); auto aLease = *leaseClient.Acquire(leaseDuration); EXPECT_FALSE(aLease.RequestId.empty()); @@ -177,7 +178,7 @@ namespace Azure { namespace Storage { namespace Test { auto properties = *m_pageBlobClient->GetProperties(); EXPECT_EQ(properties.LeaseState.GetValue(), Blobs::Models::BlobLeaseState::Leased); EXPECT_EQ(properties.LeaseStatus.GetValue(), Blobs::Models::BlobLeaseStatus::Locked); - EXPECT_FALSE(properties.LeaseDuration.GetValue().empty()); + EXPECT_EQ(properties.LeaseDuration.GetValue(), Blobs::Models::BlobLeaseDurationType::Fixed); auto rLease = *leaseClient.Renew(); EXPECT_FALSE(rLease.RequestId.empty()); @@ -203,7 +204,7 @@ namespace Azure { namespace Storage { namespace Test { = Blobs::BlobLeaseClient(*m_pageBlobClient, Blobs::BlobLeaseClient::CreateUniqueLeaseId()); aLease = *leaseClient.Acquire(Blobs::BlobLeaseClient::InfiniteLeaseDuration); properties = *m_pageBlobClient->GetProperties(); - EXPECT_FALSE(properties.LeaseDuration.GetValue().empty()); + EXPECT_EQ(properties.LeaseDuration.GetValue(), Blobs::Models::BlobLeaseDurationType::Infinite); auto brokenLease = *leaseClient.Break(); EXPECT_FALSE(brokenLease.ETag.empty()); EXPECT_TRUE(IsValidTime(brokenLease.LastModified)); @@ -218,7 +219,7 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_NE(brokenLease.LeaseTime, 0); Blobs::BreakBlobLeaseOptions options; - options.BreakPeriod = 0; + options.BreakPeriod = std::chrono::seconds(0); leaseClient.Break(options); } diff --git a/sdk/storage/azure-storage-files-datalake/src/datalake_file_client.cpp b/sdk/storage/azure-storage-files-datalake/src/datalake_file_client.cpp index 57bf43093..5e74bab06 100644 --- a/sdk/storage/azure-storage-files-datalake/src/datalake_file_client.cpp +++ b/sdk/storage/azure-storage-files-datalake/src/datalake_file_client.cpp @@ -331,7 +331,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake { ret.TransactionalContentHash = std::move(result->TransactionalContentHash); ret.ETag = std::move(result->ETag); ret.LastModified = std::move(result->LastModified); - ret.LeaseDuration = std::move(result->LeaseDuration); + // FIXME + if (result->LeaseDuration.HasValue()) + { + ret.LeaseDuration = result->LeaseDuration.GetValue().Get(); + } ret.LeaseState = result->LeaseState.HasValue() ? FromBlobLeaseState(result->LeaseState.GetValue()) : ret.LeaseState; diff --git a/sdk/storage/azure-storage-files-datalake/src/datalake_path_client.cpp b/sdk/storage/azure-storage-files-datalake/src/datalake_path_client.cpp index 8b65098db..fbb329fe7 100644 --- a/sdk/storage/azure-storage-files-datalake/src/datalake_path_client.cpp +++ b/sdk/storage/azure-storage-files-datalake/src/datalake_path_client.cpp @@ -359,7 +359,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake { ret.LastModified = std::move(result->LastModified); ret.CreatedOn = std::move(result->CreatedOn); ret.Metadata = std::move(result->Metadata); - ret.LeaseDuration = std::move(result->LeaseDuration); + // FIXME + if (result->LeaseDuration.HasValue()) + { + ret.LeaseDuration = result->LeaseDuration.GetValue().Get(); + } ret.LeaseState = result->LeaseState.HasValue() ? FromBlobLeaseState(result->LeaseState.GetValue()) : ret.LeaseState;