Added SetExpiry DataLake convenience layer. (#696)
This commit is contained in:
parent
e238e28b0d
commit
a898fd819a
@ -227,6 +227,18 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
const std::string& file,
|
||||
const DownloadFileToOptions& options = DownloadFileToOptions()) const;
|
||||
|
||||
/**
|
||||
* @brief Schedules the file for deletion.
|
||||
* @param expiryOrigin Specify the origin of expiry.
|
||||
* @param options Optional parameters to schedule the file for deletion.
|
||||
* @return Azure::Core::Response<ScheduleFileDeletionResult> containing the information and
|
||||
* content returned when schedule the file for deletion.
|
||||
* @remark This request is sent to blob endpoint.
|
||||
*/
|
||||
Azure::Core::Response<ScheduleFileDeletionResult> ScheduleDeletion(
|
||||
ScheduleFileExpiryOriginType expiryOrigin,
|
||||
const ScheduleFileDeletionOptions& options = ScheduleFileDeletionOptions()) const;
|
||||
|
||||
private:
|
||||
Blobs::BlockBlobClient m_blockBlobClient;
|
||||
|
||||
|
||||
@ -681,6 +681,32 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
int Concurrency = 1;
|
||||
};
|
||||
|
||||
using ScheduleFileExpiryOriginType = Blobs::ScheduleBlobExpiryOriginType;
|
||||
|
||||
/**
|
||||
* @brief Optional parameters for FileClient::UploadFromBuffer and FileClient::UploadFromFile
|
||||
*/
|
||||
struct ScheduleFileDeletionOptions
|
||||
{
|
||||
/**
|
||||
* @brief Context for cancelling long running operations.
|
||||
*/
|
||||
Azure::Core::Context Context;
|
||||
|
||||
/**
|
||||
* @brief The expiry time from the specified origin. Only work if ExpiryOrigin is
|
||||
* ScheduleFileExpiryOriginType::RelativeToCreation or
|
||||
* ScheduleFileExpiryOriginType::RelativeToNow.
|
||||
*/
|
||||
Azure::Core::Nullable<int64_t> TimeToExpireInMs;
|
||||
|
||||
/**
|
||||
* @brief The expiry time in RFC1123 format. Only work if ExpiryOrigin is
|
||||
* ScheduleFileExpiryOriginType::Absolute.
|
||||
*/
|
||||
Azure::Core::Nullable<std::string> ExpiresOn;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Optional parameters for FileClient::DownloadToBuffer and FileClient::DownloadToFile.
|
||||
*/
|
||||
|
||||
@ -93,6 +93,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
Azure::Core::Nullable<Blobs::CopyStatus> CopyStatus;
|
||||
Azure::Core::Nullable<std::string> CopyProgress;
|
||||
Azure::Core::Nullable<std::string> CopyCompletionTime;
|
||||
Azure::Core::Nullable<std::string> ExpiryTime;
|
||||
Azure::Core::Nullable<std::string> LastAccessTime;
|
||||
};
|
||||
|
||||
struct GetPathAccessControlResult
|
||||
@ -128,6 +130,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
using UploadFileFromResult = Blobs::UploadBlockBlobResult;
|
||||
using AppendFileDataResult = PathAppendDataResult;
|
||||
using FlushFileDataResult = PathFlushDataResult;
|
||||
using ScheduleFileDeletionResult = Blobs::SetBlobExpiryResult;
|
||||
|
||||
struct ReadFileResult
|
||||
{
|
||||
@ -143,6 +146,9 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
LeaseStatusType LeaseStatus = LeaseStatusType::Unknown;
|
||||
Azure::Core::Nullable<std::string> ContentMd5;
|
||||
std::map<std::string, std::string> Metadata;
|
||||
std::string CreationTime;
|
||||
Azure::Core::Nullable<std::string> ExpiryTime;
|
||||
Azure::Core::Nullable<std::string> LastAccessTime;
|
||||
};
|
||||
|
||||
struct RenameFileResult
|
||||
|
||||
@ -323,6 +323,9 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
? FromBlobLeaseStatus(result->LeaseStatus.GetValue())
|
||||
: ret.LeaseStatus;
|
||||
ret.Metadata = std::move(result->Metadata);
|
||||
ret.CreationTime = std::move(result->CreationTime);
|
||||
ret.ExpiryTime = std::move(result->ExpiryTime);
|
||||
ret.LastAccessTime = std::move(result->LastAccessTime);
|
||||
return Azure::Core::Response<ReadFileResult>(std::move(ret), result.ExtractRawResponse());
|
||||
}
|
||||
|
||||
@ -386,4 +389,26 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
return Azure::Core::Response<DownloadFileToResult>(std::move(ret), result.ExtractRawResponse());
|
||||
}
|
||||
|
||||
Azure::Core::Response<ScheduleFileDeletionResult> FileClient::ScheduleDeletion(
|
||||
ScheduleFileExpiryOriginType expiryOrigin,
|
||||
const ScheduleFileDeletionOptions& options) const
|
||||
{
|
||||
Blobs::BlobRestClient::Blob::SetBlobExpiryOptions protocolLayerOptions;
|
||||
protocolLayerOptions.ExpiryOrigin = expiryOrigin;
|
||||
if (options.ExpiresOn.HasValue() && options.TimeToExpireInMs.HasValue())
|
||||
{
|
||||
throw std::runtime_error("ExpiresOn and TimeToExpireInMs should be mutually exlusive.");
|
||||
}
|
||||
if (options.ExpiresOn.HasValue())
|
||||
{
|
||||
protocolLayerOptions.ExpiryTime = options.ExpiresOn;
|
||||
}
|
||||
else if (options.TimeToExpireInMs.HasValue())
|
||||
{
|
||||
protocolLayerOptions.ExpiryTime = std::to_string(options.TimeToExpireInMs.GetValue());
|
||||
}
|
||||
return Blobs::BlobRestClient::Blob::ScheduleDeletion(
|
||||
options.Context, *m_pipeline, m_blobClient.m_blobUrl, protocolLayerOptions);
|
||||
}
|
||||
|
||||
}}}} // namespace Azure::Storage::Files::DataLake
|
||||
|
||||
@ -303,6 +303,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
ret.CopyStatus = std::move(result->CopyStatus);
|
||||
ret.CopyProgress = std::move(result->CopyProgress);
|
||||
ret.CopyCompletionTime = std::move(result->CopyCompletionTime);
|
||||
ret.ExpiryTime = std::move(result->ExpiryTime);
|
||||
ret.LastAccessTime = std::move(result->LastAccessTime);
|
||||
return Azure::Core::Response<GetPathPropertiesResult>(
|
||||
std::move(ret), result.ExtractRawResponse());
|
||||
}
|
||||
|
||||
@ -377,4 +377,45 @@ namespace Azure { namespace Storage { namespace Test {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DataLakeFileClientTest, ScheduleForDeletion)
|
||||
{
|
||||
{
|
||||
auto client = m_fileSystemClient->GetFileClient(LowercaseRandomString());
|
||||
EXPECT_NO_THROW(client.Create());
|
||||
EXPECT_NO_THROW(
|
||||
client.ScheduleDeletion(Files::DataLake::ScheduleFileExpiryOriginType::NeverExpire));
|
||||
}
|
||||
{
|
||||
auto client = m_fileSystemClient->GetFileClient(LowercaseRandomString());
|
||||
EXPECT_NO_THROW(client.Create());
|
||||
Files::DataLake::ScheduleFileDeletionOptions options;
|
||||
EXPECT_THROW(
|
||||
client.ScheduleDeletion(
|
||||
Files::DataLake::ScheduleFileExpiryOriginType::RelativeToNow, options),
|
||||
StorageError);
|
||||
options.TimeToExpireInMs = 1000;
|
||||
EXPECT_NO_THROW(client.ScheduleDeletion(
|
||||
Files::DataLake::ScheduleFileExpiryOriginType::RelativeToNow, options));
|
||||
}
|
||||
{
|
||||
auto client = m_fileSystemClient->GetFileClient(LowercaseRandomString());
|
||||
EXPECT_NO_THROW(client.Create());
|
||||
Files::DataLake::ScheduleFileDeletionOptions options;
|
||||
EXPECT_THROW(
|
||||
client.ScheduleDeletion(Files::DataLake::ScheduleFileExpiryOriginType::Absolute, options),
|
||||
StorageError);
|
||||
options.TimeToExpireInMs = 1000;
|
||||
EXPECT_THROW(
|
||||
client.ScheduleDeletion(Files::DataLake::ScheduleFileExpiryOriginType::Absolute, options),
|
||||
StorageError);
|
||||
options.ExpiresOn = "Tue, 29 Sep 2100 09:53:03 GMT";
|
||||
EXPECT_THROW(
|
||||
client.ScheduleDeletion(Files::DataLake::ScheduleFileExpiryOriginType::Absolute, options),
|
||||
std::runtime_error);
|
||||
options.TimeToExpireInMs = Azure::Core::Nullable<int64_t>();
|
||||
EXPECT_NO_THROW(client.ScheduleDeletion(
|
||||
Files::DataLake::ScheduleFileExpiryOriginType::Absolute, options));
|
||||
}
|
||||
}
|
||||
|
||||
}}} // namespace Azure::Storage::Test
|
||||
|
||||
Loading…
Reference in New Issue
Block a user