Improve error reporting for unsupported effective_io_concurrency setting.
authorTom Lane
Fri, 28 Sep 2018 20:12:13 +0000 (16:12 -0400)
committerTom Lane
Fri, 28 Sep 2018 20:12:13 +0000 (16:12 -0400)
Give a specific error complaining about lack of posix_fadvise() when
someone tries to set effective_io_concurrency > 0 on platforms
without that.

This probably isn't worth extensive back-patching, but I (tgl) felt
cramming it into v11 was reasonable.

James Robinson

Discussion: https://postgr.es/m/153771876450.14994.560017943128223619@wrigleys.postgresql.org
Discussion: https://postgr.es/m/A3942987-5BC7-4F05-B54D-2A0EC2914B33@jlr-photo.com

src/backend/utils/misc/guc.c
src/include/pg_config_manual.h

index e9f542cfedd84701297bb4daf7ac92fec2714a01..d14ea851847473a6da88bf149f0bce300f99c45c 100644 (file)
@@ -2649,10 +2649,11 @@ static struct config_int ConfigureNamesInt[] =
        },
        &effective_io_concurrency,
 #ifdef USE_PREFETCH
-       1, 0, MAX_IO_CONCURRENCY,
+       1,
 #else
-       0, 0, 0,
+       0,
 #endif
+       0, MAX_IO_CONCURRENCY,
        check_effective_io_concurrency, assign_effective_io_concurrency, NULL
    },
 
@@ -10709,6 +10710,11 @@ check_effective_io_concurrency(int *newval, void **extra, GucSource source)
    else
        return false;
 #else
+   if (*newval != 0)
+   {
+       GUC_check_errdetail("effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()");
+       return false;
+   }
    return true;
 #endif                         /* USE_PREFETCH */
 }
index b0365254f654b6413bb8e49ae797dde10b259b48..cc5eedfc41d641cd52734b97888c5c085e4504fe 100644 (file)
 /*
  * USE_PREFETCH code should be compiled only if we have a way to implement
  * prefetching.  (This is decoupled from USE_POSIX_FADVISE because there
- * might in future be support for alternative low-level prefetch APIs.)
+ * might in future be support for alternative low-level prefetch APIs.
+ * If you change this, you probably need to adjust the error message in
+ * check_effective_io_concurrency.)
  */
 #ifdef USE_POSIX_FADVISE
 #define USE_PREFETCH