projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
:none dispatcher only runs one job at a time.
[arvados.git]
/
services
/
api
/
app
/
models
/
node.rb
diff --git
a/services/api/app/models/node.rb
b/services/api/app/models/node.rb
index 21d249b625792b6ce0d38aeb49b076390426a749..71d4dea2c0cc815c7b29c30c8d0d7dac40c31cf1 100644
(file)
--- a/
services/api/app/models/node.rb
+++ b/
services/api/app/models/node.rb
@@
-1,5
+1,5
@@
class Node < ArvadosModel
class Node < ArvadosModel
- include
Assign
Uuid
+ include
Has
Uuid
include KindAndEtag
include CommonApiTemplate
serialize :info, Hash
include KindAndEtag
include CommonApiTemplate
serialize :info, Hash
@@
-37,7
+37,7
@@
class Node < ArvadosModel
end
def crunch_worker_state
end
def crunch_worker_state
- case self.info.andand[
:slurm_state
]
+ case self.info.andand[
'slurm_state'
]
when 'alloc', 'comp'
'busy'
when 'idle'
when 'alloc', 'comp'
'busy'
when 'idle'
@@
-64,8
+64,8
@@
class Node < ArvadosModel
def ping(o)
raise "must have :ip and :ping_secret" unless o[:ip] and o[:ping_secret]
def ping(o)
raise "must have :ip and :ping_secret" unless o[:ip] and o[:ping_secret]
- if o[:ping_secret] != self.info[
:ping_secret
]
- logger.info "Ping: secret mismatch: received \"#{o[:ping_secret]}\" != \"#{self.info[
:ping_secret
]}\""
+ if o[:ping_secret] != self.info[
'ping_secret'
]
+ logger.info "Ping: secret mismatch: received \"#{o[:ping_secret]}\" != \"#{self.info[
'ping_secret'
]}\""
raise ArvadosModel::UnauthorizedError.new("Incorrect ping_secret")
end
self.last_ping_at = Time.now
raise ArvadosModel::UnauthorizedError.new("Incorrect ping_secret")
end
self.last_ping_at = Time.now
@@
-81,16
+81,16
@@
class Node < ArvadosModel
# Record instance ID if not already known
if o[:ec2_instance_id]
# Record instance ID if not already known
if o[:ec2_instance_id]
- if !self.info[
:ec2_instance_id]
- self.info[
:ec2_instance_id
] = o[:ec2_instance_id]
+ if !self.info[
'ec2_instance_id']
+ self.info[
'ec2_instance_id'
] = o[:ec2_instance_id]
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
tag_cmd = ("ec2-create-tags #{o[:ec2_instance_id]} " +
"--tag 'Name=#{self.uuid}'")
`#{tag_cmd}`
end
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
tag_cmd = ("ec2-create-tags #{o[:ec2_instance_id]} " +
"--tag 'Name=#{self.uuid}'")
`#{tag_cmd}`
end
- elsif self.info[
:ec2_instance_id
] != o[:ec2_instance_id]
+ elsif self.info[
'ec2_instance_id'
] != o[:ec2_instance_id]
logger.debug "Multiple nodes have credentials for #{self.uuid}"
logger.debug "Multiple nodes have credentials for #{self.uuid}"
- raise "#{self.uuid} is already running at #{self.info[
:ec2_instance_id
]} so rejecting ping from #{o[:ec2_instance_id]}"
+ raise "#{self.uuid} is already running at #{self.info[
'ec2_instance_id'
]} so rejecting ping from #{o[:ec2_instance_id]}"
end
end
end
end
@@
-108,19
+108,28
@@
class Node < ArvadosModel
raise "No available node slots" if try_slot == MAX_SLOTS
end while true
self.hostname = self.class.hostname_for_slot(self.slot_number)
raise "No available node slots" if try_slot == MAX_SLOTS
end while true
self.hostname = self.class.hostname_for_slot(self.slot_number)
- if info[
:ec2_instance_id
]
+ if info[
'ec2_instance_id'
]
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
- `ec2-create-tags #{self.info[
:ec2_instance_id
]} --tag 'hostname=#{self.hostname}'`
+ `ec2-create-tags #{self.info[
'ec2_instance_id'
]} --tag 'hostname=#{self.hostname}'`
end
end
end
end
end
end
+ # Record other basic stats
+ ['total_cpu_cores', 'total_ram_mb', 'total_scratch_mb'].each do |key|
+ if value = (o[key] or o[key.to_sym])
+ self.info[key] = value
+ else
+ self.info.delete(key)
+ end
+ end
+
save!
end
def start!(ping_url_method)
ensure_permission_to_save
save!
end
def start!(ping_url_method)
ensure_permission_to_save
- ping_url = ping_url_method.call({ id: self.uuid, ping_secret: self.info[
:ping_secret
] })
+ ping_url = ping_url_method.call({ id: self.uuid, ping_secret: self.info[
'ping_secret'
] })
if (Rails.configuration.compute_node_ec2run_args and
Rails.configuration.compute_node_ami)
ec2_args = ["--user-data '#{ping_url}'",
if (Rails.configuration.compute_node_ec2run_args and
Rails.configuration.compute_node_ami)
ec2_args = ["--user-data '#{ping_url}'",
@@
-138,23
+147,23
@@
class Node < ArvadosModel
ec2run_cmd = ''
ec2spot_cmd = ''
end
ec2run_cmd = ''
ec2spot_cmd = ''
end
- self.info[
:ec2_run_command
] = ec2run_cmd
- self.info[
:ec2_spot_command
] = ec2spot_cmd
- self.info[
:ec2_start_command
] = ec2spot_cmd
+ self.info[
'ec2_run_command'
] = ec2run_cmd
+ self.info[
'ec2_spot_command'
] = ec2spot_cmd
+ self.info[
'ec2_start_command'
] = ec2spot_cmd
logger.info "#{self.uuid} ec2_start_command= #{ec2spot_cmd.inspect}"
result = `#{ec2spot_cmd} 2>&1`
logger.info "#{self.uuid} ec2_start_command= #{ec2spot_cmd.inspect}"
result = `#{ec2spot_cmd} 2>&1`
- self.info[
:ec2_start_result
] = result
+ self.info[
'ec2_start_result'
] = result
logger.info "#{self.uuid} ec2_start_result= #{result.inspect}"
result.match(/INSTANCE\s*(i-[0-9a-f]+)/) do |m|
instance_id = m[1]
logger.info "#{self.uuid} ec2_start_result= #{result.inspect}"
result.match(/INSTANCE\s*(i-[0-9a-f]+)/) do |m|
instance_id = m[1]
- self.info[
:ec2_instance_id
] = instance_id
+ self.info[
'ec2_instance_id'
] = instance_id
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
`ec2-create-tags #{instance_id} --tag 'Name=#{self.uuid}'`
end
end
result.match(/SPOTINSTANCEREQUEST\s*(sir-[0-9a-f]+)/) do |m|
sir_id = m[1]
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
`ec2-create-tags #{instance_id} --tag 'Name=#{self.uuid}'`
end
end
result.match(/SPOTINSTANCEREQUEST\s*(sir-[0-9a-f]+)/) do |m|
sir_id = m[1]
- self.info[
:ec2_sir_id
] = sir_id
+ self.info[
'ec2_sir_id'
] = sir_id
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
`ec2-create-tags #{sir_id} --tag 'Name=#{self.uuid}'`
end
if (Rails.configuration.compute_node_ec2_tag_enable rescue true)
`ec2-create-tags #{sir_id} --tag 'Name=#{self.uuid}'`
end
@@
-165,7
+174,7
@@
class Node < ArvadosModel
protected
def ensure_ping_secret
protected
def ensure_ping_secret
- self.info[
:ping_secret
] ||= rand(2**256).to_s(36)
+ self.info[
'ping_secret'
] ||= rand(2**256).to_s(36)
end
def dnsmasq_update
end
def dnsmasq_update