azure-storage-blobs
blob_lease_client.hpp
1 // Copyright (c) Microsoft Corporation. All rights reserved.
2 // SPDX-License-Identifier: MIT
3 
4 #pragma once
5 
6 #include <chrono>
7 #include <mutex>
8 #include <string>
9 
10 #include "azure/storage/blobs/blob_client.hpp"
11 #include "azure/storage/blobs/blob_container_client.hpp"
12 
13 namespace Azure { namespace Storage { namespace Blobs {
14 
18  class BlobLeaseClient final {
19  public:
26  explicit BlobLeaseClient(BlobClient blobClient, std::string leaseId)
27  : m_blobClient(std::move(blobClient)), m_leaseId(std::move(leaseId))
28  {
29  }
30 
38  explicit BlobLeaseClient(BlobContainerClient blobContainerClient, std::string leaseId)
39  : m_blobContainerClient(std::move(blobContainerClient)), m_leaseId(std::move(leaseId))
40  {
41  }
42 
48  static std::string CreateUniqueLeaseId();
49 
53  AZ_STORAGE_BLOBS_DLLEXPORT const static std::chrono::seconds InfiniteLeaseDuration;
54 
60  std::string GetLeaseId()
61  {
62  std::lock_guard<std::mutex> guard(m_mutex);
63  return m_leaseId;
64  }
65 
77  Azure::Response<Models::AcquireLeaseResult> Acquire(
78  std::chrono::seconds duration,
79  const AcquireLeaseOptions& options = AcquireLeaseOptions(),
80  const Azure::Core::Context& context = Azure::Core::Context());
81 
89  Azure::Response<Models::RenewLeaseResult> Renew(
90  const RenewLeaseOptions& options = RenewLeaseOptions(),
91  const Azure::Core::Context& context = Azure::Core::Context());
92 
100  Azure::Response<Models::ReleaseLeaseResult> Release(
101  const ReleaseLeaseOptions& options = ReleaseLeaseOptions(),
102  const Azure::Core::Context& context = Azure::Core::Context());
103 
113  Azure::Response<Models::ChangeLeaseResult> Change(
114  const std::string& proposedLeaseId,
115  const ChangeLeaseOptions& options = ChangeLeaseOptions(),
116  const Azure::Core::Context& context = Azure::Core::Context());
117 
125  Azure::Response<Models::BreakLeaseResult> Break(
126  const BreakLeaseOptions& options = BreakLeaseOptions(),
127  const Azure::Core::Context& context = Azure::Core::Context());
128 
129  private:
130  Azure::Nullable<BlobClient> m_blobClient;
131  Azure::Nullable<BlobContainerClient> m_blobContainerClient;
132  std::mutex m_mutex;
133  std::string m_leaseId;
134  };
135 
136 }}} // namespace Azure::Storage::Blobs
Azure::Storage::Blobs::ChangeLeaseOptions
Optional parameters for Azure::Storage::Blobs::BlobLeaseClient::Change.
Definition: blob_options.hpp:619
AZ_STORAGE_BLOBS_DLLEXPORT
#define AZ_STORAGE_BLOBS_DLLEXPORT
Applies DLL export attribute, when applicable.
Definition: dll_import_export.hpp:36
Azure::Storage::Blobs::AcquireLeaseOptions
Optional parameters for Azure::Storage::Blobs::BlobLeaseClient::Acquire.
Definition: blob_options.hpp:597
Azure::Storage::Blobs::BlobClient
The BlobClient allows you to manipulate Azure Storage blobs.
Definition: blob_client.hpp:34
Azure::Storage::Blobs::BlobContainerClient
Definition: blob_container_client.hpp:20
Azure::Storage::Blobs::BlobLeaseClient::CreateUniqueLeaseId
static std::string CreateUniqueLeaseId()
Gets a unique lease ID.
Definition: blob_lease_client.cpp:13
Azure::Storage::Blobs::BlobLeaseClient::BlobLeaseClient
BlobLeaseClient(BlobContainerClient blobContainerClient, std::string leaseId)
Initializes a new instance of the BlobLeaseClient.
Definition: blob_lease_client.hpp:38
Azure::Storage::Blobs::BlobLeaseClient::GetLeaseId
std::string GetLeaseId()
Get lease id of this lease client.
Definition: blob_lease_client.hpp:60
Azure::Storage::Blobs::ReleaseLeaseOptions
Optional parameters for Azure::Storage::Blobs::BlobLeaseClient::Release.
Definition: blob_options.hpp:630
Azure::Storage::Blobs::BlobLeaseClient::Change
Azure::Response< Models::ChangeLeaseResult > Change(const std::string &proposedLeaseId, const ChangeLeaseOptions &options=ChangeLeaseOptions(), const Azure::Core::Context &context=Azure::Core::Context())
Changes the lease of an active lease.
Definition: blob_lease_client.cpp:214
Azure::Storage::Blobs::BlobLeaseClient::InfiniteLeaseDuration
AZ_STORAGE_BLOBS_DLLEXPORT static const std::chrono::seconds InfiniteLeaseDuration
A value representing infinite lease duration.
Definition: blob_lease_client.hpp:53
Azure::Storage::Blobs::BlobLeaseClient::Release
Azure::Response< Models::ReleaseLeaseResult > Release(const ReleaseLeaseOptions &options=ReleaseLeaseOptions(), const Azure::Core::Context &context=Azure::Core::Context())
Releases the blob or blob container's previously-acquired lease.
Definition: blob_lease_client.cpp:151
Azure::Storage::Blobs::BlobLeaseClient::Break
Azure::Response< Models::BreakLeaseResult > Break(const BreakLeaseOptions &options=BreakLeaseOptions(), const Azure::Core::Context &context=Azure::Core::Context())
Breaks the previously-acquired lease.
Definition: blob_lease_client.cpp:292
Azure::Storage::Blobs::BlobLeaseClient::Acquire
Azure::Response< Models::AcquireLeaseResult > Acquire(std::chrono::seconds duration, const AcquireLeaseOptions &options=AcquireLeaseOptions(), const Azure::Core::Context &context=Azure::Core::Context())
Acquires a lease on the blob or blob container.
Definition: blob_lease_client.cpp:18
Azure::Storage::Blobs::BlobLeaseClient::Renew
Azure::Response< Models::RenewLeaseResult > Renew(const RenewLeaseOptions &options=RenewLeaseOptions(), const Azure::Core::Context &context=Azure::Core::Context())
Renews the blob or blob container's previously-acquired lease.
Definition: blob_lease_client.cpp:86
Azure::Storage::Blobs::BlobLeaseClient::BlobLeaseClient
BlobLeaseClient(BlobClient blobClient, std::string leaseId)
Initializes a new instance of the BlobLeaseClient.
Definition: blob_lease_client.hpp:26
Azure::Storage::Blobs::BlobLeaseClient
BlobLeaseClient allows you to manipulate Azure Storage leases on containers and blobs.
Definition: blob_lease_client.hpp:18
Azure::Storage::Blobs::RenewLeaseOptions
Optional parameters for Azure::Storage::Blobs::BlobLeaseClient::Renew.
Definition: blob_options.hpp:608
Azure::Storage::Blobs::BreakLeaseOptions
Optional parameters for Azure::Storage::Blobs::BlobLeaseClient::Break.
Definition: blob_options.hpp:641