From 750647bb04e9e3b7cd17b8229dafd1cc0b9b99ef Mon Sep 17 00:00:00 2001 From: Weinan WANG Date: Thu, 15 Aug 2019 14:40:02 +0800 Subject: [PATCH] GPDB GUC dispatching flag refactor So far, we use to dispatch a guc when creating gang if its flag contains GUC_GPDB_ADDOPT. It has some drawbacks. 1. This flag left a lots footprint in guc.c, when we diff upstream code. 2. It is easy to forget marking it when new guc introduce. To deal with these issues, and also this PR is the first step of [PR7184](https://github.com/greenplum-db/gpdb/pull/7184). Rename GUC_GPDB_ADDOPT flag as GUC_GPDB_NEED_SYNC, as well as, declare a new guc flag named GUC_GPDB_NO_SYNC. For the predefine guc in guc.c and guc_gp.c must explicitly assign one of these two flags. For custom guc, give a default flag, GUC_GPDB_NO_SYNC, if it does not explicit set. Instead of the direct set flag in guc.c, we define two array, sync_guc_names_array and unsync_guc_names_array.To recode guc names into and automatically assign flag when the guc object is built in Postgres. Hence, we can reduce footprint when diffing with upstream guc.c Idea from Heikki Linnakangas Idea from Hubert Zhang --- src/backend/cdb/dispatcher/cdbgang.c | 4 +- src/backend/utils/misc/README | 15 + src/backend/utils/misc/guc.c | 63 ++-- src/backend/utils/misc/guc_gp.c | 261 +++++++++----- src/include/utils/guc.h | 6 +- src/include/utils/guc_tables.h | 2 + src/include/utils/sync_guc_name.h | 109 ++++++ src/include/utils/unsync_guc_name.h | 517 +++++++++++++++++++++++++++ 8 files changed, 851 insertions(+), 126 deletions(-) create mode 100644 src/include/utils/sync_guc_name.h create mode 100644 src/include/utils/unsync_guc_name.h diff --git a/src/backend/cdb/dispatcher/cdbgang.c b/src/backend/cdb/dispatcher/cdbgang.c index 517c983a59..36ef8d7ddd 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 70244ced18..b1f0f4459b 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 46ab38138e..dc6d66a0b3 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 5b83bb9068..e26e6fd296 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 f2eab0e819..e236505546 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 1824d02029..e488c61eee 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 0000000000..ba3619f53f --- /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 0000000000..91fabee033 --- /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" -- GitLab