AccessConditions as a member (#996)

This commit is contained in:
JinmingHu 2020-11-20 10:54:27 +08:00 committed by GitHub
parent c6da8da8c7
commit 980f858676
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 122 additions and 63 deletions

View File

@ -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<int32_t> 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<int32_t> 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;
};
/**

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;