X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c80d4aaea9466e0388b3a57e190292347e1fca18..2f83fcd45b4b23db2bb5bb4afbe1e863ebd77ec6:/services/api/config/initializers/reload_config.rb diff --git a/services/api/config/initializers/reload_config.rb b/services/api/config/initializers/reload_config.rb index 65f02e07a4..b54e3bcf87 100644 --- a/services/api/config/initializers/reload_config.rb +++ b/services/api/config/initializers/reload_config.rb @@ -2,11 +2,10 @@ # # SPDX-License-Identifier: AGPL-3.0 -if !File.owned?(Rails.root.join('tmp')) - Rails.logger.debug("reload_config: not owner of #{Rails.root}/tmp, skipping") -elsif ENV["ARVADOS_CONFIG"] == "none" - Rails.logger.debug("reload_config: no config in use, skipping") -else +# When updating this, please make the same changes in +# apps/workbench/config/initializers/reload_config.rb as well. + +def start_reload_thread Thread.new do lockfile = Rails.root.join('tmp', 'reload_config.lock') File.open(lockfile, File::WRONLY|File::CREAT, 0600) do |f| @@ -35,13 +34,13 @@ else rescue => e Rails.logger.info("reload_config: config file updated but could not be loaded: #{e}") t_lastload = t - continue + next end if hash == hash_lastload # If we reloaded a new or updated file, but the content is # identical, keep polling instead of restarting. t_lastload = t - continue + next end restartfile = Rails.root.join('tmp', 'restart.txt') @@ -50,6 +49,9 @@ else begin File.utime(touchtime, touchtime, restartfile) rescue + # remove + re-create works even if the existing file is + # owned by root, provided the tempdir is writable. + File.unlink(restartfile) rescue nil File.open(restartfile, 'w') {} end # Even if passenger doesn't notice that we hit restart.txt @@ -61,3 +63,15 @@ else end end end + +if !File.owned?(Rails.root.join('tmp')) + Rails.logger.debug("reload_config: not owner of #{Rails.root}/tmp, skipping") +elsif ENV["ARVADOS_CONFIG"] == "none" + Rails.logger.debug("reload_config: no config in use, skipping") +elsif defined?(PhusionPassenger) + PhusionPassenger.on_event(:starting_worker_process) do |forked| + start_reload_thread + end +else + start_reload_thread +end