22 : storage_(storage), config_(config) {
30 std::shared_ptr<kcenon::thread::thread_pool> thread_pool,
33 thread_pool_(std::move(thread_pool)),
49 std::lock_guard lock(
mutex_);
68 std::lock_guard lock(
mutex_);
82 if (wait_for_completion) {
101 return execute_cycle();
105 std::lock_guard lock(
mutex_);
124 std::lock_guard lock(
mutex_);
129 std::lock_guard lock(
mutex_);
134 -> std::optional<std::chrono::seconds> {
135 std::lock_guard lock(
mutex_);
141 auto now = std::chrono::steady_clock::now();
143 return std::chrono::seconds{0};
159 std::chrono::seconds interval) {
160 std::lock_guard lock(
mutex_);
165 -> std::chrono::seconds {
171 std::lock_guard lock(
mutex_);
177 std::lock_guard lock(
mutex_);
187 std::unique_lock lock(
mutex_);
228 cycle_in_progress_.store(
true);
230 auto result = storage_.run_migration_cycle();
233 if (!result.failed_uids.empty() && config_.on_migration_error) {
234 for (
const auto&
uid : result.failed_uids) {
235 config_.on_migration_error(
uid,
"Migration failed");
239 cycle_in_progress_.store(
false);
245 std::lock_guard lock(
mutex_);
253 constexpr std::size_t kMaxFailedUids = 100;
~hsm_migration_service()
Destructor - ensures graceful shutdown.
void update_stats(const migration_result &result)
Update cumulative statistics.
void set_progress_callback(migration_service_config::progress_callback callback)
Set the progress callback.
void stop(bool wait_for_completion=true)
Stop the background migration service.
auto get_last_result() const -> std::optional< migration_result >
Get the result of the last migration cycle.
void set_migration_interval(std::chrono::seconds interval)
Update the migration interval.
std::atomic< bool > stop_requested_
Flag to signal shutdown.
std::mutex mutex_
Mutex for thread synchronization.
hsm_migration_service(hsm_storage &storage, const migration_service_config &config={})
Construct migration service.
std::chrono::steady_clock::time_point next_cycle_time_
Time of next scheduled cycle.
std::thread worker_thread_
Background worker thread.
auto cycles_completed() const noexcept -> std::size_t
Get the number of cycles completed.
auto run_migration_cycle() -> migration_result
Manually trigger a migration cycle.
std::atomic< bool > running_
Flag indicating service is running.
auto is_running() const noexcept -> bool
Check if the service is running.
void trigger_cycle()
Trigger next cycle immediately.
void set_error_callback(migration_service_config::error_callback callback)
Set the error callback.
std::atomic< std::size_t > cycles_count_
Number of completed cycles.
auto execute_cycle() -> migration_result
Execute a single migration cycle.
auto get_cumulative_stats() const -> migration_result
Get total statistics since service started.
std::optional< migration_result > last_result_
Last migration result.
auto time_until_next_cycle() const -> std::optional< std::chrono::seconds >
Get the time until the next scheduled migration.
auto get_migration_interval() const noexcept -> std::chrono::seconds
Get the current migration interval.
void run_loop()
Background thread main loop.
migration_result cumulative_stats_
Cumulative statistics.
migration_service_config config_
Service configuration.
void start()
Start the background migration service.
std::condition_variable cv_
Condition variable for sleep/wake.
Background migration service for Hierarchical Storage Management.
Result of a migration operation.
std::chrono::milliseconds duration
Duration of the migration operation.
std::size_t bytes_migrated
Total bytes migrated.
std::size_t instances_migrated
Number of instances successfully migrated.
std::size_t instances_skipped
Number of instances that were skipped (not eligible)
std::vector< std::string > failed_uids
SOP Instance UIDs that failed to migrate.
Configuration for the migration service.
bool auto_start
Whether to start automatically on construction.
std::function< void(const migration_result &result)> progress_callback
Callback for migration progress updates.
std::function< void(const std::string &uid, const std::string &error)> error_callback
Callback for migration errors.
error_callback on_migration_error
progress_callback on_cycle_complete
std::chrono::seconds migration_interval
Interval between migration cycles.