* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ---------------------------------------------------------------------------------------
*
* dywlm_server.h
* definitions for parallel control functions
*
*
* IDENTIFICATION
* src/include/workload/dywlm_server.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef DYWLM_SERVER1_H
#define DYWLM_SERVER1_H
#define UPDATE_FREQUENCY 3
#define COMP_ACC_CLUSTER \
g_instance.attr.attr_sql.enable_acceleration_cluster_wlm
typedef struct ServerDynamicManager {
int totalsize;
int freesize;
int freesize_inc;
int freesize_update;
int freesize_limit;
int rp_memsize;
int active_count;
int statement_quota;
bool recover;
bool try_wakeup;
char* group_name;
List* global_waiting_list;
HTAB* global_info_hashtbl;
ClientDynamicManager* climgr;
pthread_mutex_t global_list_mutex;
} ServerDynamicManager;
struct DynamicNodeData {
char host[NAMEDATALEN];
Oid* group_members;
int group_count;
int used_memory;
int total_memory;
int estimate_memory;
int phy_totalmem;
int phy_freemem;
int phy_usemem_rate;
int fp_memsize;
int fp_usedsize;
int fp_estmsize;
int fp_mempct;
int cpu_util;
int cpu_count;
int io_util;
int min_freesize;
int min_memutil;
int max_memutil;
int min_cpuutil;
int max_cpuutil;
int min_ioutil;
int max_ioutil;
HTAB* nodedata_htab;
};
extern Oid dywlm_get_node_id(Oid procid);
extern void dywlm_server_receive(StringInfo msg);
extern EnqueueType dywlm_server_reserve(ServerDynamicManager*, DynamicMessageInfo* msginfo);
extern EnqueueType dywlm_server_release(ServerDynamicManager*, const DynamicMessageInfo* msginfo);
extern EnqueueType dywlm_server_cancel(ServerDynamicManager*, DynamicMessageInfo* msginfo);
extern void dywlm_server_clean(const char* nodename);
extern EnqueueType dywlm_server_clean_internal(ServerDynamicManager*, const char* nodename);
extern EnqueueType dywlm_server_move_node_to_list(ServerDynamicManager*, const DynamicMessageInfo* msginfo);
extern EnqueueType dywlm_server_jump_queue(ServerDynamicManager*, const DynamicMessageInfo* msginfo);
extern void dywlm_node_recover(bool isForce);
extern DynamicWorkloadRecord* dywlm_server_get_records(ServerDynamicManager*, const char* nodename, int* num);
extern void dywlm_server_collector(void);
extern void dywlm_server_sync_records(void);
extern DynamicNodeData* dywlm_get_resource_info(ServerDynamicManager* srvmgr);
extern void dywlm_server_check_resource_pool(void);
extern void dywlm_server_get_respool_params(const char* rpname, int* running_count, int* waiting_count);
extern void dywlm_server_display_srvmgr_info(StringInfo strinfo);
extern void dywlm_server_display_respool_info(StringInfo strinfo);
#endif