12492 Commits

Author SHA1 Message Date
John Sully
c3ef2f00bb Active replica test reliability enhancements
Former-commit-id: 444555d3e4ec6e9469dae847dc631f2be263fb5e
2020-10-27 06:23:14 +00:00
WuYunlong
2184dffaf3 Speedup cluster failover. (#7948)
This commit deals with manual failover as well as non-manual failover.

We did tests with manual failover as follows:
1, Setup redis cluster which holds 16 partions, each having only
   1 corresponding replica.
2, Write a batch of data to redis cluster and make sure the redis is doing
   a active expire in serverCron.
3, Do a manual failover sequentially to each partions with a time interval
   of 3 minutes.
4, Collect logs and do some computaiton work.

The result:
case    avgTime    maxTime    minTime
C1      95.8ms	   227ms      25ms
C2      47.9ms     96ms       12ms
C3      12.6ms     27ms       7ms

Explanation
case C1: All nodes use the version before optimization
case C2: Masters use the elder version while replicas use the optimized version
case C3: All nodes use the optimized version
failover time: The time between when replica got a `manual failover request` and
               when it `won the failover election`.
avgTime: average failover time
maxTime: maximum failover time
minTime: mimimum failover time
ms: millisecond

Co-authored-by: chendq8 <c.d_q@163.com>
2020-10-27 08:13:59 +02:00
John Sully
2ae013910b Prevent crashes on shutdown due to lock being held
Former-commit-id: 6a74f524e558100dfb3e54779020cd3407706e08
2020-10-27 04:53:19 +00:00
John Sully
366ef70f6e Ensure MVCC timestamp is incremented after the real time is updated
Former-commit-id: 9c5b59ac010fa1e948d5e51d1cd408c7e743d66d
2020-10-27 04:52:35 +00:00
Madelyn Olson
b9a519190d Only supress implitic fallthrough on GCC 7 2020-10-26 21:46:50 -07:00
Madelyn Olson
a70126168b Update CI so that warnings cause build failures 2020-10-26 21:46:50 -07:00
John Sully
a3323d2b5b Fix multithreaded test failure
Former-commit-id: 1840601f8efb27174efa0a66f78de8c490b5bba4
2020-10-27 01:54:13 +00:00
Yossi Gottlieb
05a086617d Fix wrong zmalloc_size() assumption. (#7963)
When using a system with no malloc_usable_size(), zmalloc_size() assumed
that the heap allocator always returns blocks that are long-padded.

This may not always be the case, and will result with zmalloc_size()
returning a size that is bigger than allocated. At least in one case
this leads to out of bound write, process crash and a potential security
vulnerability.

Effectively this does not affect the vast majority of users, who use
jemalloc or glibc.

This problem along with a (different) fix was reported by Drew DeVault.
2020-10-26 14:49:08 +02:00
Oran Agra
35eb8ec6f3 Attempt to fix sporadic test failures due to wait_for_log_messages (#7955)
The tests sometimes fail to find a log message.
Recently i added a print that shows the log files that are searched
and it shows that the message was in deed there.
The only reason i can't think of for this seach to fail, is we we
happened to read an incomplete line, which didn't match our pattern and
then on the next iteration we would continue reading from the line after
it.

The fix is to always re-evaluation the previous line.
2020-10-26 11:55:24 +02:00
filipe oliveira
f307c73ea6 redis-benchmark: add tests, --version, a minor bug fixes (#7947)
- add test suite coverage for redis-benchmark
- add --version (similar to what redis-cli has)
- fix bug sending more requests than intended when pipeline > 1.
- when done sending requests, avoid freeing client in the write handler, in theory before
  responses are received (probably dead code since the read handler will call clientDone first)

Co-authored-by: Oran Agra <oran@redislabs.com>
2020-10-26 08:04:59 +02:00
John Sully
418b6206ea Avoid unnecessary memory fences
Former-commit-id: 88962af8b2fe835fb5d542013062cec8c771c6c6
2020-10-26 02:28:38 +00:00
Itamar Haber
79594252e5 Adds command introspection to Sentinel (#7940)
Adds the `COMMAND` command to Sentinel.
2020-10-26 00:37:58 +02:00
David CARLIER
c1ff07dfbb cpu affinity: DragonFlyBSD support (#7956) 2020-10-25 14:14:05 +02:00
Zach Fewtrell
0a0ec83e48 fix invalid 'failover' identifier in cluster slave selection test (#7942) 2020-10-25 10:05:38 +02:00
John Sully
19a4d2d358 Remove addReply*Async methods since we already know if its async or not. This is just a source of bugs
Former-commit-id: df22cdf6e91a1b9c390b69c4209c719ecf1e44f1
2020-10-24 02:18:03 +00:00
John Sully
7a9fbad132 Allow the locker to be used even without a client
Former-commit-id: 041446005b03121adf7ac061bd0fd2ec70d9418e
2020-10-23 20:21:49 +00:00
John Sully
0691608ba0 Fix multithread test failures
Former-commit-id: 7c39a9b0e193f5c0b327ff21cd49210037142642
2020-10-23 15:57:39 +00:00
WuYunlong
51f36283df Update rdb_last_bgsave_time_sec in INFO on diskless replication (#7917)
`info Persistence` will include correct (updated) rdb_last_bgsave_time_sec
For diskless bgsave (sockets) too (like a few other persistence info fields).

Refactor code to reduce duplicate code.
2020-10-23 15:26:30 +03:00
Wen Hui
f61435fe8b do not add save parameter during config rewrite in sentinel mode (#7945)
Previous code would have added default redis save parameters
to the config file on rewrite, which would have been silently ignored
when the config file is loaded.

The new code avoids adding this, and also actively removes these lines
If added by a previous config rewrite.
2020-10-22 19:47:32 +03:00
Qu Chen
44bcbed2ee WATCH no longer ignores keys which have expired for MULTI/EXEC. (#7920)
This wrong behavior was backed by a test, and also documentation, and dates back to 2010.
But it makes no sense to anyone involved so it was decided to change that.

Note that 3b031b1 (invalidate watch on expire on access) was released in 6.0 RC2
and 62a3ec8 released in in 6.0.0 GA (invalidate watch when key is evicted).
both of which do similar changes.
2020-10-22 12:57:45 +03:00
Oran Agra
33c59266cc improve verbose logging on failed test. print log file lines (#7938) 2020-10-22 11:34:54 +03:00
Yossi Gottlieb
be43c030df Add a --no-latency tests flag. (#7939)
Useful for running tests on systems which may be way slower than usual.
2020-10-22 11:10:53 +03:00
John Sully
5fb0c880a8 Remove leak warning with ASAN in the CLI
Former-commit-id: 05cd92f7661ba1a96cdcac278720b7da0b6ba60e
2020-10-21 21:16:08 +00:00
filipe oliveira
128bc0f495 Fixed bug concerning redis-benchmark non clustered benchmark forcing always the same hash tag {tag} (#7931)
Adding the ":{tag}" only if --cluster is used, so that when used against
a proxy it generates traffic to all shards.

Co-authored-by: Oran Agra <oran@redislabs.com>
2020-10-20 19:52:05 +03:00
Oran Agra
cc231e4882 fix 32bit build warnings (#7926) 2020-10-20 09:12:24 +03:00
Wen Hui
ee8cb472a7 fix double fclose in aofrewrite (#7919)
minor fix for a bug which happen on error handling code
and doesn't look like it could have caused any real harm
(fd number wouldn't have been reused yet)
2020-10-19 15:32:18 +03:00
Wen Hui
4db692c059 Support ACL for Sentinel Mode (#7888)
This commit implements ACL for Sentinel mode, main work of this PR includes:

- Update Sentinel command table in order to better support ACLs.
- Fix couple of things which currently blocks the support for ACL on sentinel mode.
- Provide "sentinel sentinel-user" and "sentinel sentinel-pass " configuration in order to let sentinel authenticate with a specific user in other sentinels.
- requirepass is kept just for compatibility with old config files

Co-authored-by: Oran Agra <oran@redislabs.com>
2020-10-19 07:33:55 +03:00
Oran Agra
0de424cab9 INFO report peak memory before eviction (#7894)
In some cases one command added a very big bulk of memory, and this
would be "resolved" by the eviction before the next command.

Seeing an unexplained mass eviction we would wish to
know the highest momentary usage too.

Tracking it in call() and beforeSleep() adds some hooks in AOF and RDB
loading.

The fix in clientsCronTrackExpansiveClients is related to #7874
2020-10-18 16:56:43 +03:00
Yossi Gottlieb
6a035f5edf Fix tests failure on busybox systems. (#7916) 2020-10-18 14:50:29 +03:00
Wen Hui
38f55cc3aa support NOMKSTREAM option in xadd command (#7910)
introduces a NOMKSTREAM option for xadd command, this would be useful for some
use cases when we do not want to create new stream by default:

XADD key [MAXLEN [~|=] <count>] [NOMKSTREAM] <ID or *> [field value] [field value]
2020-10-18 10:15:43 +03:00
Pierre Jambet
1cfb63b699 t_set.c comment update for srandmemberWithCountCommand (#7922)
Reference the correct "case", case 4, in the comment explaining the need
for case 3, when the number of request items is too close to the
cardinality of the set. Case 4 is indeed the "natural approach"
referenced earlier in that sentence.
2020-10-18 08:14:45 +03:00
Tommy Joe Lund
9067487613 Fix typo in server.h (#7921) 2020-10-18 08:11:18 +03:00
John Sully
4c4a8da208 run when necessary
Former-commit-id: d724e7226c690fdce0e6ee6cbf8afdb9481f51c5
2020-10-16 07:00:03 +00:00
John Sully
91388bd42d Fix replica buffer overflows
Former-commit-id: 738c782f02517744662991091beb3f724661317e
2020-10-16 06:47:40 +00:00
John Sully
9c65bd8f3d Avoid locking if we won't run a time event
Former-commit-id: 33b05c859afd6665feae43c47d19f7a0a764c36b
2020-10-16 06:19:52 +00:00
John Sully
85492ccee8 Reduce async write copies
Former-commit-id: ed369d722335ed4105748ef2bed5d64f3f32c433
2020-10-15 23:10:17 +00:00
John Sully
654379bd0c Fix branding
Former-commit-id: fb32bb12b1b070d230f89845b0415b1e7d8bc669
2020-10-15 20:15:35 +00:00
Oran Agra
c7fe6387d9 Allow requirepass config to clear the password (#7899)
This is a compatibility issue with redis 5.0 that was introduced by ACL.
Before this commit, setting requirepass to an empty string will result
in a server that needs an empty AUTH, unlike redis 5.0 which would
accept connections without an AUTH.
2020-10-14 09:38:47 +03:00
guybe7
fc29fd8389 performEvictions: mem_freed may be negative (#7908)
If 'delta' is negative 'mem_freed' may underflow and cause
the while loop to exit prematurely (And not evicting enough
memory)

mem_freed can be negative when:
1. We use lazy free (consuming memory by appending to a list)
2. Thread doing an allocation between the two calls to zmalloc_used_memory.
2020-10-13 19:50:57 +03:00
Hanif Ariffin
d094772d9d Fix printf format specifier for unsigned in ziplistRepr (#7907)
Only used by DEBUG and testing code.

Signed-off-by: Hanif Bin Ariffin <hanif.ariffin.4326@gmail.com>
2020-10-13 12:42:52 +03:00
WuYunlong
27a32cfa2a Delete dbExists() which is redundant. (#7906) 2020-10-13 10:05:05 +03:00
John Sully
f275456439 Relax memory order where possible
Former-commit-id: 3e996035ea1d5a40d02f84e916837a1d350b844b
2020-10-13 06:35:16 +00:00
Wang Yuan
5bb220660e Remove temporary aof and rdb files in a background thread (#7905)
If we fail or stop to rewrite aof, we need to remove temporary aof.
We also remove temporary rdb when replicas abort to receive rdb.
But currently we delete them in main thread, to avoid blocking,
we should use bg_unlink to remove them in a background thread.

Btw, we have already used this way to removed child process temporary rdb.
2020-10-13 09:34:07 +03:00
John Sully
8c33983e57 Significantly improve perf in replication scenarios
Former-commit-id: ae8a94d6158cada41b7497d55fe12f5d776f0c75
2020-10-12 15:27:03 +00:00
guybe7
c816eec893 Minor improvements to module blocked on keys (#7903)
- Clarify some documentation comments
- Make sure blocked-on-keys client privdata is accessible
  from withing the timeout callback
- Handle blocked clients in beforeSleep - In case a key
  becomes "ready" outside of processCommand

See #7879 #7880
2020-10-12 17:13:38 +03:00
John Sully
6496ea5145 Avoid excess locking, seeing up to 8% performance improvements
Former-commit-id: 69a74a567bd381a84e71f954d4cb35eb878f6d3c
2020-10-12 05:50:58 +00:00
John Sully
6de6515bfc Perf: remove unnecessary vector operations
Former-commit-id: 1b46d4f09ab73e08a1e77fd7f73d18e98dbdce7c
2020-10-12 04:28:39 +00:00
Andreas Lind
efa784d5f2 Support redis-cli -u rediss://... (#7900) 2020-10-11 18:14:02 +03:00
Yossi Gottlieb
a94ddb27fe Modules: fix RM_GetCommandKeys API. (#7901)
This cleans up and simplifies the API by passing the command name as the
first argument. Previously the command name was specified explicitly,
but was still included in the argv.
2020-10-11 18:10:55 +03:00
Meir Shpilraien (Spielrein)
e9c837ad31 Add Module API for version and compatibility checks (#7865)
* Introduce a new API's: RM_GetContextFlagsAll, and
RM_GetKeyspaceNotificationFlagsAll that will return the
full flags mask of each feature. The module writer can
check base on this value if the Flags he needs are
supported or not.

* For each flag, introduce a new value on redismodule.h,
this value represents the LAST value and should be there
as a reminder to update it when a new value is added,
also it will be used in the code to calculate the full
flags mask (assuming flags are incrementally increasing).
In addition, stated that the module writer should not use
the LAST flag directly and he should use the GetFlagAll API's.

* Introduce a new API: RM_IsSubEventSupported, that returns for a given
event and subevent, whether or not the subevent supported.

* Introduce a new macro RMAPI_FUNC_SUPPORTED(func) that returns whether
or not a function API is supported by comparing it to NULL.

* Introduce a new API: int RM_GetServerVersion();, that will return the
current Redis version in the format 0x00MMmmpp; e.g. 0x00060008;

* Changed unstable version from 999.999.999 to 255.255.255

Co-authored-by: Oran Agra <oran@redislabs.com>
Co-authored-by: Yossi Gottlieb <yossigo@gmail.com>
2020-10-11 17:21:58 +03:00