Run the load tests on Postgres too, as production runs (#139)
node tests/load/run.js --postgres puts the scratch daemon in IPX_TEST_DATABASE_URL, the database the Rust tests already use on Postgres, ipodderx_test on the databases project's server, in a schema of its own, ipx_load, dropped and made again each run as /tmp/ipx-load is wiped. The URL is in /src/.envrc, taken from ipx.env. It is production's server and role, so the harness refuses a database whose name does not end in _test, and hands psql the password in its environment, where no other process on Tower can read it. psql comes from /src/install.sh. After seeding it runs ANALYZE: a schema filled seconds before has no planner statistics until autovacuum gets there, which it did partway through a test, and the search's p95 swung between 40ms and 166ms from run to run. Analyzed first, three runs gave 37-38ms. Each budget now has a value for each database, about twice what it measures on Tower: Postgres answers the feed list at p95 54ms to SQLite's 242, having no one connection to queue for (#136). Running it found #140. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,4 +13,7 @@ export const as = (name, tag) => ({
|
||||
/// The listener this virtual user is, one of the hundred run.js seeded, thirty feeds each.
|
||||
export const me = () => `load-${(__VU - 1) % USERS}`;
|
||||
export const pick = a => a[Math.floor(Math.random() * a.length)];
|
||||
/// A p95 budget, in ms, for whichever database the daemon is on (run.js --postgres). Postgres's
|
||||
/// are tighter: SQLite's carry the queue for its one connection (#136).
|
||||
export const p95 = (sqlite, postgres) => [`p(95)<${__ENV.DB === 'postgres' ? postgres : sqlite}`];
|
||||
export const feedId = n => `gen-${String(n).padStart(4, '0')}`;
|
||||
|
||||
Reference in New Issue
Block a user