Add some test scaffolding to allow cache-flush stress testing (and I do
authorTom Lane
Thu, 19 Jan 2006 21:49:21 +0000 (21:49 +0000)
committerTom Lane
Thu, 19 Jan 2006 21:49:21 +0000 (21:49 +0000)
mean stress ... system is orders of magnitude slower with this enabled).

src/backend/utils/cache/inval.c

index 437bd4b086921623041421069ccaa7bca9d2db17..ba2be48d1a2449961e4f612f063e040d3471c0dc 100644 (file)
@@ -80,7 +80,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/cache/inval.c,v 1.74 2005/11/22 18:17:24 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/cache/inval.c,v 1.75 2006/01/19 21:49:21 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -625,6 +625,36 @@ AcceptInvalidationMessages(void)
 {
    ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage,
                                 InvalidateSystemCaches);
+
+   /*
+    * Test code to force cache flushes anytime a flush could happen.
+    *
+    * If used with CLOBBER_FREED_MEMORY, CLOBBER_CACHE_ALWAYS provides a
+    * fairly thorough test that the system contains no cache-flush hazards.
+    * However, it also makes the system unbelievably slow --- the regression
+    * tests take about 100 times longer than normal.
+    *
+    * If you're a glutton for punishment, try CLOBBER_CACHE_RECURSIVELY.
+    * 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 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();
+           in_recursion = false;
+       }
+   }
+#elif defined(CLOBBER_CACHE_RECURSIVELY)
+   InvalidateSystemCaches();
+#endif
 }
 
 /*