Vaultx.Config.HotReload (Vaultx v0.7.0)
View SourceRuntime configuration hot reloading for VaultX without application restart.
This module provides safe, atomic configuration reloading capabilities that allow VaultX to update its configuration at runtime without requiring application restart. It includes validation, backup, rollback, and notification mechanisms to ensure reliable configuration updates.
Features
- Atomic Updates: Configuration changes are applied atomically
- Validation: New configuration is validated before application
- Backup & Rollback: Automatic backup and rollback on failure
- Change Notifications: Notify components of configuration changes
- Health Checks: Verify system health after configuration changes
- Graceful Degradation: Handle partial failures gracefully
Safety Mechanisms
Pre-Update Validation
- Configuration syntax and type validation
- Connectivity testing with new settings
- Security policy compliance checking
- Performance impact assessment
Post-Update Verification
- System health checks
- Connectivity verification
- Performance monitoring
- Error rate monitoring
Rollback Triggers
- Validation failures
- Connectivity issues
- Performance degradation
- Error rate increases
- Manual rollback requests
Usage
# Simple hot reload
:ok = Vaultx.Config.HotReload.reload_configuration(new_config)
# Hot reload with validation and backup
:ok = Vaultx.Config.HotReload.reload_configuration(new_config,
validate: true,
backup: true,
rollback_on_error: true
)
# Check reload status
{:ok, status} = Vaultx.Config.HotReload.get_reload_status()Integration
This module integrates with the existing VaultX configuration system and maintains compatibility with all existing configuration mechanisms.
Summary
Functions
Returns a specification to start this module under a supervisor.
Clears the configuration backup.
Gets the current reload status.
Reloads configuration at runtime with the specified options.
Rolls back to the previous configuration if a backup is available.
Starts the hot reload server.
Types
@type reload_options() :: [ validate: boolean(), backup: boolean(), rollback_on_error: boolean(), health_check_timeout: pos_integer(), notification_timeout: pos_integer() ]
@type reload_result() :: :ok | {:error, Vaultx.Base.Error.t()}
@type reload_status() :: %{ status: :idle | :reloading | :validating | :applying | :verifying | :failed, last_reload_at: DateTime.t() | nil, last_error: String.t() | nil, backup_available: boolean(), reload_count: non_neg_integer() }
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec clear_backup() :: :ok | {:error, Vaultx.Base.Error.t()}
Clears the configuration backup.
Returns
:ok- Backup cleared{:error, reason}- Failed to clear backup
@spec get_reload_status() :: {:ok, reload_status()} | {:error, Vaultx.Base.Error.t()}
Gets the current reload status.
Returns
{:ok, status}- Current reload status{:error, reason}- Failed to get status
Examples
{:ok, status} = Vaultx.Config.HotReload.get_reload_status()
case status.status do
:idle -> IO.puts("No reload in progress")
:reloading -> IO.puts("Reload in progress")
:failed -> IO.puts("Last reload failed: #{status.last_error}")
end
@spec reload_configuration(map() | keyword(), reload_options()) :: reload_result()
Reloads configuration at runtime with the specified options.
Parameters
new_config- New configuration map or keyword listopts- Reload options
Options
:validate- Validate configuration before applying (default: true):backup- Create backup of current configuration (default: true):rollback_on_error- Automatically rollback on errors (default: true):health_check_timeout- Timeout for health checks in ms (default: 30_000):notification_timeout- Timeout for notifications in ms (default: 5_000)
Returns
:ok- Configuration reloaded successfully{:error, reason}- Reload failed
Examples
# Simple reload
:ok = Vaultx.Config.HotReload.reload_configuration(new_config)
# Reload with custom options
:ok = Vaultx.Config.HotReload.reload_configuration(new_config,
validate: true,
backup: true,
rollback_on_error: true,
health_check_timeout: 60_000
)
@spec rollback() :: reload_result()
Rolls back to the previous configuration if a backup is available.
Returns
:ok- Rollback successful{:error, reason}- Rollback failed
Examples
case Vaultx.Config.HotReload.rollback() do
:ok -> IO.puts("Rollback successful")
{:error, reason} -> IO.puts("Rollback failed: #{reason}")
end
@spec start_link(keyword()) :: GenServer.on_start()
Starts the hot reload server.
This function is typically called by the application supervisor.