-fix aggregator with deferred constraint
This commit is contained in:
parent
e253a5b055
commit
5e5004020e
@ -581,7 +581,7 @@ CREATE INDEX IF NOT EXISTS wire_out_by_wire_target_serial_id_index
|
|||||||
CREATE TABLE IF NOT EXISTS aggregation_tracking
|
CREATE TABLE IF NOT EXISTS aggregation_tracking
|
||||||
(aggregation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY -- UNIQUE
|
(aggregation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY -- UNIQUE
|
||||||
,deposit_serial_id INT8 PRIMARY KEY -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE
|
,deposit_serial_id INT8 PRIMARY KEY -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE
|
||||||
,wtid_raw BYTEA CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE
|
,wtid_raw BYTEA NOT NULL CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE
|
||||||
)
|
)
|
||||||
PARTITION BY HASH (deposit_serial_id);
|
PARTITION BY HASH (deposit_serial_id);
|
||||||
COMMENT ON TABLE aggregation_tracking
|
COMMENT ON TABLE aggregation_tracking
|
||||||
@ -1078,6 +1078,23 @@ COMMENT ON FUNCTION exchange_do_withdraw_limit_check(INT8, INT8, INT8, INT4)
|
|||||||
IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
|
IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
|
||||||
|
|
||||||
|
|
||||||
|
-- NOTE: experiment, currently dead, see postgres_Start_deferred_wire_out;
|
||||||
|
-- now done inline. FIXME: Remove code here once inline version is confirmed working nicely!
|
||||||
|
CREATE OR REPLACE PROCEDURE defer_wire_out()
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM information_Schema.constraint_column_usage
|
||||||
|
WHERE table_name='wire_out'
|
||||||
|
AND constraint_name='wire_out_ref')
|
||||||
|
THEN
|
||||||
|
SET CONSTRAINTS wire_out_ref DEFERRED;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION exchange_do_deposit(
|
CREATE OR REPLACE FUNCTION exchange_do_deposit(
|
||||||
|
@ -7949,7 +7949,22 @@ postgres_start_deferred_wire_out (void *cls)
|
|||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
struct GNUNET_PQ_ExecuteStatement es[] = {
|
struct GNUNET_PQ_ExecuteStatement es[] = {
|
||||||
GNUNET_PQ_make_execute ("START TRANSACTION ISOLATION LEVEL READ COMMITTED"),
|
GNUNET_PQ_make_execute ("START TRANSACTION ISOLATION LEVEL READ COMMITTED"),
|
||||||
GNUNET_PQ_make_try_execute ("SET CONSTRAINTS wire_out_ref DEFERRED"),
|
GNUNET_PQ_make_execute ("DO $$"
|
||||||
|
"BEGIN"
|
||||||
|
" IF EXISTS ("
|
||||||
|
" SELECT 1"
|
||||||
|
" FROM information_Schema.constraint_column_usage"
|
||||||
|
" WHERE table_name='wire_out'"
|
||||||
|
" AND constraint_name='wire_out_ref')"
|
||||||
|
" THEN "
|
||||||
|
" SET CONSTRAINTS wire_out_ref DEFERRED;"
|
||||||
|
" END IF;"
|
||||||
|
"END $$"),
|
||||||
|
// FIXME: above logic is better as it tests that the constraint
|
||||||
|
// is actually applicable; but maybe we want to drop the constraint
|
||||||
|
// entirely once do_gc() is fixed to do without it?
|
||||||
|
// GNUNET_PQ_make_execute ("CALL defer_wire_out()"),
|
||||||
|
// GNUNET_PQ_make_execute ("SET CONSTRAINTS wire_out_ref DEFERRED;"),
|
||||||
GNUNET_PQ_EXECUTE_STATEMENT_END
|
GNUNET_PQ_EXECUTE_STATEMENT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user