Raxol.Core.Session.SessionMigrator (Raxol v2.0.1)

View Source

Handles session migration and failover scenarios in a distributed environment.

The SessionMigrator provides capabilities for moving sessions between nodes, handling node failures, load balancing, and maintaining session continuity during cluster topology changes.

Features

  • Live session migration with minimal downtime
  • Automatic failover on node failure
  • Load-based session redistribution
  • Rolling cluster updates with session preservation
  • Migration rollback and recovery
  • Performance impact monitoring during migrations

Migration Strategies

  • Hot Migration: Zero-downtime migration using shadow copies
  • Warm Migration: Brief pause during migration commit
  • Cold Migration: Full session suspension during migration
  • Bulk Migration: Efficient batch migration for maintenance

Failover Modes

  • Immediate: Instant failover to available replicas
  • Graceful: Coordinated failover with state synchronization
  • Manual: Administrator-controlled failover process

Usage

# Start migrator
{:ok, pid} = SessionMigrator.start_link(
  failover_mode: :graceful,
  migration_batch_size: 50,
  max_concurrent_migrations: 5
)

# Migrate single session
SessionMigrator.migrate_session(pid, session_id, target_node, :hot)

# Migrate all sessions from a node
SessionMigrator.evacuate_node(pid, source_node, [:target1, :target2])

# Handle node failure
SessionMigrator.handle_node_failure(pid, failed_node)

Summary

Types

failover_mode()

@type failover_mode() :: :immediate | :graceful | :manual

migration_info()

@type migration_info() :: %{
  session_id: binary(),
  source_node: node(),
  target_node: node(),
  strategy: migration_strategy(),
  status: migration_status(),
  started_at: DateTime.t(),
  completed_at: DateTime.t() | nil,
  rollback_data: term() | nil
}

migration_status()

@type migration_status() ::
  :pending | :in_progress | :completed | :failed | :rolled_back

migration_strategy()

@type migration_strategy() :: :hot | :warm | :cold | :bulk

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

evacuate_node(pid, source_node, target_nodes)

@spec evacuate_node(pid(), node(), [node()]) ::
  {:ok, non_neg_integer()} | {:error, term()}

get_migration_stats(pid)

@spec get_migration_stats(pid()) :: %{
  total_migrations: non_neg_integer(),
  successful_migrations: non_neg_integer(),
  failed_migrations: non_neg_integer(),
  average_migration_time: float(),
  active_migrations: non_neg_integer()
}

get_migration_status(pid, session_id)

@spec get_migration_status(pid(), binary()) ::
  {:ok, migration_info()} | {:error, term()}

handle_manager_call(request, from, state)

Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_call/3.

handle_manager_cast(msg, state)

Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_cast/2.

handle_manager_info(msg, state)

Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_info/2.

handle_node_failure(pid, failed_node)

@spec handle_node_failure(pid(), node()) :: {:ok, term()} | {:error, term()}

list_active_migrations(pid)

@spec list_active_migrations(pid()) :: {:ok, [migration_info()]}

migrate_session(pid, session_id, target_node, strategy)

@spec migrate_session(pid(), binary(), node(), migration_strategy()) ::
  {:ok, migration_info()} | {:error, term()}

migrate_sessions_bulk(pid, session_ids, target_node, strategy)

@spec migrate_sessions_bulk(pid(), [binary()], node(), migration_strategy()) ::
  {:ok, [migration_info()]} | {:error, term()}

rebalance_sessions(pid, rebalance_config)

@spec rebalance_sessions(pid(), map()) :: {:ok, non_neg_integer()} | {:error, term()}

rollback_migration(pid, session_id)

@spec rollback_migration(pid(), binary()) :: {:ok, term()} | {:error, term()}

start_link(init_opts \\ [])