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; *quorum = sf_replication_quorum_any;
} else if (strncasecmp(str, "majority", 8) == 0) { } else if (strncasecmp(str, "majority", 8) == 0) {
*quorum = sf_replication_quorum_majority; *quorum = sf_replication_quorum_majority;
} else if (strncasecmp(str, "smart", 5) == 0) {
*quorum = sf_replication_quorum_smart;
} else { } else {
logError("file: "__FILE__", line: %d, " logError("file: "__FILE__", line: %d, "
"config file: %s, unkown quorum: %s", "config file: %s, unkown quorum: %s",

View File

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

View File

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