From 0b5abd9bd36fdb83c5e581c9216087e564039f79 Mon Sep 17 00:00:00 2001 From: Samuel Date: Tue, 17 Oct 2017 17:51:02 -0500 Subject: [PATCH] Fix no implicit conversion to rational from nil (#239) * Fix no implicit conversion to rational from nil Before this change if the boottime was nil, the check_ready loop would exit on Time.now - host['boottime'] with a TypeError in jruby. The boottime is nil when the power is Off so moving that check earlier should catch that bug. * set test data properly --- lib/vmpooler/pool_manager.rb | 17 +++++++++-------- spec/unit/pool_manager_spec.rb | 2 ++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 533c78d..1b630ae 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -119,8 +119,17 @@ module Vmpooler return end + $redis.hset('vmpooler__vm__' + vm, 'check', Time.now) + # Check if the VM is not powered on, before checking TTL + unless host['powerstate'].casecmp('poweredon').zero? + $redis.smove('vmpooler__ready__' + pool, 'vmpooler__completed__' + pool, vm) + $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue") + return + end + # Check if the hosts TTL has expired if ttl > 0 + # host['boottime'] may be nil if host is not powered on if ((Time.now - host['boottime']) / 60).to_s[/^\d+\.\d{1}/].to_f > ttl $redis.smove('vmpooler__ready__' + pool, 'vmpooler__completed__' + pool, vm) @@ -129,14 +138,6 @@ module Vmpooler end end - $redis.hset('vmpooler__vm__' + vm, 'check', Time.now) - # Check if the VM is not powered on - unless host['powerstate'].casecmp('poweredon').zero? - $redis.smove('vmpooler__ready__' + pool, 'vmpooler__completed__' + pool, vm) - $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue") - return - end - # Check if the hostname has magically changed from underneath Pooler if host['hostname'] != vm $redis.smove('vmpooler__ready__' + pool, 'vmpooler__completed__' + pool, vm) diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 0546221..7091c50 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -322,7 +322,9 @@ EOT context 'is turned off' do before(:each) do + host['boottime'] = nil host['powerstate'] = 'PoweredOff' + ttl = 1440 end it 'should move the VM to the completed queue' do