add function sf_load_quorum_config

recovery_and_balance
YuQing 2022-03-30 21:22:34 +08:00
parent b4aaf69962
commit de943f684a
3 changed files with 55 additions and 5 deletions

View File

@ -94,13 +94,14 @@ void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg,
net_retry_cfg->network.interval_ms); 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) IniFullContext *ini_ctx, const SFDataReadRule def_rule)
{ {
char *read_rule; char *read_rule;
read_rule = iniGetStrValueEx(ini_ctx->section_name, read_rule = iniGetStrValueEx(ini_ctx->section_name,
"read_rule", ini_ctx->context, true); "read_rule", ini_ctx->context, true);
if (read_rule == NULL || *read_rule == '\0') { if (read_rule == NULL) {
*rule = def_rule; *rule = def_rule;
} else if (strncasecmp(read_rule, "any", 3) == 0) { } else if (strncasecmp(read_rule, "any", 3) == 0) {
*rule = sf_data_read_rule_any_available; *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; *rule = sf_data_read_rule_master_only;
} else { } else {
logError("file: "__FILE__", line: %d, " 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); __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;
} }

View File

@ -67,7 +67,7 @@ static inline int sf_calc_next_retry_interval(SFNetRetryIntervalContext *ctx)
return ctx->interval_ms; 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); IniFullContext *ini_ctx, const SFDataReadRule def_rule);
static inline const char *sf_get_read_rule_caption( 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) \ #define sf_load_read_rule_config(rule, ini_ctx) \
sf_load_read_rule_config_ex(rule, ini_ctx, sf_data_read_rule_master_only) 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) \ #define SF_NET_RETRY_FINISHED(retry_times, counter, result) \
!((SF_IS_RETRIABLE_ERROR(result) && ((retry_times > 0 && \ !((SF_IS_RETRIABLE_ERROR(result) && ((retry_times > 0 && \
counter <= retry_times) || (retry_times < 0)))) counter <= retry_times) || (retry_times < 0))))

View File

@ -244,4 +244,9 @@ typedef struct sf_synchronize_context {
}; };
} SFSynchronizeContext; } SFSynchronizeContext;
typedef enum sf_election_quorum {
sf_election_quorum_any = 1,
sf_election_quorum_majority
} SFElectionQuorum;
#endif #endif