1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
6 # Clean up after races: if container priority>0 but there are no
7 # committed container requests for it, reset priority to 0.
8 def self.update_priority
9 if !File.owned?(Rails.root.join('tmp'))
10 Rails.logger.warn("UpdatePriority: not owner of #{Rails.root}/tmp, skipping")
13 lockfile = Rails.root.join('tmp', 'update_priority.lock')
14 File.open(lockfile, File::RDWR|File::CREAT, 0600) do |f|
15 return unless f.flock(File::LOCK_NB|File::LOCK_EX)
16 ActiveRecord::Base.connection.execute("UPDATE containers AS c SET priority=0 WHERE state='Queued' AND priority>0 AND uuid NOT IN (SELECT container_uuid FROM container_requests WHERE priority>0);")
20 def self.run_update_thread
22 Rails.cache.fetch('UpdatePriority', expires_in: 5.seconds) do
28 Thread.current.abort_on_exception = false
32 Rails.logger.error "#{e.class}: #{e}\n#{e.backtrace.join("\n\t")}"
34 ActiveRecord::Base.connection.close