Do not run duplicate instances of inventory check for a pool

This commit updates check_pool inventory check to prevent multiple instances from running at once. Without this change the inventory check may run in multiple threads simultaneously.
This commit is contained in:
kirby@puppetlabs.com 2018-06-28 20:32:44 -07:00
parent 8be578493a
commit df89617fdc
2 changed files with 37 additions and 12 deletions

View file

@ -708,21 +708,24 @@ module Vmpooler
# INVENTORY
inventory = {}
begin
provider.vms_in_pool(pool['name']).each do |vm|
if !$redis.sismember('vmpooler__running__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__ready__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__pending__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__completed__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__discovered__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__migrating__' + pool['name'], vm['name'])
mutex = pool_mutex(pool['name'])
mutex.synchronize do
provider.vms_in_pool(pool['name']).each do |vm|
if !$redis.sismember('vmpooler__running__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__ready__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__pending__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__completed__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__discovered__' + pool['name'], vm['name']) &&
!$redis.sismember('vmpooler__migrating__' + pool['name'], vm['name'])
pool_check_response[:discovered_vms] += 1
$redis.sadd('vmpooler__discovered__' + pool['name'], vm['name'])
pool_check_response[:discovered_vms] += 1
$redis.sadd('vmpooler__discovered__' + pool['name'], vm['name'])
$logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue")
$logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue")
end
inventory[vm['name']] = 1
end
inventory[vm['name']] = 1
end
rescue => err
$logger.log('s', "[!] [#{pool['name']}] _check_pool failed with an error while inspecting inventory: #{err}")