Skip site navigation (1) Skip section navigation (2)

reset all update

From: Marko Kreen <marko(at)l-t(dot)ee>
To: pgsql-patches(at)postgresql(dot)org
Subject: reset all update
Date: 2001-06-11 09:40:08
Message-ID: 20010611114008.A3818@l-t.ee (view raw or flat)
Thread:
Lists: 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)

Responses

pgsql-patches by date

Next:From: Jason TishlerDate: 2001-06-11 13:45:17
Subject: Re: YA readline 4.2 patch
Previous:From: Marko KreenDate: 2001-06-11 09:14:18
Subject: sequence.c compile failure

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group