From 60c905edc75d66dd45475eb7d3e11b6f603d2143 Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Fri, 2 Oct 2020 15:24:23 +1300
Subject: [PATCH v2 1/2] Inject fault timing

---
 src/backend/executor/nodeHash.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c
index c5f2d1d22b..168e463c72 100644
--- a/src/backend/executor/nodeHash.c
+++ b/src/backend/executor/nodeHash.c
@@ -25,6 +25,7 @@
 
 #include <math.h>
 #include <limits.h>
+#include <unistd.h>
 
 #include "access/htup_details.h"
 #include "access/parallel.h"
@@ -585,6 +586,13 @@ ExecHashTableCreate(HashState *state, List *hashOperators, List *hashCollations,
 		ParallelHashJoinState *pstate = hashtable->parallel_state;
 		Barrier    *build_barrier;
 
+		if (ParallelWorkerNumber >= 1)
+		{
+			elog(LOG, "a short nap before attaching to build_barrier...");
+			sleep(2);
+			elog(LOG, "nap finished");
+		}
+
 		/*
 		 * Attach to the build barrier.  The corresponding detach operation is
 		 * in ExecHashTableDetach.  Note that we won't attach to the
@@ -3198,6 +3206,9 @@ ExecHashTableDetach(HashJoinTable hashtable)
 			if (DsaPointerIsValid(pstate->batches))
 			{
 				dsa_free(hashtable->area, pstate->batches);
+				elog(LOG, "batch array freed, taking a long nap...");
+				sleep(5);
+				elog(LOG, "finished nap, clearing pointer");
 				pstate->batches = InvalidDsaPointer;
 			}
 		}
-- 
2.30.1

