diff --git a/src/backend/cdb/dispatcher/cdbgang.c b/src/backend/cdb/dispatcher/cdbgang.c index 517c983a59c5ff52b4cd6fd85288af4ecd9c1234..36ef8d7dddd7e437c92f1c37ebb97f58f489fb46 100644 --- a/src/backend/cdb/dispatcher/cdbgang.c +++ b/src/backend/cdb/dispatcher/cdbgang.c @@ -252,7 +252,7 @@ buildGangDefinition(List *segments, SegmentType segmentType) static void addOneOption(StringInfo string, struct config_generic *guc) { - Assert(guc && (guc->flags & GUC_GPDB_ADDOPT)); + Assert(guc && (guc->flags & GUC_GPDB_NEED_SYNC)); switch (guc->vartype) { case PGC_BOOL: @@ -349,7 +349,7 @@ makeOptions(void) { struct config_generic *guc = gucs[i]; - if ((guc->flags & GUC_GPDB_ADDOPT) && + if ((guc->flags & GUC_GPDB_NEED_SYNC) && (guc->context == PGC_USERSET || guc->context == PGC_BACKEND || IsAuthenticatedUserSuperUser())) diff --git a/src/backend/utils/misc/README b/src/backend/utils/misc/README index 70244ced18d869c5e46e8f1a6a455f9704c27ae0..b1f0f4459bf7e18f2da06ebf85760d40c6c9c617 100644 --- a/src/backend/utils/misc/README +++ b/src/backend/utils/misc/README @@ -293,3 +293,18 @@ worry about NULL values ever, the variable can be given a non-null static initializer as well as a non-null boot_val. guc.c will overwrite the static initializer pointer with a copy of the boot_val during InitializeGUCOptions, but the variable will never contain a NULL. + +GUC Synchronization +------------------- + +Due to distributed character of gpdb, each GUC needs to declare whether +it needs to sync value between master and primaries. If you want to +introduce a new GUC in guc.c or guc_gp.c, the GUC's name must be populated +into either sync_guc_name.h or unsync_guc_name.h. If not, gpdb will raise an +ERROR in run-time. +For custom GUC, if it has synchronization requirement, add GUC_GPDB_NEED_SYNC +bit into the GUC flag. Otherwise, system will default add GUC_GPDB_NO_SYNC +flag bit for it as it can not synchronize in cluster. + +A GUC ought to be synchronized only if the scope is whole cluster as well as +the value must be same between master and primaries. diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 46ab38138e0626f2d7bba2368aff250792c02dc5..dc6d66a0b3d2b9715dca77d292ea132c9c878bc5 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -708,6 +708,10 @@ const char *const config_type_names[] = * * 7. If it's a new GUC_LIST_QUOTE option, you must add it to * variable_is_guc_list_quote() in src/bin/pg_dump/dumputils.c. + * + * 8. In gpdb, the guc is force explicit declare whether it needs to sync value + * between master and primary. Add guc name into either sync_guc_names_array + * or unsync_guc_names_array. */ @@ -994,8 +998,7 @@ static struct config_bool ConfigureNamesBool[] = { {"log_duration", PGC_SUSET, LOGGING_WHAT, gettext_noop("Logs the duration of each completed SQL statement."), - NULL, - GUC_GPDB_ADDOPT + NULL }, &log_duration, false, @@ -1058,8 +1061,7 @@ static struct config_bool ConfigureNamesBool[] = { {"log_executor_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes executor performance statistics to the server log."), - NULL, - GUC_GPDB_ADDOPT + NULL }, &log_executor_stats, false, @@ -1068,8 +1070,7 @@ static struct config_bool ConfigureNamesBool[] = { {"log_statement_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes cumulative performance statistics to the server log."), - NULL, - GUC_GPDB_ADDOPT + NULL }, &log_statement_stats, false, @@ -1766,7 +1767,7 @@ static struct config_int ConfigureNamesInt[] = {"temp_buffers", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the maximum number of temporary buffers used by each session."), NULL, - GUC_UNIT_BLOCKS | GUC_GPDB_ADDOPT + GUC_UNIT_BLOCKS }, &num_temp_buffers, 1024, 100, INT_MAX / 2, @@ -1818,7 +1819,7 @@ static struct config_int ConfigureNamesInt[] = gettext_noop("This much memory can be used by each internal " "sort operation and hash table before switching to " "temporary disk files."), - GUC_UNIT_KB | GUC_GPDB_ADDOPT + GUC_UNIT_KB }, &work_mem, 32768, 64, MAX_KILOBYTES, @@ -1829,7 +1830,7 @@ static struct config_int ConfigureNamesInt[] = {"maintenance_work_mem", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the maximum memory to be used for maintenance operations."), gettext_noop("This includes operations such as VACUUM and CREATE INDEX."), - GUC_UNIT_KB | GUC_GPDB_ADDOPT + GUC_UNIT_KB }, &maintenance_work_mem, 65536, 1024, MAX_KILOBYTES, @@ -1986,7 +1987,7 @@ static struct config_int ConfigureNamesInt[] = {"statement_timeout", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the maximum allowed duration of any statement."), gettext_noop("A value of 0 turns off the timeout."), - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS }, &StatementTimeout, 0, 0, INT_MAX, @@ -2216,7 +2217,7 @@ static struct config_int ConfigureNamesInt[] = gettext_noop("Sets the delay in microseconds between transaction commit and " "flushing WAL to disk."), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET + GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET /* we have no microseconds designation, so can't supply units here */ }, &CommitDelay, @@ -2229,7 +2230,7 @@ static struct config_int ConfigureNamesInt[] = gettext_noop("Sets the minimum concurrent open transactions before performing " "commit_delay."), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET + GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET }, &CommitSiblings, 5, 0, 1000, @@ -2253,7 +2254,7 @@ static struct config_int ConfigureNamesInt[] = gettext_noop("Sets the minimum execution time above which " "statements will be logged."), gettext_noop("Zero prints all queries. -1 turns this feature off."), - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS }, &log_min_duration_statement, -1, -1, INT_MAX, @@ -2548,8 +2549,7 @@ static struct config_int ConfigureNamesInt[] = { {"gin_fuzzy_search_limit", PGC_USERSET, CLIENT_CONN_OTHER, gettext_noop("Sets the maximum allowed result for exact search by GIN."), - NULL, - GUC_GPDB_ADDOPT + NULL }, &GinFuzzySearchLimit, 0, 0, INT_MAX, @@ -2807,7 +2807,7 @@ static struct config_string ConfigureNamesString[] = gettext_noop("Sets the display format for date and time values."), gettext_noop("Also controls interpretation of ambiguous " "date inputs."), - GUC_LIST_INPUT | GUC_REPORT | GUC_GPDB_ADDOPT + GUC_LIST_INPUT | GUC_REPORT }, &datestyle_string, "ISO, MDY", @@ -2818,7 +2818,7 @@ static struct config_string ConfigureNamesString[] = {"default_tablespace", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the default tablespace to create tables and indexes in."), gettext_noop("An empty string selects the database's default tablespace."), - GUC_IS_NAME | GUC_GPDB_ADDOPT + GUC_IS_NAME }, &default_tablespace, "", @@ -2829,7 +2829,7 @@ static struct config_string ConfigureNamesString[] = {"temp_tablespaces", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the tablespace(s) to use for temporary tables and sort files."), NULL, - GUC_LIST_INPUT | GUC_LIST_QUOTE | GUC_GPDB_ADDOPT + GUC_LIST_INPUT | GUC_LIST_QUOTE }, &temp_tablespaces, "", @@ -2918,9 +2918,7 @@ static struct config_string ConfigureNamesString[] = { {"lc_numeric", PGC_USERSET, CLIENT_CONN_LOCALE, gettext_noop("Sets the locale for formatting numbers."), - NULL, - /* Please don't remove GUC_GPDB_ADDOPT or lc_numeric won't work correctly */ - GUC_GPDB_ADDOPT + NULL }, &locale_numeric, "C", @@ -2974,7 +2972,7 @@ static struct config_string ConfigureNamesString[] = {"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the schema search order for names that are not schema-qualified."), NULL, - GUC_LIST_INPUT | GUC_LIST_QUOTE | GUC_GPDB_ADDOPT + GUC_LIST_INPUT | GUC_LIST_QUOTE }, &namespace_search_path, "\"$user\",public", @@ -3090,7 +3088,7 @@ static struct config_string ConfigureNamesString[] = {"TimeZone", PGC_USERSET, CLIENT_CONN_LOCALE, gettext_noop("Sets the time zone for displaying and interpreting time stamps."), NULL, - GUC_REPORT | GUC_GPDB_ADDOPT + GUC_REPORT }, &timezone_string, "GMT", @@ -3370,8 +3368,7 @@ static struct config_enum ConfigureNamesEnum[] = {"client_min_messages", PGC_USERSET, LOGGING_WHEN, gettext_noop("Sets the message levels that are sent to the client."), gettext_noop("Each level includes all the levels that follow it. The later" - " the level, the fewer messages are sent."), - GUC_GPDB_ADDOPT + " the level, the fewer messages are sent.") }, &client_min_messages, NOTICE, client_message_level_options, @@ -3426,7 +3423,7 @@ static struct config_enum ConfigureNamesEnum[] = {"IntervalStyle", PGC_USERSET, CLIENT_CONN_LOCALE, gettext_noop("Sets the display format for interval values."), NULL, - GUC_REPORT | GUC_GPDB_ADDOPT + GUC_REPORT }, &IntervalStyle, INTSTYLE_POSTGRES, intervalstyle_options, NULL, NULL @@ -3435,8 +3432,7 @@ static struct config_enum ConfigureNamesEnum[] = { {"log_error_verbosity", PGC_SUSET, LOGGING_WHAT, gettext_noop("Sets the verbosity of logged messages."), - NULL, - GUC_GPDB_ADDOPT + NULL }, &Log_error_verbosity, PGERROR_DEFAULT, log_error_verbosity_options, @@ -3447,8 +3443,7 @@ static struct config_enum ConfigureNamesEnum[] = {"log_min_messages", PGC_SUSET, LOGGING_WHEN, gettext_noop("Sets the message levels that are logged."), gettext_noop("Each level includes all the levels that follow it. The later" - " the level, the fewer messages are sent."), - GUC_GPDB_ADDOPT + " the level, the fewer messages are sent.") }, &log_min_messages, WARNING, server_message_level_options, @@ -3459,8 +3454,7 @@ static struct config_enum ConfigureNamesEnum[] = {"log_min_error_statement", PGC_SUSET, LOGGING_WHEN, gettext_noop("Causes all statements generating error at or above this level to be logged."), gettext_noop("Each level includes all the levels that follow it. The later" - " the level, the fewer messages are sent."), - GUC_GPDB_ADDOPT + " the level, the fewer messages are sent.") }, &log_min_error_statement, ERROR, server_message_level_options, @@ -3644,7 +3638,6 @@ static int GUCNestLevel = 0; /* 1 when in main transaction */ static int guc_var_compare(const void *a, const void *b); -static int guc_name_compare(const char *namea, const char *nameb); static void InitializeGUCOptionsFromEnvironment(void); static void InitializeOneGUCOption(struct config_generic * gconf); static void push_old_value(struct config_generic * gconf, GucAction action); @@ -4130,6 +4123,7 @@ build_guc_variables(void) guc_variables = guc_vars; num_guc_variables = num_vars; size_guc_variables = size_vars; + gpdb_assign_sync_flag(guc_variables, num_guc_variables, true /* predefine */); qsort((void *) guc_variables, num_guc_variables, sizeof(struct config_generic *), guc_var_compare); } @@ -4168,6 +4162,7 @@ add_guc_variable(struct config_generic * var, int elevel) size_guc_variables = size_vars; } guc_variables[num_guc_variables++] = var; + gpdb_assign_sync_flag(&var, 1, false /* predefine */); qsort((void *) guc_variables, num_guc_variables, sizeof(struct config_generic *), guc_var_compare); return true; @@ -4285,7 +4280,7 @@ guc_var_compare(const void *a, const void *b) /* * the bare comparison function for GUC names */ -static int +int guc_name_compare(const char *namea, const char *nameb) { /* diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 5b83bb9068e5fa630e66bb20812ca27dea90da02..e26e6fd296e475976b646b7df9b4ae9f66a36105 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -90,6 +90,7 @@ static void assign_gp_default_storage_options(const char *newval, void *extra); static bool check_pljava_classpath_insecure(bool *newval, void **extra, GucSource source); static void assign_pljava_classpath_insecure(bool newval, void *extra); static bool check_gp_resource_group_bypass(bool *newval, void **extra, GucSource source); +static int guc_array_compare(const void *a, const void *b); extern struct config_generic *find_option(const char *name, bool create_placeholders, int elevel); @@ -686,7 +687,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"log_dispatch_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes dispatcher performance statistics to the server log."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &log_dispatch_stats, false, @@ -859,7 +860,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_enable_mk_sort", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enable multi-key sort."), gettext_noop("A faster sort."), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_enable_mk_sort, @@ -871,7 +872,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_enable_motion_mk_sort", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enable multi-key sort in sorted motion recv."), gettext_noop("A faster sort for recv motion"), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_enable_motion_mk_sort, @@ -885,7 +886,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_mk_sort_check", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Extensive check mk_sort"), gettext_noop("Expensive debug checking"), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_mk_sort_check, false, @@ -974,7 +975,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_select_invisible", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Use dummy snapshot for MVCC visibility calculation."), NULL, - GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC }, &gp_select_invisible, false, @@ -1105,7 +1106,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_workfile_compression", PGC_USERSET, RESOURCES_DISK, gettext_noop("Enables compression of temporary files."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &gp_workfile_compression, false, @@ -1147,7 +1148,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_interconnect_full_crc", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Sanity check incoming data stream."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_interconnect_full_crc, false, @@ -1158,7 +1159,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_interconnect_log_stats", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Emit statistics from the UDP-IC at the end of every statement."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_interconnect_log_stats, false, @@ -1570,7 +1571,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_disable_tuple_hints", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Specify if reader should set hint bits on tuples."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_disable_tuple_hints, true, @@ -1612,7 +1613,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"coredump_on_memerror", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Generate core dump on memory error."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &coredump_on_memerror, false, @@ -1737,7 +1738,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"pljava_release_lingering_savepoints", PGC_SUSET, CUSTOM_OPTIONS, gettext_noop("If true, lingering savepoints will be released on function exit; if false, they will be rolled back"), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY + GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY }, &pljava_release_lingering_savepoints, false, @@ -1769,7 +1770,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_partitioning_dynamic_selection_log", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Print out debugging info for GPDB dynamic partition selection"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_partitioning_dynamic_selection_log, false, @@ -1780,7 +1781,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_perfmon_print_packet_info", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Print out debugging info for a Perfmon packet"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_perfmon_print_packet_info, false, @@ -1791,7 +1792,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_log_stack_trace_lines", PGC_USERSET, LOGGING_WHAT, gettext_noop("Control if file/line information is included in stack traces"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_log_stack_trace_lines, true, @@ -1803,7 +1804,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_log_resqueue_memory", PGC_USERSET, LOGGING_WHAT, gettext_noop("Prints out messages related to resource queue's memory management."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_log_resqueue_memory, false, @@ -1815,7 +1816,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_log_resgroup_memory", PGC_USERSET, LOGGING_WHAT, gettext_noop("Prints out messages related to resource group's memory management."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_log_resgroup_memory, false, @@ -1827,7 +1828,7 @@ struct config_bool ConfigureNamesBool_gp[] = gettext_noop("Prints out the memory limit for operators (in explain) assigned by resource queue's " "memory management."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_resqueue_print_operator_memory_limits, false, @@ -1839,7 +1840,7 @@ struct config_bool ConfigureNamesBool_gp[] = gettext_noop("Prints out the memory limit for operators (in explain) assigned by resource group's " "memory management."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_resgroup_print_operator_memory_limits, false, @@ -1992,7 +1993,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"optimizer_partition_selection_log", PGC_USERSET, LOGGING_WHAT, gettext_noop("Log optimizer partition selection."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &optimizer_partition_selection_log, false, @@ -2769,7 +2770,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"dml_ignore_target_partition_check", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Ignores checking whether the user provided correct partition during a direct insert to a leaf partition"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &dml_ignore_target_partition_check, false, @@ -2824,7 +2825,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"vmem_process_interrupt", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Checks for interrupts before reserving VMEM"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &vmem_process_interrupt, false, @@ -2835,7 +2836,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"execute_pruned_plan", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Prune plan to discard unwanted plan nodes for each slice before execution"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &execute_pruned_plan, true, @@ -2857,7 +2858,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_enable_segment_copy_checking", PGC_USERSET, CUSTOM_OPTIONS, gettext_noop("Enable check the distribution key restriction on segment for command \"COPY FROM ON SEGMENT\"."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_enable_segment_copy_checking, true, @@ -2868,7 +2869,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_ignore_error_table", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, gettext_noop("Ignore INTO error-table in external table and COPY (Deprecated)."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_ignore_error_table, false, @@ -2898,7 +2899,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"verify_gpfdists_cert", PGC_USERSET, EXTERNAL_TABLES, gettext_noop("Verifies the authenticity of the gpfdist's certificate"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &verify_gpfdists_cert, true, check_verify_gpfdists_cert, NULL @@ -2908,7 +2909,7 @@ struct config_bool ConfigureNamesBool_gp[] = {"gp_external_enable_filter_pushdown", PGC_USERSET, EXTERNAL_TABLES, gettext_noop("Enable passing of query constraints to external table providers"), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &gp_external_enable_filter_pushdown, true, NULL, NULL @@ -3041,7 +3042,7 @@ struct config_int ConfigureNamesInt_gp[] = gettext_noop("The planner considers this much memory may be used by each internal " "sort operation and hash table before switching to " "temporary disk files."), - GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL }, &planner_work_mem, 32768, 2 * BLCKSZ / 1024, MAX_KILOBYTES, @@ -3052,7 +3053,7 @@ struct config_int ConfigureNamesInt_gp[] = {"statement_mem", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the memory to be reserved for a statement."), NULL, - GUC_UNIT_KB | GUC_GPDB_ADDOPT + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC }, &statement_mem, #ifdef USE_ASSERT_CHECKING @@ -3088,7 +3089,7 @@ struct config_int ConfigureNamesInt_gp[] = {"max_statement_mem", PGC_SUSET, RESOURCES_MEM, gettext_noop("Sets the maximum value for statement_mem setting."), NULL, - GUC_UNIT_KB | GUC_GPDB_ADDOPT + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC }, &max_statement_mem, 2048000, 32768, INT_MAX, @@ -3121,7 +3122,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_max_partition_level", PGC_SUSET, PRESET_OPTIONS, gettext_noop("Sets the maximum number of levels allowed when creating a partitioned table."), gettext_noop("Use 0 for no limit."), - GUC_GPDB_ADDOPT | GUC_SUPERUSER_ONLY | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_SUPERUSER_ONLY | GUC_NOT_IN_SAMPLE }, &gp_max_partition_level, 0, 0, INT_MAX, @@ -3154,7 +3155,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_workfile_limit_files_per_query", PGC_USERSET, RESOURCES, gettext_noop("Maximum number of workfiles allowed per query per segment."), gettext_noop("0 for no limit. Current query is terminated when limit is exceeded."), - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &gp_workfile_limit_files_per_query, 100000, 0, INT_MAX, @@ -3176,7 +3177,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_workfile_limit_per_query", PGC_USERSET, RESOURCES, gettext_noop("Maximum disk space (in KB) used for workfiles per query per segment."), gettext_noop("0 for no limit. Current query is terminated when limit is exceeded."), - GUC_GPDB_ADDOPT | GUC_UNIT_KB + GUC_GPDB_NEED_SYNC | GUC_UNIT_KB }, &gp_workfile_limit_per_query, 0, 0, INT_MAX, @@ -3187,7 +3188,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_vmem_idle_resource_timeout", PGC_USERSET, CLIENT_CONN_OTHER, gettext_noop("Sets the time a session can be idle (in milliseconds) before we release gangs on the segment DBs to free resources."), gettext_noop("A value of 0 turns off the timeout."), - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS | GUC_GPDB_NEED_SYNC }, &IdleSessionGangTimeout, #ifdef USE_ASSERT_CHECKING @@ -3299,7 +3300,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_max_packet_size", PGC_BACKEND, GP_ARRAY_TUNING, gettext_noop("Sets the max packet size for the Interconnect."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_max_packet_size, DEFAULT_PACKET_SIZE, MIN_PACKET_SIZE, MAX_PACKET_SIZE, @@ -3310,7 +3311,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_queue_depth", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the maximum size of the receive queue for each connection in the UDP interconnect"), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_queue_depth, 4, 1, 4096, @@ -3321,7 +3322,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_snd_queue_depth", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the maximum size of the send queue for each connection in the UDP interconnect"), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_snd_queue_depth, 2, 1, 4096, @@ -3332,7 +3333,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_timer_period", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the timer period (in ms) for UDP interconnect"), NULL, - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS | GUC_GPDB_NEED_SYNC }, &Gp_interconnect_timer_period, 5, 1, 100, @@ -3343,7 +3344,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_timer_checking_period", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the timer checking period (in ms) for UDP interconnect"), NULL, - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS | GUC_GPDB_NEED_SYNC }, &Gp_interconnect_timer_checking_period, 20, 1, 100, @@ -3354,7 +3355,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_default_rtt", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the default rtt (in ms) for UDP interconnect"), NULL, - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS | GUC_GPDB_NEED_SYNC }, &Gp_interconnect_default_rtt, 20, 1, 1000, @@ -3365,7 +3366,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_min_rto", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the min rto (in ms) for UDP interconnect"), NULL, - GUC_UNIT_MS | GUC_GPDB_ADDOPT + GUC_UNIT_MS | GUC_GPDB_NEED_SYNC }, &Gp_interconnect_min_rto, 20, 1, 1000, @@ -3376,7 +3377,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_transmit_timeout", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Timeout (in seconds) on interconnect to transmit a packet"), gettext_noop("Used by Interconnect to timeout packet transmission."), - GUC_UNIT_S | GUC_GPDB_ADDOPT + GUC_UNIT_S | GUC_GPDB_NEED_SYNC }, &Gp_interconnect_transmit_timeout, 3600, 1, 7200, @@ -3387,7 +3388,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_min_retries_before_timeout", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the min retries before reporting a transmit timeout in the interconnect."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_min_retries_before_timeout, 100, 1, 4096, @@ -3398,7 +3399,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_debug_retry_interval", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the interval by retry times to record a debug message for retry."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_debug_retry_interval, 10, 1, 4096, @@ -3409,7 +3410,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udp_bufsize_k", PGC_BACKEND, GP_ARRAY_TUNING, gettext_noop("Sets recv buf size of UDP interconnect, for testing."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_udp_bufsize_k, 0, 0, 32768, @@ -3421,7 +3422,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_dropseg", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Specifies a segment to which the dropacks, and dropxmit settings will be applied, for testing. (The default is to apply the dropacks and dropxmit settings to all segments)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_dropseg, UNDEF_SEGMENT, UNDEF_SEGMENT, INT_MAX, @@ -3432,7 +3433,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_dropacks_percent", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the percentage of correctly-received acknowledgment packets to synthetically drop, for testing. (affected by gp_udpic_dropseg)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_dropacks_percent, 0, 0, 100, @@ -3443,7 +3444,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_dropxmit_percent", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the percentage of correctly-received data packets to synthetically drop, for testing. (affected by gp_udpic_dropseg)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_dropxmit_percent, 0, 0, 100, @@ -3454,7 +3455,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_fault_inject_percent", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the percentage of fault injected into system calls, for testing. (affected by gp_udpic_dropseg)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_fault_inject_percent, 0, 0, 100, @@ -3465,7 +3466,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_fault_inject_bitmap", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the bitmap for faults injection, for testing. (affected by gp_udpic_dropseg)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_fault_inject_bitmap, 0, 0, INT_MAX, @@ -3476,7 +3477,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_udpic_network_disable_ipv6", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the address info hint to disable the ipv6, for testing. (affected by gp_udpic_dropseg)"), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_udpic_network_disable_ipv6, 0, 0, 1, @@ -3522,7 +3523,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_debug_linger", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Number of seconds for QD/QE process to linger upon fatal internal error."), gettext_noop("Allows an opportunity to debug the backend process before it terminates."), - GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_NEED_SYNC }, &gp_debug_linger, 120, 0, 3600, @@ -3530,7 +3531,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_debug_linger", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Number of seconds for QD/QE process to linger upon fatal internal error."), gettext_noop("Allows an opportunity to debug the backend process before it terminates."), - GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_NEED_SYNC }, &gp_debug_linger, 0, 0, 3600, @@ -3576,7 +3577,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_setup_timeout", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Timeout (in seconds) on interconnect setup that occurs at query start"), gettext_noop("Used by Interconnect to timeout the setup of the communication fabric."), - GUC_UNIT_S | GUC_GPDB_ADDOPT + GUC_UNIT_S | GUC_GPDB_NEED_SYNC }, &interconnect_setup_timeout, 7200, 0, 7200, @@ -3587,7 +3588,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_interconnect_tcp_listener_backlog", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Size of the listening queue for each TCP interconnect socket"), gettext_noop("Cooperate with kernel parameter net.core.somaxconn and net.ipv4.tcp_max_syn_backlog to tune network performance."), - GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &listenerBacklog, 128, 0, 65535, @@ -3598,7 +3599,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_snapshotadd_timeout", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Timeout (in seconds) on setup of new connection snapshot"), gettext_noop("Used by the transaction manager."), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_UNIT_S | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_UNIT_S | GUC_GPDB_NEED_SYNC }, &gp_snapshotadd_timeout, 10, 0, INT_MAX, @@ -3706,7 +3707,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_hashjoin_tuples_per_bucket", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Target density of hashtable used by Hashjoin during execution"), gettext_noop("A smaller value will tend to produce larger hashtables, which increases join performance"), - GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_hashjoin_tuples_per_bucket, 5, 1, 25, @@ -3717,7 +3718,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_hashagg_groups_per_bucket", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Target density of hashtable used by Hashagg during execution"), gettext_noop("A smaller value will tend to produce larger hashtables, which increases agg performance"), - GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC }, &gp_hashagg_groups_per_bucket, 5, 1, 25, @@ -3728,7 +3729,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_hashagg_default_nbatches", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Default number of batches for hashagg's (re-)spilling phases."), gettext_noop("Must be a power of two."), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_hashagg_default_nbatches, 32, 4, 1048576, @@ -3739,7 +3740,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_motion_slice_noop", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Make motion nodes in certain slices noop"), gettext_noop("Make motion nodes noop, to help analyze performance"), - GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC }, &gp_motion_slice_noop, 0, 0, INT_MAX, @@ -3760,7 +3761,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_gpperfmon_send_interval", PGC_SUSET, LOGGING_WHAT, gettext_noop("Interval in seconds between sending messages to gpperfmon."), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &gp_gpperfmon_send_interval, 1, 1, 3600, @@ -3896,7 +3897,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_blockdirectory_entry_min_range", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Minimal range in bytes one block directory entry covers."), gettext_noop("Used to reduce the size of a block directory."), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_blockdirectory_entry_min_range, 0, 0, INT_MAX, @@ -3907,7 +3908,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_blockdirectory_minipage_size", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Number of entries one row in a block directory table contains."), gettext_noop("Use smaller value in non-bulk load cases."), - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_blockdirectory_minipage_size, NUM_MINIPAGE_ENTRIES, 1, NUM_MINIPAGE_ENTRIES, @@ -3931,7 +3932,7 @@ struct config_int ConfigureNamesInt_gp[] = {"pljava_statement_cache_size", PGC_SUSET, CUSTOM_OPTIONS, gettext_noop("Size of the prepared statement MRU cache"), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY + GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY }, &pljava_statement_cache_size, 0, 0, 512, @@ -3942,7 +3943,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_resqueue_memory_policy_auto_fixed_mem", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the fixed amount of memory reserved for non-memory intensive operators in the AUTO policy."), NULL, - GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &gp_resqueue_memory_policy_auto_fixed_mem, 100, 50, INT_MAX, @@ -3953,7 +3954,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_resgroup_memory_policy_auto_fixed_mem", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the fixed amount of memory reserved for non-memory intensive operators in the AUTO policy."), NULL, - GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &gp_resgroup_memory_policy_auto_fixed_mem, 100, 50, INT_MAX, @@ -3974,7 +3975,7 @@ struct config_int ConfigureNamesInt_gp[] = {"optimizer_plan_id", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Choose a plan alternative"), NULL, - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &optimizer_plan_id, 0, 0, INT_MAX, @@ -3985,7 +3986,7 @@ struct config_int ConfigureNamesInt_gp[] = {"optimizer_samples_number", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the number of plan samples"), NULL, - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &optimizer_samples_number, 1000, 1, INT_MAX, @@ -3996,7 +3997,7 @@ struct config_int ConfigureNamesInt_gp[] = {"optimizer_cte_inlining_bound", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Set the CTE inlining cutoff"), NULL, - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &optimizer_cte_inlining_bound, 0, 0, INT_MAX, @@ -4029,7 +4030,7 @@ struct config_int ConfigureNamesInt_gp[] = {"optimizer_push_group_by_below_setop_threshold", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Maximum number of children setops have to consider pushing group bys below it"), NULL, - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &optimizer_push_group_by_below_setop_threshold, 10, 0, INT_MAX, @@ -4072,7 +4073,7 @@ struct config_int ConfigureNamesInt_gp[] = {"optimizer_mdcache_size", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the size of MDCache."), NULL, - GUC_UNIT_KB | GUC_GPDB_ADDOPT + GUC_UNIT_KB | GUC_GPDB_NEED_SYNC }, &optimizer_mdcache_size, 16384, 0, INT_MAX, @@ -4083,7 +4084,7 @@ struct config_int ConfigureNamesInt_gp[] = {"memory_profiler_dataset_size", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the size in GB"), NULL, - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &memory_profiler_dataset_size, 0, 0, INT_MAX, @@ -4105,7 +4106,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_initial_bad_row_limit", PGC_USERSET, EXTERNAL_TABLES, gettext_noop("Stops processing when number of the first bad rows exceeding this value"), NULL, - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &gp_initial_bad_row_limit, 1000, 0, INT_MAX, @@ -4116,7 +4117,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_indexcheck_insert", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Validate that a unique index does not already have the new tid during insert."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, (int *) &gp_indexcheck_insert, INDEX_CHECK_NONE, 0, INDEX_CHECK_ALL, @@ -4127,7 +4128,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_indexcheck_vacuum", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Validate index after lazy vacuum."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, (int *) &gp_indexcheck_vacuum, INDEX_CHECK_NONE, 0, INDEX_CHECK_ALL, @@ -4138,7 +4139,7 @@ struct config_int ConfigureNamesInt_gp[] = {"dtx_phase2_retry_count", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Maximum number of retries during two phase commit after which master PANICs."), NULL, - GUC_SUPERUSER_ONLY | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_SUPERUSER_ONLY | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &dtx_phase2_retry_count, 10, 0, INT_MAX, @@ -4161,7 +4162,7 @@ struct config_int ConfigureNamesInt_gp[] = {"gp_max_slices", PGC_USERSET, PRESET_OPTIONS, gettext_noop("Maximum slices for a single query"), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE }, &gp_max_slices, 0, 0, INT_MAX, NULL, NULL @@ -4316,7 +4317,7 @@ struct config_string ConfigureNamesString_gp[] = {"memory_profiler_run_id", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the unique run ID for memory profiling"), gettext_noop("Any string is acceptable"), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &memory_profiler_run_id, "none", @@ -4327,7 +4328,7 @@ struct config_string ConfigureNamesString_gp[] = {"memory_profiler_dataset_id", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the dataset ID for memory profiling"), gettext_noop("Any string is acceptable"), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &memory_profiler_dataset_id, "none", @@ -4338,7 +4339,7 @@ struct config_string ConfigureNamesString_gp[] = {"memory_profiler_query_id", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the query ID for memory profiling"), gettext_noop("Any string is acceptable"), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &memory_profiler_query_id, "none", @@ -4417,7 +4418,7 @@ struct config_string ConfigureNamesString_gp[] = {"pljava_vmoptions", PGC_SUSET, CUSTOM_OPTIONS, gettext_noop("Options sent to the JVM when it is created"), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY + GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY }, &pljava_vmoptions, "", @@ -4427,7 +4428,7 @@ struct config_string ConfigureNamesString_gp[] = {"pljava_classpath", PGC_SUSET, CUSTOM_OPTIONS, gettext_noop("classpath used by the the JVM"), NULL, - GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE }, &pljava_classpath, "", @@ -4460,7 +4461,7 @@ struct config_string ConfigureNamesString_gp[] = {"gp_default_storage_options", PGC_USERSET, APPENDONLY_TABLES, gettext_noop("default options for appendonly storage."), NULL, - GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT + GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC }, &gp_default_storage_options, "", check_gp_default_storage_options, assign_gp_default_storage_options, NULL @@ -4493,7 +4494,7 @@ struct config_enum ConfigureNamesEnum_gp[] = "DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the " "levels that follow it. The later the level, the fewer messages are " "sent."), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &gp_workfile_caching_loglevel, DEBUG1, server_message_level_options, @@ -4507,7 +4508,7 @@ struct config_enum ConfigureNamesEnum_gp[] = "DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the " "levels that follow it. The later the level, the fewer messages are " "sent."), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &gp_sessionstate_loglevel, DEBUG1, server_message_level_options, @@ -4582,7 +4583,7 @@ struct config_enum ConfigureNamesEnum_gp[] = {"explain_memory_verbosity", PGC_USERSET, RESOURCES_MEM, gettext_noop("Experimental feature: show memory account usage in EXPLAIN ANALYZE."), gettext_noop("Valid values are SUPPRESS, SUMMARY, DETAIL, and DEBUG."), - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &explain_memory_verbosity, EXPLAIN_MEMORY_VERBOSITY_SUPPRESS, explain_memory_verbosity_options, @@ -4635,7 +4636,7 @@ struct config_enum ConfigureNamesEnum_gp[] = {"gp_interconnect_fc_method", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the flow control method used for UDP interconnect."), gettext_noop("Valid values are \"capacity\" and \"loss\"."), - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_fc_method, INTERCONNECT_FC_METHOD_LOSS, gp_interconnect_fc_methods, @@ -4646,7 +4647,7 @@ struct config_enum ConfigureNamesEnum_gp[] = {"gp_interconnect_type", PGC_BACKEND, GP_ARRAY_TUNING, gettext_noop("Sets the protocol used for inter-node communication."), gettext_noop("Valid values are \"tcp\" and \"udpifc\"."), - GUC_GPDB_ADDOPT + GUC_GPDB_NEED_SYNC }, &Gp_interconnect_type, INTERCONNECT_TYPE_UDPIFC, gp_interconnect_types, @@ -4679,7 +4680,7 @@ struct config_enum ConfigureNamesEnum_gp[] = {"gp_log_interconnect", PGC_USERSET, LOGGING_WHAT, gettext_noop("Sets the verbosity of logged messages pertaining to connections between worker processes."), gettext_noop("Valid values are \"off\", \"terse\", \"verbose\" and \"debug\"."), - GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &gp_log_interconnect, GPVARS_VERBOSITY_TERSE, gp_log_verbosity, @@ -4732,6 +4733,90 @@ struct config_enum ConfigureNamesEnum_gp[] = } }; +/* + * For system defined GUC must assign a tag either GUC_GPDB_NEED_SYNC + * or GUC_GPDB_NO_SYNC. We deprecated direct define in guc.c, instead, + * add into sync_guc_names_array or unsync_guc_names_array. + */ +static const char *sync_guc_names_array[] = +{ + #include "utils/sync_guc_name.h" +}; + +static const char *unsync_guc_names_array[] = +{ + #include "utils/unsync_guc_name.h" +}; + +int sync_guc_num = 0; +int unsync_guc_num = 0; + +static int guc_array_compare(const void *a, const void *b) +{ + const char *namea = *(const char **)a; + const char *nameb = *(const char **)b; + + return guc_name_compare(namea, nameb); +} + +void gpdb_assign_sync_flag(struct config_generic **guc_variables, int size, bool predefine) +{ + static bool init = false; + /* ordering guc_name_array alphabets */ + if (!init) { + sync_guc_num = sizeof(sync_guc_names_array) / sizeof(char *); + qsort((void *) sync_guc_names_array, sync_guc_num, + sizeof(char *), guc_array_compare); + + unsync_guc_num = sizeof(unsync_guc_names_array) / sizeof(char *); + qsort((void *) unsync_guc_names_array, unsync_guc_num, + sizeof(char *), guc_array_compare); + + init = true; + } + + for (int i = 0; i < size; i ++) + { + struct config_generic *var = guc_variables[i]; + + /* if the sync flags is defined in guc variable, skip it */ + if (var->flags & (GUC_GPDB_NEED_SYNC | GUC_GPDB_NO_SYNC)) + continue; + + char *res = (char *) bsearch((void *) &var->name, + (void *) sync_guc_names_array, + sync_guc_num, + sizeof(char *), + guc_array_compare); + if (!res) + { + char *res = (char *) bsearch((void *) &var->name, + (void *) unsync_guc_names_array, + unsync_guc_num, + sizeof(char *), + guc_array_compare); + + /* for predefined guc, we force its name in one array. + * for the third-part libraries gucs introduced by customer + * we assign unsync flags as default. + */ + if (!res && predefine) + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("predefined guc name: %s contain neither " + "sync_guc_names_array nor unsync_guc_names_array", var->name))); + } + + var->flags |= GUC_GPDB_NO_SYNC; + } + else + { + var->flags |= GUC_GPDB_NEED_SYNC; + } + } +} + static bool check_pljava_classpath_insecure(bool *newval, void **extra, GucSource source) { diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index f2eab0e819afefaa03c0501c3a779ebbb3591ffa..e236505546fe91703e66240ac5a2c5610f4e9b80 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -220,8 +220,9 @@ typedef enum #define GUC_DISALLOW_IN_AUTO_FILE 0x00010000 /* can't set in PG_AUTOCONF_FILENAME */ /* GPDB speific */ -#define GUC_GPDB_ADDOPT 0x00020000 /* Send by cdbgang */ -#define GUC_DISALLOW_USER_SET 0x00040000 /* Do not allow this GUC to be set by the user */ +#define GUC_GPDB_NEED_SYNC 0x00020000 /* guc value is synced between master and primary */ +#define GUC_GPDB_NO_SYNC 0x00040000 /* guc value is not synced between master and primary */ +#define GUC_DISALLOW_USER_SET 0x00080000 /* Do not allow this GUC to be set by the user */ /* GUC lists for gp_guc_list_show(). (List of struct config_generic) */ extern List *gp_guc_list_for_explain; @@ -767,5 +768,6 @@ extern const char *gpvars_show_gp_resqueue_memory_policy(void); extern bool gpvars_check_statement_mem(int *newval, void **extra, GucSource source); extern bool gpvars_check_gp_enable_gpperfmon(bool *newval, void **extra, GucSource source); extern bool gpvars_check_gp_gpperfmon_send_interval(int *newval, void **extra, GucSource source); +extern int guc_name_compare(const char *namea, const char *nameb); #endif /* GUC_H */ diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index 1824d02029ab83a266c90b5171f4e0a28f38a054..e488c61eee242b68f8a19aa0b3fc5335c7b447b5 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -321,4 +321,6 @@ extern struct config_real ConfigureNamesReal_gp[]; extern struct config_string ConfigureNamesString_gp[]; extern struct config_enum ConfigureNamesEnum_gp[]; +extern void gpdb_assign_sync_flag(struct config_generic **guc_variables, int size, bool predefine); + #endif /* GUC_TABLES_H */ diff --git a/src/include/utils/sync_guc_name.h b/src/include/utils/sync_guc_name.h new file mode 100644 index 0000000000000000000000000000000000000000..ba3619f53fbe4949d85c11518bf05c7d60f2ebb3 --- /dev/null +++ b/src/include/utils/sync_guc_name.h @@ -0,0 +1,109 @@ + "client_min_messages", + "commit_delay", + "commit_siblings", + "coredump_on_memerror", + "DateStyle", + "default_tablespace", + "dml_ignore_target_partition_check", + "dtx_phase2_retry_count", + "execute_pruned_plan", + "explain_memory_verbosity", + "gin_fuzzy_search_limit", + "gp_blockdirectory_entry_min_range", + "gp_blockdirectory_minipage_size", + "gp_debug_linger", + "gp_default_storage_options", + "gp_disable_tuple_hints", + "gp_enable_mk_sort", + "gp_enable_motion_mk_sort", + "gp_enable_segment_copy_checking", + "gp_external_enable_filter_pushdown", + "gp_gpperfmon_send_interval", + "gp_hashagg_default_nbatches", + "gp_hashagg_groups_per_bucket", + "gp_hashjoin_tuples_per_bucket", + "gp_ignore_error_table", + "gp_indexcheck_insert", + "gp_indexcheck_vacuum", + "gp_initial_bad_row_limit", + "gp_interconnect_debug_retry_interval", + "gp_interconnect_default_rtt", + "gp_interconnect_fc_method", + "gp_interconnect_full_crc", + "gp_interconnect_log_stats", + "gp_interconnect_min_retries_before_timeout", + "gp_interconnect_min_rto", + "gp_interconnect_queue_depth", + "gp_interconnect_setup_timeout", + "gp_interconnect_snd_queue_depth", + "gp_interconnect_tcp_listener_backlog", + "gp_interconnect_timer_checking_period", + "gp_interconnect_timer_period", + "gp_interconnect_transmit_timeout", + "gp_interconnect_type", + "gp_log_interconnect", + "gp_log_resgroup_memory", + "gp_log_resqueue_memory", + "gp_log_stack_trace_lines", + "gp_max_packet_size", + "gp_max_partition_level", + "gp_max_slices", + "gp_mk_sort_check", + "gp_motion_slice_noop", + "gp_partitioning_dynamic_selection_log", + "gp_perfmon_print_packet_info", + "gp_resgroup_memory_policy_auto_fixed_mem", + "gp_resgroup_print_operator_memory_limits", + "gp_resqueue_memory_policy_auto_fixed_mem", + "gp_resqueue_print_operator_memory_limits", + "gp_select_invisible", + "gp_sessionstate_loglevel", + "gp_snapshotadd_timeout", + "gp_udp_bufsize_k", + "gp_udpic_dropacks_percent", + "gp_udpic_dropseg", + "gp_udpic_dropxmit_percent", + "gp_udpic_fault_inject_bitmap", + "gp_udpic_fault_inject_percent", + "gp_udpic_network_disable_ipv6", + "gp_vmem_idle_resource_timeout", + "gp_workfile_caching_loglevel", + "gp_workfile_compression", + "gp_workfile_limit_files_per_query", + "gp_workfile_limit_per_query", + "IntervalStyle", + "lc_numeric", + "log_dispatch_stats", + "log_duration", + "log_error_verbosity", + "log_executor_stats", + "log_min_duration_statement", + "log_min_error_statement", + "log_min_messages", + "log_statement_stats", + "maintenance_work_mem", + "max_statement_mem", + "memory_profiler_dataset_id", + "memory_profiler_dataset_size", + "memory_profiler_query_id", + "memory_profiler_run_id", + "optimizer_cte_inlining_bound", + "optimizer_mdcache_size", + "optimizer_partition_selection_log", + "optimizer_plan_id", + "optimizer_push_group_by_below_setop_threshold", + "optimizer_samples_number", + "planner_work_mem", + "pljava_classpath", + "pljava_release_lingering_savepoints", + "pljava_statement_cache_size", + "pljava_vmoptions", + "search_path", + "statement_mem", + "statement_timeout", + "temp_buffers", + "TimeZone", + "verify_gpfdists_cert", + "vmem_process_interrupt", + "work_mem", + "temp_tablespaces", diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h new file mode 100644 index 0000000000000000000000000000000000000000..91fabee0339fe7e08583a31402b2b8cb1bdf2438 --- /dev/null +++ b/src/include/utils/unsync_guc_name.h @@ -0,0 +1,517 @@ + "allow_segment_DML", + "allow_system_table_mods", + "application_name", + "archive_command", + "archive_mode", + "archive_timeout", + "array_nulls", + "authentication_timeout", + "autocommit", + "autovacuum", + "autovacuum_analyze_scale_factor", + "autovacuum_analyze_threshold", + "autovacuum_freeze_max_age", + "autovacuum_max_workers", + "autovacuum_max_workers", + "autovacuum_multixact_freeze_max_age", + "autovacuum_naptime", + "autovacuum_vacuum_cost_delay", + "autovacuum_vacuum_cost_limit", + "autovacuum_vacuum_scale_factor", + "autovacuum_vacuum_threshold", + "autovacuum_work_mem", + "backslash_quote", + "bgwriter_delay", + "bgwriter_lru_maxpages", + "bgwriter_lru_multiplier", + "block_size", + "bonjour", + "bonjour_name", + "bytea_output", + "check_function_bodies", + "checkpoint_completion_target", + "checkpoint_segments", + "checkpoint_timeout", + "checkpoint_warning", + "client_encoding", + "config_file", + "constraint_exclusion", + "cpu_index_tuple_cost", + "cpu_operator_cost", + "cpu_tuple_cost", + "create_restartpoint_on_ckpt_record_replay", + "cursor_tuple_fraction", + "cursor_tuple_fraction", + "data_checksums", + "data_directory", + "db_user_namespace", + "deadlock_timeout", + "debug_abort_after_distributed_prepared", + "Debug_appendonly_print_append_block", + "debug_appendonly_print_blockdirectory", + "debug_appendonly_print_compaction", + "debug_appendonly_print_datumstream", + "debug_appendonly_print_delete", + "debug_appendonly_print_insert", + "debug_appendonly_print_insert_tuple", + "Debug_appendonly_print_read_block", + "debug_appendonly_print_scan", + "debug_appendonly_print_scan_tuple", + "debug_appendonly_print_segfile_choice", + "debug_appendonly_print_storage_headers", + "debug_appendonly_print_verify_write_block", + "debug_appendonly_print_visimap", + "debug_appendonly_use_no_toast", + "debug_assertions", + "debug_basebackup", + "debug_bitmap_print_insert", + "debug_burn_xids", + "debug_cancel_print", + "debug_datumstream_block_read_check_integrity", + "debug_datumstream_block_write_check_integrity", + "debug_datumstream_read_check_large_varlena_integrity", + "debug_datumstream_read_print_varlena_info", + "debug_datumstream_write_print_large_varlena_info", + "debug_datumstream_write_print_small_varlena_info", + "debug_datumstream_write_use_small_initial_buffers", + "debug_disable_distributed_snapshot", + "debug_dtm_action", + "debug_dtm_action_nestinglevel", + "debug_dtm_action_primary", + "debug_dtm_action_protocol", + "debug_dtm_action_segment", + "debug_dtm_action_sql_command_tag", + "debug_dtm_action_target", + "debug_latch", + "debug_pretty_print", + "debug_print_full_dtm", + "debug_print_parse", + "debug_print_plan", + "debug_print_prelim_plan", + "debug_print_rewritten", + "debug_print_slice_table", + "debug_print_snapshot_dtm", + "debug_resource_group", + "debug_walrepl_rcv", + "debug_walrepl_snd", + "debug_walrepl_syncrep", + "debug_xlog_record_read", + "default_statistics_target", + "default_text_search_config", + "default_transaction_deferrable", + "default_transaction_isolation", + "default_transaction_read_only", + "default_with_oids", + "dynamic_library_path", + "dynamic_shared_memory_type", + "effective_cache_size", + "effective_io_concurrency", + "enable_bitmapscan", + "enable_groupagg", + "enable_hashagg", + "enable_hashjoin", + "enable_indexonlyscan", + "enable_indexscan", + "enable_material", + "enable_mergejoin", + "enable_nestloop", + "enable_seqscan", + "enable_sort", + "enable_tidscan", + "escape_string_warning", + "event_source", + "exit_on_error", + "external_pid_file", + "external_pid_file", + "extra_float_digits", + "from_collapse_limit", + "fsync", + "full_page_writes", + "geqo", + "geqo_effort", + "geqo_generations", + "geqo_pool_size", + "geqo_seed", + "geqo_selection_bias", + "geqo_threshold", + "gp_adjust_selectivity_for_outerjoins", + "gp_allow_non_uniform_partitioning_ddl", + "gp_allow_rename_relation_without_lock", + "gp_appendonly_compaction", + "gp_appendonly_compaction_threshold", + "gp_appendonly_verify_block_checksums", + "gp_appendonly_verify_write_block", + "gp_auth_time_override", + "gp_autostats_mode", + "gp_autostats_mode_in_functions", + "gp_autostats_on_change_threshold", + "gp_cached_segworkers_threshold", + "gp_command_count", + "gp_connection_send_timeout", + "gp_contentid", + "gp_cost_hashjoin_chainwalk", + "gp_create_table_random_default_distribution", + "gp_cte_sharing", + "gp_dbid", + "gp_debug_pgproc", + "gp_debug_resqueue_priority", + "gp_distinct_grouping_sets_threshold", + "gp_dynamic_partition_pruning", + "gp_eager_agg_distinct_pruning", + "gp_eager_one_phase_agg", + "gp_eager_preunique", + "gp_eager_two_phase_agg", + "gp_enable_agg_distinct", + "gp_enable_agg_distinct_pruning", + "gp_enable_direct_dispatch", + "gp_enable_exchange_default_partition", + "gp_enable_explain_allstat", + "gp_enable_fast_sri", + "gp_enable_global_deadlock_detector", + "gp_enable_gpperfmon", + "gp_enable_groupext_distinct_gather", + "gp_enable_groupext_distinct_pruning", + "gp_enable_hashjoin_size_heuristic", + "gp_enable_interconnect_aggressive_retry", + "gp_enable_minmax_optimization", + "gp_enable_minmax_optimization", + "gp_enable_motion_deadlock_sanity", + "gp_enable_multiphase_agg", + "gp_enable_predicate_propagation", + "gp_enable_preunique", + "gp_enable_query_metrics", + "gp_enable_relsize_collection", + "gp_enable_slow_writer_testmode", + "gp_enable_sort_distinct", + "gp_enable_sort_limit", + "gp_encoding_check_locale_compatibility", + "gp_external_enable_exec", + "gp_external_max_segs", + "gp_fts_mark_mirror_down_grace_period", + "gp_fts_probe_interval", + "gp_fts_probe_retries", + "gp_fts_probe_timeout", + "gp_gang_creation_retry_count", + "gp_gang_creation_retry_timer", + "gp_global_deadlock_detector_period", + "gp_hashagg_streambottom", + "gp_heap_require_relhasoids_match", + "gp_ignore_window_exclude", + "gp_instrument_shmem_size", + "gp_interconnect_cache_future_packets", + "gp_is_writer", + "gp_keep_all_xlog", + "gp_local_distributed_cache_stats", + "gp_log_dynamic_partition_pruning", + "gp_log_format", + "gp_log_fts", + "gp_log_gang", + "gp_log_optimization_time", + "gp_maintenance_conn", + "gp_max_local_distributed_cache", + "gp_max_plan_size", + "gp_motion_cost_per_row", + "gp_perfmon_segment_interval", + "gp_qd_hostname", + "gp_qd_port", + "gp_recursive_cte", + "gp_recursive_cte_prototype", + "gp_reject_internal_tcp_connection", + "gp_reject_percent_threshold", + "gp_reraise_signal", + "gp_resgroup_memory_policy", + "gp_resource_group_bypass", + "gp_resource_group_cpu_limit", + "gp_resource_group_cpu_priority", + "gp_resource_group_memory_limit", + "gp_resource_manager", + "gp_resqueue_memory_policy", + "gp_resqueue_priority", + "gp_resqueue_priority_cpucores_per_segment", + "gp_resqueue_priority_default_value", + "gp_resqueue_priority_grouping_timeout", + "gp_resqueue_priority_inactivity_timeout", + "gp_resqueue_priority_local_interval", + "gp_resqueue_priority_sweeper_interval", + "gp_role", + "gp_safefswritesize", + "gp_segment_connect_timeout", + "gp_segments_for_planner", + "gp_segworker_relative_priority", + "gp_selectivity_damping_factor", + "gp_selectivity_damping_for_joins", + "gp_selectivity_damping_for_scans", + "gp_selectivity_damping_sigsort", + "gp_server_version", + "gp_server_version_num", + "gp_session_id", + "gp_session_role", + "gp_set_proc_affinity", + "gp_sort_flags", + "gp_sort_max_distinct", + "gp_statistics_pullup_from_child_partition", + "gp_statistics_use_fkeys", + "gp_subtrans_warn_limit", + "gp_use_legacy_hashops", + "gp_vmem_limit_per_query", + "gp_vmem_protect_limit", + "gp_vmem_protect_segworker_cache_limit", + "gp_workfile_limit_per_segment", + "gp_workfile_max_entries", + "gp_write_shared_snapshot", + "gpperfmon_log_alert_level", + "gpperfmon_port", + "hba_file", + "hot_standby", + "hot_standby_feedback", + "huge_pages", + "ident_file", + "ignore_checksum_failure", + "ignore_system_indexes", + "integer_datetimes", + "IntervalStyle", + "is_superuser", + "join_collapse_limit", + "krb_caseins_users", + "krb_server_keyfile", + "lc_collate", + "lc_ctype", + "lc_messages", + "lc_monetary", + "lc_time", + "listen_addresses", + "lo_compat_privileges", + "local_preload_libraries", + "lock_timeout", + "log_autostats", + "log_autovacuum_min_duration", + "log_checkpoints", + "log_connections", + "log_destination", + "log_directory", + "log_disconnections", + "log_file_mode", + "log_filename", + "log_hostname", + "log_line_prefix", + "log_lock_waits", + "log_parser_stats", + "log_planner_stats", + "log_rotation_age", + "log_rotation_size", + "log_statement", + "log_temp_files", + "log_timezone", + "log_truncate_on_rotation", + "logging_collector", + "maintenance_mode", + "max_appendonly_tables", + "max_connections", + "max_files_per_process", + "max_function_args", + "max_identifier_length", + "max_index_keys", + "max_locks_per_transaction", + "max_pred_locks_per_transaction", + "max_prepared_transactions", + "max_replication_slots", + "max_resource_portals_per_transaction", + "max_resource_queues", + "max_stack_depth", + "max_standby_archive_delay", + "max_standby_streaming_delay", + "max_wal_senders", + "max_worker_processes", + "memory_spill_ratio", + "optimizer", + "optimizer_analyze_midlevel_partition", + "optimizer_analyze_root_partition", + "optimizer_apply_left_outer_to_union_all_disregarding_stats", + "optimizer_array_constraints", + "optimizer_array_expansion_threshold", + "optimizer_control", + "optimizer_cost_model", + "optimizer_cost_threshold", + "optimizer_cte_inlining", + "optimizer_damping_factor_filter", + "optimizer_damping_factor_groupby", + "optimizer_damping_factor_join", + "optimizer_dpe_stats", + "optimizer_enable_assert_maxonerow", + "optimizer_enable_associativity", + "optimizer_enable_bitmapscan", + "optimizer_enable_broadcast_nestloop_outer_child", + "optimizer_enable_constant_expression_evaluation", + "optimizer_enable_ctas", + "optimizer_enable_derive_stats_all_groups", + "optimizer_enable_direct_dispatch", + "optimizer_enable_dml", + "optimizer_enable_dml_constraints", + "optimizer_enable_dml_triggers", + "optimizer_enable_dynamictablescan", + "optimizer_enable_eageragg", + "optimizer_enable_gather_on_segment_for_dml", + "optimizer_enable_groupagg", + "optimizer_enable_hashagg", + "optimizer_enable_hashjoin", + "optimizer_enable_hashjoin_redistribute_broadcast_children", + "optimizer_enable_indexjoin", + "optimizer_enable_indexscan", + "optimizer_enable_master_only_queries", + "optimizer_enable_materialize", + "optimizer_enable_mergejoin", + "optimizer_enable_motion_broadcast", + "optimizer_enable_motion_gather", + "optimizer_enable_motion_redistribute", + "optimizer_enable_motions", + "optimizer_enable_motions_masteronly_queries", + "optimizer_enable_multiple_distinct_aggs", + "optimizer_enable_outerjoin_rewrite", + "optimizer_enable_outerjoin_to_unionall_rewrite", + "optimizer_enable_partial_index", + "optimizer_enable_partition_propagation", + "optimizer_enable_partition_selection", + "optimizer_enable_sort", + "optimizer_enable_space_pruning", + "optimizer_enable_streaming_material", + "optimizer_enable_tablescan", + "optimizer_enforce_subplans", + "optimizer_enumerate_plans", + "optimizer_expand_fulljoin", + "optimizer_extract_dxl_stats", + "optimizer_extract_dxl_stats_all_nodes", + "optimizer_force_agg_skew_avoidance", + "optimizer_force_expanded_distinct_aggs", + "optimizer_force_multistage_agg", + "optimizer_force_three_stage_scalar_dqa", + "optimizer_join_arity_for_associativity_commutativity", + "optimizer_join_order", + "optimizer_join_order_threshold", + "optimizer_log", + "optimizer_log_failure", + "optimizer_metadata_caching", + "optimizer_minidump", + "optimizer_multilevel_partitioning", + "optimizer_nestloop_factor", + "optimizer_parallel_union", + "optimizer_penalize_broadcast_threshold", + "optimizer_print_expression_properties", + "optimizer_print_group_properties", + "optimizer_print_job_scheduler", + "optimizer_print_memo_after_exploration", + "optimizer_print_memo_after_implementation", + "optimizer_print_memo_after_optimization", + "optimizer_print_missing_stats", + "optimizer_print_optimization_context", + "optimizer_print_optimization_stats", + "optimizer_print_plan", + "optimizer_print_query", + "optimizer_print_xform", + "optimizer_print_xform_results", + "optimizer_prune_computed_columns", + "optimizer_push_requirements_from_consumer_to_producer", + "optimizer_remove_order_below_dml", + "optimizer_replicated_table_insert", + "optimizer_sample_plans", + "optimizer_search_strategy_path", + "optimizer_segments", + "optimizer_sort_factor", + "optimizer_trace_fallback", + "optimizer_use_external_constant_expression_evaluation_for_ints", + "optimizer_use_gpdb_allocators", + "password_encryption", + "password_hash_algorithm", + "pljava_classpath_insecure", + "pljava_debug", + "port", + "post_auth_delay", + "pre_auth_delay", + "quote_all_identifiers", + "random_page_cost", + "readable_external_table_timeout", + "repl_catchup_within_range", + "resource_cleanup_gangs_on_wait", + "resource_scheduler", + "resource_select_only", + "restart_after_crash", + "role", + "runaway_detector_activation_percent", + "seed", + "segment_size", + "seq_page_cost", + "server_encoding", + "server_version", + "server_version_num", + "session_authorization", + "session_preload_libraries", + "session_replication_role", + "shared_buffers", + "shared_preload_libraries", + "sql_inheritance", + "ssl", + "ssl_ca_file", + "ssl_cert_file", + "ssl_ciphers", + "ssl_crl_file", + "ssl_ecdh_curve", + "ssl_key_file", + "ssl_prefer_server_ciphers", + "standard_conforming_strings", + "stats_queue_level", + "stats_temp_directory", + "superuser_reserved_connections", + "synchronize_seqscans", + "synchronous_commit", + "synchronous_standby_names", + "syslog_facility", + "syslog_ident", + "tcp_keepalives_count", + "tcp_keepalives_idle", + "tcp_keepalives_interval", + "temp_file_limit", + "test_AppendOnlyHash_eviction_vs_just_marking_not_inuse", + "test_print_direct_dispatch_info", + "timezone_abbreviations", + "trace_notify", + "trace_recovery_messages", + "trace_sort", + "track_activities", + "track_activity_query_size", + "track_counts", + "track_functions", + "track_io_timing", + "transaction_deferrable", + "transaction_isolation", + "transaction_read_only", + "transform_null_equals", + "unix_socket_directories", + "unix_socket_group", + "unix_socket_permissions", + "update_process_title", + "vacuum_cost_delay", + "vacuum_cost_limit", + "vacuum_cost_page_dirty", + "vacuum_cost_page_hit", + "vacuum_cost_page_miss", + "vacuum_defer_cleanup_age", + "vacuum_freeze_min_age", + "vacuum_freeze_table_age", + "vacuum_multixact_freeze_min_age", + "vacuum_multixact_freeze_table_age", + "wal_block_size", + "wal_buffers", + "wal_keep_segments", + "wal_level", + "wal_log_hints", + "wal_receiver_status_interval", + "wal_receiver_timeout", + "wal_segment_size", + "wal_sender_timeout", + "wal_sync_method", + "wal_writer_delay", + "writable_external_table_bufsize", + "xid_stop_limit", + "xid_warn_limit", + "xmlbinary", + "xmloption", + "zero_damaged_pages"