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: