From 9c6f50691d9e9f035faa5d941aefade17a9eff39 Mon Sep 17 00:00:00 2001 From: Samuel Beaulieu Date: Thu, 23 Apr 2020 16:10:36 -0500 Subject: [PATCH] (DIO-608) vmpooler SUT handed out multiple times Before this change if the smove returned false, we would continue handing out the VM which presumably could still be in the 'ready' state. Upon 'delete' that ready VM would not be picked up and return a 404 which is consistent with the behavior seen. Adding a metric to keep track of the smove failures since this is not expected. I think some API logging would be good to add in the future. --- lib/vmpooler/api/v1.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index 1588502..c588a4a 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -83,8 +83,13 @@ module Vmpooler vms.reverse.each do |vm| ready = vm_ready?(vm, config['domain']) if ready - backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm) - return [vm, template_backend, template] + smoved = backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm) + if smoved + return [vm, template_backend, template] + else + metrics.increment("checkout.smove.failed.#{template_backend}") + return [nil, nil, nil] + end else backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__completed__#{template_backend}", vm) metrics.increment("checkout.nonresponsive.#{template_backend}") @@ -874,6 +879,8 @@ module Vmpooler status 200 result['ok'] = true + else + metrics.increment('delete.srem.failed') end end