diff --git a/src/sf_configs.c b/src/sf_configs.c index eb1b852..825798e 100644 --- a/src/sf_configs.c +++ b/src/sf_configs.c @@ -78,3 +78,24 @@ void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg, net_retry_cfg->network_retry_times, net_retry_cfg->network_retry_interval_ms); } + +void sf_load_read_rule_config(SFDataReadRule *rule, IniFullContext *ini_ctx) +{ + char *read_rule; + read_rule = iniGetStrValue(ini_ctx->section_name, + "read_rule", ini_ctx->context); + if (read_rule == NULL || *read_rule == '\0') { + *rule = sf_data_read_rule_any_available; + } else if (strncasecmp(read_rule, "any", 3)) { + *rule = sf_data_read_rule_any_available; + } else if (strncasecmp(read_rule, "slave", 5)) { + *rule = sf_data_read_rule_slave_first; + } else if (strncasecmp(read_rule, "master", 6)) { + *rule = sf_data_read_rule_master_only; + } else { + logError("file: "__FILE__", line: %d, " + "config file: %s, unkown read_rule: %s, set to any", + __LINE__, ini_ctx->filename, read_rule); + *rule = sf_data_read_rule_any_available; + } +} diff --git a/src/sf_configs.h b/src/sf_configs.h index 9576966..fa68619 100644 --- a/src/sf_configs.h +++ b/src/sf_configs.h @@ -1,7 +1,7 @@ -//sf_global.h +//sf_configs.h -#ifndef _SF_GLOBAL_H -#define _SF_GLOBAL_H +#ifndef _SF_CONFIGS_H +#define _SF_CONFIGS_H #include "fastcommon/common_define.h" #include "fastcommon/ini_file_reader.h" @@ -22,6 +22,12 @@ typedef struct sf_net_retry_config { int network_retry_interval_ms; } SFNetRetryConfig; +typedef enum sf_data_read_rule { + sf_data_read_rule_any_available, + sf_data_read_rule_slave_first, + sf_data_read_rule_master_only, +} SFDataReadRule; + #ifdef __cplusplus extern "C" { #endif @@ -32,6 +38,23 @@ int sf_load_net_retry_config(SFNetRetryConfig *net_retry_cfg, void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg, char *output, const int size); +void sf_load_read_rule_config(SFDataReadRule *rule, IniFullContext *ini_ctx); + +static inline const char *sf_get_read_rule_caption( + const SFDataReadRule read_rule) +{ + switch (read_rule) { + case sf_data_read_rule_any_available: + return "any available"; + case sf_data_read_rule_slave_first: + return "slave first"; + case sf_data_read_rule_master_only: + return "master only"; + default: + return "unknown"; + } +} + #ifdef __cplusplus } #endif