reset all update - Mailing list pgsql-patches
From | Marko Kreen |
---|---|
Subject | reset all update |
Date | |
Msg-id | 20010611114008.A3818@l-t.ee Whole thread Raw |
Responses |
Re: reset all update
Re: reset all update |
List | pgsql-patches |
* 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)
pgsql-patches by date: