The lease bounds alone don't select a window: the history planner's oldest buckets are priority 0-2 as well, so the window worker at 0..0 also took 2026 history at 0 (25k ranges in 40 groups, fetched live) while 1,739 ranges of the 2016 corpus window sat at voyager 2's leftover priorities (done when the window was marked, planned again by the reset). With LEASE_CAPTURE_ONLY the lease, next and the prefetcher's run-ahead take capture ranges only; the run-ahead now also keeps to the lease bounds. Test: a group with history at 0 only isn't leased, the history range after the window isn't handed out. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
94 lines
3.8 KiB
TypeScript
94 lines
3.8 KiB
TypeScript
/*
|
|
|--------------------------------------------------------------------------
|
|
| Environment variables service
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The `Env.create` method creates an instance of the Env service. The
|
|
| service validates the environment variables and also cast values
|
|
| to JavaScript data types.
|
|
|
|
|
*/
|
|
|
|
import { Env } from '@adonisjs/core/env'
|
|
|
|
export default await Env.create(new URL('../', import.meta.url), {
|
|
// Node
|
|
NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
|
|
PORT: Env.schema.number(),
|
|
HOST: Env.schema.string({ format: 'host' }),
|
|
LOG_LEVEL: Env.schema.string(),
|
|
|
|
// App
|
|
APP_KEY: Env.schema.secret(),
|
|
APP_URL: Env.schema.string({ format: 'url', tld: false }),
|
|
|
|
// Session
|
|
SESSION_DRIVER: Env.schema.enum(['cookie', 'memory', 'database'] as const),
|
|
|
|
// Database
|
|
DB_HOST: Env.schema.string({ format: 'host' }),
|
|
DB_PORT: Env.schema.number(),
|
|
DB_USER: Env.schema.string(),
|
|
DB_PASSWORD: Env.schema.string.optional(),
|
|
DB_DATABASE: Env.schema.string(),
|
|
DB_POOL_MAX: Env.schema.number.optional(),
|
|
// Tablespace for the chunk store (the HDD on homelab).
|
|
CHUNK_TABLESPACE: Env.schema.string.optional(),
|
|
DB_DEBUG: Env.schema.boolean.optional(),
|
|
|
|
// NNTP (the coordinator's relay; edge:bench --capture)
|
|
NNTP_HOST: Env.schema.string.optional(),
|
|
NNTP_PORT: Env.schema.number.optional(),
|
|
NNTP_USER: Env.schema.string.optional(),
|
|
NNTP_PASSWORD: Env.schema.string.optional(),
|
|
NNTP_SECURE: Env.schema.boolean.optional(),
|
|
NNTP_CONNECTIONS: Env.schema.number.optional(),
|
|
NNTP_MIN_CONNECTIONS: Env.schema.number.optional(),
|
|
NNTP_ACCOUNT_CONNECTIONS: Env.schema.number.optional(),
|
|
NNTP_RESERVED_CONNECTIONS: Env.schema.number.optional(),
|
|
NNTP_TIMEOUT_MS: Env.schema.number.optional(),
|
|
NNTP_HEDGE_AFTER_SECONDS: Env.schema.number.optional(),
|
|
NNTP_HEDGE_CONNECTIONS: Env.schema.number.optional(),
|
|
NNTP_CONNECTION_MAX_MINUTES: Env.schema.number.optional(),
|
|
NNTP_IDLE_CLOSE_SECONDS: Env.schema.number.optional(),
|
|
CORPUS_FILTER: Env.schema.boolean.optional(),
|
|
NNTP_STALL_KB_PER_MINUTE: Env.schema.number.optional(),
|
|
|
|
// Newznab API key (empty: no key needed)
|
|
NEWZNAB_API_KEY: Env.schema.secret.optional(),
|
|
|
|
// Coordinator
|
|
RANGE_ARTICLES: Env.schema.number.optional(),
|
|
TAIL_EVERY_SECONDS: Env.schema.number.optional(),
|
|
TAIL_MIN_ARTICLES: Env.schema.number.optional(),
|
|
TAIL_MAX_DELAY_MINUTES: Env.schema.number.optional(),
|
|
CHUNK_ARTICLES: Env.schema.number.optional(),
|
|
LEASE_TTL_SECONDS: Env.schema.number.optional(),
|
|
SPOOL_DIR: Env.schema.string.optional(),
|
|
CORPUS_DIR: Env.schema.string.optional(),
|
|
CATALOG_MAX_NVME_GB: Env.schema.number.optional(),
|
|
SPOT_GROUP: Env.schema.string.optional(),
|
|
SPOT_BACKFILL: Env.schema.number.optional(),
|
|
SPOT_EVERY_SECONDS: Env.schema.number.optional(),
|
|
SPOT_MAX_NZB_SEGMENTS: Env.schema.number.optional(),
|
|
SPOT_STANDALONE_AFTER_HOURS: Env.schema.number.optional(),
|
|
CORPUS_AHEAD: Env.schema.number.optional(),
|
|
PROBE_PIPELINE: Env.schema.number.optional(),
|
|
SNAPSHOT_DIR: Env.schema.string.optional(),
|
|
LEASE_MIN_PRIORITY: Env.schema.number.optional(),
|
|
LEASE_MAX_PRIORITY: Env.schema.number.optional(),
|
|
LEASE_CAPTURE_ONLY: Env.schema.boolean.optional(),
|
|
PENDING_SHARE: Env.schema.number.optional(),
|
|
PENDING_MIN_PROBES: Env.schema.number.optional(),
|
|
PENDING_MAX_NAMED: Env.schema.number.optional(),
|
|
SPOOL_AHEAD_PER_LEASE: Env.schema.number.optional(),
|
|
SPOOL_MIN_AHEAD: Env.schema.number.optional(),
|
|
SPOOL_MAX_GB: Env.schema.number.optional(),
|
|
PREFETCH_PER_RANGE: Env.schema.number.optional(),
|
|
PROBE_CONNECTIONS: Env.schema.number.optional(),
|
|
PROBE_MIN_CONNECTIONS: Env.schema.number.optional(),
|
|
PROBE_MIN_FREE_GB: Env.schema.number.optional(),
|
|
HTTP_ROUTES: Env.schema.enum.optional(['all', 'node', 'public'] as const),
|
|
PREFETCH_PER_GROUP: Env.schema.number.optional(),
|
|
})
|