fix-inval-build-race-v1.patch

text/plain

Filename: fix-inval-build-race-v1.patch
Type: text/plain
Part: 0
Message: Re: pgsql: Avoid race in RelationBuildDesc() affecting CREATE INDEX CONCURR

Patch

Format: unified
Series: patch v1
File+
src/backend/utils/cache/inval.c 1 1
Author:     Noah Misch <noah@leadboat.com>
Commit:     Noah Misch <noah@leadboat.com>

    Fix back-patch of "Avoid race in RelationBuildDesc() ..."
    
    The back-patch of commit fdd965d074d46765c295223b119ca437dbcac973 broke
    CLOBBER_CACHE_ALWAYS for v9.6 through v13, because it updated the
    InvalidateSystemCaches() call pertaining to CLOBBER_CACHE_RECURSIVELY
    and not also the one pertaining to CLOBBER_CACHE_ALWAYS.  Back-patch to
    v13, v12, v11, and v10.
    
    Reported by Tomas Vondra.  Reviewed by FIXME.
    
    Discussion: https://postgr.es/m/df7b4c0b-7d92-f03f-75c4-9e08b269a716@enterprisedb.com

diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index 8b0503f..8fe1f0d 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -715,27 +715,27 @@ AcceptInvalidationMessages(void)
 	 * slows things by at least a factor of 10000, so I wouldn't suggest
 	 * trying to run the entire regression tests that way.  It's useful to try
 	 * a few simple tests, to make sure that cache reload isn't subject to
 	 * internal cache-flush hazards, but after you've done a few thousand
 	 * recursive reloads it's unlikely you'll learn more.
 	 */
 #if defined(CLOBBER_CACHE_ALWAYS)
 	{
 		static bool in_recursion = false;
 
 		if (!in_recursion)
 		{
 			in_recursion = true;
-			InvalidateSystemCaches();
+			InvalidateSystemCachesExtended(true);
 			in_recursion = false;
 		}
 	}
 #elif defined(CLOBBER_CACHE_RECURSIVELY)
 	{
 		static int	recursion_depth = 0;
 
 		/* Maximum depth is arbitrary depending on your threshold of pain */
 		if (recursion_depth < 3)
 		{
 			recursion_depth++;
 			InvalidateSystemCachesExtended(true);
 			recursion_depth--;