diff --git a/aggregator_core/src/datastore.rs b/aggregator_core/src/datastore.rs index 7fcbcfc1a..4b353b3f6 100644 --- a/aggregator_core/src/datastore.rs +++ b/aggregator_core/src/datastore.rs @@ -99,7 +99,7 @@ macro_rules! supported_schema_versions { // version is seen, [`Datastore::new`] fails. // // Note that the latest supported version must be first in the list. -supported_schema_versions!(1); +supported_schema_versions!(2, 1); /// Datastore represents a datastore for Janus, with support for transactional reads and writes. /// In practice, Datastore instances are currently backed by a PostgreSQL database. diff --git a/db/00000000000002_task_upload_counters.down.sql b/db/00000000000002_task_upload_counters.down.sql new file mode 100644 index 000000000..8ce78e06a --- /dev/null +++ b/db/00000000000002_task_upload_counters.down.sql @@ -0,0 +1 @@ +DROP TABLE task_upload_counters; diff --git a/db/00000000000002_task_upload_counters.up.sql b/db/00000000000002_task_upload_counters.up.sql new file mode 100644 index 000000000..76d0c12d7 --- /dev/null +++ b/db/00000000000002_task_upload_counters.up.sql @@ -0,0 +1,19 @@ +-- Per task report upload counters. +CREATE TABLE task_upload_counters( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- artificial ID, internal-only + task_id BIGINT NOT NULL, + + interval_collected BIGINT NOT NULL DEFAULT 0, -- Reports submitted for an interval that was already collected. + report_decode_failure BIGINT NOT NULL DEFAULT 0, -- Reports which failed to decode. + report_decrypt_failure BIGINT NOT NULL DEFAULT 0, -- Reports which failed to decrypt. + report_expired BIGINT NOT NULL DEFAULT 0, -- Reports that were older than the task's report_expiry_age. + report_outdated_key BIGINT NOT NULL DEFAULT 0, -- Reports that were encrypted with an unknown or outdated HPKE key. + report_success BIGINT NOT NULL DEFAULT 0, -- Reports that were successfully uploaded. + report_too_early BIGINT NOT NULL DEFAULT 0, -- Reports whose timestamp is too far in the future. + task_expired BIGINT NOT NULL DEFAULT 0, -- Reports sent to the task while it is expired. + + ord BIGINT NOT NULL, -- Index of this task_upload_counters shard. + + CONSTRAINT fk_task_id FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE, + CONSTRAINT task_upload_counters_unique UNIQUE(task_id, ord) +);