Avoid racing, only hand over VMs after a successful smove

This commit is contained in:
Scott Schneider 2013-12-05 11:44:11 -08:00
parent 72b1cd485e
commit 2f1a83eeb6

View file

@ -62,14 +62,26 @@ post '/vm/:template' do
result[params[:template]]['error'] = 'You must specify a destination \'folder\' and \'pool\'' result[params[:template]]['error'] = 'You must specify a destination \'folder\' and \'pool\''
else else
if ( $redis.scard('vmware_host_pool__ready__'+params[:template]) > 0 ) if ( $redis.scard('vmware_host_pool__ready__'+params[:template]) > 0 )
vm = $redis.srandmember('vmware_host_pool__ready__'+params[:template]) vm = nil
$redis.srem('vmware_host_pool__ready__'+params[:template], vm)
$redis.sadd('vmware_host_pool__running__'+params[:template], vm)
logger.log('s', "[<] '#{vm}' moved to 'running' queue") try = $redis.srandmember('vmware_host_pool__ready__'+params[:template])
result[params[:template]]['ok'] = true if (
result[params[:template]]['hostname'] = vm $redis.smove(
'vmware_host_pool__ready__'+params[:template],
'vmware_host_pool__running__'+params[:template],
try
)
)
vm = try
logger.log('s', "[<] '#{vm}' moved to 'running' queue")
result[params[:template]]['ok'] = true
result[params[:template]]['hostname'] = vm
else
result[params[:template]]['ok'] = false
end
else else
result[params[:template]]['ok'] = false result[params[:template]]['ok'] = false
end end