Compare commits

...
Author SHA1 Message Date
John Sully c801414b40 Perf: remove mfence 2020-10-04 03:15:18 +00:00
John Sully f4c317d285 Initial implementation of replication-db-disable config 2020-10-03 23:57:35 +00:00
5 changed files with 85 additions and 1 deletions

No files matched your search

+75
View File
@@ -35,6 +35,7 @@
#include <sys/stat.h>
const char *KEYDB_SET_VERSION = KEYDB_REAL_VERSION;
char *replicateDbDisableString = nullptr; // The raw string the user provided so we can rewrite the same way
/*-----------------------------------------------------------------------------
* Config file name-value maps.
@@ -2192,6 +2193,79 @@ static int isValidAOFfilename(char *val, const char **err) {
return 1;
}
static int updateDbDisable(char *val, const char **err) {
cserver.setDbReplicateDisable.clear();
serverLog(LL_WARNING, "UPDATE");
if (val == nullptr)
return 1;
char *pchCur = val;
char *pchStart = val;
int dbStart = -1;
for (;;) {
char *endptr;
switch (*pchCur)
{
case '-':
if (pchStart < pchCur && dbStart < 0) {
errno = 0;
dbStart = strtol(pchStart, &endptr, 10);
if (errno || endptr != pchCur || dbStart < 0) {
*err = "Invalid database in list";
return 0;
}
} else {
*err = "Invalid database range in list";
return 0;
}
pchStart = pchCur + 1;
break;
case ' ':
case '\0':
if (pchStart < pchCur) {
errno = 0;
int db = strtol(pchStart, &endptr, 10);
if (errno || endptr != pchCur || db < 0) {
*err = "Invalid database in list";
return 0;
}
if (dbStart < 0)
dbStart = db;
for (;dbStart <= db; ++dbStart) {
if (cserver.setDbReplicateDisable.find(dbStart) == cserver.setDbReplicateDisable.end()) {
cserver.setDbReplicateDisable.insert(dbStart);
}
}
dbStart = -1;
}
pchStart = pchCur + 1;
break;
}
if (*pchCur == '\0')
break;
++pchCur;
}
if (dbStart >= 0) {
*err = "Incomplete database range";
return 0;
}
// Display the disabled databases in the log (sorted ascending)
std::vector<int> vecdb;
for (int db : cserver.setDbReplicateDisable) {
vecdb.push_back(db);
}
std::sort(vecdb.begin(), vecdb.end());
for (int db : vecdb) {
serverLog(LL_WARNING, "Replicate disabled for DB: %d", db);
}
return 1;
}
static int updateHZ(long long val, long long prev, const char **err) {
UNUSED(prev);
UNUSED(err);
@@ -2394,6 +2468,7 @@ standardConfig configs[] = {
createStringConfig("bio_cpulist", NULL, IMMUTABLE_CONFIG, EMPTY_STRING_IS_NULL, g_pserver->bio_cpulist, NULL, NULL, NULL),
createStringConfig("aof_rewrite_cpulist", NULL, IMMUTABLE_CONFIG, EMPTY_STRING_IS_NULL, g_pserver->aof_rewrite_cpulist, NULL, NULL, NULL),
createStringConfig("bgsave_cpulist", NULL, IMMUTABLE_CONFIG, EMPTY_STRING_IS_NULL, g_pserver->bgsave_cpulist, NULL, NULL, NULL),
createStringConfig("replicate-db-disable", NULL, IMMUTABLE_CONFIG, EMPTY_STRING_IS_NULL, replicateDbDisableString, nullptr, updateDbDisable, nullptr),
/* Enum Configs */
createEnumConfig("supervised", NULL, IMMUTABLE_CONFIG, supervised_mode_enum, cserver.supervised_mode, SUPERVISED_NONE, NULL, NULL),
+1 -1
View File
@@ -2496,7 +2496,7 @@ void readQueryFromClient(connection *conn) {
sdsIncrLen(c->querybuf,nread);
c->lastinteraction = g_pserver->unixtime;
if (c->flags & CLIENT_MASTER) c->read_reploff += nread;
g_pserver->stat_net_input_bytes += nread;
g_pserver->stat_net_input_bytes.fetch_add(nread, std::memory_order_relaxed);
if (sdslen(c->querybuf) > cserver.client_max_querybuf_len) {
sds ci = catClientInfoString(sdsempty(),c), bytes = sdsempty();
+5
View File
@@ -377,6 +377,11 @@ void replicationFeedSlaves(list *slaves, int dictid, robj **argv, int argc) {
serverAssert(GlobalLocksAcquired());
static client *fake = nullptr;
if (cserver.setDbReplicateDisable.find(dictid) != cserver.setDbReplicateDisable.end()) {
if (strcasecmp(szFromObj(argv[0]), "ping") != 0)
return;
}
if (dictid < 0)
dictid = 0; // this can happen if we send a PING before any real operation
+3
View File
@@ -57,6 +57,7 @@
#include <map>
#include <string>
#include <mutex>
#include <unordered_set>
#ifdef __cplusplus
extern "C" {
#include <lua.h>
@@ -1457,6 +1458,8 @@ struct redisServerConst {
bool fUsePro = false;
int thread_min_client_threshold = 50;
int multimaster_no_forward;
std::unordered_set<int> setDbReplicateDisable;
};
struct redisServer {
+1
View File
@@ -91,6 +91,7 @@ start_server {tags {"introspection"}} {
aof_rewrite_cpulist
bgsave_cpulist
active-replica
replicate-db-disable
}
if {!$::tls} {