replication quorum support smart mode

smart_quorum
YuQing 2022-08-02 16:22:54 +08:00
parent 2d01d91b87
commit dc9267188d
3 changed files with 11 additions and 4 deletions

View File

@ -159,6 +159,8 @@ int sf_load_replication_quorum_config_ex(SFReplicationQuorum *quorum,
*quorum = sf_replication_quorum_any;
} else if (strncasecmp(str, "majority", 8) == 0) {
*quorum = sf_replication_quorum_majority;
} else if (strncasecmp(str, "smart", 5) == 0) {
*quorum = sf_replication_quorum_smart;
} else {
logError("file: "__FILE__", line: %d, "
"config file: %s, unkown quorum: %s",

View File

@ -137,6 +137,8 @@ static inline const char *sf_get_replication_quorum_caption(
return "any";
case sf_replication_quorum_majority:
return "majority";
case sf_replication_quorum_smart:
return "smart";
default:
return "unknown";
}
@ -156,6 +158,7 @@ static inline bool sf_replication_quorum_check(const SFReplicationQuorum
return true; //same as sf_replication_quorum_any
}
//continue
case sf_replication_quorum_smart:
case sf_replication_quorum_majority:
return SF_REPLICATION_QUORUM_MAJORITY(
server_count, success_count);
@ -183,10 +186,11 @@ static inline bool sf_replication_quorum_check(const SFReplicationQuorum
&& server_count % 2 == 0)
#define SF_REPLICATION_QUORUM_NEED_MAJORITY(quorum, server_count) \
(server_count > 1 && (quorum == sf_replication_quorum_majority || \
(quorum == sf_replication_quorum_auto && \
server_count % 2 == 1)))
(server_count > 1 && (quorum != sf_replication_quorum_any))
#define SF_REPLICATION_QUORUM_NEED_DETECT(quorum, server_count) \
(server_count % 2 == 0 && (quorum == sf_replication_quorum_smart || \
quorum == sf_replication_quorum_auto))
#define SF_NET_RETRY_FINISHED(retry_times, counter, result) \
!((SF_IS_RETRIABLE_ERROR(result) && ((retry_times > 0 && \

View File

@ -247,13 +247,14 @@ typedef struct sf_synchronize_context {
typedef enum sf_election_quorum {
sf_election_quorum_auto,
sf_election_quorum_any,
sf_election_quorum_majority,
sf_election_quorum_majority
} SFElectionQuorum;
typedef enum sf_replication_quorum {
sf_replication_quorum_auto,
sf_replication_quorum_any,
sf_replication_quorum_majority,
sf_replication_quorum_smart
} SFReplicationQuorum;
#endif