Each Redis queue gets its own thread

This commit is contained in:
Scott Schneider 2013-11-05 09:28:12 -08:00
parent d29552eaa6
commit 90b7e6585d

View file

@ -161,11 +161,11 @@ end
# Update loop # Promotion loop
Thread.new {
loop do loop do
pools.each do |pool| pools.each do |pool|
inventory = {} inventory = {}
total = 0
# Locate the resource pool # Locate the resource pool
base = $vsphere_helper.find_pool(pool['pool']) base = $vsphere_helper.find_pool(pool['pool'])
@ -183,10 +183,8 @@ loop do
end end
inventory[vm['name']] = 1 inventory[vm['name']] = 1
total = total+1
end end
# Check 'pending' pool
Thread.new { Thread.new {
$redis.smembers('vmware_host_pool__pending__'+pool['name']).each do |vm| $redis.smembers('vmware_host_pool__pending__'+pool['name']).each do |vm|
if ! inventory[vm] if ! inventory[vm]
@ -201,6 +199,75 @@ loop do
} }
end end
} }
end
end
}
# Cleanup loop
Thread.new {
loop do
pools.each do |pool|
inventory = {}
# Locate the resource pool
base = $vsphere_helper.find_pool(pool['pool'])
# Make sure all VMs in resource pool are accounted-for
base.vm.each do |vm|
if (
(! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__running__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__completed__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__failed__'+pool['name'], vm['name']))
)
$redis.sadd('vmware_host_pool__pending__'+pool['name'], vm['name'])
end
inventory[vm['name']] = 1
end
Thread.new {
$redis.smembers('vmware_host_pool__completed__'+pool['name']).each do |vm|
if ! inventory[vm]
$redis.srem('vmware_host_pool__completed__'+pool['name'], vm)
end
Thread.new {
destroy_vm(vm)
}
end
}
end
end
}
# Update loop
loop do
pools.each do |pool|
inventory = {}
# Locate the resource pool
base = $vsphere_helper.find_pool(pool['pool'])
# Make sure all VMs in resource pool are accounted-for
base.vm.each do |vm|
if (
(! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__running__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__completed__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__failed__'+pool['name'], vm['name']))
)
$redis.sadd('vmware_host_pool__pending__'+pool['name'], vm['name'])
end
inventory[vm['name']] = 1
end
total = $redis.scard('vmware_host_pool__ready__'+pool['name']) +
$redis.scard('vmware_host_pool__pending__'+pool['name'])
# Check 'ready' pool # Check 'ready' pool
Thread.new { Thread.new {
@ -239,19 +306,6 @@ loop do
end end
} }
# Check 'completed' pool
Thread.new {
$redis.smembers('vmware_host_pool__completed__'+pool['name']).each do |vm|
if ! inventory[vm]
$redis.srem('vmware_host_pool__completed__'+pool['name'], vm)
end
Thread.new {
destroy_vm(vm)
}
end
}
# Check 'failed' pool # Check 'failed' pool
Thread.new { Thread.new {
$redis.smembers('vmware_host_pool__failed__'+pool['name']).each do |vm| $redis.smembers('vmware_host_pool__failed__'+pool['name']).each do |vm|