Rename debug_invalidate_system_caches_always to debug_discard_caches.
The name introduced by commit 4656e3d66 was agreed to be unreasonably long. To match this change, rename initdb's recently-added --clobber-cache option to --discard-caches. Discussion: https://postgr.es/m/1374320.1625430433@sss.pgh.pa.us
This commit is contained in:
parent
e0271d5f1e
commit
d68a003912
@ -9340,11 +9340,11 @@ WARNING: there is no transaction in progress
|
|||||||
-- Change application_name of remote connection to special one
|
-- Change application_name of remote connection to special one
|
||||||
-- so that we can easily terminate the connection later.
|
-- so that we can easily terminate the connection later.
|
||||||
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
||||||
-- If debug_invalidate_system_caches_always is active, it results in
|
-- If debug_discard_caches is active, it results in
|
||||||
-- dropping remote connections after every transaction, making it
|
-- dropping remote connections after every transaction, making it
|
||||||
-- impossible to test termination meaningfully. So turn that off
|
-- impossible to test termination meaningfully. So turn that off
|
||||||
-- for this test.
|
-- for this test.
|
||||||
SET debug_invalidate_system_caches_always = 0;
|
SET debug_discard_caches = 0;
|
||||||
-- Make sure we have a remote connection.
|
-- Make sure we have a remote connection.
|
||||||
SELECT 1 FROM ft1 LIMIT 1;
|
SELECT 1 FROM ft1 LIMIT 1;
|
||||||
?column?
|
?column?
|
||||||
@ -9386,7 +9386,7 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail
|
|||||||
ERROR: 08006
|
ERROR: 08006
|
||||||
\set VERBOSITY default
|
\set VERBOSITY default
|
||||||
COMMIT;
|
COMMIT;
|
||||||
RESET debug_invalidate_system_caches_always;
|
RESET debug_discard_caches;
|
||||||
-- =============================================================================
|
-- =============================================================================
|
||||||
-- test connection invalidation cases and postgres_fdw_get_connections function
|
-- test connection invalidation cases and postgres_fdw_get_connections function
|
||||||
-- =============================================================================
|
-- =============================================================================
|
||||||
|
@ -2831,11 +2831,11 @@ ROLLBACK;
|
|||||||
-- so that we can easily terminate the connection later.
|
-- so that we can easily terminate the connection later.
|
||||||
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
||||||
|
|
||||||
-- If debug_invalidate_system_caches_always is active, it results in
|
-- If debug_discard_caches is active, it results in
|
||||||
-- dropping remote connections after every transaction, making it
|
-- dropping remote connections after every transaction, making it
|
||||||
-- impossible to test termination meaningfully. So turn that off
|
-- impossible to test termination meaningfully. So turn that off
|
||||||
-- for this test.
|
-- for this test.
|
||||||
SET debug_invalidate_system_caches_always = 0;
|
SET debug_discard_caches = 0;
|
||||||
|
|
||||||
-- Make sure we have a remote connection.
|
-- Make sure we have a remote connection.
|
||||||
SELECT 1 FROM ft1 LIMIT 1;
|
SELECT 1 FROM ft1 LIMIT 1;
|
||||||
@ -2861,7 +2861,7 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail
|
|||||||
\set VERBOSITY default
|
\set VERBOSITY default
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
RESET debug_invalidate_system_caches_always;
|
RESET debug_discard_caches;
|
||||||
|
|
||||||
-- =============================================================================
|
-- =============================================================================
|
||||||
-- test connection invalidation cases and postgres_fdw_get_connections function
|
-- test connection invalidation cases and postgres_fdw_get_connections function
|
||||||
|
@ -10341,10 +10341,10 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="guc-debug-invalidate-system-caches-always" xreflabel="debug_invalidate_system_caches_always">
|
<varlistentry id="guc-debug-discard-caches" xreflabel="debug_discard_caches">
|
||||||
<term><varname>debug_invalidate_system_caches_always</varname> (<type>integer</type>)
|
<term><varname>debug_discard_caches</varname> (<type>integer</type>)
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary><varname>debug_invalidate_system_caches_always</varname> configuration parameter</primary>
|
<primary><varname>debug_discard_caches</varname> configuration parameter</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</term>
|
</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -10369,7 +10369,7 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
This parameter is supported when
|
This parameter is supported when
|
||||||
<symbol>CLOBBER_CACHE_ENABLED</symbol> was defined at compile time
|
<symbol>DISCARD_CACHES_ENABLED</symbol> was defined at compile time
|
||||||
(which happens automatically when using the
|
(which happens automatically when using the
|
||||||
<application>configure</application> option
|
<application>configure</application> option
|
||||||
<option>--enable-cassert</option>). In production builds, its value
|
<option>--enable-cassert</option>). In production builds, its value
|
||||||
|
@ -388,17 +388,6 @@ PostgreSQL documentation
|
|||||||
Other, less commonly used, options are also available:
|
Other, less commonly used, options are also available:
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
|
||||||
<term><option>--clobber-cache</option></term>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
Run the bootstrap backend with the
|
|
||||||
<literal>debug_invalidate_system_caches_always=1</literal> option.
|
|
||||||
This takes a very long time and is only of use for deep debugging.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-d</option></term>
|
<term><option>-d</option></term>
|
||||||
<term><option>--debug</option></term>
|
<term><option>--debug</option></term>
|
||||||
@ -413,6 +402,17 @@ PostgreSQL documentation
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--discard-caches</option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Run the bootstrap backend with the
|
||||||
|
<literal>debug_discard_caches=1</literal> option.
|
||||||
|
This takes a very long time and is only of use for deep debugging.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-L <replaceable class="parameter">directory</replaceable></option></term>
|
<term><option>-L <replaceable class="parameter">directory</replaceable></option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -373,7 +373,7 @@ make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
|
|||||||
<para>
|
<para>
|
||||||
This can be useful to enable additional logging, adjust resource limits,
|
This can be useful to enable additional logging, adjust resource limits,
|
||||||
or enable extra run-time checks such as <xref
|
or enable extra run-time checks such as <xref
|
||||||
linkend="guc-debug-invalidate-system-caches-always"/>.
|
linkend="guc-debug-discard-caches"/>.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
|
@ -636,10 +636,10 @@ pg_isolation_test_session_is_blocked(PG_FUNCTION_ARGS)
|
|||||||
* Check if any of these are in the list of interesting PIDs, that being
|
* Check if any of these are in the list of interesting PIDs, that being
|
||||||
* the sessions that the isolation tester is running. We don't use
|
* the sessions that the isolation tester is running. We don't use
|
||||||
* "arrayoverlaps" here, because it would lead to cache lookups and one of
|
* "arrayoverlaps" here, because it would lead to cache lookups and one of
|
||||||
* our goals is to run quickly with debug_invalidate_system_caches_always
|
* our goals is to run quickly with debug_discard_caches > 0. We expect
|
||||||
* > 0. We expect blocking_pids to be usually empty and otherwise a very
|
* blocking_pids to be usually empty and otherwise a very small number in
|
||||||
* small number in isolation tester cases, so make that the outer loop of
|
* isolation tester cases, so make that the outer loop of a naive search
|
||||||
* a naive search for a match.
|
* for a match.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < num_blocking_pids; i++)
|
for (i = 0; i < num_blocking_pids; i++)
|
||||||
for (j = 0; j < num_interesting_pids; j++)
|
for (j = 0; j < num_interesting_pids; j++)
|
||||||
|
16
src/backend/utils/cache/inval.c
vendored
16
src/backend/utils/cache/inval.c
vendored
@ -182,7 +182,7 @@ static int numSharedInvalidMessagesArray;
|
|||||||
static int maxSharedInvalidMessagesArray;
|
static int maxSharedInvalidMessagesArray;
|
||||||
|
|
||||||
/* GUC storage */
|
/* GUC storage */
|
||||||
int debug_invalidate_system_caches_always = 0;
|
int debug_discard_caches = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dynamically-registered callback functions. Current implementation
|
* Dynamically-registered callback functions. Current implementation
|
||||||
@ -690,7 +690,7 @@ AcceptInvalidationMessages(void)
|
|||||||
ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage,
|
ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage,
|
||||||
InvalidateSystemCaches);
|
InvalidateSystemCaches);
|
||||||
|
|
||||||
/*
|
/*----------
|
||||||
* Test code to force cache flushes anytime a flush could happen.
|
* Test code to force cache flushes anytime a flush could happen.
|
||||||
*
|
*
|
||||||
* This helps detect intermittent faults caused by code that reads a cache
|
* This helps detect intermittent faults caused by code that reads a cache
|
||||||
@ -698,28 +698,28 @@ AcceptInvalidationMessages(void)
|
|||||||
* rarely actually does so. This can spot issues that would otherwise
|
* rarely actually does so. This can spot issues that would otherwise
|
||||||
* only arise with badly timed concurrent DDL, for example.
|
* only arise with badly timed concurrent DDL, for example.
|
||||||
*
|
*
|
||||||
* The default debug_invalidate_system_caches_always = 0 does no forced
|
* The default debug_discard_caches = 0 does no forced cache flushes.
|
||||||
* cache flushes.
|
|
||||||
*
|
*
|
||||||
* If used with CLOBBER_FREED_MEMORY,
|
* If used with CLOBBER_FREED_MEMORY,
|
||||||
* debug_invalidate_system_caches_always = 1 (CLOBBER_CACHE_ALWAYS)
|
* debug_discard_caches = 1 (formerly known as CLOBBER_CACHE_ALWAYS)
|
||||||
* provides a fairly thorough test that the system contains no cache-flush
|
* provides a fairly thorough test that the system contains no cache-flush
|
||||||
* hazards. However, it also makes the system unbelievably slow --- the
|
* hazards. However, it also makes the system unbelievably slow --- the
|
||||||
* regression tests take about 100 times longer than normal.
|
* regression tests take about 100 times longer than normal.
|
||||||
*
|
*
|
||||||
* If you're a glutton for punishment, try
|
* If you're a glutton for punishment, try
|
||||||
* debug_invalidate_system_caches_always = 3 (CLOBBER_CACHE_RECURSIVELY).
|
* debug_discard_caches = 3 (formerly known as CLOBBER_CACHE_RECURSIVELY).
|
||||||
* This slows things by at least a factor of 10000, so I wouldn't suggest
|
* This 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
|
* 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
|
* 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
|
* internal cache-flush hazards, but after you've done a few thousand
|
||||||
* recursive reloads it's unlikely you'll learn more.
|
* recursive reloads it's unlikely you'll learn more.
|
||||||
|
*----------
|
||||||
*/
|
*/
|
||||||
#ifdef CLOBBER_CACHE_ENABLED
|
#ifdef DISCARD_CACHES_ENABLED
|
||||||
{
|
{
|
||||||
static int recursion_depth = 0;
|
static int recursion_depth = 0;
|
||||||
|
|
||||||
if (recursion_depth < debug_invalidate_system_caches_always)
|
if (recursion_depth < debug_discard_caches)
|
||||||
{
|
{
|
||||||
recursion_depth++;
|
recursion_depth++;
|
||||||
InvalidateSystemCaches();
|
InvalidateSystemCaches();
|
||||||
|
5
src/backend/utils/cache/plancache.c
vendored
5
src/backend/utils/cache/plancache.c
vendored
@ -897,9 +897,8 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist,
|
|||||||
* rejected a generic plan, it's possible to reach here with is_valid
|
* rejected a generic plan, it's possible to reach here with is_valid
|
||||||
* false due to an invalidation while making the generic plan. In theory
|
* false due to an invalidation while making the generic plan. In theory
|
||||||
* the invalidation must be a false positive, perhaps a consequence of an
|
* the invalidation must be a false positive, perhaps a consequence of an
|
||||||
* sinval reset event or the debug_invalidate_system_caches_always code.
|
* sinval reset event or the debug_discard_caches code. But for safety,
|
||||||
* But for safety, let's treat it as real and redo the
|
* let's treat it as real and redo the RevalidateCachedQuery call.
|
||||||
* RevalidateCachedQuery call.
|
|
||||||
*/
|
*/
|
||||||
if (!plansource->is_valid)
|
if (!plansource->is_valid)
|
||||||
qlist = RevalidateCachedQuery(plansource, queryEnv);
|
qlist = RevalidateCachedQuery(plansource, queryEnv);
|
||||||
|
17
src/backend/utils/cache/relcache.c
vendored
17
src/backend/utils/cache/relcache.c
vendored
@ -97,7 +97,7 @@
|
|||||||
#define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1
|
#define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1
|
||||||
#else
|
#else
|
||||||
#define RECOVER_RELATION_BUILD_MEMORY 0
|
#define RECOVER_RELATION_BUILD_MEMORY 0
|
||||||
#ifdef CLOBBER_CACHE_ENABLED
|
#ifdef DISCARD_CACHES_ENABLED
|
||||||
#define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1
|
#define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@ -1011,10 +1011,10 @@ RelationBuildDesc(Oid targetRelId, bool insertIt)
|
|||||||
* data, reasoning that the caller's context is at worst of transaction
|
* data, reasoning that the caller's context is at worst of transaction
|
||||||
* scope, and relcache loads shouldn't happen so often that it's essential
|
* scope, and relcache loads shouldn't happen so often that it's essential
|
||||||
* to recover transient data before end of statement/transaction. However
|
* to recover transient data before end of statement/transaction. However
|
||||||
* that's definitely not true in clobber-cache test builds, and perhaps
|
* that's definitely not true when debug_discard_caches is active, and
|
||||||
* it's not true in other cases.
|
* perhaps it's not true in other cases.
|
||||||
*
|
*
|
||||||
* When cache clobbering is enabled or when forced to by
|
* When debug_discard_caches is active or when forced to by
|
||||||
* RECOVER_RELATION_BUILD_MEMORY=1, arrange to allocate the junk in a
|
* RECOVER_RELATION_BUILD_MEMORY=1, arrange to allocate the junk in a
|
||||||
* temporary context that we'll free before returning. Make it a child of
|
* temporary context that we'll free before returning. Make it a child of
|
||||||
* caller's context so that it will get cleaned up appropriately if we
|
* caller's context so that it will get cleaned up appropriately if we
|
||||||
@ -1024,7 +1024,7 @@ RelationBuildDesc(Oid targetRelId, bool insertIt)
|
|||||||
MemoryContext tmpcxt = NULL;
|
MemoryContext tmpcxt = NULL;
|
||||||
MemoryContext oldcxt = NULL;
|
MemoryContext oldcxt = NULL;
|
||||||
|
|
||||||
if (RECOVER_RELATION_BUILD_MEMORY || debug_invalidate_system_caches_always > 0)
|
if (RECOVER_RELATION_BUILD_MEMORY || debug_discard_caches > 0)
|
||||||
{
|
{
|
||||||
tmpcxt = AllocSetContextCreate(CurrentMemoryContext,
|
tmpcxt = AllocSetContextCreate(CurrentMemoryContext,
|
||||||
"RelationBuildDesc workspace",
|
"RelationBuildDesc workspace",
|
||||||
@ -1627,11 +1627,10 @@ LookupOpclassInfo(Oid operatorClassOid,
|
|||||||
* otherwise. However it can be helpful for detecting bugs in the cache
|
* otherwise. However it can be helpful for detecting bugs in the cache
|
||||||
* loading logic itself, such as reliance on a non-nailed index. Given
|
* loading logic itself, such as reliance on a non-nailed index. Given
|
||||||
* the limited use-case and the fact that this adds a great deal of
|
* the limited use-case and the fact that this adds a great deal of
|
||||||
* expense, we enable it only for high values of
|
* expense, we enable it only for high values of debug_discard_caches.
|
||||||
* debug_invalidate_system_caches_always.
|
|
||||||
*/
|
*/
|
||||||
#ifdef CLOBBER_CACHE_ENABLED
|
#ifdef DISCARD_CACHES_ENABLED
|
||||||
if (debug_invalidate_system_caches_always > 2)
|
if (debug_discard_caches > 2)
|
||||||
opcentry->valid = false;
|
opcentry->valid = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3513,13 +3513,13 @@ static struct config_int ConfigureNamesInt[] =
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
{"debug_invalidate_system_caches_always", PGC_SUSET, DEVELOPER_OPTIONS,
|
{"debug_discard_caches", PGC_SUSET, DEVELOPER_OPTIONS,
|
||||||
gettext_noop("Aggressively invalidate system caches for debugging purposes."),
|
gettext_noop("Aggressively flush system caches for debugging purposes."),
|
||||||
NULL,
|
NULL,
|
||||||
GUC_NOT_IN_SAMPLE
|
GUC_NOT_IN_SAMPLE
|
||||||
},
|
},
|
||||||
&debug_invalidate_system_caches_always,
|
&debug_discard_caches,
|
||||||
#ifdef CLOBBER_CACHE_ENABLED
|
#ifdef DISCARD_CACHES_ENABLED
|
||||||
/* Set default based on older compile-time-only cache clobber macros */
|
/* Set default based on older compile-time-only cache clobber macros */
|
||||||
#if defined(CLOBBER_CACHE_RECURSIVELY)
|
#if defined(CLOBBER_CACHE_RECURSIVELY)
|
||||||
3,
|
3,
|
||||||
@ -3529,9 +3529,9 @@ static struct config_int ConfigureNamesInt[] =
|
|||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
0, 5,
|
0, 5,
|
||||||
#else /* not CLOBBER_CACHE_ENABLED */
|
#else /* not DISCARD_CACHES_ENABLED */
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
#endif /* not CLOBBER_CACHE_ENABLED */
|
#endif /* not DISCARD_CACHES_ENABLED */
|
||||||
NULL, NULL, NULL
|
NULL, NULL, NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -2266,8 +2266,8 @@ usage(const char *progname)
|
|||||||
printf(_(" -X, --waldir=WALDIR location for the write-ahead log directory\n"));
|
printf(_(" -X, --waldir=WALDIR location for the write-ahead log directory\n"));
|
||||||
printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n"));
|
printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n"));
|
||||||
printf(_("\nLess commonly used options:\n"));
|
printf(_("\nLess commonly used options:\n"));
|
||||||
printf(_(" --clobber-cache use cache-clobbering debug option\n"));
|
|
||||||
printf(_(" -d, --debug generate lots of debugging output\n"));
|
printf(_(" -d, --debug generate lots of debugging output\n"));
|
||||||
|
printf(_(" --discard-caches set debug_discard_caches=1\n"));
|
||||||
printf(_(" -L DIRECTORY where to find the input files\n"));
|
printf(_(" -L DIRECTORY where to find the input files\n"));
|
||||||
printf(_(" -n, --no-clean do not clean up after errors\n"));
|
printf(_(" -n, --no-clean do not clean up after errors\n"));
|
||||||
printf(_(" -N, --no-sync do not wait for changes to be written safely to disk\n"));
|
printf(_(" -N, --no-sync do not wait for changes to be written safely to disk\n"));
|
||||||
@ -2947,7 +2947,7 @@ main(int argc, char *argv[])
|
|||||||
{"wal-segsize", required_argument, NULL, 12},
|
{"wal-segsize", required_argument, NULL, 12},
|
||||||
{"data-checksums", no_argument, NULL, 'k'},
|
{"data-checksums", no_argument, NULL, 'k'},
|
||||||
{"allow-group-access", no_argument, NULL, 'g'},
|
{"allow-group-access", no_argument, NULL, 'g'},
|
||||||
{"clobber-cache", no_argument, NULL, 14},
|
{"discard-caches", no_argument, NULL, 14},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3092,7 +3092,7 @@ main(int argc, char *argv[])
|
|||||||
case 14:
|
case 14:
|
||||||
extra_options = psprintf("%s %s",
|
extra_options = psprintf("%s %s",
|
||||||
extra_options,
|
extra_options,
|
||||||
"-c debug_invalidate_system_caches_always=1");
|
"-c debug_discard_caches=1");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* getopt_long already emitted a complaint */
|
/* getopt_long already emitted a complaint */
|
||||||
|
@ -322,36 +322,36 @@
|
|||||||
/* #define RANDOMIZE_ALLOCATED_MEMORY */
|
/* #define RANDOMIZE_ALLOCATED_MEMORY */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For cache invalidation debugging, define CLOBBER_CACHE_ENABLED to enable
|
* For cache-invalidation debugging, define DISCARD_CACHES_ENABLED to enable
|
||||||
* use of the debug_invalidate_system_caches_always GUC to aggressively flush
|
* use of the debug_discard_caches GUC to aggressively flush syscache/relcache
|
||||||
* syscache/relcache entries whenever it's possible to deliver invalidations.
|
* entries whenever it's possible to deliver invalidations. See
|
||||||
* See AcceptInvalidationMessages() in src/backend/utils/cache/inval.c for
|
* AcceptInvalidationMessages() in src/backend/utils/cache/inval.c for
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* USE_ASSERT_CHECKING builds default to enabling this. It's possible to use
|
* USE_ASSERT_CHECKING builds default to enabling this. It's possible to use
|
||||||
* CLOBBER_CACHE_ENABLED without a cassert build and the implied
|
* DISCARD_CACHES_ENABLED without a cassert build and the implied
|
||||||
* CLOBBER_FREED_MEMORY and MEMORY_CONTEXT_CHECKING options but it's unlikely
|
* CLOBBER_FREED_MEMORY and MEMORY_CONTEXT_CHECKING options, but it's unlikely
|
||||||
* to be as effective at identifying problems.
|
* to be as effective at identifying problems.
|
||||||
*/
|
*/
|
||||||
/* #define CLOBBER_CACHE_ENABLED */
|
/* #define DISCARD_CACHES_ENABLED */
|
||||||
|
|
||||||
#if defined(USE_ASSERT_CHECKING) && !defined(CLOBBER_CACHE_ENABLED)
|
#if defined(USE_ASSERT_CHECKING) && !defined(DISCARD_CACHES_ENABLED)
|
||||||
#define CLOBBER_CACHE_ENABLED
|
#define DISCARD_CACHES_ENABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Backwards compatibility for the older compile-time-only cache clobber
|
* Backwards compatibility for the older compile-time-only clobber-cache
|
||||||
* macros.
|
* macros.
|
||||||
*/
|
*/
|
||||||
#if !defined(CLOBBER_CACHE_ENABLED) && (defined(CLOBBER_CACHE_ALWAYS) || defined(CLOBBER_CACHE_RECURSIVELY))
|
#if !defined(DISCARD_CACHES_ENABLED) && (defined(CLOBBER_CACHE_ALWAYS) || defined(CLOBBER_CACHE_RECURSIVELY))
|
||||||
#define CLOBBER_CACHE_ENABLED
|
#define DISCARD_CACHES_ENABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Recover memory used for relcache entries when invalidated. See
|
* Recover memory used for relcache entries when invalidated. See
|
||||||
* RelationBuildDescr() in src/backend/utils/cache/relcache.c.
|
* RelationBuildDescr() in src/backend/utils/cache/relcache.c.
|
||||||
*
|
*
|
||||||
* This is active automatically for clobber cache builds when clobbering is
|
* This is active automatically for clobber-cache builds when clobbering is
|
||||||
* active, but can be overridden here by explicitly defining
|
* active, but can be overridden here by explicitly defining
|
||||||
* RECOVER_RELATION_BUILD_MEMORY. Define to 1 to always free relation cache
|
* RECOVER_RELATION_BUILD_MEMORY. Define to 1 to always free relation cache
|
||||||
* memory even when clobber is off, or to 0 to never free relation cache
|
* memory even when clobber is off, or to 0 to never free relation cache
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "storage/relfilenode.h"
|
#include "storage/relfilenode.h"
|
||||||
#include "utils/relcache.h"
|
#include "utils/relcache.h"
|
||||||
|
|
||||||
extern PGDLLIMPORT int debug_invalidate_system_caches_always;
|
extern PGDLLIMPORT int debug_discard_caches;
|
||||||
|
|
||||||
typedef void (*SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue);
|
typedef void (*SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue);
|
||||||
typedef void (*RelcacheCallbackFunction) (Datum arg, Oid relid);
|
typedef void (*RelcacheCallbackFunction) (Datum arg, Oid relid);
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
--
|
--
|
||||||
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
||||||
-- can be merged back into it. For now, however, their results are different
|
-- can be merged back into it. For now, however, their results are different
|
||||||
-- depending on debug_invalidate_system_caches_always, so we must have two
|
-- depending on debug_discard_caches, so we must have two expected-output
|
||||||
-- expected-output files to cover both cases. To minimize the maintenance
|
-- files to cover both cases. To minimize the maintenance effort resulting
|
||||||
-- effort resulting from that, this file should contain only tests that
|
-- from that, this file should contain only tests that do have different
|
||||||
-- do have different results under debug_invalidate_system_caches_always.
|
-- results under debug_discard_caches.
|
||||||
--
|
--
|
||||||
-- check behavior with changes of a named rowtype
|
-- check behavior with changes of a named rowtype
|
||||||
create table c_mutable(f1 int, f2 text);
|
create table c_mutable(f1 int, f2 text);
|
||||||
@ -21,7 +21,7 @@ select c_sillyaddone(42);
|
|||||||
alter table c_mutable drop column f1;
|
alter table c_mutable drop column f1;
|
||||||
alter table c_mutable add column f1 float8;
|
alter table c_mutable add column f1 float8;
|
||||||
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select c_sillyaddone(42);
|
select c_sillyaddone(42);
|
||||||
ERROR: type of parameter 4 (double precision) does not match that when preparing the plan (integer)
|
ERROR: type of parameter 4 (double precision) does not match that when preparing the plan (integer)
|
||||||
CONTEXT: PL/pgSQL function c_sillyaddone(integer) line 1 at RETURN
|
CONTEXT: PL/pgSQL function c_sillyaddone(integer) line 1 at RETURN
|
||||||
@ -52,7 +52,7 @@ select show_result_type('select 1 as a');
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- currently this fails due to cached plan for pg_typeof expression
|
-- currently this fails due to cached plan for pg_typeof expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select show_result_type('select 2.0 as a');
|
select show_result_type('select 2.0 as a');
|
||||||
ERROR: type of parameter 5 (numeric) does not match that when preparing the plan (integer)
|
ERROR: type of parameter 5 (numeric) does not match that when preparing the plan (integer)
|
||||||
CONTEXT: SQL statement "select pg_typeof(r.a)"
|
CONTEXT: SQL statement "select pg_typeof(r.a)"
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
--
|
--
|
||||||
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
||||||
-- can be merged back into it. For now, however, their results are different
|
-- can be merged back into it. For now, however, their results are different
|
||||||
-- depending on debug_invalidate_system_caches_always, so we must have two
|
-- depending on debug_discard_caches, so we must have two expected-output
|
||||||
-- expected-output files to cover both cases. To minimize the maintenance
|
-- files to cover both cases. To minimize the maintenance effort resulting
|
||||||
-- effort resulting from that, this file should contain only tests that
|
-- from that, this file should contain only tests that do have different
|
||||||
-- do have different results under debug_invalidate_system_caches_always.
|
-- results under debug_discard_caches.
|
||||||
--
|
--
|
||||||
-- check behavior with changes of a named rowtype
|
-- check behavior with changes of a named rowtype
|
||||||
create table c_mutable(f1 int, f2 text);
|
create table c_mutable(f1 int, f2 text);
|
||||||
@ -21,7 +21,7 @@ select c_sillyaddone(42);
|
|||||||
alter table c_mutable drop column f1;
|
alter table c_mutable drop column f1;
|
||||||
alter table c_mutable add column f1 float8;
|
alter table c_mutable add column f1 float8;
|
||||||
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select c_sillyaddone(42);
|
select c_sillyaddone(42);
|
||||||
c_sillyaddone
|
c_sillyaddone
|
||||||
---------------
|
---------------
|
||||||
@ -55,7 +55,7 @@ select show_result_type('select 1 as a');
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- currently this fails due to cached plan for pg_typeof expression
|
-- currently this fails due to cached plan for pg_typeof expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select show_result_type('select 2.0 as a');
|
select show_result_type('select 2.0 as a');
|
||||||
show_result_type
|
show_result_type
|
||||||
------------------------
|
------------------------
|
||||||
|
@ -426,7 +426,7 @@ select getf1(row(1,2));
|
|||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select getf1(row(1,2)::two_int8s);
|
select getf1(row(1,2)::two_int8s);
|
||||||
@ -507,7 +507,7 @@ select sillyaddone(42);
|
|||||||
-- test for change of type of column f1 should be here someday;
|
-- test for change of type of column f1 should be here someday;
|
||||||
-- for now see plpgsql_cache test
|
-- for now see plpgsql_cache test
|
||||||
alter table mutable drop column f1;
|
alter table mutable drop column f1;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select sillyaddone(42); -- fail
|
select sillyaddone(42); -- fail
|
||||||
@ -527,7 +527,7 @@ select getf3(null::mutable); -- now it works
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
alter table mutable drop column f3;
|
alter table mutable drop column f3;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select getf3(null::mutable); -- fails again
|
select getf3(null::mutable); -- fails again
|
||||||
@ -552,7 +552,7 @@ select sillyaddtwo(42);
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
drop table mutable2;
|
drop table mutable2;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select sillyaddtwo(42); -- fail
|
select sillyaddtwo(42); -- fail
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
--
|
--
|
||||||
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday
|
||||||
-- can be merged back into it. For now, however, their results are different
|
-- can be merged back into it. For now, however, their results are different
|
||||||
-- depending on debug_invalidate_system_caches_always, so we must have two
|
-- depending on debug_discard_caches, so we must have two expected-output
|
||||||
-- expected-output files to cover both cases. To minimize the maintenance
|
-- files to cover both cases. To minimize the maintenance effort resulting
|
||||||
-- effort resulting from that, this file should contain only tests that
|
-- from that, this file should contain only tests that do have different
|
||||||
-- do have different results under debug_invalidate_system_caches_always.
|
-- results under debug_discard_caches.
|
||||||
--
|
--
|
||||||
|
|
||||||
-- check behavior with changes of a named rowtype
|
-- check behavior with changes of a named rowtype
|
||||||
@ -20,7 +20,7 @@ alter table c_mutable drop column f1;
|
|||||||
alter table c_mutable add column f1 float8;
|
alter table c_mutable add column f1 float8;
|
||||||
|
|
||||||
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select c_sillyaddone(42);
|
select c_sillyaddone(42);
|
||||||
|
|
||||||
-- but it's OK if we force plan rebuilding
|
-- but it's OK if we force plan rebuilding
|
||||||
@ -42,7 +42,7 @@ $$;
|
|||||||
|
|
||||||
select show_result_type('select 1 as a');
|
select show_result_type('select 1 as a');
|
||||||
-- currently this fails due to cached plan for pg_typeof expression
|
-- currently this fails due to cached plan for pg_typeof expression
|
||||||
-- (but if debug_invalidate_system_caches_always is on, it will succeed)
|
-- (but if debug_discard_caches is on, it will succeed)
|
||||||
select show_result_type('select 2.0 as a');
|
select show_result_type('select 2.0 as a');
|
||||||
|
|
||||||
-- but it's OK if we force plan rebuilding
|
-- but it's OK if we force plan rebuilding
|
||||||
|
@ -257,7 +257,7 @@ create function getf1(x record) returns int language plpgsql as
|
|||||||
$$ begin return x.f1; end $$;
|
$$ begin return x.f1; end $$;
|
||||||
select getf1(1);
|
select getf1(1);
|
||||||
select getf1(row(1,2));
|
select getf1(row(1,2));
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select getf1(row(1,2)::two_int8s);
|
select getf1(row(1,2)::two_int8s);
|
||||||
@ -316,7 +316,7 @@ select sillyaddone(42);
|
|||||||
-- for now see plpgsql_cache test
|
-- for now see plpgsql_cache test
|
||||||
|
|
||||||
alter table mutable drop column f1;
|
alter table mutable drop column f1;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select sillyaddone(42); -- fail
|
select sillyaddone(42); -- fail
|
||||||
@ -328,7 +328,7 @@ select getf3(null::mutable); -- doesn't work yet
|
|||||||
alter table mutable add column f3 int;
|
alter table mutable add column f3 int;
|
||||||
select getf3(null::mutable); -- now it works
|
select getf3(null::mutable); -- now it works
|
||||||
alter table mutable drop column f3;
|
alter table mutable drop column f3;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select getf3(null::mutable); -- fails again
|
select getf3(null::mutable); -- fails again
|
||||||
@ -346,7 +346,7 @@ select sillyaddtwo(42); -- fail
|
|||||||
create table mutable2(f1 int, f2 text);
|
create table mutable2(f1 int, f2 text);
|
||||||
select sillyaddtwo(42);
|
select sillyaddtwo(42);
|
||||||
drop table mutable2;
|
drop table mutable2;
|
||||||
-- the context stack is different when debug_invalidate_system_caches_always
|
-- the context stack is different when debug_discard_caches
|
||||||
-- is set, so suppress context output
|
-- is set, so suppress context output
|
||||||
\set SHOW_CONTEXT never
|
\set SHOW_CONTEXT never
|
||||||
select sillyaddtwo(42); -- fail
|
select sillyaddtwo(42); -- fail
|
||||||
|
@ -38,6 +38,6 @@ step s4c { COMMIT; }
|
|||||||
# The expected output for this test assumes that isolationtester will
|
# The expected output for this test assumes that isolationtester will
|
||||||
# detect step s1b as waiting before the deadlock detector runs and
|
# detect step s1b as waiting before the deadlock detector runs and
|
||||||
# releases s1 from its blocked state. To ensure that happens even in
|
# releases s1 from its blocked state. To ensure that happens even in
|
||||||
# very slow (CLOBBER_CACHE_ALWAYS) cases, apply a (*) annotation.
|
# very slow (debug_discard_caches) cases, apply a (*) annotation.
|
||||||
|
|
||||||
permutation s1a s2a s2b s3a s4a s1b(*) s1c s2c s3c s4c
|
permutation s1a s2a s2b s3a s4a s1b(*) s1c s2c s3c s4c
|
||||||
|
Loading…
x
Reference in New Issue
Block a user