import { BaseSchema } from '@adonisjs/lucid/schema' import env from '#start/env' /** * The chunk store (REBUILD.md, part 3; decision a): one write-once row per * release per batch, its files encoded by lib/chunks. Partitioned by month * of writing, in CHUNK_TABLESPACE (the HDD) when set; ChunkPartitions keeps * the next months' partitions ready. A re-run of a range replaces its chunks * (by range_id). */ export default class extends BaseSchema { async up() { const tablespace = env.get('CHUNK_TABLESPACE') const where = tablespace ? ` TABLESPACE ${tablespace}` : '' this.schema.raw(` CREATE TABLE release_chunks ( id bigserial, release_id bigint NOT NULL, range_id bigint NOT NULL, batch_from bigint NOT NULL, files integer NOT NULL, segments integer NOT NULL, payload bytea NOT NULL, created_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (id, created_at) ) PARTITION BY RANGE (created_at)${where}`) this.schema.raw(`CREATE INDEX release_chunks_release_idx ON release_chunks (release_id)`) this.schema.raw(`CREATE INDEX release_chunks_range_idx ON release_chunks (range_id)`) } async down() { this.schema.raw(`DROP TABLE IF EXISTS release_chunks CASCADE`) } }