From de943f684ad5a43b78e19f51973316a4b84f80ae Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Wed, 30 Mar 2022 21:22:34 +0800 Subject: [PATCH] add function sf_load_quorum_config --- src/sf_configs.c | 34 ++++++++++++++++++++++++++++++---- src/sf_configs.h | 21 ++++++++++++++++++++- src/sf_types.h | 5 +++++ 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/sf_configs.c b/src/sf_configs.c index 20f4cce..dce8439 100644 --- a/src/sf_configs.c +++ b/src/sf_configs.c @@ -94,13 +94,14 @@ void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg, net_retry_cfg->network.interval_ms); } -void sf_load_read_rule_config_ex(SFDataReadRule *rule, +int sf_load_read_rule_config_ex(SFDataReadRule *rule, IniFullContext *ini_ctx, const SFDataReadRule def_rule) { char *read_rule; + read_rule = iniGetStrValueEx(ini_ctx->section_name, "read_rule", ini_ctx->context, true); - if (read_rule == NULL || *read_rule == '\0') { + if (read_rule == NULL) { *rule = def_rule; } else if (strncasecmp(read_rule, "any", 3) == 0) { *rule = sf_data_read_rule_any_available; @@ -110,8 +111,33 @@ void sf_load_read_rule_config_ex(SFDataReadRule *rule, *rule = sf_data_read_rule_master_only; } else { logError("file: "__FILE__", line: %d, " - "config file: %s, unkown read_rule: %s, set to any", + "config file: %s, unkown read_rule: %s", __LINE__, ini_ctx->filename, read_rule); - *rule = sf_data_read_rule_any_available; + return EINVAL; } + + return 0; +} + +int sf_load_quorum_config_ex(SFElectionQuorum *quorum, + IniFullContext *ini_ctx, const SFElectionQuorum def_quorum) +{ + char *str; + + str = iniGetStrValue(ini_ctx->section_name, + "quorum", ini_ctx->context); + if (str == NULL) { + *quorum = def_quorum; + } else if (strncasecmp(str, "any", 3) == 0) { + *quorum = sf_election_quorum_any; + } else if (strncasecmp(str, "majority", 8) == 0) { + *quorum = sf_election_quorum_majority; + } else { + logError("file: "__FILE__", line: %d, " + "config file: %s, unkown quorum: %s", + __LINE__, ini_ctx->filename, str); + return EINVAL; + } + + return 0; } diff --git a/src/sf_configs.h b/src/sf_configs.h index 76ac295..b8887ac 100644 --- a/src/sf_configs.h +++ b/src/sf_configs.h @@ -67,7 +67,7 @@ static inline int sf_calc_next_retry_interval(SFNetRetryIntervalContext *ctx) return ctx->interval_ms; } -void sf_load_read_rule_config_ex(SFDataReadRule *rule, +int sf_load_read_rule_config_ex(SFDataReadRule *rule, IniFullContext *ini_ctx, const SFDataReadRule def_rule); static inline const char *sf_get_read_rule_caption( @@ -85,9 +85,28 @@ static inline const char *sf_get_read_rule_caption( } } +int sf_load_quorum_config_ex(SFElectionQuorum *quorum, + IniFullContext *ini_ctx, const SFElectionQuorum def_quorum); + +static inline const char *sf_get_quorum_caption( + const SFElectionQuorum quorum) +{ + switch (quorum) { + case sf_election_quorum_any: + return "any"; + case sf_election_quorum_majority: + return "majority"; + default: + return "unknown"; + } +} + #define sf_load_read_rule_config(rule, ini_ctx) \ sf_load_read_rule_config_ex(rule, ini_ctx, sf_data_read_rule_master_only) +#define sf_load_quorum_config(quorum, ini_ctx) \ + sf_load_quorum_config_ex(quorum, ini_ctx, sf_election_quorum_majority) + #define SF_NET_RETRY_FINISHED(retry_times, counter, result) \ !((SF_IS_RETRIABLE_ERROR(result) && ((retry_times > 0 && \ counter <= retry_times) || (retry_times < 0)))) diff --git a/src/sf_types.h b/src/sf_types.h index 9b935c5..ec3f3ba 100644 --- a/src/sf_types.h +++ b/src/sf_types.h @@ -244,4 +244,9 @@ typedef struct sf_synchronize_context { }; } SFSynchronizeContext; +typedef enum sf_election_quorum { + sf_election_quorum_any = 1, + sf_election_quorum_majority +} SFElectionQuorum; + #endif