Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
1e16b938
Commit
1e16b938
authored
Mar 20, 2020
by
antirez
Browse files
Merge branch 'unstable' of github.com:/antirez/redis into unstable
parents
5497a440
c1295bb9
Changes
6
Hide whitespace changes
Inline
Side-by-side
redis.conf
View file @
1e16b938
...
@@ -1628,7 +1628,7 @@ hz 10
...
@@ -1628,7 +1628,7 @@ hz 10
# offers, and enables by default, the ability to use an adaptive HZ value
# offers, and enables by default, the ability to use an adaptive HZ value
# which will temporary raise when there are many connected clients.
# which will temporary raise when there are many connected clients.
#
#
# When dynamic HZ is enabled, the actual configured HZ will be used
as
# When dynamic HZ is enabled, the actual configured HZ will be used
# as a baseline, but multiples of the configured HZ value will be actually
# as a baseline, but multiples of the configured HZ value will be actually
# used as needed once more clients are connected. In this way an idle
# used as needed once more clients are connected. In this way an idle
# instance will use very little CPU time while a busy instance will be
# instance will use very little CPU time while a busy instance will be
...
...
src/rdb.c
View file @
1e16b938
...
@@ -2231,7 +2231,7 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
...
@@ -2231,7 +2231,7 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
* received from the master. In the latter case, the master is
* received from the master. In the latter case, the master is
* responsible for key expiry. If we would expire keys here, the
* responsible for key expiry. If we would expire keys here, the
* snapshot taken by the master may not be reflected on the slave. */
* snapshot taken by the master may not be reflected on the slave. */
if
(
server
.
masterhost
==
NULL
&&
!
(
rdbflags
&
RDBFLAGS_AOF_PREAMBLE
)
&&
expiretime
!=
-
1
&&
expiretime
<
now
)
{
if
(
iAmMaster
()
&&
!
(
rdbflags
&
RDBFLAGS_AOF_PREAMBLE
)
&&
expiretime
!=
-
1
&&
expiretime
<
now
)
{
decrRefCount
(
key
);
decrRefCount
(
key
);
decrRefCount
(
val
);
decrRefCount
(
val
);
}
else
{
}
else
{
...
...
src/redis-cli.c
View file @
1e16b938
...
@@ -1292,7 +1292,11 @@ static int cliSendCommand(int argc, char **argv, long repeat) {
...
@@ -1292,7 +1292,11 @@ static int cliSendCommand(int argc, char **argv, long repeat) {
(
argc
==
3
&&
!
strcasecmp
(
command
,
"latency"
)
&&
(
argc
==
3
&&
!
strcasecmp
(
command
,
"latency"
)
&&
!
strcasecmp
(
argv
[
1
],
"graph"
))
||
!
strcasecmp
(
argv
[
1
],
"graph"
))
||
(
argc
==
2
&&
!
strcasecmp
(
command
,
"latency"
)
&&
(
argc
==
2
&&
!
strcasecmp
(
command
,
"latency"
)
&&
!
strcasecmp
(
argv
[
1
],
"doctor"
)))
!
strcasecmp
(
argv
[
1
],
"doctor"
))
||
/* Format PROXY INFO command for Redis Cluster Proxy:
* https://github.com/artix75/redis-cluster-proxy */
(
argc
>=
2
&&
!
strcasecmp
(
command
,
"proxy"
)
&&
!
strcasecmp
(
argv
[
1
],
"info"
)))
{
{
output_raw
=
1
;
output_raw
=
1
;
}
}
...
...
src/server.c
View file @
1e16b938
...
@@ -1691,7 +1691,7 @@ void databasesCron(void) {
...
@@ -1691,7 +1691,7 @@ void databasesCron(void) {
/* Expire keys by random sampling. Not required for slaves
/* Expire keys by random sampling. Not required for slaves
* as master will synthesize DELs for us. */
* as master will synthesize DELs for us. */
if
(
server
.
active_expire_enabled
)
{
if
(
server
.
active_expire_enabled
)
{
if
(
server
.
masterhost
==
NULL
)
{
if
(
iAmMaster
()
)
{
activeExpireCycle
(
ACTIVE_EXPIRE_CYCLE_SLOW
);
activeExpireCycle
(
ACTIVE_EXPIRE_CYCLE_SLOW
);
}
else
{
}
else
{
expireSlaveKeys
();
expireSlaveKeys
();
...
@@ -4863,6 +4863,11 @@ int redisIsSupervised(int mode) {
...
@@ -4863,6 +4863,11 @@ int redisIsSupervised(int mode) {
return
0
;
return
0
;
}
}
int
iAmMaster
(
void
)
{
return
((
!
server
.
cluster_enabled
&&
server
.
masterhost
==
NULL
)
||
(
server
.
cluster_enabled
&&
nodeIsMaster
(
server
.
cluster
->
myself
)));
}
int
main
(
int
argc
,
char
**
argv
)
{
int
main
(
int
argc
,
char
**
argv
)
{
struct
timeval
tv
;
struct
timeval
tv
;
...
...
src/server.h
View file @
1e16b938
...
@@ -2393,4 +2393,6 @@ int tlsConfigure(redisTLSContextConfig *ctx_config);
...
@@ -2393,4 +2393,6 @@ int tlsConfigure(redisTLSContextConfig *ctx_config);
#define redisDebugMark() \
#define redisDebugMark() \
printf("-- MARK %s:%d --\n", __FILE__, __LINE__)
printf("-- MARK %s:%d --\n", __FILE__, __LINE__)
int
iAmMaster
(
void
);
#endif
#endif
tests/cluster/tests/14-consistency-check.tcl
0 → 100644
View file @
1e16b938
source
"../tests/includes/init-tests.tcl"
test
"Create a 5 nodes cluster"
{
create_cluster 5 5
}
test
"Cluster should start ok"
{
assert_cluster_state ok
}
test
"Cluster is writable"
{
cluster_write_test 0
}
proc find_non_empty_master
{}
{
set master_id_no
{}
foreach_redis_id id
{
if
{[
RI $id role
]
eq
{
master
}
&&
[
R $id dbsize
]
> 0
}
{
set master_id_no $id
}
}
return $master_id_no
}
proc get_one_of_my_replica
{
id
}
{
set replica_port
[
lindex
[
lindex
[
lindex
[
R $id role
]
2
]
0
]
1
]
set replica_id_num
[
get_instance_id_by_port redis $replica_port
]
return $replica_id_num
}
proc cluster_write_keys_with_expire
{
id ttl
}
{
set prefix
[
randstring 20 20 alpha
]
set port
[
get_instance_attrib redis $id port
]
set cluster
[
redis_cluster 127.0.0.1:$port
]
for
{
set j 100
}
{
$j
< 200
}
{
incr j
}
{
$cluster setex key_expire.$j $ttl $prefix.$j
}
$cluster close
}
proc test_slave_load_expired_keys
{
aof
}
{
test
"Slave expired keys is loaded when restarted: appendonly=
$aof
"
{
set master_id
[
find_non_empty_master
]
set replica_id
[
get_one_of_my_replica $master_id
]
set master_dbsize
[
R $master_id dbsize
]
set slave_dbsize
[
R $replica_id dbsize
]
assert_equal $master_dbsize $slave_dbsize
set data_ttl 5
cluster_write_keys_with_expire $master_id $data_ttl
after 100
set replica_dbsize_1
[
R $replica_id dbsize
]
assert
{
$replica
_dbsize_1 > $slave_dbsize
}
R $replica_id config set appendonly $aof
R $replica_id config rewrite
set start_time
[
clock seconds
]
set end_time
[
expr $start_time+$data_ttl+2
]
R $replica_id save
set replica_dbsize_2
[
R $replica_id dbsize
]
assert
{
$replica
_dbsize_2 > $slave_dbsize
}
kill_instance redis $replica_id
set master_port
[
get_instance_attrib redis $master_id port
]
exec ../../../src/redis-cli -h 127.0.0.1 -p $master_port debug sleep
[
expr $data_ttl+3
]
> /dev/null &
while
{[
clock seconds
]
<= $end_time
}
{
#wait for $data_ttl seconds
}
restart_instance redis $replica_id
wait_for_condition 200 50
{
[
R $replica_id ping
]
eq
{
PONG
}
}
else
{
fail
"replica #
$replica
_id not started"
}
set replica_dbsize_3
[
R $replica_id dbsize
]
assert
{
$replica
_dbsize_3 > $slave_dbsize
}
}
}
test_slave_load_expired_keys no
after 5000
test_slave_load_expired_keys yes
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment