commit b434c05927b3e3179c2039f19affa5e0dcaec728
parent c1e45623cfb2a13d49f4a65a930413ae04b65098
Author: Christian Grothoff <grothoff@gnunet.org>
Date: Sun, 23 Mar 2025 12:54:56 +0100
gc fix
Diffstat:
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/src/backenddb/pg_statistics_helpers.sql b/src/backenddb/pg_statistics_helpers.sql
@@ -932,7 +932,7 @@ BEGIN
SUM(delta_frac) AS total_frac,
COUNT(*) AS matches
INTO my_sum
- FROM merchant_statistic_counter_event
+ FROM merchant_statistic_amount_event
WHERE imeta_serial_id=my_meta
AND merchant_serial=my_instance
AND delta_curr = my_currency
@@ -944,14 +944,14 @@ BEGIN
my_total_frac = my_sum.total_frac % 100000000;
my_total_val = my_sum.total_val + my_sum.total_frac / 100000000;
-- combine entries
- DELETE FROM merchant_statistic_counter_event
+ DELETE FROM merchant_statistic_amount_event
WHERE imeta_serial_id=my_meta
AND merchant_serial=my_instance
AND delta_curr = my_currency
AND slot >= min_slot
AND slot < max_slot;
-- The previous delete ensures that this is a conflict-free INSERT
- INSERT INTO merchant_statistic_counter_event
+ INSERT INTO merchant_statistic_amount_event
(imeta_serial_id
,merchant_serial
,slot
@@ -969,12 +969,12 @@ BEGIN
min_slot = min_slot + my_precision;
END LOOP; -- min_slot to end_slot by precision loop
END LOOP; -- my_i loop
- -- Finally, delete all events beyond the range we care about
- DELETE FROM merchant_statistic_counter_event
- WHERE merchant_serial=my_instance
- AND imeta_serial_id=my_meta
- AND slot > my_ranges[array_length(my_ranges,1)];
END LOOP; -- my_currency loop
+ -- Finally, delete all events beyond the range we care about
+ DELETE FROM merchant_statistic_amount_event
+ WHERE merchant_serial=my_instance
+ AND imeta_serial_id=my_meta
+ AND slot > my_ranges[array_length(my_ranges,1)];
END LOOP; -- my_rec loop
END LOOP; -- my_instance loop
END $$;
@@ -989,6 +989,7 @@ LANGUAGE plpgsql
AS $$
DECLARE
my_rec RECORD;
+ my_range TEXT;
my_now INT8;
my_end INT8;
BEGIN
@@ -1000,17 +1001,18 @@ BEGIN
,ages[array_length(ages,1)] AS age
FROM merchant_statistic_bucket_meta
LOOP
- my_end = my_now - age * range; -- age is given in multiples of the range (in seconds)
- IF stype = 'amount'
+ my_range = '1 ' || my_rec.range::TEXT;
+ my_end = my_now - my_rec.age * EXTRACT(SECONDS FROM (SELECT my_range::INTERVAL)); -- age is given in multiples of the range (in seconds)
+ IF my_rec.stype = 'amount'
THEN
DELETE
FROM merchant_statistic_bucket_amount
- WHERE bmeta_serial_id = (my_rec).bmeta_serial_id
+ WHERE bmeta_serial_id = my_rec.bmeta_serial_id
AND bucket_start >= my_end;
ELSE
DELETE
FROM merchant_statistic_bucket_counter
- WHERE bmeta_serial_id = (my_rec).bmeta_serial_id
+ WHERE bmeta_serial_id = my_rec.bmeta_serial_id
AND bucket_start >= my_end;
END IF;
END LOOP;