mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Signed-off-by: Tyler Longwell <tlongwell@block.xyz> Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
44 lines
2.2 KiB
PL/PgSQL
44 lines
2.2 KiB
PL/PgSQL
-- T1b push gate: skip push_match_queue enqueue entirely for communities with
|
|
-- no active, endpoint-enabled, unexpired push lease. In lease-less communities
|
|
-- (most of them) every durable message currently pays the full matcher cost
|
|
-- (enqueue + claim + lease scan + delete) to conclude "notify no one".
|
|
--
|
|
-- Correctness protocol (write-amp plan rev 3, [R2/R3]):
|
|
-- * The gate lives HERE, in the events trigger, so every durable producer is
|
|
-- covered — including internal paths that bypass live dispatch.
|
|
-- * Lost-wake race: a naive EXISTS check could read "no lease" while a lease
|
|
-- activation commits concurrently, silently dropping that user's wake with
|
|
-- no retry. Closed with a per-community advisory lock held to transaction
|
|
-- end: event inserts take the lock SHARED (concurrent with each other),
|
|
-- lease transitions that can make eligibility true take it EXCLUSIVE
|
|
-- (crates/buzz-db/src/push.rs: accept_lease_event and replace_lease).
|
|
-- The conflict forces a total order: either the event's check sees the
|
|
-- committed lease, or the activation strictly follows the event's commit —
|
|
-- in which case no lease existed when the event was accepted and no wake
|
|
-- was owed. The lease-activation backfill is product recovery coverage
|
|
-- only and is not part of this proof.
|
|
-- * Lock key domain 'buzz_push_gate:' is distinct from the audit lock
|
|
-- ('buzz_audit:') and both lease-address lock families.
|
|
CREATE OR REPLACE FUNCTION enqueue_push_match_job() RETURNS trigger
|
|
LANGUAGE plpgsql AS $$
|
|
BEGIN
|
|
-- Keep this allowlist identical to the relay's validated NIP-PL descriptor.
|
|
IF NEW.kind IN (7, 9, 1059, 40007, 46010) THEN
|
|
PERFORM pg_advisory_xact_lock_shared(
|
|
hashtextextended('buzz_push_gate:' || NEW.community_id::text, 0));
|
|
IF EXISTS (
|
|
SELECT 1 FROM push_leases
|
|
WHERE community_id = NEW.community_id
|
|
AND active
|
|
AND endpoint_enabled
|
|
AND expires_at > EXTRACT(EPOCH FROM now())::bigint
|
|
) THEN
|
|
INSERT INTO push_match_queue (community_id, event_id)
|
|
VALUES (NEW.community_id, NEW.id)
|
|
ON CONFLICT DO NOTHING;
|
|
END IF;
|
|
END IF;
|
|
RETURN NEW;
|
|
END
|
|
$$;
|