Commit Graph
14182 Commits
Author SHA1 Message Date
Vivek Saini 70959cd222 Fixed memory leaks and initialized namespace 2022-03-07 19:52:41 -05:00
Eric de Ruiter ac5c4e3a31 Added command stats per namespace + output them in the info command 2021-11-07 01:03:39 +01:00
Eric de Ruiter 160d443c23 Move script cache to namespace 2021-11-06 22:38:39 +01:00
Eric de Ruiter 6cadb8c4d0 Reset last_allocated_db after emptying all databases 2021-11-06 20:50:06 +01:00
Eric de Ruiter 0f4721654f Added last_allocated_db to prevent looping over all databases every time 2021-11-06 13:04:05 +01:00
Eric de Ruiter d0e5165306 Added SELECTNS admin command to switch to databases in other namespaces 2021-11-06 12:26:22 +01:00
Eric de Ruiter ace526fa8b forgot to commit generateAutoNamespaceName implementation 2021-11-01 10:53:04 +01:00
Eric de Ruiter c2efd10f4d added support for ::auto namespace + support for default user namespace in configuration 2021-11-01 10:49:21 +01:00
Eric de Ruiter 8434366312 redisMaster->staleKeyMap is not always initialized, only delete it when initialized 2021-10-29 15:06:50 +02:00
Eric de Ruiter 05b631e732 Namespace fixes for rdb/aof/scripting 2021-10-29 15:06:50 +02:00
Eric de Ruiter 9b98faf8ee Added database mapping + namespace to client list output + added complete database mapping to serverAssertWithInfo 2021-10-29 15:06:50 +02:00
Eric de Ruiter acda6f203e Fix flushall + emptyDbStucture + debug loadaof 2021-10-29 15:06:50 +02:00
Eric de Ruiter 71aa11992f Move master initialization out of config parsing; this caused issues as db's/namespaces are not yet initialized at that stage 2021-10-29 15:06:50 +02:00
Eric de Ruiter 4254348c59 added basic namespace tests 2021-10-29 15:06:50 +02:00
Eric de Ruiter 9adb05ce78 added actual namespace switching in ACLAuthenticateUser 2021-10-29 15:06:50 +02:00
Eric de Ruiter c8c4828f8c fix rreplay tests to also include allocate calls (this is needed as it uses debug force-master which causes the select to not allocate databases) 2021-10-29 15:06:50 +02:00
Eric de Ruiter eb311cf7d1 make sure fake replication client also has a namespace 2021-10-29 15:06:50 +02:00
Eric de Ruiter d3cd45779f fix debug htstats to work with namespaces 2021-10-29 15:06:50 +02:00
Eric de Ruiter 25e37446c9 make sure db allocation is always present when selecting a different database in aof (as the oaf might be enabled after a database is selected) 2021-10-29 15:06:50 +02:00
Eric de Ruiter b8561cf4ba implemented database allocation + acl namespace support 2021-10-29 15:06:50 +02:00
Eric de Ruiter 3c4212f87f implemented basic support for namespaces (this only adds support for the default namespace) 2021-10-29 15:06:03 +02:00
Vivek Saini 5f7ca6a2f6 Merge pull request #372 from VivekSainiEQ/Redis_626_Merge
Redis 6.2.6 merge
2021-10-28 17:21:14 -04:00
VivekSainiEQ 79bdcf0b3d Cast pointer correctly and fixed MVCC not updating correctly 2021-10-27 17:08:37 +00:00
VivekSainiEQ b88f06b16f Resolved merge conflicts in prior commit 2021-10-21 22:35:15 +00:00
VivekSainiEQ e6d7e01be6 Merge tag '6.2.6' into Redis_626_Merge 2021-10-21 22:33:55 +00:00
noobpwnftw 889bcd1bf1 Fix incorrect counting of client connections
This affects later distribution of clients among threads if there had been many connection attempts during loading phase.
2021-10-12 21:47:15 -04:00
Alexis 9637887264 Fix alignment of #ifndef USE_ALIGNED_ACCESS 2021-10-12 14:27:53 -04:00
Oran Agra 4930d19e70 Redis 6.2.6 2021-10-04 13:59:40 +03:00
Oran Agra aba9517542 corrupt-dump-fuzzer test, avoid creating junk keys (#9302)
The execution of the RPOPLPUSH command by the fuzzer created junk keys,
that were later being selected by RANDOMKEY and modified.
This also meant that lists were statistically tested more than other
files.

Fix the fuzzer not to pass junk key names to RPOPLPUSH, and add a check
that detects that new keys are not added by the fuzzer to detect future
similar issues.

(cherry picked from commit 3f3f678a4741e6af18230ee1862d9ced7af79faf)
2021-10-04 13:59:40 +03:00
sundb 7540708a61 Fix missing check for sanitize_dump in corrupt-dump-fuzzer test (#9285)
this means the assertion that checks that when deep sanitization is enabled,
there are no crashes, was missing.

(cherry picked from commit 3db0f1a284e4fba703419b892b2d5b8d385afc06)
2021-10-04 13:59:40 +03:00
Yunier Pérez 664c7b36a5 Allow to override OPENSSL_PREFIX (#9567)
While the original issue was on Linux, this should work for other
platforms as well.
2021-10-04 13:59:40 +03:00
Yossi Gottlieb c390972c76 Propagate OPENSSL_PREFIX to hiredis. (#9345) 2021-10-04 13:59:40 +03:00
Oran Agra 73d286d523 Fix stream sanitization for non-int first value (#9553)
This was recently broken in #9321 when we validated stream IDs to be
integers but did that after to the stepping next record instead of before.

(cherry picked from commit 5a4ab7c7d2da1773c5ed3dcfc6e367b5af03a33e)
2021-10-04 13:59:40 +03:00
David CARLIER 4cbccab2bd TLS build fix on OpenBSD when built with LibreSSL. (#9486)
(cherry picked from commit 418c2e79313b367e64e47d38edd59f9f22a3b4fa)
2021-10-04 13:59:40 +03:00
yvette903 23ed37dd87 Fix: client pause uses an old timeout (#9477)
A write request may be paused unexpectedly because `server.client_pause_end_time` is old.

**Recreate this:**
redis-cli -p 6379
127.0.0.1:6379> client pause 500000000 write
OK
127.0.0.1:6379> client unpause
OK
127.0.0.1:6379> client pause 10000 write
OK
127.0.0.1:6379> set key value

The write request `set key value` is paused util  the timeout of 500000000 milliseconds was reached.

**Fix:**
reset `server.client_pause_end_time` = 0 in `unpauseClients`

(cherry picked from commit f560531d5b8a6e6d810b62114e69a5ffda7730f7)
2021-10-04 13:59:40 +03:00
zhaozhao.zz 9b25484a13 Fix wrong offset when replica pause (#9448)
When a replica paused, it would not apply any commands event the command comes from master, if we feed the non-applied command to replication stream, the replication offset would be wrong, and data would be lost after failover(since replica's `master_repl_offset` grows but command is not applied).

To fix it, here are the changes:
* Don't update replica's replication offset or propagate commands to sub-replicas when it's paused in `commandProcessed`.
* Show `slave_read_repl_offset` in info reply.
* Add an assert to make sure master client should never be blocked unless pause or module (some modules may use block way to do background (parallel) processing and forward original block module command to the replica, it's not a good way but it can work, so the assert excludes module now, but someday in future all modules should rewrite block command to propagate like what `BLPOP` does).

(cherry picked from commit 1b83353dc382959e218191f64d94edb9703552e3)
2021-10-04 13:59:40 +03:00
Madelyn Olson 49f8f43890 Add test verifying PUBSUB NUMPAT behavior (#9209)
(cherry picked from commit 8b8f05c86c1f1f002caa1f4e1877020389f167e4)
2021-10-04 13:59:40 +03:00
guybe7 c936f801c0 Fix two minor bugs (MIGRATE key args and getKeysUsingCommandTable) (#9455)
1. MIGRATE has a potnetial key arg in argv[3]. It should be reflected in the command table.
2. getKeysUsingCommandTable should never free getKeysResult, it is always freed by the caller)
   The reason we never encountered this double-free bug is that almost always getKeysResult
   uses the statis buffer and doesn't allocate a new one.

(cherry picked from commit 6aa2285e32a6bc16fe2938bfb40d833db7d3752d)
2021-10-04 13:59:40 +03:00
sundb 694a869e78 Fix the timing of read and write events under kqueue (#9416)
Normally we execute the read event first and then the write event.
When the barrier is set, we will do it reverse.
However, under `kqueue`, if an `fd` has both read and write events,
reading the event using `kevent` will generate two events, which will
result in uncontrolled read and write timing.

This also means that the guarantees of AOF `appendfsync` = `always` are
not met on MacOS without this fix.

The main change to this pr is to cache the events already obtained when reading
them, so that if the same `fd` occurs again, only the mask in the cache is updated,
rather than a new event is generated.

This was exposed by the following test failure on MacOS:
```
*** [err]: AOF fsync always barrier issue in tests/integration/aof.tcl
Expected 544 != 544 (context: type eval line 26 cmd {assert {$size1 != $size2}} proc ::test)
```

(cherry picked from commit 306a5ccd2d053ff653988b61a779e3cbce408874)
2021-10-04 13:59:40 +03:00
sundb a2e8a3a241 Sanitize dump payload: fix double free after insert dup nodekey to stream rax and returns 0 (#9399)
(cherry picked from commit 492d8d09613cff88f15dcef98732392b8d509eb1)
2021-10-04 13:59:40 +03:00
Wang Yuan 2f8ec0e024 Fix the wrong detection of sync_file_range system call (#9371)
If we want to check `defined(SYNC_FILE_RANGE_WAIT_BEFORE)`, we should include fcntl.h.
otherwise, SYNC_FILE_RANGE_WAIT_BEFORE is not defined, and there is alway not `sync_file_range` system call.
Introduced by #8532

(cherry picked from commit 8edc3cd62c0d0508b68c887610ca53b632b8165b)
2021-10-04 13:59:40 +03:00
sundb 09c63c45dd Sanitize dump payload: handle remaining empty key when RDB loading and restore command (#9349)
This commit mainly fixes empty keys due to RDB loading and restore command,
which was omitted in #9297.

1) When loading quicklsit, if all the ziplists in the quicklist are empty, NULL will be returned.
    If only some of the ziplists are empty, then we will skip the empty ziplists silently.
2) When loading hash zipmap, if zipmap is empty, sanitization check will fail.
3) When loading hash ziplist, if ziplist is empty, NULL will be returned.
4) Add RDB loading test with sanitize.

(cherry picked from commit cbda492909cd2fff25263913cd2e1f00bc48a541)
2021-10-04 13:59:40 +03:00
DarrenJiang13 1ed0f049fe [BUGFIX] Add some missed error statistics (#9328)
add error counting for some missed behaviors.

(cherry picked from commit 43eb0ce3bf76a5d287b93a767bead9ad6230a1ad)
2021-10-04 13:59:40 +03:00
Oran Agra 4b04ca0b18 Improvements to corrupt payload sanitization (#9321)
Recently we found two issues in the fuzzer tester: #9302 #9285
After fixing them, more problems surfaced and this PR (as well as #9297) aims to fix them.

Here's a list of the fixes
- Prevent an overflow when allocating a dict hashtable
- Prevent OOM when attempting to allocate a huge string
- Prevent a few invalid accesses in listpack
- Improve sanitization of listpack first entry
- Validate integrity of stream consumer groups PEL
- Validate integrity of stream listpack entry IDs
- Validate ziplist tail followed by extra data which start with 0xff

Co-authored-by: sundb <sundbcn@gmail.com>
(cherry picked from commit 0c90370e6d71cc68e4d9cc79a0d8b1e768712a5b)
2021-10-04 13:59:40 +03:00
sundb 2f54107289 Sanitize dump payload: fix empty keys when RDB loading and restore command (#9297)
When we load rdb or restore command, if we encounter a length of 0, it will result in the creation of an empty key.
This could either be a corrupt payload, or a result of a bug (see #8453 )

This PR mainly fixes the following:
1) When restore command will return `Bad data format` error.
2) When loading RDB, we will silently discard the key.

Co-authored-by: Oran Agra <oran@redislabs.com>
(cherry picked from commit 8ea777a6a02cae22aeff95f054d810f30b7b69ad)
2021-10-04 13:59:40 +03:00
menwen e34f06ae5d Add latency monitor sample when key is deleted via lazy expire (#9317)
Fix that there is no sample latency after the key expires via expireIfNeeded().
Some refactoring for shared code.

(cherry picked from commit ca559819f7dcd97ba9ef667bf38360a9527d62f6)
2021-10-04 13:59:40 +03:00
Viktor Söderqvist 77386ae011 redis-cli ASK redirect test: Add retry loop to fix timing issue (#9315)
(cherry picked from commit 1c59567a7fe207997eef6197eefa7d508d7fbf9f)
2021-10-04 13:59:40 +03:00
Oran Agra 0c959294a8 Skip new redis-cli ASK test in TLS mode (#9312)
(cherry picked from commit 52df350fe59d73e6a1a4a5fb3c2b91d5c62f5a76)
2021-10-04 13:59:40 +03:00
Huang Zhw 8892b5cf9e When redis-cli received ASK, it didn't handle it (#8930)
When redis-cli received ASK, it used string matching wrong and didn't
handle it.

When we access a slot which is in migrating state, it maybe
return ASK. After redirect to the new node, we need send ASKING
command before retry the command.  In this PR after redis-cli receives
ASK, we send a ASKING command before send the origin command
after reconnecting.

Other changes:
* Make redis-cli -u and -c (unix socket and cluster mode) incompatible
  with one another.
* When send command fails, we avoid the 2nd reconnect retry and just
  print the error info. Users will decide how to do next.
  See #9277.
* Add a test faking two redis nodes in TCL to just send ASK and OK in
  redis protocol to test ASK behavior.

Co-authored-by: Viktor Söderqvist <viktor.soderqvist@est.tech>
Co-authored-by: Oran Agra <oran@redislabs.com>
(cherry picked from commit cf61ad14cc45787e57d9af3f28f41462ac0f2aa2)
2021-10-04 13:59:40 +03:00
Binbin 9da232c05a redis-cli: Sleep for a while in each cliConnect when we got connect error in cluster mode. (#8884)
There's an infinite loop when redis-cli fails to connect in cluster mode.
This commit adds a 1 second sleep to prevent flooding the console with errors.
It also adds a specific error print in a few places that could have error without printing anything.

Co-authored-by: Oran Agra <oran@redislabs.com>
(cherry picked from commit 8351a10b959364cff9fc026188ebc9c653ef230a)
2021-10-04 13:59:40 +03:00