vmpooler 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4940c5033dca65a8f33211c244ff5cdd84e4635
4
- data.tar.gz: f5703c6f878c4173f56f83d6933ea5350cd5bc90
3
+ metadata.gz: 18126b74e4adebbee73caa9f3e676c02b90cb309
4
+ data.tar.gz: c39e9a2391865688b5acb66e191145c63fae9ab6
5
5
  SHA512:
6
- metadata.gz: f1a1163e7922cc703d1e2621e612cdda05a50b95c63d4b7893b5e418371b7ac5c142b39ee6b3e5e10d20235262fbb0a906e30c63547cb148087f9d77af8b11f2
7
- data.tar.gz: fe6d94b28686ef8e5436ec7efc772525b16dcfe45c49a78dce2f8ce0bc19f92b88d39735c0c898aaae351a0386e38f2f93512c43ce2a15e50b6c821217d96c29
6
+ metadata.gz: a580a1eb9e085541434f5711879d9a99a17bab90bf8680789dde160940b0f36e2d6308cfab211cb39e76ac217da7825e356b6d727eedf8f1d2867e8edc6c623a
7
+ data.tar.gz: 39b7bfa786001efad19a7a48cc73536ea7e941eee006e8f15a959f4e551267532211d6a49e7cb42b10f8f0720621d2282c4fd40c4a386eca2befee4814e61ba5
@@ -36,6 +36,10 @@ module Vmpooler
36
36
  validate_token(backend)
37
37
  end
38
38
 
39
+ def checkoutlock
40
+ Vmpooler::API::settings.checkoutlock
41
+ end
42
+
39
43
  def fetch_single_vm(template)
40
44
  template_backends = [template]
41
45
  aliases = Vmpooler::API.settings.config[:alias]
@@ -67,21 +71,23 @@ module Vmpooler
67
71
  end
68
72
  end
69
73
 
70
- template_backends.each do |template_backend|
71
- vms = backend.smembers("vmpooler__ready__#{template_backend}")
72
- next if vms.empty?
73
- vms.reverse.each do |vm|
74
- ready = vm_ready?(vm, config['domain'])
75
- if ready
76
- backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm)
77
- return [vm, template_backend, template]
78
- else
79
- backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__completed__#{template_backend}", vm)
80
- metrics.increment("checkout.nonresponsive.#{template_backend}")
74
+ checkoutlock.synchronize do
75
+ template_backends.each do |template_backend|
76
+ vms = backend.smembers("vmpooler__ready__#{template_backend}")
77
+ next if vms.empty?
78
+ vms.reverse.each do |vm|
79
+ ready = vm_ready?(vm, config['domain'])
80
+ if ready
81
+ backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm)
82
+ return [vm, template_backend, template]
83
+ else
84
+ backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__completed__#{template_backend}", vm)
85
+ metrics.increment("checkout.nonresponsive.#{template_backend}")
86
+ end
81
87
  end
82
88
  end
89
+ [nil, nil, nil]
83
90
  end
84
- [nil, nil, nil]
85
91
  end
86
92
 
87
93
  def return_vm_to_ready_state(template, vm)
data/lib/vmpooler/api.rb CHANGED
@@ -40,6 +40,7 @@ module Vmpooler
40
40
  self.settings.set :config, config
41
41
  self.settings.set :redis, redis
42
42
  self.settings.set :metrics, metrics
43
+ self.settings.set :checkoutlock, Mutex.new
43
44
  end
44
45
 
45
46
  def execute!
@@ -156,8 +156,14 @@ module Vmpooler
156
156
  $redis.hset('vmpooler__vm__' + vm, 'check', Time.now)
157
157
  # Check if the hosts TTL has expired
158
158
  if ttl > 0
159
- # host['boottime'] may be nil if host is not powered on
160
- if ((Time.now - host['boottime']) / 60).to_s[/^\d+\.\d{1}/].to_f > ttl
159
+ # if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired
160
+ boottime = $redis.hget("vmpooler__vm__#{vm}", 'ready')
161
+ if boottime
162
+ boottime = Time.parse(boottime)
163
+ else
164
+ boottime = Time.at(0)
165
+ end
166
+ if ((Time.now - boottime) / 60).to_s[/^\d+\.\d{1}/].to_f > ttl
161
167
  $redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
162
168
 
163
169
  $logger.log('d', "[!] [#{pool_name}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue")
@@ -1,3 +1,3 @@
1
1
  module Vmpooler
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.7.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmpooler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-26 00:00:00.000000000 Z
11
+ date: 2019-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pickup