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 df805105b..17697690a 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 @@ -43,6 +43,15 @@ namespace Azure { namespace Storage { namespace Blobs { { }; + /** + * @brief Specifies access conditions for blob lease operations. + */ + struct LeaseBlobAccessConditions : public ModifiedTimeConditions, + public ETagAccessConditions, + public TagAccessConditions + { + }; + /** * @brief Specifies access conditions for a append blob. */ @@ -437,51 +446,71 @@ namespace Azure { namespace Storage { namespace Blobs { /** * @brief Optional parameters for BlobContainerClient::AcquireLease. */ - struct AcquireContainerLeaseOptions : public ModifiedTimeConditions + struct AcquireContainerLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + ModifiedTimeConditions AccessConditions; }; /** * @brief Optional parameters for BlobContainerClient::RenewLease. */ - struct RenewContainerLeaseOptions : public ModifiedTimeConditions + struct RenewContainerLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + ModifiedTimeConditions AccessConditions; }; /** * @brief Optional parameters for BlobContainerClient::ChangeLease. */ - struct ChangeContainerLeaseOptions : public ModifiedTimeConditions + struct ChangeContainerLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + ModifiedTimeConditions AccessConditions; }; /** * @brief Optional parameters for BlobContainerClient::ReleaseLease. */ - struct ReleaseContainerLeaseOptions : public ModifiedTimeConditions + struct ReleaseContainerLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + ModifiedTimeConditions AccessConditions; }; /** * @brief Optional parameters for BlobContainerClient::BreakLease. */ - struct BreakContainerLeaseOptions : public ModifiedTimeConditions + struct BreakContainerLeaseOptions { /** * @brief Context for cancelling long running operations. @@ -496,6 +525,11 @@ namespace Azure { namespace Storage { namespace Blobs { * break period. */ Azure::Core::Nullable BreakPeriod; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + ModifiedTimeConditions AccessConditions; }; /** @@ -754,61 +788,71 @@ namespace Azure { namespace Storage { namespace Blobs { /** * @brief Optional parameters for BlobClient::AcquireLease. */ - struct AcquireBlobLeaseOptions : public ModifiedTimeConditions, - public ETagAccessConditions, - public TagAccessConditions + struct AcquireBlobLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + LeaseBlobAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::RenewLease. */ - struct RenewBlobLeaseOptions : public ModifiedTimeConditions, - public ETagAccessConditions, - public TagAccessConditions + struct RenewBlobLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + LeaseBlobAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::ChangeLease. */ - struct ChangeBlobLeaseOptions : public ModifiedTimeConditions, - public ETagAccessConditions, - public TagAccessConditions + struct ChangeBlobLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + LeaseBlobAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::ReleaseLease. */ - struct ReleaseBlobLeaseOptions : public ModifiedTimeConditions, - public ETagAccessConditions, - public TagAccessConditions + struct ReleaseBlobLeaseOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + LeaseBlobAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::BreakLease. */ - struct BreakBlobLeaseOptions : public ModifiedTimeConditions, - public ETagAccessConditions, - public TagAccessConditions + struct BreakBlobLeaseOptions { /** * @brief Context for cancelling long running operations. @@ -823,28 +867,43 @@ namespace Azure { namespace Storage { namespace Blobs { * break period. */ Azure::Core::Nullable BreakPeriod; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + LeaseBlobAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::SetTags. */ - struct SetBlobTagsOptions : public TagAccessConditions + struct SetBlobTagsOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + TagAccessConditions AccessConditions; }; /** * @brief Optional parameters for BlobClient::GetTags. */ - struct GetBlobTagsOptions : public TagAccessConditions + struct GetBlobTagsOptions { /** * @brief Context for cancelling long running operations. */ Azure::Core::Context Context; + + /** + * @brief Optional conditions that must be met to perform this operation. + */ + TagAccessConditions AccessConditions; }; /** diff --git a/sdk/storage/azure-storage-blobs/src/blob_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_client.cpp index 8e8d20387..a9f24bc05 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_client.cpp @@ -644,11 +644,11 @@ namespace Azure { namespace Storage { namespace Blobs { Details::BlobRestClient::Blob::AcquireBlobLeaseOptions protocolLayerOptions; protocolLayerOptions.ProposedLeaseId = proposedLeaseId; protocolLayerOptions.LeaseDuration = duration; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; - protocolLayerOptions.IfMatch = options.IfMatch; - protocolLayerOptions.IfNoneMatch = options.IfNoneMatch; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; + protocolLayerOptions.IfMatch = options.AccessConditions.IfMatch; + protocolLayerOptions.IfNoneMatch = options.AccessConditions.IfNoneMatch; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::AcquireLease( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -659,11 +659,11 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Blob::RenewBlobLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; - protocolLayerOptions.IfMatch = options.IfMatch; - protocolLayerOptions.IfNoneMatch = options.IfNoneMatch; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; + protocolLayerOptions.IfMatch = options.AccessConditions.IfMatch; + protocolLayerOptions.IfNoneMatch = options.AccessConditions.IfNoneMatch; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::RenewLease( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -674,11 +674,11 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Blob::ReleaseBlobLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; - protocolLayerOptions.IfMatch = options.IfMatch; - protocolLayerOptions.IfNoneMatch = options.IfNoneMatch; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; + protocolLayerOptions.IfMatch = options.AccessConditions.IfMatch; + protocolLayerOptions.IfNoneMatch = options.AccessConditions.IfNoneMatch; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::ReleaseLease( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -691,11 +691,11 @@ namespace Azure { namespace Storage { namespace Blobs { Details::BlobRestClient::Blob::ChangeBlobLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; protocolLayerOptions.ProposedLeaseId = proposedLeaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; - protocolLayerOptions.IfMatch = options.IfMatch; - protocolLayerOptions.IfNoneMatch = options.IfNoneMatch; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; + protocolLayerOptions.IfMatch = options.AccessConditions.IfMatch; + protocolLayerOptions.IfNoneMatch = options.AccessConditions.IfNoneMatch; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::ChangeLease( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -705,11 +705,11 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Blob::BreakBlobLeaseOptions protocolLayerOptions; protocolLayerOptions.BreakPeriod = options.BreakPeriod; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; - protocolLayerOptions.IfMatch = options.IfMatch; - protocolLayerOptions.IfNoneMatch = options.IfNoneMatch; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; + protocolLayerOptions.IfMatch = options.AccessConditions.IfMatch; + protocolLayerOptions.IfNoneMatch = options.AccessConditions.IfNoneMatch; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::BreakLease( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -720,7 +720,7 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Blob::SetBlobTagsOptions protocolLayerOptions; protocolLayerOptions.Tags = std::move(tags); - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::SetTags( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } @@ -729,7 +729,7 @@ namespace Azure { namespace Storage { namespace Blobs { const GetBlobTagsOptions& options) const { Details::BlobRestClient::Blob::GetBlobTagsOptions protocolLayerOptions; - protocolLayerOptions.IfTags = options.TagConditions; + protocolLayerOptions.IfTags = options.AccessConditions.TagConditions; return Details::BlobRestClient::Blob::GetTags( options.Context, *m_pipeline, m_blobUrl, protocolLayerOptions); } diff --git a/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp index 69e29bd2f..cd15247b1 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp @@ -271,8 +271,8 @@ namespace Azure { namespace Storage { namespace Blobs { Details::BlobRestClient::Container::AcquireContainerLeaseOptions protocolLayerOptions; protocolLayerOptions.ProposedLeaseId = proposedLeaseId; protocolLayerOptions.LeaseDuration = duration; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; return Details::BlobRestClient::Container::AcquireLease( options.Context, *m_pipeline, m_containerUrl, protocolLayerOptions); } @@ -283,8 +283,8 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Container::RenewContainerLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; return Details::BlobRestClient::Container::RenewLease( options.Context, *m_pipeline, m_containerUrl, protocolLayerOptions); } @@ -295,8 +295,8 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Container::ReleaseContainerLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; return Details::BlobRestClient::Container::ReleaseLease( options.Context, *m_pipeline, m_containerUrl, protocolLayerOptions); } @@ -309,8 +309,8 @@ namespace Azure { namespace Storage { namespace Blobs { Details::BlobRestClient::Container::ChangeContainerLeaseOptions protocolLayerOptions; protocolLayerOptions.LeaseId = leaseId; protocolLayerOptions.ProposedLeaseId = proposedLeaseId; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; return Details::BlobRestClient::Container::ChangeLease( options.Context, *m_pipeline, m_containerUrl, protocolLayerOptions); } @@ -320,8 +320,8 @@ namespace Azure { namespace Storage { namespace Blobs { { Details::BlobRestClient::Container::BreakContainerLeaseOptions protocolLayerOptions; protocolLayerOptions.BreakPeriod = options.BreakPeriod; - protocolLayerOptions.IfModifiedSince = options.IfModifiedSince; - protocolLayerOptions.IfUnmodifiedSince = options.IfUnmodifiedSince; + protocolLayerOptions.IfModifiedSince = options.AccessConditions.IfModifiedSince; + protocolLayerOptions.IfUnmodifiedSince = options.AccessConditions.IfUnmodifiedSince; return Details::BlobRestClient::Container::BreakLease( options.Context, *m_pipeline, m_containerUrl, protocolLayerOptions); } 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 0da96e5ad..71a281222 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 @@ -930,15 +930,15 @@ namespace Azure { namespace Storage { namespace Test { { std::string leaseId = CreateUniqueLeaseId(); Blobs::AcquireBlobLeaseOptions options; - options.TagConditions = failWhereExpression; + options.AccessConditions.TagConditions = failWhereExpression; EXPECT_THROW(appendBlobClient.AcquireLease(leaseId, 60, options), StorageException); - options.TagConditions = successWhereExpression; + options.AccessConditions.TagConditions = successWhereExpression; EXPECT_NO_THROW(appendBlobClient.AcquireLease(leaseId, 60, options)); Blobs::BreakBlobLeaseOptions options2; - options2.TagConditions = failWhereExpression; + options2.AccessConditions.TagConditions = failWhereExpression; EXPECT_THROW(appendBlobClient.BreakLease(options2), StorageException); - options2.TagConditions = successWhereExpression; + options2.AccessConditions.TagConditions = successWhereExpression; EXPECT_NO_THROW(appendBlobClient.BreakLease(options2)); Blobs::DeleteBlobOptions options3;