From 2e5fdc5200ecfb9026f856239cdaa048876c79f9 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Wed, 13 May 2015 11:18:19 -0700 Subject: [PATCH] Auto-expire summary index keys --- lib/vmpooler/api/v1.rb | 3 +++ lib/vmpooler/pool_manager.rb | 6 ++++++ spec/vmpooler/api/v1_spec.rb | 6 +++++- spec/vmpooler/pool_manager_spec.rb | 6 ++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index d10bdc4..0540b65 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -544,6 +544,9 @@ module Vmpooler arg.keys.each do |tag| backend.hset('vmpooler__vm__' + params[:hostname], 'tag:' + tag, arg[tag]) backend.hset('vmpooler__tag__' + Date.today.to_s, params[:hostname] + ':' + tag, arg[tag]) + + # Auto-expire summary index + backend.expire('vmpooler__tag__' + Date.today.to_s, (Vmpooler::API.settings.config[:redis]['data_ttl'].to_i * 60 * 60)) end end end diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index f9d778f..a040154 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -66,6 +66,9 @@ module Vmpooler $redis.smove('vmpooler__pending__' + pool, 'vmpooler__ready__' + pool, vm) $redis.hset('vmpooler__boot__' + Date.today.to_s, pool + ':' + vm, finish) + # Auto-expire summary index + $redis.expire('vmpooler__boot__' + Date.today.to_s, ($config[:redis]['data_ttl'].to_i * 60 * 60)) + $logger.log('s', "[>] [#{pool}] '#{vm}' moved to 'ready' queue") end end @@ -233,6 +236,9 @@ module Vmpooler $redis.hset('vmpooler__clone__' + Date.today.to_s, vm['template'] + ':' + vm['hostname'], finish) $redis.hset('vmpooler__vm__' + vm['hostname'], 'clone_time', finish) + # Auto-expire summary index + $redis.expire('vmpooler__clone__' + Date.today.to_s, ($config[:redis]['data_ttl'].to_i * 60 * 60)) + $logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds") rescue $logger.log('s', "[!] [#{vm['template']}] '#{vm['hostname']}' clone appears to have failed") diff --git a/spec/vmpooler/api/v1_spec.rb b/spec/vmpooler/api/v1_spec.rb index 687c865..2a4ea29 100644 --- a/spec/vmpooler/api/v1_spec.rb +++ b/spec/vmpooler/api/v1_spec.rb @@ -302,7 +302,10 @@ describe Vmpooler::API::V1 do pools: [ {'name' => 'pool1', 'size' => 5}, {'name' => 'pool2', 'size' => 10} - ] + ], + redis: { + 'data_ttl' => '168' + } } } before do @@ -310,6 +313,7 @@ describe Vmpooler::API::V1 do app.settings.set :redis, redis allow(redis).to receive(:exists).and_return '1' + allow(redis).to receive(:expire).with('vmpooler__tag__' + Date.today.to_s, 604800).and_return '1' allow(redis).to receive(:hset).and_return '1' end diff --git a/spec/vmpooler/pool_manager_spec.rb b/spec/vmpooler/pool_manager_spec.rb index 78fbdbc..1f14d35 100644 --- a/spec/vmpooler/pool_manager_spec.rb +++ b/spec/vmpooler/pool_manager_spec.rb @@ -81,11 +81,17 @@ describe 'Pool Manager' do end context 'a host with proper summary' do + let(:config) { { + redis: { 'data_ttl' => '168' } + } } + + before do allow(host).to receive(:summary).and_return true allow(host).to receive_message_chain(:summary, :guest).and_return true allow(host).to receive_message_chain(:summary, :guest, :hostName).and_return vm + allow(redis).to receive(:expire).with('vmpooler__boot__' + Date.today.to_s, 604800).and_return '1' allow(redis).to receive(:hget) allow(redis).to receive(:smove) allow(redis).to receive(:hset)