Class: BackupRestore::SystemInterface

Inherits:
Object
  • Object
show all
Defined in:
lib/backup_restore/system_interface.rb

Instance Method Summary collapse

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_queuesObject



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_modeObject



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_modeObject



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_redisObject



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_signalObject



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_runningObject



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_runningObject



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_sidekiqObject



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_sidekiqObject



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