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>
20 lines
1.1 KiB
JavaScript
20 lines
1.1 KiB
JavaScript
// What the load tests share. Each virtual user is a listener of its own, signed in by name with
|
|
// the header the scratch daemon trusts from 127.0.0.1, as production trusts Cloudflare Access's.
|
|
export const BASE = __ENV.BASE;
|
|
export const USERS = Number(__ENV.USERS || 100);
|
|
export const FEEDS = Number(__ENV.FEEDS || 1500);
|
|
// Each generated feed has this many items; see run.js.
|
|
export const ITEMS = 20;
|
|
|
|
export const as = (name, tag) => ({
|
|
headers: { 'X-Load-User': name, 'Content-Type': 'application/json' },
|
|
tags: { 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')}`;
|