24#include <shared_mutex>
25#include <unordered_map>
106 hsm_storage(std::unique_ptr<storage_interface> hot_tier,
107 std::unique_ptr<storage_interface> warm_tier,
108 std::unique_ptr<storage_interface> cold_tier,
138 -> VoidResult
override;
149 [[nodiscard]]
auto retrieve(std::string_view sop_instance_uid)
160 [[nodiscard]]
auto remove(std::string_view sop_instance_uid)
161 -> VoidResult
override;
169 [[nodiscard]]
auto exists(std::string_view sop_instance_uid)
const
209 [[nodiscard]] auto
get_tier(std::string_view sop_instance_uid) const
231 [[nodiscard]] auto
migrate(std::string_view sop_instance_uid,
296 [[nodiscard]] auto
find_tier(std::string_view sop_instance_uid) const
314 const core::dicom_dataset& dataset);
~hsm_storage() override=default
Destructor.
auto get_tier(std::string_view sop_instance_uid) const -> std::optional< storage_tier >
Get the current tier of an instance.
std::unique_ptr< storage_interface > warm_tier_
Warm tier storage backend (may be nullptr)
std::shared_mutex mutex_
Mutex for thread-safe access.
std::unordered_map< std::string, tier_metadata > metadata_index_
Tier metadata index (SOP Instance UID -> metadata)
auto migrate(std::string_view sop_instance_uid, storage_tier target_tier) -> VoidResult
Manually migrate an instance to a different tier.
void update_metadata(std::string_view sop_instance_uid, storage_tier tier, const core::dicom_dataset &dataset)
Update tier metadata after store/retrieve.
void update_access_time(std::string_view sop_instance_uid)
Update last access time for an instance.
auto get_tier_policy() const -> tier_policy
Get the current tier policy.
auto retrieve(std::string_view sop_instance_uid) -> Result< core::dicom_dataset > override
Retrieve a DICOM dataset by SOP Instance UID.
auto migrate_instance(std::string_view uid, storage_tier from_tier, storage_tier to_tier) -> VoidResult
Migrate a single instance between tiers.
hsm_storage & operator=(const hsm_storage &)=delete
void remove_metadata(std::string_view sop_instance_uid)
Remove tier metadata.
auto remove(std::string_view sop_instance_uid) -> VoidResult override
Remove a DICOM dataset from all tiers.
std::unique_ptr< storage_interface > hot_tier_
Hot tier storage backend.
auto get_tier_metadata(std::string_view sop_instance_uid) const -> std::optional< tier_metadata >
Get tier metadata for an instance.
auto run_migration_cycle() -> migration_result
Run a single migration cycle.
auto verify_integrity() -> VoidResult override
Verify storage integrity across all tiers.
auto find_tier(std::string_view sop_instance_uid) const -> std::optional< storage_tier >
Find which tier contains an instance.
hsm_storage(std::unique_ptr< storage_interface > hot_tier, std::unique_ptr< storage_interface > warm_tier, std::unique_ptr< storage_interface > cold_tier, const hsm_storage_config &config={})
Construct HSM storage with three tier backends.
void set_tier_policy(const tier_policy &policy)
Set the tier policy.
hsm_storage_config config_
HSM configuration.
hsm_storage(const hsm_storage &)=delete
Non-copyable (contains mutex and unique_ptr)
auto exists(std::string_view sop_instance_uid) const -> bool override
Check if a DICOM instance exists in any tier.
auto get_storage(storage_tier tier) const -> storage_interface *
Get the storage backend for a tier.
auto get_tier_storage(storage_tier tier) const -> storage_interface *
Get the storage backend for a specific tier.
auto get_migration_candidates(storage_tier from_tier, storage_tier to_tier) const -> std::vector< tier_metadata >
Get instances eligible for migration.
hsm_storage(hsm_storage &&)=delete
Non-movable (contains mutex)
auto get_hsm_statistics() const -> hsm_statistics
Get HSM-specific statistics.
auto find(const core::dicom_dataset &query) -> Result< std::vector< core::dicom_dataset > > override
Find DICOM datasets matching query criteria across all tiers.
hsm_storage & operator=(hsm_storage &&)=delete
auto store(const core::dicom_dataset &dataset) -> VoidResult override
Store a DICOM dataset to the hot tier.
std::unique_ptr< storage_interface > cold_tier_
Cold tier storage backend (may be nullptr)
auto get_statistics() const -> storage_statistics override
Get combined storage statistics from all tiers.
Types for Hierarchical Storage Management (HSM)
storage_tier
Storage tier classification.
Abstract storage interface for DICOM persistent storage backends.
Combined statistics for all HSM tiers.
Configuration for HSM storage.
bool track_access_time
Whether to track access times for migration decisions When true, retrieves update the last_accessed t...
bool verify_after_migration
Whether to verify data integrity after migration.
tier_policy policy
Tier migration policy.
bool delete_after_migration
Whether to remove source after successful migration When false, data is copied (not moved) between ti...
Result of a migration operation.
Storage statistics structure.