Class: BackupRestore::SystemInterface
- Inherits:
-
Object
- Object
- BackupRestore::SystemInterface
- Defined in:
- lib/backup_restore/system_interface.rb
Instance Method Summary collapse
- #clear_sidekiq_queues ⇒ Object
- #disable_readonly_mode ⇒ Object
- #enable_readonly_mode ⇒ Object
- #flush_redis ⇒ Object
-
#initialize(logger) ⇒ SystemInterface
constructor
A new instance of SystemInterface.
- #listen_for_shutdown_signal ⇒ Object
- #mark_restore_as_not_running ⇒ Object
- #mark_restore_as_running ⇒ Object
- #pause_sidekiq(reason) ⇒ Object
- #unpause_sidekiq ⇒ Object
- #wait_for_sidekiq ⇒ Object
Constructor Details
#initialize(logger) ⇒ SystemInterface
Returns a new instance of SystemInterface.
13 14 15 16 17 18 |
# File 'lib/backup_restore/system_interface.rb', line 13 def initialize(logger) @logger = logger @current_db = RailsMultisite::ConnectionManagement.current_db @readonly_mode_was_enabled = Discourse.readonly_mode? end |
Instance Method Details
#clear_sidekiq_queues ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/backup_restore/system_interface.rb', line 104 def clear_sidekiq_queues Sidekiq::Queue.all.each do |queue| queue.each { |job| delete_job_if_it_belongs_to_current_site(job) } end Sidekiq::RetrySet.new.each { |job| delete_job_if_it_belongs_to_current_site(job) } Sidekiq::ScheduledSet.new.each { |job| delete_job_if_it_belongs_to_current_site(job) } Sidekiq::DeadSet.new.each { |job| delete_job_if_it_belongs_to_current_site(job) } end |
#disable_readonly_mode ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/backup_restore/system_interface.rb', line 26 def disable_readonly_mode return if @readonly_mode_was_enabled log "Disabling readonly mode..." Discourse.disable_readonly_mode rescue => ex log "Something went wrong while disabling readonly mode.", ex end |
#enable_readonly_mode ⇒ Object
20 21 22 23 24 |
# File 'lib/backup_restore/system_interface.rb', line 20 def enable_readonly_mode return if @readonly_mode_was_enabled log "Enabling readonly mode..." Discourse.enable_readonly_mode end |
#flush_redis ⇒ Object
99 100 101 102 |
# File 'lib/backup_restore/system_interface.rb', line 99 def flush_redis redis = Discourse.redis redis.scan_each(match: "*") { |key| redis.del(key) unless key == SidekiqPauser::PAUSED_KEY } end |
#listen_for_shutdown_signal ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/backup_restore/system_interface.rb', line 46 def listen_for_shutdown_signal BackupRestore.clear_shutdown_signal! Thread.new do Thread.current.name = "shutdown_wait" RailsMultisite::ConnectionManagement.with_connection(@current_db) do while BackupRestore.is_operation_running? exit if BackupRestore.should_shutdown? sleep 0.1 end end end end |
#mark_restore_as_not_running ⇒ Object
39 40 41 42 43 44 |
# File 'lib/backup_restore/system_interface.rb', line 39 def mark_restore_as_not_running log "Marking restore as finished..." BackupRestore.mark_as_not_running! rescue => ex log "Something went wrong while marking restore as finished.", ex end |
#mark_restore_as_running ⇒ Object
34 35 36 37 |
# File 'lib/backup_restore/system_interface.rb', line 34 def mark_restore_as_running log "Marking restore as running..." BackupRestore.mark_as_running! end |
#pause_sidekiq(reason) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/backup_restore/system_interface.rb', line 61 def pause_sidekiq(reason) return if Sidekiq.paused? log "Pausing sidekiq..." Sidekiq.pause!(reason) end |
#unpause_sidekiq ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/backup_restore/system_interface.rb', line 68 def unpause_sidekiq return unless Sidekiq.paused? log "Unpausing sidekiq..." Sidekiq.unpause! rescue => ex log "Something went wrong while unpausing Sidekiq.", ex end |
#wait_for_sidekiq ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/backup_restore/system_interface.rb', line 77 def wait_for_sidekiq # Wait at least 6 seconds because the data about workers is updated every 5 seconds # https://github.com/mperham/sidekiq/wiki/API#workers max_wait_seconds = 60 wait_seconds = 6.0 log "Waiting up to #{max_wait_seconds} seconds for Sidekiq to finish running jobs..." max_iterations = (max_wait_seconds / wait_seconds).ceil iterations = 1 loop do sleep wait_seconds break if !sidekiq_has_running_jobs? iterations += 1 raise RunningSidekiqJobsError.new if iterations > max_iterations log "Waiting for sidekiq to finish running jobs... ##{iterations}" end end |