72 lines
2.2 KiB
PL/PgSQL
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;
|
|
|