From 4dcaf8d2a1f75059b21abf0249df644338c4d78d Mon Sep 17 00:00:00 2001 From: Marcin Ickiewicz <mickiewicz@syncad.com> Date: Tue, 14 Jan 2025 10:59:15 +0100 Subject: [PATCH] correctly exlude all shadow tables from hash computation previously only state providers shadow tables were excluded, what cause problems when haf with installed context with registered tables was updated. --- src/hive_fork_manager/context_rewind/names.sql | 14 +++++++++++++- src/hive_fork_manager/update.sql | 5 +++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/hive_fork_manager/context_rewind/names.sql b/src/hive_fork_manager/context_rewind/names.sql index 9ca6371a5..44fb7bbce 100644 --- a/src/hive_fork_manager/context_rewind/names.sql +++ b/src/hive_fork_manager/context_rewind/names.sql @@ -17,6 +17,18 @@ END; $BODY$ ; +CREATE OR REPLACE FUNCTION hive.get_shadow_table_name_prefix() + RETURNS TEXT + LANGUAGE 'plpgsql' + IMMUTABLE +AS +$BODY$ +BEGIN + RETURN 'shadow_'; +END; +$BODY$ +; + CREATE OR REPLACE FUNCTION hive.get_shadow_table_name( _table_schema TEXT, _table_name TEXT ) RETURNS TEXT LANGUAGE 'plpgsql' @@ -25,7 +37,7 @@ AS $BODY$ BEGIN RETURN hive.validate_name( - 'shadow_' || lower(_table_schema) || '_' || lower(_table_name) + hive.get_shadow_table_name_prefix() || lower(_table_schema) || '_' || lower(_table_name) , _table_name ); END; $BODY$ diff --git a/src/hive_fork_manager/update.sql b/src/hive_fork_manager/update.sql index 40842d021..713946a37 100644 --- a/src/hive_fork_manager/update.sql +++ b/src/hive_fork_manager/update.sql @@ -328,11 +328,12 @@ BEGIN RETURN QUERY SELECT (hive_update.calculate_table_schema_hash( 'hafd', ist.table_name)).* FROM information_schema.tables ist + LEFT JOIN hafd.registered_tables hrt ON ist.table_name ILIKE hrt.shadow_table_name LEFT JOIN hafd.state_providers_registered spr ON ist.table_name ILIKE ANY( spr.tables ) WHERE ist.table_schema = 'hafd' AND ist.table_type = 'BASE TABLE' - AND spr.tables IS NULL - AND ist.table_name NOT ILIKE 'shadow_hafd_%'; -- shadow tables, only possible for state providers + AND hrt.shadow_table_name IS NULL -- is not a shadow table + AND spr.tables IS NULL; -- is not a state provider table END; $BODY$ ; -- GitLab