aboutsummaryrefslogtreecommitdiff
path: root/src/test/modules/delay_execution/delay_execution.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/modules/delay_execution/delay_execution.c')
-rw-r--r--src/test/modules/delay_execution/delay_execution.c66
1 files changed, 6 insertions, 60 deletions
diff --git a/src/test/modules/delay_execution/delay_execution.c b/src/test/modules/delay_execution/delay_execution.c
index ad22bc9f2a8..7bc97f84a1c 100644
--- a/src/test/modules/delay_execution/delay_execution.c
+++ b/src/test/modules/delay_execution/delay_execution.c
@@ -1,18 +1,14 @@
/*-------------------------------------------------------------------------
*
* delay_execution.c
- * Test module to introduce delay at various points during execution of a
- * query to test that execution proceeds safely in light of concurrent
- * changes.
+ * Test module to allow delay between parsing and execution of a query.
*
* The delay is implemented by taking and immediately releasing a specified
* advisory lock. If another process has previously taken that lock, the
* current process will be blocked until the lock is released; otherwise,
* there's no effect. This allows an isolationtester script to reliably
- * test behaviors where some specified action happens in another backend in
- * a couple of cases: 1) between parsing and execution of any desired query
- * when using the planner_hook, 2) between RevalidateCachedQuery() and
- * ExecutorStart() when using the ExecutorStart_hook.
+ * test behaviors where some specified action happens in another backend
+ * between parsing and execution of any desired query.
*
* Copyright (c) 2020-2025, PostgreSQL Global Development Group
*
@@ -26,7 +22,6 @@
#include <limits.h>
-#include "executor/executor.h"
#include "optimizer/planner.h"
#include "utils/fmgrprotos.h"
#include "utils/guc.h"
@@ -37,11 +32,9 @@ PG_MODULE_MAGIC;
/* GUC: advisory lock ID to use. Zero disables the feature. */
static int post_planning_lock_id = 0;
-static int executor_start_lock_id = 0;
-/* Save previous hook users to be a good citizen */
+/* Save previous planner hook user to be a good citizen */
static planner_hook_type prev_planner_hook = NULL;
-static ExecutorStart_hook_type prev_ExecutorStart_hook = NULL;
/* planner_hook function to provide the desired delay */
@@ -77,45 +70,11 @@ delay_execution_planner(Query *parse, const char *query_string,
return result;
}
-/* ExecutorStart_hook function to provide the desired delay */
-static bool
-delay_execution_ExecutorStart(QueryDesc *queryDesc, int eflags)
-{
- bool plan_valid;
-
- /* If enabled, delay by taking and releasing the specified lock */
- if (executor_start_lock_id != 0)
- {
- DirectFunctionCall1(pg_advisory_lock_int8,
- Int64GetDatum((int64) executor_start_lock_id));
- DirectFunctionCall1(pg_advisory_unlock_int8,
- Int64GetDatum((int64) executor_start_lock_id));
-
- /*
- * Ensure that we notice any pending invalidations, since the advisory
- * lock functions don't do this.
- */
- AcceptInvalidationMessages();
- }
-
- /* Now start the executor, possibly via a previous hook user */
- if (prev_ExecutorStart_hook)
- plan_valid = prev_ExecutorStart_hook(queryDesc, eflags);
- else
- plan_valid = standard_ExecutorStart(queryDesc, eflags);
-
- if (executor_start_lock_id != 0)
- elog(NOTICE, "Finished ExecutorStart(): CachedPlan is %s",
- plan_valid ? "valid" : "not valid");
-
- return plan_valid;
-}
-
/* Module load function */
void
_PG_init(void)
{
- /* Set up GUCs to control which lock is used */
+ /* Set up the GUC to control which lock is used */
DefineCustomIntVariable("delay_execution.post_planning_lock_id",
"Sets the advisory lock ID to be locked/unlocked after planning.",
"Zero disables the delay.",
@@ -128,22 +87,9 @@ _PG_init(void)
NULL,
NULL);
- DefineCustomIntVariable("delay_execution.executor_start_lock_id",
- "Sets the advisory lock ID to be locked/unlocked before starting execution.",
- "Zero disables the delay.",
- &executor_start_lock_id,
- 0,
- 0, INT_MAX,
- PGC_USERSET,
- 0,
- NULL,
- NULL,
- NULL);
MarkGUCPrefixReserved("delay_execution");
- /* Install our hooks. */
+ /* Install our hook */
prev_planner_hook = planner_hook;
planner_hook = delay_execution_planner;
- prev_ExecutorStart_hook = ExecutorStart_hook;
- ExecutorStart_hook = delay_execution_ExecutorStart;
}