X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/925a1526383299a1ade38a18e616564ab8c38da4..6dd8a072ec2e305df687f72dd294d760ae6c8e23:/services/api/app/models/node.rb diff --git a/services/api/app/models/node.rb b/services/api/app/models/node.rb index e0cdda1562..82ea0acbd6 100644 --- a/services/api/app/models/node.rb +++ b/services/api/app/models/node.rb @@ -1,3 +1,5 @@ +require 'tempfile' + class Node < ArvadosModel include HasUuid include KindAndEtag @@ -47,7 +49,7 @@ class Node < ArvadosModel def crunch_worker_state return 'down' if slot_number.nil? case self.info.andand['slurm_state'] - when 'alloc', 'comp' + when 'alloc', 'comp', 'mix', 'drng' 'busy' when 'idle' 'idle' @@ -102,7 +104,7 @@ class Node < ArvadosModel # Assign slot_number if self.slot_number.nil? - try_slot = 0 + try_slot = 1 begin self.slot_number = try_slot begin @@ -171,22 +173,30 @@ class Node < ArvadosModel } if Rails.configuration.dns_server_conf_dir and Rails.configuration.dns_server_conf_template + tmpfile = nil begin begin template = IO.read(Rails.configuration.dns_server_conf_template) - rescue => e + rescue IOError, SystemCallError => e logger.error "Reading #{Rails.configuration.dns_server_conf_template}: #{e.message}" raise end hostfile = File.join Rails.configuration.dns_server_conf_dir, "#{hostname}.conf" - File.open hostfile+'.tmp', 'w' do |f| + Tempfile.open(["#{hostname}-", ".conf.tmp"], + Rails.configuration.dns_server_conf_dir) do |f| + tmpfile = f.path f.puts template % template_vars end - File.rename hostfile+'.tmp', hostfile - rescue => e + File.rename tmpfile, hostfile + rescue IOError, SystemCallError => e logger.error "Writing #{hostfile}: #{e.message}" ok = false + ensure + if tmpfile and File.file? tmpfile + # Cleanup remaining temporary file. + File.unlink tmpfile + end end end @@ -205,7 +215,7 @@ class Node < ArvadosModel # Typically, this is used to trigger a dns server restart f.puts Rails.configuration.dns_server_reload_command end - rescue => e + rescue IOError, SystemCallError => e logger.error "Unable to write #{restartfile}: #{e.message}" ok = false end