Ctrl K
ComunidadGuías…

migrations/20261023000000_s3_multipart_counts.up.sql

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
CREATE TABLE IF NOT EXISTS shardline_s3_multipart_counts (
    scope_namespace TEXT NOT NULL,
    object_key TEXT NOT NULL,
    file_id TEXT NOT NULL,
    content_hash TEXT NOT NULL,
    part_count INTEGER NOT NULL CHECK (part_count >= 0),
    updated_at_unix_seconds BIGINT NOT NULL,
    proof TEXT NOT NULL,
    PRIMARY KEY (scope_namespace, object_key)
);

-- The released binaries write only shardline_s3_objects. Invalidate any
-- derived part count when such a write changes the authoritative row. Newer
-- binaries write a fresh sidecar later in the same transaction.
CREATE OR REPLACE FUNCTION shardline_invalidate_s3_multipart_count()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
    IF TG_OP = 'DELETE' THEN
        DELETE FROM shardline_s3_multipart_counts
        WHERE scope_namespace = OLD.scope_namespace AND object_key = OLD.object_key;
    ELSE
        DELETE FROM shardline_s3_multipart_counts
        WHERE scope_namespace = NEW.scope_namespace AND object_key = NEW.object_key;
        IF TG_OP = 'UPDATE' AND (OLD.scope_namespace, OLD.object_key)
            IS DISTINCT FROM (NEW.scope_namespace, NEW.object_key) THEN
            DELETE FROM shardline_s3_multipart_counts
            WHERE scope_namespace = OLD.scope_namespace AND object_key = OLD.object_key;
        END IF;
    END IF;
    RETURN NULL;
END;
$$;

DROP TRIGGER IF EXISTS shardline_s3_multipart_counts_invalidate ON shardline_s3_objects;
CREATE TRIGGER shardline_s3_multipart_counts_invalidate
AFTER INSERT OR UPDATE OR DELETE ON shardline_s3_objects
FOR EACH ROW EXECUTE FUNCTION shardline_invalidate_s3_multipart_count();