Merge branch 'unstable' into keydbpro
Former-commit-id: 14c24ce161ddcbddb701a20062659261397cb0e4
This commit is contained in:
commit
989799df85
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -15,7 +15,7 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y remove libzstd || true
|
sudo apt-get -y remove libzstd || true
|
||||||
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
|
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
|
||||||
make BUILD_TLS=yes -j2 REDIS_CFLAGS='-Werror'
|
make BUILD_TLS=yes -j2 KEYDB_CFLAGS='-Werror' KEYDB_CXXFLAGS='-Werror'
|
||||||
- name: gen-cert
|
- name: gen-cert
|
||||||
run: ./utils/gen-test-certs.sh
|
run: ./utils/gen-test-certs.sh
|
||||||
- name: test-tls
|
- name: test-tls
|
||||||
|
308
.github/workflows/daily.yml
vendored
308
.github/workflows/daily.yml
vendored
@ -1,308 +0,0 @@
|
|||||||
name: Daily
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
# any PR to a release branch.
|
|
||||||
- '[0-9].[0-9]'
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
test-ubuntu-jemalloc:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST'
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
- name: unittest
|
|
||||||
run: ./src/redis-server test all
|
|
||||||
|
|
||||||
test-ubuntu-libc-malloc:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make MALLOC=libc
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
|
|
||||||
test-ubuntu-no-malloc-usable-size:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make MALLOC=libc CFLAGS=-DNO_MALLOC_USABLE_SIZE
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
|
|
||||||
test-ubuntu-32bit:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
sudo apt-get update && sudo apt-get install libc6-dev-i386
|
|
||||||
make 32bit REDIS_CFLAGS='-Werror -DREDIS_TEST'
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: |
|
|
||||||
make -C tests/modules 32bit # the script below doesn't have an argument, we must build manually ahead of time
|
|
||||||
./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
- name: unittest
|
|
||||||
run: ./src/redis-server test all
|
|
||||||
|
|
||||||
test-ubuntu-tls:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
make BUILD_TLS=yes
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6 tcl-tls
|
|
||||||
./utils/gen-test-certs.sh
|
|
||||||
./runtest --accurate --verbose --tls --dump-logs
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: |
|
|
||||||
./runtest-moduleapi --verbose --tls
|
|
||||||
./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: |
|
|
||||||
./runtest-sentinel --tls
|
|
||||||
./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: |
|
|
||||||
./runtest-cluster --tls
|
|
||||||
./runtest-cluster
|
|
||||||
|
|
||||||
test-ubuntu-io-threads:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
make
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get install tcl8.6 tcl-tls
|
|
||||||
./runtest --config io-threads 4 --config io-threads-do-reads yes --accurate --verbose --tags network --dump-logs
|
|
||||||
- name: cluster tests
|
|
||||||
run: |
|
|
||||||
./runtest-cluster --config io-threads 4 --config io-threads-do-reads yes
|
|
||||||
|
|
||||||
test-valgrind:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make valgrind REDIS_CFLAGS='-Werror -DREDIS_TEST'
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install tcl8.6 valgrind -y
|
|
||||||
./runtest --valgrind --verbose --clients 1 --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --valgrind --no-latency --verbose --clients 1
|
|
||||||
- name: unittest
|
|
||||||
run: |
|
|
||||||
valgrind --track-origins=yes --suppressions=./src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full --log-file=err.txt ./src/redis-server test all
|
|
||||||
if grep -q 0x err.txt; then cat err.txt; exit 1; fi
|
|
||||||
|
|
||||||
test-valgrind-no-malloc-usable-size:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make valgrind CFLAGS="-DNO_MALLOC_USABLE_SIZE"
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install tcl8.6 valgrind -y
|
|
||||||
./runtest --valgrind --verbose --clients 1 --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --valgrind --no-latency --verbose --clients 1
|
|
||||||
|
|
||||||
test-centos7-jemalloc:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
container: centos:7
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
yum -y install gcc make
|
|
||||||
make
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
yum -y install which tcl
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
|
|
||||||
test-centos7-tls:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
container: centos:7
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
yum -y install centos-release-scl epel-release
|
|
||||||
yum -y install devtoolset-7 openssl-devel openssl
|
|
||||||
scl enable devtoolset-7 "make BUILD_TLS=yes"
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
yum -y install tcl tcltls
|
|
||||||
./utils/gen-test-certs.sh
|
|
||||||
./runtest --accurate --verbose --tls --dump-logs
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: |
|
|
||||||
./runtest-moduleapi --verbose --tls
|
|
||||||
./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: |
|
|
||||||
./runtest-sentinel --tls
|
|
||||||
./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: |
|
|
||||||
./runtest-cluster --tls
|
|
||||||
./runtest-cluster
|
|
||||||
|
|
||||||
test-macos-latest:
|
|
||||||
runs-on: macos-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: make
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
./runtest --accurate --verbose --no-latency --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
|
|
||||||
test-freebsd:
|
|
||||||
runs-on: macos-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
timeout-minutes: 14400
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: test
|
|
||||||
uses: vmactions/freebsd-vm@v0.1.2
|
|
||||||
with:
|
|
||||||
usesh: true
|
|
||||||
sync: rsync
|
|
||||||
prepare: pkg install -y bash gmake lang/tcl86
|
|
||||||
run: >
|
|
||||||
gmake &&
|
|
||||||
./runtest --accurate --verbose --no-latency --dump-logs &&
|
|
||||||
MAKE=gmake ./runtest-moduleapi --verbose &&
|
|
||||||
./runtest-sentinel &&
|
|
||||||
./runtest-cluster
|
|
||||||
|
|
||||||
test-alpine-jemalloc:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
container: alpine:latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
apk add build-base
|
|
||||||
make REDIS_CFLAGS='-Werror'
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
apk add tcl procps
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
||||||
|
|
||||||
test-alpine-libc-malloc:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'redis/redis'
|
|
||||||
container: alpine:latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: make
|
|
||||||
run: |
|
|
||||||
apk add build-base
|
|
||||||
make REDIS_CFLAGS='-Werror' USE_JEMALLOC=no CFLAGS=-DUSE_MALLOC_USABLE_SIZE
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
apk add tcl procps
|
|
||||||
./runtest --accurate --verbose --dump-logs
|
|
||||||
- name: module api test
|
|
||||||
run: ./runtest-moduleapi --verbose
|
|
||||||
- name: sentinel tests
|
|
||||||
run: ./runtest-sentinel
|
|
||||||
- name: cluster tests
|
|
||||||
run: ./runtest-cluster
|
|
@ -256,7 +256,10 @@ void setproctitle(const char *fmt, ...);
|
|||||||
#define redis_set_thread_title(name) rename_thread(find_thread(0), name)
|
#define redis_set_thread_title(name) rename_thread(find_thread(0), name)
|
||||||
#else
|
#else
|
||||||
#if (defined __APPLE__ && defined(MAC_OS_X_VERSION_10_7))
|
#if (defined __APPLE__ && defined(MAC_OS_X_VERSION_10_7))
|
||||||
extern "C" int pthread_setname_np(const char *name);
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
int pthread_setname_np(const char *name);
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#define redis_set_thread_title(name) pthread_setname_np(name)
|
#define redis_set_thread_title(name) pthread_setname_np(name)
|
||||||
#else
|
#else
|
||||||
|
@ -304,6 +304,10 @@ uint64_t fastlock_getlongwaitcount()
|
|||||||
|
|
||||||
extern "C" void fastlock_sleep(fastlock *lock, pid_t pid, unsigned wake, unsigned myticket)
|
extern "C" void fastlock_sleep(fastlock *lock, pid_t pid, unsigned wake, unsigned myticket)
|
||||||
{
|
{
|
||||||
|
UNUSED(lock);
|
||||||
|
UNUSED(pid);
|
||||||
|
UNUSED(wake);
|
||||||
|
UNUSED(myticket);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
g_dlock.registerwait(lock, pid);
|
g_dlock.registerwait(lock, pid);
|
||||||
unsigned mask = (1U << (myticket % 32));
|
unsigned mask = (1U << (myticket % 32));
|
||||||
|
@ -93,4 +93,5 @@ struct fastlock
|
|||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
static_assert(offsetof(struct fastlock, m_ticket) == 64, "ensure padding is correct");
|
static_assert(offsetof(struct fastlock, m_ticket) == 64, "ensure padding is correct");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3815,8 +3815,8 @@ void flushSlavesOutputBuffers(void) {
|
|||||||
* In such a case, the duration is set to the maximum and new end time and the
|
* In such a case, the duration is set to the maximum and new end time and the
|
||||||
* type is set to the more restrictive type of pause. */
|
* type is set to the more restrictive type of pause. */
|
||||||
void pauseClients(mstime_t end, pause_type type) {
|
void pauseClients(mstime_t end, pause_type type) {
|
||||||
if (type > serverTL->client_pause_type) {
|
if (type > g_pserver->client_pause_type) {
|
||||||
serverTL->client_pause_type = type;
|
g_pserver->client_pause_type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end > g_pserver->client_pause_end_time) {
|
if (end > g_pserver->client_pause_end_time) {
|
||||||
@ -3839,7 +3839,7 @@ void unpauseClients(void) {
|
|||||||
listIter li;
|
listIter li;
|
||||||
client *c;
|
client *c;
|
||||||
|
|
||||||
serverTL->client_pause_type = CLIENT_PAUSE_OFF;
|
g_pserver->client_pause_type = CLIENT_PAUSE_OFF;
|
||||||
|
|
||||||
/* Unblock all of the clients so they are reprocessed. */
|
/* Unblock all of the clients so they are reprocessed. */
|
||||||
listRewind(g_pserver->paused_clients,&li);
|
listRewind(g_pserver->paused_clients,&li);
|
||||||
@ -3852,7 +3852,7 @@ void unpauseClients(void) {
|
|||||||
|
|
||||||
/* Returns true if clients are paused and false otherwise. */
|
/* Returns true if clients are paused and false otherwise. */
|
||||||
int areClientsPaused(void) {
|
int areClientsPaused(void) {
|
||||||
return serverTL->client_pause_type != CLIENT_PAUSE_OFF;
|
return g_pserver->client_pause_type != CLIENT_PAUSE_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Checks if the current client pause has elapsed and unpause clients
|
/* Checks if the current client pause has elapsed and unpause clients
|
||||||
|
@ -2592,12 +2592,6 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
|
|||||||
* the operation even if completely idle. */
|
* the operation even if completely idle. */
|
||||||
if (g_pserver->tracking_clients) trackingLimitUsedSlots();
|
if (g_pserver->tracking_clients) trackingLimitUsedSlots();
|
||||||
|
|
||||||
/* Resize tracking keys table if needed. This is also done at every
|
|
||||||
* command execution, but we want to be sure that if the last command
|
|
||||||
* executed changes the value via CONFIG SET, the server will perform
|
|
||||||
* the operation even if completely idle. */
|
|
||||||
if (g_pserver->tracking_clients) trackingLimitUsedSlots();
|
|
||||||
|
|
||||||
/* Start a scheduled BGSAVE if the corresponding flag is set. This is
|
/* Start a scheduled BGSAVE if the corresponding flag is set. This is
|
||||||
* useful when we are forced to postpone a BGSAVE because an AOF
|
* useful when we are forced to postpone a BGSAVE because an AOF
|
||||||
* rewrite is in progress.
|
* rewrite is in progress.
|
||||||
@ -2875,7 +2869,8 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
|
|||||||
/* We may have recieved updates from clients about their current offset. NOTE:
|
/* We may have recieved updates from clients about their current offset. NOTE:
|
||||||
* this can't be done where the ACK is recieved since failover will disconnect
|
* this can't be done where the ACK is recieved since failover will disconnect
|
||||||
* our clients. */
|
* our clients. */
|
||||||
updateFailoverStatus();
|
if (iel == IDX_EVENT_LOOP_MAIN)
|
||||||
|
updateFailoverStatus();
|
||||||
|
|
||||||
/* Send the invalidation messages to clients participating to the
|
/* Send the invalidation messages to clients participating to the
|
||||||
* client side caching protocol in broadcasting (BCAST) mode. */
|
* client side caching protocol in broadcasting (BCAST) mode. */
|
||||||
@ -3273,10 +3268,6 @@ void initServerConfig(void) {
|
|||||||
for (j = 0; j < CONFIG_OOM_COUNT; j++)
|
for (j = 0; j < CONFIG_OOM_COUNT; j++)
|
||||||
g_pserver->oom_score_adj_values[j] = configOOMScoreAdjValuesDefaults[j];
|
g_pserver->oom_score_adj_values[j] = configOOMScoreAdjValuesDefaults[j];
|
||||||
|
|
||||||
/* Linux OOM Score config */
|
|
||||||
for (j = 0; j < CONFIG_OOM_COUNT; j++)
|
|
||||||
g_pserver->oom_score_adj_values[j] = configOOMScoreAdjValuesDefaults[j];
|
|
||||||
|
|
||||||
/* Double constants initialization */
|
/* Double constants initialization */
|
||||||
R_Zero = 0.0;
|
R_Zero = 0.0;
|
||||||
R_PosInf = 1.0/R_Zero;
|
R_PosInf = 1.0/R_Zero;
|
||||||
@ -3786,7 +3777,6 @@ static void initServerThread(struct redisServerThreadVars *pvar, int fMain)
|
|||||||
pvar->cclients = 0;
|
pvar->cclients = 0;
|
||||||
pvar->in_eval = 0;
|
pvar->in_eval = 0;
|
||||||
pvar->in_exec = 0;
|
pvar->in_exec = 0;
|
||||||
pvar->client_pause_type = CLIENT_PAUSE_OFF;
|
|
||||||
pvar->el = aeCreateEventLoop(g_pserver->maxclients+CONFIG_FDSET_INCR);
|
pvar->el = aeCreateEventLoop(g_pserver->maxclients+CONFIG_FDSET_INCR);
|
||||||
aeSetBeforeSleepProc(pvar->el, beforeSleep, AE_SLEEP_THREADSAFE);
|
aeSetBeforeSleepProc(pvar->el, beforeSleep, AE_SLEEP_THREADSAFE);
|
||||||
aeSetAfterSleepProc(pvar->el, afterSleep, AE_SLEEP_THREADSAFE);
|
aeSetAfterSleepProc(pvar->el, afterSleep, AE_SLEEP_THREADSAFE);
|
||||||
@ -3877,6 +3867,7 @@ void initServer(void) {
|
|||||||
g_pserver->replication_allowed = 1;
|
g_pserver->replication_allowed = 1;
|
||||||
g_pserver->blocking_op_nesting = 0;
|
g_pserver->blocking_op_nesting = 0;
|
||||||
g_pserver->rdb_pipe_read = -1;
|
g_pserver->rdb_pipe_read = -1;
|
||||||
|
g_pserver->client_pause_type = CLIENT_PAUSE_OFF;
|
||||||
|
|
||||||
|
|
||||||
if ((g_pserver->tls_port || g_pserver->tls_replication || g_pserver->tls_cluster)
|
if ((g_pserver->tls_port || g_pserver->tls_replication || g_pserver->tls_cluster)
|
||||||
@ -4903,8 +4894,8 @@ int processCommand(client *c, int callFlags) {
|
|||||||
/* If the server is paused, block the client until
|
/* If the server is paused, block the client until
|
||||||
* the pause has ended. Replicas are never paused. */
|
* the pause has ended. Replicas are never paused. */
|
||||||
if (!(c->flags & CLIENT_SLAVE) &&
|
if (!(c->flags & CLIENT_SLAVE) &&
|
||||||
((serverTL->client_pause_type == CLIENT_PAUSE_ALL) ||
|
((g_pserver->client_pause_type == CLIENT_PAUSE_ALL) ||
|
||||||
(serverTL->client_pause_type == CLIENT_PAUSE_WRITE && is_may_replicate_command)))
|
(g_pserver->client_pause_type == CLIENT_PAUSE_WRITE && is_may_replicate_command)))
|
||||||
{
|
{
|
||||||
c->bpop.timeout = 0;
|
c->bpop.timeout = 0;
|
||||||
blockClient(c,BLOCKED_PAUSE);
|
blockClient(c,BLOCKED_PAUSE);
|
||||||
|
@ -1992,7 +1992,6 @@ struct redisServerThreadVars {
|
|||||||
aeEventLoop *el;
|
aeEventLoop *el;
|
||||||
socketFds ipfd; /* TCP socket file descriptors */
|
socketFds ipfd; /* TCP socket file descriptors */
|
||||||
socketFds tlsfd; /* TLS socket file descriptors */
|
socketFds tlsfd; /* TLS socket file descriptors */
|
||||||
pause_type client_pause_type; /* True if clients are currently paused */
|
|
||||||
int in_eval; /* Are we inside EVAL? */
|
int in_eval; /* Are we inside EVAL? */
|
||||||
int in_exec; /* Are we inside EXEC? */
|
int in_exec; /* Are we inside EXEC? */
|
||||||
std::vector<client*> clients_pending_write; /* There is to write or install handler. */
|
std::vector<client*> clients_pending_write; /* There is to write or install handler. */
|
||||||
@ -2148,6 +2147,7 @@ struct redisServer {
|
|||||||
int propagate_in_transaction; /* Make sure we don't propagate nested MULTI/EXEC */
|
int propagate_in_transaction; /* Make sure we don't propagate nested MULTI/EXEC */
|
||||||
char *ignore_warnings; /* Config: warnings that should be ignored. */
|
char *ignore_warnings; /* Config: warnings that should be ignored. */
|
||||||
int client_pause_in_transaction; /* Was a client pause executed during this Exec? */
|
int client_pause_in_transaction; /* Was a client pause executed during this Exec? */
|
||||||
|
pause_type client_pause_type; /* True if clients are currently paused */
|
||||||
/* Modules */
|
/* Modules */
|
||||||
::dict *moduleapi; /* Exported core APIs dictionary for modules. */
|
::dict *moduleapi; /* Exported core APIs dictionary for modules. */
|
||||||
::dict *sharedapi; /* Like moduleapi but containing the APIs that
|
::dict *sharedapi; /* Like moduleapi but containing the APIs that
|
||||||
|
@ -279,6 +279,7 @@ start_server {} {
|
|||||||
assert_match *slave* [$node_2 role]
|
assert_match *slave* [$node_2 role]
|
||||||
|
|
||||||
# We will cycle all of our replicas here and force a psync.
|
# We will cycle all of our replicas here and force a psync.
|
||||||
|
after 100
|
||||||
assert_equal [expr [s 0 sync_partial_ok] - $initial_psyncs] 2
|
assert_equal [expr [s 0 sync_partial_ok] - $initial_psyncs] 2
|
||||||
assert_equal [expr [s 0 sync_full] - $initial_syncs] 0
|
assert_equal [expr [s 0 sync_full] - $initial_syncs] 0
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user