mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 01:58:41 -05:00
Add Phase 2 optimizations: status API caching and improved Redis pipelining
- Add in-memory cache for /status endpoint with 30s TTL - Cache keyed by view parameters to handle different query patterns - Add cache clearing for tests to prevent interference - Optimize get_queue_metrics to use single pipeline for all Redis calls - Previously made 7+ separate pipeline calls - Now combines all queue metrics into one pipeline (7n+2 operations) - Reduces Redis round trips and improves API response time - Update unit tests to match new pipelining behavior - All 866 tests passing
This commit is contained in:
parent
e5c0fa986e
commit
7b657edd0d
4 changed files with 86 additions and 15 deletions
|
|
@ -17,6 +17,8 @@ describe Vmpooler::API::V3 do
|
|||
# https://rubydoc.info/gems/sinatra/Sinatra/Base#reset!-class_method
|
||||
before(:each) do
|
||||
app.reset!
|
||||
# Clear status cache to prevent test interference
|
||||
Vmpooler::API::V3.clear_status_cache
|
||||
end
|
||||
|
||||
describe 'status and metrics endpoints' do
|
||||
|
|
|
|||
|
|
@ -125,8 +125,12 @@ describe Vmpooler::API::Helpers do
|
|||
{'name' => 'p2'}
|
||||
]
|
||||
|
||||
allow(redis).to receive(:pipelined).with(no_args).and_return [1,1]
|
||||
allow(redis).to receive(:get).and_return(1,0)
|
||||
# Mock returns 7*2 + 2 = 16 results (7 queue types for 2 pools + 2 global counters)
|
||||
# For each pool: [request, processing, odcreate, pending, ready, running, completed]
|
||||
# Plus 2 global counters: clone (1), ondemandclone (0)
|
||||
# Results array: [1,1, 1,1, 1,1, 1,1, 1,1, 1,1, 1,1, 1, 0]
|
||||
# [req, proc, odc, pend, rdy, run, comp, clone, odc]
|
||||
allow(redis).to receive(:pipelined).with(no_args).and_return [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]
|
||||
|
||||
expect(subject.get_queue_metrics(pools, redis)).to eq({requested: 6, pending: 2, cloning: 1, booting: 1, ready: 2, running: 2, completed: 2, total: 14})
|
||||
end
|
||||
|
|
@ -137,8 +141,8 @@ describe Vmpooler::API::Helpers do
|
|||
{'name' => 'p2'}
|
||||
]
|
||||
|
||||
allow(redis).to receive(:pipelined).with(no_args).and_return [1,1]
|
||||
allow(redis).to receive(:get).and_return(5,0)
|
||||
# Mock returns 7*2 + 2 = 16 results with clone=5 to cause negative booting
|
||||
allow(redis).to receive(:pipelined).with(no_args).and_return [1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,0]
|
||||
|
||||
expect(subject.get_queue_metrics(pools, redis)).to eq({requested: 6, pending: 2, cloning: 5, booting: 0, ready: 2, running: 2, completed: 2, total: 14})
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue