diff --git a/src/backend/cdb/cdbvars.c b/src/backend/cdb/cdbvars.c index f5e39d79b63f945e2940f885da391cbbc2a37395..83488f4e13e8cca85e79c2f717efae988cfa5c0b 100644 --- a/src/backend/cdb/cdbvars.c +++ b/src/backend/cdb/cdbvars.c @@ -25,6 +25,7 @@ #include "lib/stringinfo.h" #include "libpq/libpq-be.h" #include "utils/memutils.h" +#include "utils/resource_manager.h" #include "storage/bfz.h" #include "storage/proc.h" #include "cdb/memquota.h" @@ -1191,6 +1192,46 @@ gpvars_assign_gp_fts_probe_pause(bool newval, bool doit, GucSource source) return true; } +/* + * gpvars_assign_gp_resource_manager_policy + * gpvars_show_gp_resource_manager_policy + */ +const char * +gpvars_assign_gp_resource_manager_policy(const char *newval, bool doit, GucSource source __attribute__((unused))) +{ + ResourceManagerPolicy newtype = RESOURCE_MANAGER_POLICY_QUEUE; + + if (newval == NULL || newval[0] == 0 ) + newtype = RESOURCE_MANAGER_POLICY_QUEUE; + else if (!pg_strcasecmp("queue", newval)) + newtype = RESOURCE_MANAGER_POLICY_QUEUE; + else if (!pg_strcasecmp("group", newval)) + newtype = RESOURCE_MANAGER_POLICY_GROUP; + else + elog(ERROR, "unknown resource manager policy: current policy is '%s'", gpvars_show_gp_resource_manager_policy()); + + if (doit) + { + Gp_resource_manager_policy = newtype; + } + + return newval; +} + +const char * +gpvars_show_gp_resource_manager_policy(void) +{ + switch (Gp_resource_manager_policy) + { + case RESOURCE_MANAGER_POLICY_QUEUE: + return "queue"; + case RESOURCE_MANAGER_POLICY_GROUP: + return "group"; + default: + Assert(!"unexpected resource manager policy"); + return "unknown"; + } +} /* * gpvars_assign_gp_resqueue_memory_policy * gpvars_show_gp_resqueue_memory_policy diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile index 4b65ad81f5edebd9b072db07d87e6bdfa6d3ecce..0b97139ebc615d54315b2de7a8ad9f3c4873d40c 100644 --- a/src/backend/utils/Makefile +++ b/src/backend/utils/Makefile @@ -10,7 +10,7 @@ include $(top_builddir)/src/Makefile.global OBJS = fmgrtab.o session_state.o SUBDIRS = adt cache datumstream error fmgr hash init mb misc mmgr resowner \ - resgroup resscheduler sort stat time gpmon gp workfile_manager + resgroup resscheduler sort stat time gpmon gp workfile_manager resource_manager include $(top_srcdir)/src/backend/common.mk diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 1e6588fec54e4371edb0ef1482c2cff69b0405cb..cdbc419d3314875e537dd0c521bfc85d16b0467b 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -334,6 +334,7 @@ static char *gp_log_fts_str; static char *gp_log_interconnect_str; static char *gp_interconnect_type_str; static char *gp_interconnect_fc_method_str; +static char *gp_resource_manager_str; /* * These variables are all dummies that don't do anything, except in some @@ -5119,6 +5120,14 @@ struct config_string ConfigureNamesString_gp[] = "MEDIUM", gpvars_assign_gp_resqueue_priority_default_value, NULL }, + { + {"gp_resource_manager", PGC_POSTMASTER, RESOURCES, + gettext_noop("Sets the type of resource manager."), + gettext_noop("Only support \"queue\" and \"group\" for now.") + }, + &gp_resource_manager_str, + "queue", gpvars_assign_gp_resource_manager_policy, gpvars_show_gp_resource_manager_policy, + }, { {"gp_email_smtp_server", PGC_SUSET, LOGGING, gettext_noop("Sets the SMTP server and port used to send email alerts."), diff --git a/src/backend/utils/resource_manager/Makefile b/src/backend/utils/resource_manager/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..55cbd1c4aba6e604b2735f62fe131c9b3a07e543 --- /dev/null +++ b/src/backend/utils/resource_manager/Makefile @@ -0,0 +1,17 @@ +#------------------------------------------------------------------------- +# +# Makefile-- +# Makefile for utils/resource_manager +# +# IDENTIFICATION +# src/backend/utils/resource_manager/Makefile +# +#------------------------------------------------------------------------- + +subdir = src/backend/utils/resource_manager +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global + +OBJS = resource_manager.o + +include $(top_srcdir)/src/backend/common.mk diff --git a/src/backend/utils/resource_manager/resource_manager.c b/src/backend/utils/resource_manager/resource_manager.c new file mode 100644 index 0000000000000000000000000000000000000000..ca6dcfa7fc5e50b2386d5c02aecb92bdb0acd5f2 --- /dev/null +++ b/src/backend/utils/resource_manager/resource_manager.c @@ -0,0 +1,21 @@ +/*------------------------------------------------------------------------- + * + * resource_manager.c + * GPDB resource manager code. + * + * + * Copyright (c) 2006-2017, Greenplum inc. + * + * + ------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "utils/guc.h" +#include "utils/resource_manager.h" + +/* + * GUC variables. + */ +bool ResourceScheduler; /* Is scheduling enabled? */ +ResourceManagerPolicy Gp_resource_manager_policy; diff --git a/src/backend/utils/resscheduler/resscheduler.c b/src/backend/utils/resscheduler/resscheduler.c index 158f8c55ad088f7d31036a6bc051cc7620b6e8de..4d8a84242ef2846a4eb130c2585654571d26cfa8 100644 --- a/src/backend/utils/resscheduler/resscheduler.c +++ b/src/backend/utils/resscheduler/resscheduler.c @@ -42,7 +42,6 @@ /* * GUC variables. */ -bool ResourceScheduler; /* Is scheduling enabled? */ int MaxResourceQueues; /* Max # of queues. */ int MaxResourcePortalsPerXact; /* Max # tracked portals - * per backend . */ diff --git a/src/include/cdb/cdbvars.h b/src/include/cdb/cdbvars.h index 8d601e2f7792015c654ad3062e641f903b869b38..056291de6bc936c5d3c1ec38e03d562e3bdee027 100644 --- a/src/include/cdb/cdbvars.h +++ b/src/include/cdb/cdbvars.h @@ -1020,6 +1020,10 @@ extern void write_log(const char *fmt,...) __attribute__((format(printf, 1, 2))) extern void verifyGpIdentityIsSet(void); +extern const char *gpvars_assign_gp_resource_manager_policy(const char *newval, bool doit, GucSource source __attribute__((unused)) ); + +extern const char *gpvars_show_gp_resource_manager_policy(void); + extern const char *gpvars_assign_gp_resqueue_memory_policy(const char *newval, bool doit, GucSource source __attribute__((unused)) ); extern const char *gpvars_show_gp_resqueue_memory_policy(void); diff --git a/src/include/utils/resource_manager.h b/src/include/utils/resource_manager.h new file mode 100644 index 0000000000000000000000000000000000000000..cacb008be6df4be423d44cb123c6c6c0a9a42faa --- /dev/null +++ b/src/include/utils/resource_manager.h @@ -0,0 +1,29 @@ +/*------------------------------------------------------------------------- + * + * resource_manager.h + * GPDB resource manager definitions. + * + * + * Copyright (c) 2006-2017, Greenplum inc. + * + * IDENTIFICATION + * src/include/utils/resource_manager.h + * + *------------------------------------------------------------------------- + */ +#ifndef RESOURCEMANAGER_H +#define RESOURCEMANAGER_H + +typedef enum +{ + RESOURCE_MANAGER_POLICY_QUEUE, + RESOURCE_MANAGER_POLICY_GROUP, +} ResourceManagerPolicy; + +/* + * GUC variables. + */ +extern bool ResourceScheduler; +extern ResourceManagerPolicy Gp_resource_manager_policy; + +#endif /* RESOURCEMANAGER_H */ diff --git a/src/include/utils/resscheduler.h b/src/include/utils/resscheduler.h index c331670d1d43c0910c6a47bde55f3ce9fc70c0eb..bc18a8262e6280d99629fb863ff3af19b0b8bb25 100644 --- a/src/include/utils/resscheduler.h +++ b/src/include/utils/resscheduler.h @@ -19,11 +19,11 @@ #include "nodes/plannodes.h" #include "storage/lock.h" #include "tcop/dest.h" +#include "utils/resource_manager.h" /* * GUC variables. */ -extern bool ResourceScheduler; extern int MaxResourceQueues; extern int MaxResourcePortalsPerXact; extern bool ResourceSelectOnly;