PolarDBforPostgreSQL/contrib/faultinjector/faultinjector--1.0.sql

72 lines
2.2 KiB
PL/PgSQL

/* contrib/faultinjector/faultinjector--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION faultinjector" to load this file. \quit
--
-- Inject a fault that is predefined in backend code. The fault is
-- associated with an action. The specified action will be taken by a
-- backend process when the fault point is reached during execution.
--
-- faultname: name of the fault, this should match the definition
-- in backend code.
--
-- type: action to be taken when the fault is reached during
-- execution. E.g. "error", "panic". See below for explanation of
-- each fault type.
--
-- database (optional): the fault will be triggered only if current
-- database of a backend process name matches this one.
--
-- tablename (optional): the fault will be triggered only if
-- current table name matches this one.
--
-- start_occurrence (optional): the fault will start triggering
-- after it is reached as many times during in a backend process
-- during execution.
--
-- end_occurrence (optional): the fault will stop triggering after
-- it has been triggered as many times.
--
-- extra_arg (optional): used to specify the number of seconds to
-- sleep when injecting a "sleep" type of fault.
--
CREATE FUNCTION inject_fault(
faultname text,
type text,
database text,
tablename text,
start_occurrence int4,
end_occurrence int4,
extra_arg int4)
RETURNS text
AS 'MODULE_PATHNAME'
LANGUAGE C VOLATILE;
-- Simpler version to inject fault such that it is triggered only one
-- time, starting at the first occurrence. Not tied to any database /
-- table.
CREATE FUNCTION inject_fault(
faultname text,
type text)
RETURNS text
AS $$ select inject_fault($1, $2, '', '', 1, 1, 0) $$
LANGUAGE SQL;
-- Simpler version, always trigger until fault it is reset.
CREATE FUNCTION inject_fault_infinite(
faultname text,
type text)
RETURNS text
AS $$ select inject_fault($1, $2, '', '', 1, -1, 0) $$
LANGUAGE SQL;
-- Wait until a fault is triggered desired number of times.
CREATE FUNCTION wait_until_triggered_fault(
faultname text,
numtimestriggered int4)
RETURNS text
AS $$ select inject_fault($1, 'wait_until_triggered', '', '', 1, 1, $2) $$
LANGUAGE SQL;