Skip to content

Commit

Permalink
Clear *_src_tmp tables on reset operation.
Browse files Browse the repository at this point in the history
Those tables are supposed to be empty, but if anything goes wrong and those
tables contains problematic data, it could prevent users from cleaning up the
situation.

Thanks to Marc Cousin for the report.
  • Loading branch information
rjuju committed Dec 21, 2020
1 parent babce62 commit 6cb016a
Show file tree
Hide file tree
Showing 4 changed files with 242 additions and 47 deletions.
7 changes: 7 additions & 0 deletions expected/powa-archivist.out
Original file line number Diff line number Diff line change
Expand Up @@ -565,5 +565,12 @@ SELECT alias FROM public.powa_servers WHERE id = 1;
test server
(1 row)

-- Test reset function
SELECT * from powa_reset(1);
powa_reset
------------
t
(1 row)

-- Check remote server removal
DELETE FROM public.powa_servers WHERE id = 1;
165 changes: 165 additions & 0 deletions powa--4.1.1--4.1.2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,168 @@ BEGIN
END IF;
END
$PROC$ language plpgsql; /* end of powa_qualstats_snapshot */

CREATE OR REPLACE FUNCTION public.powa_statements_reset(_srvid integer)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM public.powa_log('Resetting powa_statements_history(' || _srvid || ')');
DELETE FROM public.powa_statements_history WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_statements_history_current(' || _srvid || ')');
DELETE FROM public.powa_statements_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_statements_history_db(' || _srvid || ')');
DELETE FROM public.powa_statements_history_db WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_statements_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_statements_history_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_statements_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_statements_src_tmp WHERE srvid = _srvid;

-- if 3rd part datasource has FK on it, throw everything away
DELETE FROM public.powa_statements WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements(' || _srvid || ')');

RETURN true;
END;
$function$; /* end of powa_statements_reset */

CREATE OR REPLACE FUNCTION public.powa_user_functions_reset(_srvid integer)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM public.powa_log('Resetting powa_user_functions_history(' || _srvid || ')');
DELETE FROM public.powa_user_functions_history WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_user_functions_history_current(' || _srvid || ')');
DELETE FROM public.powa_user_functions_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_user_functions_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_user_functions_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
$function$; /* end of powa_user_functions_reset */

CREATE OR REPLACE FUNCTION public.powa_all_relations_reset(_srvid integer)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM public.powa_log('Resetting powa_all_relations_history(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_all_relations_history_db(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_db WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_all_relations_history_current(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_all_relations_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_all_relations_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_all_relations_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
$function$; /* end of powa_all_relations_reset */

CREATE OR REPLACE FUNCTION public.powa_stat_bgwriter_reset(_srvid integer)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM public.powa_log('Resetting powa_stat_bgwriter_history(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_history WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_stat_bgwriter_history_current(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_stat_bgwriter_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
$function$; /* end of powa_stat_bgwriter_reset */

/*
* powa_kcache reset
*/
CREATE OR REPLACE FUNCTION powa_kcache_reset(_srvid integer)
RETURNS void as $PROC$
DECLARE
v_funcname text := 'powa_kcache_reset(' || _srvid || ')';
v_rowcount bigint;
BEGIN
PERFORM public.powa_log(format('running %I', v_funcname));

PERFORM public.powa_log('resetting powa_kcache_metrics(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_kcache_metrics_db(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_kcache_metrics_current(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_current WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_kcache_metrics_current_db(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_kcache_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_kcache_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_kcache_reset */

/*
* powa_qualstats_reset
*/
CREATE OR REPLACE FUNCTION powa_qualstats_reset(_srvid integer)
RETURNS void as $PROC$
BEGIN
PERFORM public.powa_log('running powa_qualstats_reset(' || _srvid || ')');

PERFORM public.powa_log('resetting powa_qualstats_quals(' || _srvid || ')');
DELETE FROM public.powa_qualstats_quals WHERE srvid = _srvid;
-- cascaded :
-- powa_qualstats_quals_history
-- powa_qualstats_quals_history_current
-- powa_qualstats_constvalues_history
-- powa_qualstats_constvalues_history_current

PERFORM public.powa_log('resetting powa_qualstats_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_qualstats_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_qualstats_reset */

/*
* powa_wait_sampling reset
*/
CREATE OR REPLACE FUNCTION powa_wait_sampling_reset(_srvid integer)
RETURNS void as $PROC$
DECLARE
v_funcname text := 'powa_wait_sampling_reset(' || _srvid || ')';
v_rowcount bigint;
BEGIN
PERFORM public.powa_log(format('running %I', v_funcname));

PERFORM public.powa_log('resetting powa_wait_sampling_history(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_wait_sampling_history_db(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_wait_sampling_history_current(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_wait_sampling_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_wait_sampling_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_wait_sampling_reset */
114 changes: 67 additions & 47 deletions powa--4.1.2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3273,22 +3273,24 @@ CREATE OR REPLACE FUNCTION public.powa_statements_reset(_srvid integer)
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM powa_log('Resetting powa_statements_history(' || _srvid || ')');
DELETE FROM powa_statements_history WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements_history(' || _srvid || ')');
DELETE FROM public.powa_statements_history WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_statements_history_current(' || _srvid || ')');
DELETE FROM powa_statements_history_current WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements_history_current(' || _srvid || ')');
DELETE FROM public.powa_statements_history_current WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_statements_history_db(' || _srvid || ')');
DELETE FROM powa_statements_history_db WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements_history_db(' || _srvid || ')');
DELETE FROM public.powa_statements_history_db WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_statements_history_current_db(' || _srvid || ')');
DELETE FROM powa_statements_history_current_db WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_statements_history_current_db WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_statements(' || _srvid || ')');
PERFORM public.powa_log('Resetting powa_statements_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_statements_src_tmp WHERE srvid = _srvid;

-- if 3rd part datasource has FK on it, throw everything away
DELETE FROM powa_statements WHERE srvid = _srvid;
DELETE FROM public.powa_statements WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_statements(' || _srvid || ')');

RETURN true;
END;
Expand All @@ -3299,11 +3301,14 @@ CREATE OR REPLACE FUNCTION public.powa_user_functions_reset(_srvid integer)
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM powa_log('Resetting powa_user_functions_history(' || _srvid || ')');
DELETE FROM powa_user_functions_history WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_user_functions_history(' || _srvid || ')');
DELETE FROM public.powa_user_functions_history WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_user_functions_history_current(' || _srvid || ')');
DELETE FROM powa_user_functions_history_current WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_user_functions_history_current(' || _srvid || ')');
DELETE FROM public.powa_user_functions_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_user_functions_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_user_functions_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
Expand All @@ -3314,17 +3319,20 @@ CREATE OR REPLACE FUNCTION public.powa_all_relations_reset(_srvid integer)
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM powa_log('Resetting powa_all_relations_history(' || _srvid || ')');
DELETE FROM powa_all_relations_history WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_all_relations_history(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_all_relations_history_db(' || _srvid || ')');
DELETE FROM powa_all_relations_history_db WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_all_relations_history_db(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_db WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_all_relations_history_current(' || _srvid || ')');
DELETE FROM powa_all_relations_history_current WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_all_relations_history_current(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_current WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_all_relations_history_current_db(' || _srvid || ')');
DELETE FROM powa_all_relations_history_current_db WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_all_relations_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_all_relations_history_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_all_relations_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_all_relations_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
Expand All @@ -3335,11 +3343,14 @@ CREATE OR REPLACE FUNCTION public.powa_stat_bgwriter_reset(_srvid integer)
LANGUAGE plpgsql
AS $function$
BEGIN
PERFORM powa_log('Resetting powa_stat_bgwriter_history(' || _srvid || ')');
DELETE FROM powa_stat_bgwriter_history WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_stat_bgwriter_history(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_history WHERE srvid = _srvid;

PERFORM powa_log('Resetting powa_stat_bgwriter_history_current(' || _srvid || ')');
DELETE FROM powa_stat_bgwriter_history_current WHERE srvid = _srvid;
PERFORM public.powa_log('Resetting powa_stat_bgwriter_history_current(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_history_current WHERE srvid = _srvid;

PERFORM public.powa_log('Resetting powa_stat_bgwriter_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_stat_bgwriter_src_tmp WHERE srvid = _srvid;

RETURN true;
END;
Expand Down Expand Up @@ -3715,19 +3726,22 @@ DECLARE
v_funcname text := 'powa_kcache_reset(' || _srvid || ')';
v_rowcount bigint;
BEGIN
PERFORM powa_log(format('running %I', v_funcname));
PERFORM public.powa_log(format('running %I', v_funcname));

PERFORM powa_log('resetting powa_kcache_metrics(' || _srvid || ')');
DELETE FROM powa_kcache_metrics WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_kcache_metrics(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_kcache_metrics_db(' || _srvid || ')');
DELETE FROM powa_kcache_metrics_db WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_kcache_metrics_db(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_db WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_kcache_metrics_current(' || _srvid || ')');
DELETE FROM powa_kcache_metrics_current WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_kcache_metrics_current(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_current WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_kcache_metrics_current_db(' || _srvid || ')');
DELETE FROM powa_kcache_metrics_current_db WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_kcache_metrics_current_db(' || _srvid || ')');
DELETE FROM public.powa_kcache_metrics_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_kcache_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_kcache_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_kcache_reset */

Expand Down Expand Up @@ -4162,15 +4176,18 @@ $PROC$ language plpgsql; /* end of powa_qualstats_purge */
CREATE OR REPLACE FUNCTION powa_qualstats_reset(_srvid integer)
RETURNS void as $PROC$
BEGIN
PERFORM powa_log('running powa_qualstats_reset(' || _srvid || ')');
PERFORM public.powa_log('running powa_qualstats_reset(' || _srvid || ')');

PERFORM powa_log('resetting powa_qualstats_quals(' || _srvid || ')');
DELETE FROM powa_qualstats_quals WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_qualstats_quals(' || _srvid || ')');
DELETE FROM public.powa_qualstats_quals WHERE srvid = _srvid;
-- cascaded :
-- powa_qualstats_quals_history
-- powa_qualstats_quals_history_current
-- powa_qualstats_constvalues_history
-- powa_qualstats_constvalues_history_current

PERFORM public.powa_log('resetting powa_qualstats_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_qualstats_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_qualstats_reset */

Expand Down Expand Up @@ -4489,19 +4506,22 @@ DECLARE
v_funcname text := 'powa_wait_sampling_reset(' || _srvid || ')';
v_rowcount bigint;
BEGIN
PERFORM powa_log(format('running %I', v_funcname));
PERFORM public.powa_log(format('running %I', v_funcname));

PERFORM powa_log('resetting powa_wait_sampling_history(' || _srvid || ')');
DELETE FROM powa_wait_sampling_history WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_wait_sampling_history(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_wait_sampling_history_db(' || _srvid || ')');
DELETE FROM powa_wait_sampling_history_db WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_wait_sampling_history_db(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_db WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_wait_sampling_history_current(' || _srvid || ')');
DELETE FROM powa_wait_sampling_history_current WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_wait_sampling_history_current(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_current WHERE srvid = _srvid;

PERFORM powa_log('resetting powa_wait_sampling_history_current_db(' || _srvid || ')');
DELETE FROM powa_wait_sampling_history_current_db WHERE srvid = _srvid;
PERFORM public.powa_log('resetting powa_wait_sampling_history_current_db(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_history_current_db WHERE srvid = _srvid;

PERFORM public.powa_log('resetting powa_wait_sampling_src_tmp(' || _srvid || ')');
DELETE FROM public.powa_wait_sampling_src_tmp WHERE srvid = _srvid;
END;
$PROC$ language plpgsql; /* end of powa_wait_sampling_reset */

Expand Down
3 changes: 3 additions & 0 deletions sql/powa-archivist.sql
Original file line number Diff line number Diff line change
Expand Up @@ -121,5 +121,8 @@ SELECT * FROM public.powa_configure_server(1, '{"alias": "test server"}');

SELECT alias FROM public.powa_servers WHERE id = 1;

-- Test reset function
SELECT * from powa_reset(1);

-- Check remote server removal
DELETE FROM public.powa_servers WHERE id = 1;

0 comments on commit 6cb016a

Please sign in to comment.