@@ -59,7 +59,7 @@ def load_pools_to_redis
5959 currently_configured_pools = [ ]
6060 config [ :pools ] . each do |pool |
6161 currently_configured_pools << pool [ 'name' ]
62- redis . sadd ( 'vmpooler__pools' , pool [ 'name' ] )
62+ redis . sadd ( 'vmpooler__pools' , pool [ 'name' ] . to_s )
6363 pool_keys = pool . keys
6464 pool_keys . delete ( 'alias' )
6565 to_set = { }
@@ -68,11 +68,12 @@ def load_pools_to_redis
6868 end
6969 to_set [ 'alias' ] = pool [ 'alias' ] . join ( ',' ) if to_set . key? ( 'alias' )
7070 to_set [ 'domain' ] = Vmpooler ::Dns . get_domain_for_pool ( config , pool [ 'name' ] )
71- redis . hmset ( "vmpooler__pool__#{ pool [ 'name' ] } " , to_set . to_a . flatten ) unless to_set . empty?
71+
72+ redis . hmset ( "vmpooler__pool__#{ pool [ 'name' ] } " , *to_set . to_a . flatten ) unless to_set . empty?
7273 end
7374 previously_configured_pools . each do |pool |
7475 unless currently_configured_pools . include? pool
75- redis . srem ( 'vmpooler__pools' , pool )
76+ redis . srem ( 'vmpooler__pools' , pool . to_s )
7677 redis . del ( "vmpooler__pool__#{ pool } " )
7778 end
7879 end
@@ -129,7 +130,6 @@ def fail_pending_vm(vm, pool, timeout, redis, exists: true)
129130 if exists
130131 request_id = redis . hget ( "vmpooler__vm__#{ vm } " , 'request_id' )
131132 pool_alias = redis . hget ( "vmpooler__vm__#{ vm } " , 'pool_alias' ) if request_id
132- redis . multi
133133 redis . smove ( "vmpooler__pending__#{ pool } " , "vmpooler__completed__#{ pool } " , vm )
134134 if request_id
135135 ondemandrequest_hash = redis . hgetall ( "vmpooler__odrequest__#{ request_id } " )
@@ -138,7 +138,6 @@ def fail_pending_vm(vm, pool, timeout, redis, exists: true)
138138 redis . zadd ( 'vmpooler__odcreate__task' , 1 , "#{ pool_alias } :#{ pool } :1:#{ request_id } " )
139139 end
140140 end
141- redis . exec
142141 $metrics. increment ( "errors.markedasfailed.#{ pool } " )
143142 $logger. log ( 'd' , "[!] [#{ pool } ] '#{ vm } ' marked as 'failed' after #{ timeout } minutes" )
144143 else
@@ -168,8 +167,8 @@ def move_pending_vm_to_ready(vm, pool, redis, request_id = nil)
168167 pool_alias = redis . hget ( "vmpooler__vm__#{ vm } " , 'pool_alias' )
169168
170169 redis . pipelined do |pipeline |
171- pipeline . hset ( "vmpooler__active__#{ pool } " , vm , Time . now )
172- pipeline . hset ( "vmpooler__vm__#{ vm } " , 'checkout' , Time . now )
170+ pipeline . hset ( "vmpooler__active__#{ pool } " , vm , Time . now . to_s )
171+ pipeline . hset ( "vmpooler__vm__#{ vm } " , 'checkout' , Time . now . to_s )
173172 if ondemandrequest_hash [ 'token:token' ]
174173 pipeline . hset ( "vmpooler__vm__#{ vm } " , 'token:token' , ondemandrequest_hash [ 'token:token' ] )
175174 pipeline . hset ( "vmpooler__vm__#{ vm } " , 'token:user' , ondemandrequest_hash [ 'token:user' ] )
@@ -185,10 +184,10 @@ def move_pending_vm_to_ready(vm, pool, redis, request_id = nil)
185184
186185 redis . pipelined do |pipeline |
187186 pipeline . hset ( "vmpooler__boot__#{ Date . today } " , "#{ pool } :#{ vm } " , finish ) # maybe remove as this is never used by vmpooler itself?
188- pipeline . hset ( "vmpooler__vm__#{ vm } " , 'ready' , Time . now )
187+ pipeline . hset ( "vmpooler__vm__#{ vm } " , 'ready' , Time . now . to_s )
189188
190189 # last boot time is displayed in API, and used by alarming script
191- pipeline . hset ( 'vmpooler__lastboot' , pool , Time . now )
190+ pipeline . hset ( 'vmpooler__lastboot' , pool , Time . now . to_s )
192191 end
193192
194193 $metrics. timing ( "time_to_ready_state.#{ pool } " , finish )
@@ -227,7 +226,7 @@ def _check_ready_vm(vm, pool_name, ttl, provider)
227226 last_checked_too_soon = ( ( Time . now - Time . parse ( check_stamp ) ) . to_i < $config[ :config ] [ 'vm_checktime' ] * 60 ) if check_stamp
228227 break if check_stamp && last_checked_too_soon
229228
230- redis . hset ( "vmpooler__vm__#{ vm } " , 'check' , Time . now )
229+ redis . hset ( "vmpooler__vm__#{ vm } " , 'check' , Time . now . to_s )
231230 # Check if the hosts TTL has expired
232231 # if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired
233232 boottime = redis . hget ( "vmpooler__vm__#{ vm } " , 'ready' )
@@ -428,16 +427,15 @@ def _clone_vm(pool_name, provider, dns_plugin, request_id = nil, pool_alias = ni
428427 mutex = vm_mutex ( new_vmname )
429428 mutex . synchronize do
430429 @redis . with_metrics do |redis |
431- # Add VM to Redis inventory ('pending' pool)
432- redis . multi
433- redis . sadd ( "vmpooler__pending__#{ pool_name } " , new_vmname )
434- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'clone' , Time . now )
435- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'template' , pool_name ) # This value is used to represent the pool.
436- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'pool' , pool_name )
437- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'domain' , pool_domain )
438- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'request_id' , request_id ) if request_id
439- redis . hset ( "vmpooler__vm__#{ new_vmname } " , 'pool_alias' , pool_alias ) if pool_alias
440- redis . exec
430+ redis . multi do |transaction |
431+ transaction . sadd ( "vmpooler__pending__#{ pool_name } " , new_vmname )
432+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'clone' , Time . now . to_s )
433+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'template' , pool_name ) # This value is used to represent the pool.
434+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'pool' , pool_name )
435+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'domain' , pool_domain )
436+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'request_id' , request_id ) if request_id
437+ transaction . hset ( "vmpooler__vm__#{ new_vmname } " , 'pool_alias' , pool_alias ) if pool_alias
438+ end
441439 end
442440
443441 begin
@@ -502,7 +500,7 @@ def _destroy_vm(vm, pool, provider, dns_plugin)
502500 @redis . with_metrics do |redis |
503501 redis . pipelined do |pipeline |
504502 pipeline . hdel ( "vmpooler__active__#{ pool } " , vm )
505- pipeline . hset ( "vmpooler__vm__#{ vm } " , 'destroy' , Time . now )
503+ pipeline . hset ( "vmpooler__vm__#{ vm } " , 'destroy' , Time . now . to_s )
506504
507505 # Auto-expire metadata key
508506 pipeline . expire ( "vmpooler__vm__#{ vm } " , ( $config[ :redis ] [ 'data_ttl' ] . to_i * 60 * 60 ) )
@@ -868,12 +866,13 @@ def time_passed?(_event, time)
868866 def sleep_with_wakeup_events ( loop_delay , wakeup_period = 5 , options = { } )
869867 exit_by = Time . now + loop_delay
870868 wakeup_by = Time . now + wakeup_period
869+
871870 return if time_passed? ( :exit_by , exit_by )
872871
873872 @redis . with_metrics do |redis |
874873 initial_ready_size = redis . scard ( "vmpooler__ready__#{ options [ :poolname ] } " ) if options [ :pool_size_change ]
875874
876- initial_clone_target = redis . hget ( "vmpooler__pool__#{ options [ :poolname ] } " , options [ :clone_target ] ) if options [ :clone_target_change ]
875+ initial_clone_target = redis . hget ( "vmpooler__pool__#{ options [ :poolname ] } " , options [ :clone_target ] . to_s ) if options [ :clone_target_change ]
877876
878877 initial_template = redis . hget ( 'vmpooler__template__prepared' , options [ :poolname ] ) if options [ :pool_template_change ]
879878
@@ -917,11 +916,10 @@ def sleep_with_wakeup_events(loop_delay, wakeup_period = 5, options = {})
917916 end
918917
919918 if options [ :ondemand_request ]
920- redis . multi
921- redis . zcard ( 'vmpooler__provisioning__request' )
922- redis . zcard ( 'vmpooler__provisioning__processing' )
923- redis . zcard ( 'vmpooler__odcreate__task' )
924- od_request , od_processing , od_createtask = redis . exec
919+ od_request = redis . zcard ( 'vmpooler__provisioning__request' )
920+ od_processing = redis . zcard ( 'vmpooler__provisioning__processing' )
921+ od_createtask = redis . zcard ( 'vmpooler__odcreate__task' )
922+
925923 break unless od_request == 0
926924 break unless od_processing == 0
927925 break unless od_createtask == 0
@@ -1093,10 +1091,8 @@ def update_clone_target(pool)
10931091
10941092 def remove_excess_vms ( pool )
10951093 @redis . with_metrics do |redis |
1096- redis . multi
1097- redis . scard ( "vmpooler__ready__#{ pool [ 'name' ] } " )
1098- redis . scard ( "vmpooler__pending__#{ pool [ 'name' ] } " )
1099- ready , pending = redis . exec
1094+ ready = redis . scard ( "vmpooler__ready__#{ pool [ 'name' ] } " )
1095+ pending = redis . scard ( "vmpooler__pending__#{ pool [ 'name' ] } " )
11001096 total = pending . to_i + ready . to_i
11011097 break if total . nil?
11021098 break if total == 0
@@ -1334,11 +1330,10 @@ def repopulate_pool_vms(pool_name, provider, pool_check_response, pool_size)
13341330 return if pool_mutex ( pool_name ) . locked?
13351331
13361332 @redis . with_metrics do |redis |
1337- redis . multi
1338- redis . scard ( "vmpooler__ready__#{ pool_name } " )
1339- redis . scard ( "vmpooler__pending__#{ pool_name } " )
1340- redis . scard ( "vmpooler__running__#{ pool_name } " )
1341- ready , pending , running = redis . exec
1333+ ready = redis . scard ( "vmpooler__ready__#{ pool_name } " )
1334+ pending = redis . scard ( "vmpooler__pending__#{ pool_name } " )
1335+ running = redis . scard ( "vmpooler__running__#{ pool_name } " )
1336+
13421337 total = pending . to_i + ready . to_i
13431338
13441339 $metrics. gauge ( "ready.#{ pool_name } " , ready )
@@ -1596,11 +1591,9 @@ def check_ondemand_request_ready(request_id, redis, score = nil)
15961591
15971592 return unless vms_ready? ( request_id , redis )
15981593
1599- redis . multi
16001594 redis . hset ( ondemand_hash_key , 'status' , 'ready' )
16011595 redis . expire ( ondemand_hash_key , default_expiration )
16021596 redis . zrem ( processing_key , request_id )
1603- redis . exec
16041597 end
16051598
16061599 def request_expired? ( request_id , score , redis )
0 commit comments