commit a35e20ca524de7b3c3e8c4a7dfeb851f8a191feb
parent 1042ca084e69caaa7d3ef73cf2b800d26480d792
Author: Christian Grothoff <christian@grothoff.org>
Date: Wed, 10 Jun 2026 16:55:30 +0200
try to fix #11500
Diffstat:
2 files changed, 11 insertions(+), 45 deletions(-)
diff --git a/src/backenddb/gc.sql b/src/backenddb/gc.sql
@@ -36,9 +36,9 @@ BEGIN
s := 'merchant_instance_' || rec.merchant_serial::TEXT;
BEGIN
EXECUTE format('SET LOCAL search_path TO %I, merchant', s);
- CALL merchant_statistic_amount_gc ();
- CALL merchant_statistic_bucket_gc ();
- CALL merchant_statistic_counter_gc ();
+ EXECUTE format('CALL %I.merchant_statistic_amount_gc()', s);
+ EXECUTE format('CALL %I.merchant_statistic_bucket_gc()', s);
+ EXECUTE format('CALL %I.merchant_statistic_counter_gc()', s);
EXECUTE format('DELETE FROM %I.merchant_unclaim_signatures'
' WHERE expiration_time < $1', s) USING in_now;
EXCEPTION
diff --git a/src/backenddb/pg_statistics_helpers.sql b/src/backenddb/pg_statistics_helpers.sql
@@ -406,8 +406,6 @@ LANGUAGE plpgsql
AS $$
DECLARE
my_time INT8 DEFAULT ROUND(EXTRACT(epoch FROM CURRENT_TIMESTAMP(0)::TIMESTAMP) * 1000000)::INT8 / 1000 / 1000;
- my_instance INT8;
- my_instance_name TEXT;
my_rec RECORD;
my_sum RECORD;
my_meta INT8;
@@ -420,11 +418,6 @@ DECLARE
end_slot INT8;
my_total INT8;
BEGIN
- -- GC for all instances
- FOR my_instance IN
- SELECT DISTINCT merchant_serial
- FROM merchant_statistic_counter_event
- LOOP
-- Do combination work for all numeric statistic events
FOR my_rec IN
SELECT imeta_serial_id
@@ -433,12 +426,7 @@ BEGIN
,slug
FROM merchant_statistic_interval_meta
LOOP
- -- First, we query the current interval statistic to update its counters
- SELECT merchant_id
- INTO my_instance_name
- FROM merchant.merchant_instances
- WHERE merchant_serial = my_instance;
- PERFORM FROM merchant_statistic_interval_number_get (my_rec.slug, my_instance_name);
+ PERFORM FROM merchant_statistic_interval_number_get (my_rec.slug);
my_meta = my_rec.imeta_serial_id;
my_ranges = my_rec.ranges;
@@ -470,8 +458,7 @@ BEGIN
MIN(nevent_serial_id) AS rep_serial_id
INTO my_sum
FROM merchant_statistic_counter_event
- WHERE merchant_serial=my_instance
- AND imeta_serial_id=my_meta
+ WHERE imeta_serial_id=my_meta
AND slot >= my_time - max_slot
AND slot < my_time - min_slot;
@@ -485,8 +472,7 @@ BEGIN
-- combine entries
DELETE FROM merchant_statistic_counter_event
- WHERE merchant_serial=my_instance
- AND imeta_serial_id=my_meta
+ WHERE imeta_serial_id=my_meta
AND slot >= my_time - max_slot
AND slot < my_time - min_slot
AND nevent_serial_id > my_sum.rep_serial_id;
@@ -494,7 +480,6 @@ BEGIN
UPDATE merchant_statistic_counter_event SET
delta = my_total
WHERE imeta_serial_id = my_meta
- AND merchant_serial = my_instance
AND nevent_serial_id = my_sum.rep_serial_id;
END IF;
min_slot = min_slot + my_precision;
@@ -502,13 +487,11 @@ BEGIN
END LOOP; -- my_i loop
-- Finally, delete all events beyond the range we care about
- RAISE NOTICE 'deleting entries of %/% before % - % = %', my_instance, my_meta, my_time, my_ranges[array_length(my_ranges,1)], my_time - my_ranges[array_length(my_ranges,1)];
+ RAISE NOTICE 'deleting entries of % before % - % = %', my_meta, my_time, my_ranges[array_length(my_ranges,1)], my_time - my_ranges[array_length(my_ranges,1)];
DELETE FROM merchant_statistic_counter_event
- WHERE merchant_serial=my_instance
- AND imeta_serial_id=my_meta
+ WHERE imeta_serial_id=my_meta
AND slot < my_time - my_ranges[array_length(my_ranges,1)];
END LOOP; -- my_rec loop
- END LOOP; -- my_instance loop
END $$;
COMMENT ON PROCEDURE merchant_statistic_counter_gc
IS 'Performs garbage collection and compaction of the merchant_statistic_counter_event table';
@@ -521,8 +504,6 @@ LANGUAGE plpgsql
AS $$
DECLARE
my_time INT8 DEFAULT ROUND(EXTRACT(epoch FROM CURRENT_TIMESTAMP(0)::TIMESTAMP) * 1000000)::INT8 / 1000 / 1000;
- my_instance INT8;
- my_instance_name TEXT;
my_rec RECORD;
my_sum RECORD;
my_meta INT8;
@@ -537,11 +518,6 @@ DECLARE
my_total_val INT8;
my_total_frac INT8;
BEGIN
- -- GC for all instances
- FOR my_instance IN
- SELECT DISTINCT merchant_serial
- FROM merchant_statistic_counter_event
- LOOP
-- Do combination work for all numeric statistic events
FOR my_rec IN
SELECT imeta_serial_id
@@ -551,12 +527,7 @@ BEGIN
FROM merchant_statistic_interval_meta
LOOP
- -- First, we query the current interval statistic to update its counters
- SELECT merchant_id
- INTO my_instance_name
- FROM merchant.merchant_instances
- WHERE merchant_serial = my_instance;
- PERFORM FROM merchant_statistic_interval_amount_get (my_rec.slug, my_instance_name);
+ PERFORM FROM merchant_statistic_interval_amount_get (my_rec.slug);
my_meta = my_rec.imeta_serial_id;
my_ranges = my_rec.ranges;
@@ -595,7 +566,6 @@ BEGIN
INTO my_sum
FROM merchant_statistic_amount_event
WHERE imeta_serial_id=my_meta
- AND merchant_serial=my_instance
AND delta_curr = my_currency
AND slot >= my_time - max_slot
AND slot < my_time - min_slot;
@@ -609,7 +579,6 @@ BEGIN
-- combine entries
DELETE FROM merchant_statistic_amount_event
WHERE imeta_serial_id=my_meta
- AND merchant_serial=my_instance
AND delta_curr = my_currency
AND slot >= my_time - max_slot
AND slot < my_time - min_slot
@@ -619,7 +588,6 @@ BEGIN
delta_value = my_total_val
,delta_frac = my_total_frac
WHERE imeta_serial_id = my_meta
- AND merchant_serial = my_instance
AND delta_curr = my_currency
AND aevent_serial_id = my_sum.rep_serial_id;
END IF;
@@ -629,13 +597,11 @@ BEGIN
END LOOP; -- my_currency loop
-- Finally, delete all events beyond the range we care about
- RAISE NOTICE 'deleting entries of %/% before % - % = %', my_instance, my_meta, my_time, my_ranges[array_length(my_ranges,1)], my_time - my_ranges[array_length(my_ranges,1)];
+ RAISE NOTICE 'deleting entries of % before % - % = %', my_meta, my_time, my_ranges[array_length(my_ranges,1)], my_time - my_ranges[array_length(my_ranges,1)];
DELETE FROM merchant_statistic_amount_event
- WHERE merchant_serial=my_instance
- AND imeta_serial_id=my_meta
+ WHERE imeta_serial_id=my_meta
AND slot < my_time - my_ranges[array_length(my_ranges,1)];
END LOOP; -- my_rec loop
- END LOOP; -- my_instance loop
END $$;
COMMENT ON PROCEDURE merchant_statistic_amount_gc
IS 'Performs garbage collection and compaction of the merchant_statistic_amount_event table';