From 346b063f4587d22d4bf7e5f7f1a439f9455fefd0 Mon Sep 17 00:00:00 2001 From: Simon Hornby Date: Thu, 9 Oct 2025 15:38:07 +0200 Subject: [PATCH] chore: add migration for tracking connected downstream edge nodes (#10765) https://linear.app/unleash/issue/2-3938/endpoint-in-unleash-edge-validate-license Database migration for a new `edge_node_presence` table and `bucket_edge_heartbeat` function. --- .../20251009132935-add-edge-node-presence.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/migrations/20251009132935-add-edge-node-presence.js diff --git a/src/migrations/20251009132935-add-edge-node-presence.js b/src/migrations/20251009132935-add-edge-node-presence.js new file mode 100644 index 0000000000..366b4d6d2e --- /dev/null +++ b/src/migrations/20251009132935-add-edge-node-presence.js @@ -0,0 +1,34 @@ +exports.up = function(db, cb) { + db.runSql( + ` + CREATE OR REPLACE FUNCTION bucket_edge_heartbeat(ts timestamptz) + RETURNS timestamptz + LANGUAGE SQL IMMUTABLE PARALLEL SAFE AS $$ + SELECT to_timestamp(floor(extract(epoch FROM ts) / 300) * 300) AT TIME ZONE 'UTC'; + $$; + + CREATE TABLE edge_node_presence ( + bucket_ts timestamptz NOT NULL, + node_ephem_id text NOT NULL, + PRIMARY KEY (bucket_ts, node_ephem_id) + ); + + CREATE INDEX edge_node_presence_brin ON edge_node_presence USING BRIN (bucket_ts); + CREATE INDEX edge_node_presence_node_hash ON edge_node_presence USING HASH (node_ephem_id); + + `, + cb, + ); +}; + +exports.down = function(db, cb) { + db.runSql( + ` + DROP INDEX IF EXISTS edge_node_presence_brin; + DROP INDEX IF EXISTS edge_node_presence_node_hash; + DROP TABLE IF EXISTS edge_node_presence; + DROP FUNCTION IF EXISTS bucket_edge_heartbeat(timestamptz); + `, + cb, + ); +};