Re: reset all update - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: reset all update
Date
Msg-id 200106111644.f5BGieH18380@candle.pha.pa.us
Whole thread Raw
In response to reset all update  (Marko Kreen <marko@l-t.ee>)
List pgsql-patches
Your patch has been added to the PostgreSQL unapplied patches list at:

    http://candle.pha.pa.us/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

>
> * GUCify command line arguments.
> * ResetAllOptions() comment
> * split set_config_option()
> * use set_config_option_real() on string reset
>   - it calls hooks and free()'s the previous val
> * check if string val changed on reset
>
> --
> marko
>
>
> Index: src/backend/postmaster/postmaster.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
> retrieving revision 1.218
> diff -u -c -r1.218 postmaster.c
> *** src/backend/postmaster/postmaster.c    2001/06/11 04:12:29    1.218
> --- src/backend/postmaster/postmaster.c    2001/06/11 09:17:01
> ***************
> *** 422,435 ****
>   #ifndef USE_ASSERT_CHECKING
>                   postmaster_error("Assert checking is not compiled in.");
>   #else
> !                 assert_enabled = atoi(optarg);
>   #endif
>                   break;
>               case 'a':
>                   /* Can no longer set authentication method. */
>                   break;
>               case 'B':
> !                 NBuffers = atoi(optarg);
>                   break;
>               case 'b':
>                   /* Can no longer set the backend executable file to use. */
> --- 422,435 ----
>   #ifndef USE_ASSERT_CHECKING
>                   postmaster_error("Assert checking is not compiled in.");
>   #else
> !                 SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true);
>   #endif
>                   break;
>               case 'a':
>                   /* Can no longer set authentication method. */
>                   break;
>               case 'B':
> !                 SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'b':
>                   /* Can no longer set the backend executable file to use. */
> ***************
> *** 443,465 ****
>                    * Turn on debugging for the postmaster and the backend
>                    * servers descended from it.
>                    */
> !                 DebugLvl = atoi(optarg);
>                   break;
>               case 'F':
> !                 enableFsync = false;
>                   break;
>               case 'h':
> !                 VirtualHost = optarg;
>                   break;
>               case 'i':
> !                 NetServer = true;
>                   break;
>               case 'k':
> !                 UnixSocketDir = optarg;
>                   break;
>   #ifdef USE_SSL
>               case 'l':
> !                 EnableSSL = true;
>                   break;
>   #endif
>               case 'm':
> --- 443,465 ----
>                    * Turn on debugging for the postmaster and the backend
>                    * servers descended from it.
>                    */
> !                 SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'F':
> !                 SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'h':
> !                 SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'i':
> !                 SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'k':
> !                 SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
>                   break;
>   #ifdef USE_SSL
>               case 'l':
> !                 SetConfigOption("ssl", optarg, PGC_POSTMASTER, true);
>                   break;
>   #endif
>               case 'm':
> ***************
> *** 479,489 ****
>                    * The max number of backends to start. Can't set to less
>                    * than 1 or more than compiled-in limit.
>                    */
> !                 MaxBackends = atoi(optarg);
> !                 if (MaxBackends < 1)
> !                     MaxBackends = 1;
> !                 if (MaxBackends > MAXBACKENDS)
> !                     MaxBackends = MAXBACKENDS;
>                   break;
>               case 'n':
>                   /* Don't reinit shared mem after abnormal exit */
> --- 479,485 ----
>                    * The max number of backends to start. Can't set to less
>                    * than 1 or more than compiled-in limit.
>                    */
> !                 SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'n':
>                   /* Don't reinit shared mem after abnormal exit */
> ***************
> *** 500,506 ****
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 PostPortNumber = atoi(optarg);
>                   break;
>               case 'S':
>
> --- 496,502 ----
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 SetConfigOption("port", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'S':
>
> ***************
> *** 510,516 ****
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SilentMode = true;
>                   break;
>               case 's':
>
> --- 506,512 ----
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 's':
>
> Index: src/backend/tcop/postgres.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v
> retrieving revision 1.219
> diff -u -c -r1.219 postgres.c
> *** src/backend/tcop/postgres.c    2001/06/07 04:50:57    1.219
> --- src/backend/tcop/postgres.c    2001/06/11 09:17:07
> ***************
> *** 1108,1113 ****
> --- 1108,1115 ----
>       const char *DBName = NULL;
>       bool        secure = true;
>       int            errs = 0;
> +     GucContext    ctx;
> +     char        *tmp;
>
>       int            firstchar;
>       StringInfo    parser_input;
> ***************
> *** 1117,1122 ****
> --- 1119,1126 ----
>
>       char       *potential_DataDir = NULL;
>
> +     ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER;
> +
>       /*
>        * Catch standard options before doing much else.  This even works on
>        * systems without getopt_long.
> ***************
> *** 1188,1194 ****
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 assert_enabled = atoi(optarg);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> --- 1192,1198 ----
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 SetConfigOption("debug_assertions", optarg, ctx, true);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> ***************
> *** 1200,1206 ****
>                    * specify the size of buffer pool
>                    */
>                   if (secure)
> !                     NBuffers = atoi(optarg);
>                   break;
>
>               case 'C':
> --- 1204,1210 ----
>                    * specify the size of buffer pool
>                    */
>                   if (secure)
> !                     SetConfigOption("shared_buffers", optarg, ctx, true);
>                   break;
>
>               case 'C':
> ***************
> *** 1217,1233 ****
>                   break;
>
>               case 'd':            /* debug level */
> !                 DebugLvl = atoi(optarg);
>                   if (DebugLvl >= 1);
> !                 Log_connections = true;
>                   if (DebugLvl >= 2)
> !                     Debug_print_query = true;
>                   if (DebugLvl >= 3)
> !                     Debug_print_parse = true;
>                   if (DebugLvl >= 4)
> !                     Debug_print_plan = true;
>                   if (DebugLvl >= 5)
> !                     Debug_print_rewritten = true;
>                   break;
>
>               case 'E':
> --- 1221,1238 ----
>                   break;
>
>               case 'd':            /* debug level */
> !                 tmp = "true";
> !                 SetConfigOption("debug_level", optarg, ctx, true);
>                   if (DebugLvl >= 1);
> !                 SetConfigOption("log_connections", tmp, ctx, true);
>                   if (DebugLvl >= 2)
> !                     SetConfigOption("debug_print_query", tmp, ctx, true);
>                   if (DebugLvl >= 3)
> !                     SetConfigOption("debug_print_parse", tmp, ctx, true);
>                   if (DebugLvl >= 4)
> !                     SetConfigOption("debug_print_plan", tmp, ctx, true);
>                   if (DebugLvl >= 5)
> !                     SetConfigOption("debug_print_rewritten", tmp, ctx, true);
>                   break;
>
>               case 'E':
> ***************
> *** 1252,1258 ****
>                    * turn off fsync
>                    */
>                   if (secure)
> !                     enableFsync = false;
>                   break;
>
>               case 'f':
> --- 1257,1263 ----
>                    * turn off fsync
>                    */
>                   if (secure)
> !                     SetConfigOption("fsync", "true", ctx, true);
>                   break;
>
>               case 'f':
> ***************
> *** 1260,1288 ****
>                   /*
>                    * f - forbid generation of certain plans
>                    */
>                   switch (optarg[0])
>                   {
>                       case 's':    /* seqscan */
> !                         enable_seqscan = false;
>                           break;
>                       case 'i':    /* indexscan */
> !                         enable_indexscan = false;
>                           break;
>                       case 't':    /* tidscan */
> !                         enable_tidscan = false;
>                           break;
>                       case 'n':    /* nestloop */
> !                         enable_nestloop = false;
>                           break;
>                       case 'm':    /* mergejoin */
> !                         enable_mergejoin = false;
>                           break;
>                       case 'h':    /* hashjoin */
> !                         enable_hashjoin = false;
>                           break;
>                       default:
>                           errs++;
>                   }
>                   break;
>
>               case 'i':
> --- 1265,1296 ----
>                   /*
>                    * f - forbid generation of certain plans
>                    */
> +                 tmp = NULL;
>                   switch (optarg[0])
>                   {
>                       case 's':    /* seqscan */
> !                         tmp = "enable_seqscan";
>                           break;
>                       case 'i':    /* indexscan */
> !                         tmp = "enable_indexscan";
>                           break;
>                       case 't':    /* tidscan */
> !                         tmp = "enable_tidscan";
>                           break;
>                       case 'n':    /* nestloop */
> !                         tmp = "enable_nestloop";
>                           break;
>                       case 'm':    /* mergejoin */
> !                         tmp = "enable_mergejoin";
>                           break;
>                       case 'h':    /* hashjoin */
> !                         tmp = "enable_hashjoin";
>                           break;
>                       default:
>                           errs++;
>                   }
> +                 if (tmp)
> +                     SetConfigOption(tmp, "false", ctx, true);
>                   break;
>
>               case 'i':
> ***************
> *** 1352,1364 ****
>                   /*
>                    * S - amount of sort memory to use in 1k bytes
>                    */
> !                 {
> !                     int            S;
> !
> !                     S = atoi(optarg);
> !                     if (S >= 4 * BLCKSZ / 1024)
> !                         SortMem = S;
> !                 }
>                   break;
>
>               case 's':
> --- 1360,1366 ----
>                   /*
>                    * S - amount of sort memory to use in 1k bytes
>                    */
> !                 SetConfigOption("sort_mem", optarg, ctx, true);
>                   break;
>
>               case 's':
> ***************
> *** 1366,1372 ****
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 Show_query_stats = 1;
>                   break;
>
>               case 't':
> --- 1368,1374 ----
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 SetConfigOption("show_query_stats", optarg, ctx, true);
>                   break;
>
>               case 't':
> ***************
> *** 1380,1402 ****
>                    *    caution: -s can not be used together with -t.
>                    * ----------------
>                    */
>                   switch (optarg[0])
>                   {
>                       case 'p':
>                           if (optarg[1] == 'a')
> !                             Show_parser_stats = 1;
>                           else if (optarg[1] == 'l')
> !                             Show_planner_stats = 1;
>                           else
>                               errs++;
>                           break;
>                       case 'e':
> !                         Show_executor_stats = 1;
>                           break;
>                       default:
>                           errs++;
>                           break;
>                   }
>                   break;
>
>               case 'v':
> --- 1382,1407 ----
>                    *    caution: -s can not be used together with -t.
>                    * ----------------
>                    */
> +                 tmp = NULL;
>                   switch (optarg[0])
>                   {
>                       case 'p':
>                           if (optarg[1] == 'a')
> !                             tmp = "show_parser_stats";
>                           else if (optarg[1] == 'l')
> !                             tmp = "show_planner_stats";
>                           else
>                               errs++;
>                           break;
>                       case 'e':
> !                         tmp = "show_parser_stats";
>                           break;
>                       default:
>                           errs++;
>                           break;
>                   }
> +                 if (tmp)
> +                     SetConfigOption(tmp, "true", ctx, true);
>                   break;
>
>               case 'v':
> Index: src/backend/utils/misc/guc.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
> retrieving revision 1.37
> diff -u -c -r1.37 guc.c
> *** src/backend/utils/misc/guc.c    2001/06/07 04:50:57    1.37
> --- src/backend/utils/misc/guc.c    2001/06/11 09:17:09
> ***************
> *** 143,148 ****
> --- 143,151 ----
>   };
>
>
> + static bool set_config_option_real(enum config_type type, struct config_generic *record,
> +                 const char *value, bool DoIt, bool makeDefault, int elevel);
> +
>   /*
>    * TO ADD AN OPTION:
>    *
> ***************
> *** 264,270 ****
>       DEF_PGPORT, 1, 65535},
>
>       {"sort_mem", PGC_USERSET, &SortMem,
> !     512, 1, INT_MAX},
>
>       {"debug_level", PGC_USERSET, &DebugLvl,
>       0, 0, 16},
> --- 267,273 ----
>       DEF_PGPORT, 1, 65535},
>
>       {"sort_mem", PGC_USERSET, &SortMem,
> !     512, 4*BLCKSZ/1024, INT_MAX},
>
>       {"debug_level", PGC_USERSET, &DebugLvl,
>       0, 0, 16},
> ***************
> *** 413,420 ****
>
>
>   /*
> !  * Reset all options to their specified default values. Should only be
> !  * called at program startup.
>    */
>   void
>   ResetAllOptions(void)
> --- 416,424 ----
>
>
>   /*
> !  * Reset all options to their specified default values.
> !  *
> !  * Default values come from: builtin, config file, command line.
>    */
>   void
>   ResetAllOptions(void)
> ***************
> *** 433,455 ****
>       for (i = 0; ConfigureNamesString[i].name; i++)
>       {
>           char       *str = NULL;
>
> !         if (!ConfigureNamesString[i].default_val
> !                 && ConfigureNamesString[i].boot_default_val)
>           {
> !             str = strdup(ConfigureNamesString[i].boot_default_val);
>               if (str == NULL)
>                   elog(ERROR, "out of memory");
>
> !             ConfigureNamesString[i].default_val = str;
>           }
> !         if (ConfigureNamesString[i].default_val)
> !         {
> !             str = strdup(ConfigureNamesString[i].default_val);
> !             if (str == NULL)
> !                 elog(ERROR, "out of memory");
> !         }
> !         *(ConfigureNamesString[i].variable) = str;
>       }
>
>       if (getenv("PGPORT"))
> --- 437,459 ----
>       for (i = 0; ConfigureNamesString[i].name; i++)
>       {
>           char       *str = NULL;
> +         struct config_string *cf = &ConfigureNamesString[i];
>
> !         if (!cf->default_val && cf->boot_default_val)
>           {
> !             str = strdup(cf->boot_default_val);
>               if (str == NULL)
>                   elog(ERROR, "out of memory");
>
> !             cf->default_val = str;
>           }
> !
> !         if (!cf->variable || !cf->default_val)
> !             continue;
> !
> !         if (!*cf->variable || strcmp(cf->default_val, *cf->variable))
> !             set_config_option_real(PGC_STRING, (struct config_generic *)cf,
> !                     cf->default_val, true, false, ERROR);
>       }
>
>       if (getenv("PGPORT"))
> ***************
> *** 607,612 ****
> --- 611,617 ----
>           return false;
>       }
>
> +
>       /*
>        * Check if the option can be set at this time. See guc.h for the
>        * precise rules. Note that we don't want to throw errors if we're in
> ***************
> *** 644,649 ****
> --- 649,663 ----
>           elog(ERROR, "permission denied");
>
>
> +     return set_config_option_real(type, (struct config_generic *)record,
> +             value, DoIt, makeDefault, elevel);
> + }
> +
> + static bool
> + set_config_option_real(enum config_type type, struct config_generic *record,
> +                     const char *value, bool DoIt, bool makeDefault,
> +                     int elevel)
> + {
>       /*
>        * Evaluate value and set variable
>        */
> ***************
> *** 659,665 ****
>
>                       if (!parse_bool(value, &boolval))
>                       {
> !                         elog(elevel, "option '%s' requires a boolean value", name);
>                           return false;
>                       }
>                       if (DoIt)
> --- 673,680 ----
>
>                       if (!parse_bool(value, &boolval))
>                       {
> !                         elog(elevel, "option '%s' requires a boolean value",
> !                                 conf->name);
>                           return false;
>                       }
>                       if (DoIt)
> ***************
> *** 684,697 ****
>
>                       if (!parse_int(value, &intval))
>                       {
> !                         elog(elevel, "option '%s' expects an integer value", name);
>                           return false;
>                       }
>                       if (intval < conf->min || intval > conf->max)
>                       {
>                           elog(elevel, "option '%s' value %d is outside"
>                                " of permissible range [%d .. %d]",
> !                              name, intval, conf->min, conf->max);
>                           return false;
>                       }
>                       if (DoIt)
> --- 699,713 ----
>
>                       if (!parse_int(value, &intval))
>                       {
> !                         elog(elevel, "option '%s' expects an integer value",
> !                                 conf->name);
>                           return false;
>                       }
>                       if (intval < conf->min || intval > conf->max)
>                       {
>                           elog(elevel, "option '%s' value %d is outside"
>                                " of permissible range [%d .. %d]",
> !                              conf->name, intval, conf->min, conf->max);
>                           return false;
>                       }
>                       if (DoIt)
> ***************
> *** 716,729 ****
>
>                       if (!parse_real(value, &dval))
>                       {
> !                         elog(elevel, "option '%s' expects a real number", name);
>                           return false;
>                       }
>                       if (dval < conf->min || dval > conf->max)
>                       {
>                           elog(elevel, "option '%s' value %g is outside"
>                                " of permissible range [%g .. %g]",
> !                              name, dval, conf->min, conf->max);
>                           return false;
>                       }
>                       if (DoIt)
> --- 732,746 ----
>
>                       if (!parse_real(value, &dval))
>                       {
> !                         elog(elevel, "option '%s' expects a real number",
> !                                 conf->name);
>                           return false;
>                       }
>                       if (dval < conf->min || dval > conf->max)
>                       {
>                           elog(elevel, "option '%s' value %g is outside"
>                                " of permissible range [%g .. %g]",
> !                              conf->name, dval, conf->min, conf->max);
>                           return false;
>                       }
>                       if (DoIt)
> ***************
> *** 746,752 ****
>                   {
>                       if (conf->parse_hook && !(conf->parse_hook) (value))
>                       {
> !                         elog(elevel, "invalid value for option '%s': '%s'", name, value);
>                           return false;
>                       }
>                       if (DoIt)
> --- 763,769 ----
>                   {
>                       if (conf->parse_hook && !(conf->parse_hook) (value))
>                       {
> !                         elog(elevel, "invalid value for option '%s': '%s'", conf->name, value);
>                           return false;
>                       }
>                       if (DoIt)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: YA readline 4.2 patch
Next
From: Bruce Momjian
Date:
Subject: Re: 7.1 odbc bug & patch