29#include <shared_mutex>
31#include <unordered_map>
125 std::function<bool(std::size_t bytes_transferred, std::size_t total_bytes)>;
223 -> VoidResult
override;
233 [[nodiscard]]
auto retrieve(std::string_view sop_instance_uid)
242 [[nodiscard]]
auto remove(std::string_view sop_instance_uid)
243 -> VoidResult
override;
253 [[nodiscard]]
auto exists(std::string_view sop_instance_uid)
const
310 ->
Result<core::dicom_dataset>;
318 [[nodiscard]] auto
get_blob_name(std::string_view sop_instance_uid) const
354 std::string_view tier) -> VoidResult;
369 std::string_view series_uid,
370 std::string_view sop_uid) const
378 [[nodiscard]] static auto
sanitize_uid(std::string_view
uid) -> std::
string;
388 const std::vector<std::uint8_t> &data,
398 [[nodiscard]] static auto
matches_query(const core::dicom_dataset &dataset,
399 const core::dicom_dataset &query)
Abstract interface for Azure Blob client operations.
azure_storage_config config_
Storage configuration.
auto exists(std::string_view sop_instance_uid) const -> bool override
Check if a DICOM instance exists in Azure Storage.
azure_blob_storage(azure_blob_storage &&)=delete
Non-movable (contains mutex)
auto is_connected() const -> bool
Check Azure connectivity.
auto find(const core::dicom_dataset &query) -> Result< std::vector< core::dicom_dataset > > override
Find DICOM datasets matching query criteria.
auto build_blob_name(std::string_view study_uid, std::string_view series_uid, std::string_view sop_uid) const -> std::string
Build blob name for a dataset.
std::unordered_map< std::string, azure_blob_info > index_
Mapping from SOP Instance UID to Azure blob info.
static auto sanitize_uid(std::string_view uid) -> std::string
Sanitize UID for use in blob name.
auto remove(std::string_view sop_instance_uid) -> VoidResult override
Remove a DICOM blob from Azure Storage.
auto rebuild_index() -> VoidResult
Rebuild the local index from Azure.
std::unique_ptr< azure_client_interface > client_
Azure client (mock for testing, Azure SDK for production)
auto store_with_progress(const core::dicom_dataset &dataset, azure_progress_callback callback) -> VoidResult
Store with progress tracking.
auto retrieve_with_progress(std::string_view sop_instance_uid, azure_progress_callback callback) -> Result< core::dicom_dataset >
Retrieve with progress tracking.
~azure_blob_storage() override
Destructor.
auto upload_block_blob(const std::string &blob_name, const std::vector< std::uint8_t > &data, azure_progress_callback callback) -> VoidResult
Execute block blob upload for large files.
azure_blob_storage & operator=(azure_blob_storage &&)=delete
azure_blob_storage(const azure_blob_storage &)=delete
Non-copyable (contains mutex)
std::shared_mutex mutex_
Mutex for thread-safe access.
auto verify_integrity() -> VoidResult override
Verify storage integrity.
auto store(const core::dicom_dataset &dataset) -> VoidResult override
Store a DICOM dataset to Azure Blob Storage.
auto set_access_tier(std::string_view sop_instance_uid, std::string_view tier) -> VoidResult
Set blob access tier.
auto get_blob_name(std::string_view sop_instance_uid) const -> std::string
Get the blob name for a SOP Instance UID.
auto retrieve(std::string_view sop_instance_uid) -> Result< core::dicom_dataset > override
Retrieve a DICOM dataset by SOP Instance UID.
auto container_name() const -> const std::string &
Get the container name.
static auto matches_query(const core::dicom_dataset &dataset, const core::dicom_dataset &query) -> bool
Check if dataset matches query criteria.
auto get_statistics() const -> storage_statistics override
Get storage statistics.
azure_blob_storage & operator=(const azure_blob_storage &)=delete
azure_blob_storage(const azure_storage_config &config)
Construct Azure Blob storage with configuration.
DICOM Dataset - ordered collection of Data Elements.
std::function< bool(std::size_t bytes_transferred, std::size_t total_bytes)> azure_progress_callback
Callback type for upload/download progress tracking.
Abstract storage interface for DICOM persistent storage backends.
Information about an Azure Blob object.
std::string sop_instance_uid
SOP Instance UID from DICOM metadata.
std::size_t size_bytes
Blob size in bytes.
std::string study_instance_uid
Study Instance UID.
std::string blob_name
Blob name (path within container)
std::string series_instance_uid
Series Instance UID.
std::string etag
ETag for integrity verification.
std::string content_type
Content type.
std::string content_md5
Content MD5 hash.
Configuration for Azure Blob storage.
std::optional< std::string > endpoint_suffix
Optional endpoint suffix for sovereign clouds (e.g., "core.chinacloudapi.cn") If empty,...
std::size_t block_upload_threshold
Threshold for block blob upload in bytes (default: 100MB) Files larger than this will use block blob ...
std::size_t block_size
Block size for block blob upload in bytes (default: 4MB) Azure allows up to 4000MB per block (API ver...
bool use_https
Enable HTTPS (default: true)
std::string container_name
Azure Blob container name for storing DICOM files.
std::size_t max_concurrency
Maximum number of concurrent upload threads.
std::string access_tier
Blob tier (Hot, Cool, Archive)
std::optional< std::string > endpoint_url
Optional custom endpoint URL for Azurite emulator If set, this takes precedence over connection_strin...
std::uint32_t connect_timeout_ms
Connection timeout in milliseconds.
std::uint32_t request_timeout_ms
Request timeout in milliseconds.
std::uint32_t max_retries
Retry count for transient failures.
std::string connection_string
Connection string for Azure Storage account Format: DefaultEndpointsProtocol=https;AccountName=....
std::uint32_t retry_delay_ms
Initial retry delay in milliseconds.
Storage statistics structure.