Commit Graph

12247 Commits

Author SHA1 Message Date
Roshan Khatri
3ab066f710
For additional compatibility this adds REDIS_CFLAGS and REDIS_LDFLAGS support to MAKEFILE (#66)
This resolves (1.viii) from
https://github.com/valkey-io/valkey/issues/43
> REDIS_FLAGS will be updated to SERVER_FLAGS. Maybe we should also
allow REDIS_FLAGS -> SERVER_FLAGS as well, for an extra layer of
compatibility.

---------

Signed-off-by: Roshan Khatri <rvkhatri@amazon.com>
2024-03-30 15:42:00 +01:00
Mikel Olasagasti Uranga
289eb47eb9
Replace offensive term (#86)
Signed-off-by: Mikel Olasagasti Uranga <mikel@olasagasti.info>
2024-03-30 14:23:50 +01:00
Ping Xie
1950acd1e2
Fix remaining names in CONTRIBUTING.md (#70)
Signed-off-by: Ping Xie <pingxie@google.com>
2024-03-29 18:38:13 +01:00
Vitah Lin
9be3a1d5ab
Fix renameing names in SECURITY.md (#74)
Signed-off-by: Vitah Lin <linw1225@gmail.com>
2024-03-29 08:25:51 -07:00
John Vandenberg
1fa8da3359
Rename functionsLibMataData to functionsLibMetaData (#71)
Signed-off-by: John Vandenberg <jayvdb@gmail.com>
2024-03-28 19:34:07 -07:00
Madelyn Olson
57789d4d08
Update naming to to Valkey (#62)
Documentation references should use `Valkey` while server and cli
references are all under `valkey`.

---------

Signed-off-by: Madelyn Olson <madelyneolson@gmail.com>
2024-03-28 09:58:28 -07:00
Harkrishn Patro
c120a45874
Sharded pubsub command execution within multi/exec (#13)
Allow SPUBLISH command within multi/exec on replica.
2024-03-27 21:29:44 -07:00
Madelyn Olson
699f62e8e3
Updated contributing file with DCO (#48)
Update the contributor file to include a DCO, which are going to require
for all incoming contributions to provide indication that the
contributor has the rights to contribute the code.

I also fixed the formatting of contribution HOWTO, since it was getting
mangled.

Signed-off-by: Madelyn Olson <madelyneolson@gmail.com>
2024-03-27 15:24:42 -07:00
Roshan Khatri
c7df0f06e7
Makefile respect user's SERVER_CFLAGS and OPT (#55)
Makefile respect user's SERVER_CFLAGS and OPT.

This was unintentionally modified by
38632278fd (diff-3e2513390df543315686d7c85bd901ca9256268970032298815d2f893a9f0685).

Signed-off-by: Roshan Khatri <rvkhatri@amazon.com>
2024-03-27 23:19:04 +01:00
Parth
11ddd8b289
Changing Redis references in files documenting development guidelines (#26) (#45)
Changing some references from
Redis to placeholderkv.

Signed-off-by: Parth Patel <661497+parthpatel@users.noreply.github.com>
2024-03-26 19:55:37 -07:00
Viktor Söderqvist
3782446a40
Untrademark json files (#35)
Replaces #26

Name agnostic. Now without spelling errors, ready to merge if you ask me.
2024-03-26 11:53:34 -07:00
Viktor Söderqvist
975d3b6947
Update issue templates (#37)
Update issue template to remove reference to Redis

Signed-off-by: Viktor Söderqvist <viktor.soderqvist@est.tech>
2024-03-26 09:58:44 -07:00
Harkrishn Patro
8153b3c8fd
Cleanup tcl tmp directory leaking resources (#34)
Few of the servers log are stored as `server1/2/3.log` . Various type of
acl files are created and weren't getting cleaned up prior to this
change.
2024-03-26 16:26:22 +01:00
Wen Hui
1c9710fca1
Fix the CI sentinel break issue (#30)
I run the CI in my branch, test cases for sentinel could pass


https://github.com/hwware/placeholderkv/actions/runs/8429003027/job/23082549380
2024-03-26 10:20:08 -04:00
Roshan Khatri
340ab6d62d
Fixes external server tests and change other references (#14) 2024-03-25 18:49:52 +01:00
PlavorSeol
601177b416
Update Discord server invite (#24)
Update Discord server invite link to a new, working link
2024-03-25 10:34:51 +01:00
Roshan Khatri
2aa820f945
Avoid daily test to run on PRs (#11) 2024-03-22 12:36:08 -07:00
Madelyn Olson
3a5e2b604e
Merge pull request #10 from roshkhatri/unstable
Adds discord link for discussions.
2024-03-22 11:04:18 -07:00
Madelyn Olson
1ea46d3ddb
Merge pull request #7 from hpatro/patch-1
Update SECURITY.md
2024-03-22 10:48:37 -07:00
Roshan Khatri
e0edcbaf7c
Adds discord link for discussions. 2024-03-22 10:39:59 -07:00
Harkrishn Patro
9f0b3bbe78
Update SECURITY.md 2024-03-22 08:46:10 -07:00
Madelyn Olson
9c6c6e52d7
Update CODE_OF_CONDUCT.md (#5) 2024-03-22 08:12:45 +01:00
Harkrishn Patro
8a976ab609
Update SECURITY.md 2024-03-21 23:44:08 -07:00
Madelyn Olson
dc3e76b3fb
Merge pull request #6 from madolson/fix_daily_yml 2024-03-21 23:19:57 -07:00
Madelyn Olson
9da3166e5c Fix daily.yml change 2024-03-21 22:41:23 -07:00
Madelyn Olson
af205e7d86
Update README.md 2024-03-21 21:41:01 -07:00
Madelyn Olson
75929f46c5
Update README.md 2024-03-21 21:40:43 -07:00
Ping Xie
0e9a25fb59
Merge pull request #2 from madolson/test-pr 2024-03-21 20:05:42 -07:00
Madelyn Olson
1dcd7a32fa Updated security.md 2024-03-21 20:03:59 -07:00
Madelyn Olson
084ab10e17 Disabled some workflows for now 2024-03-21 19:50:02 -07:00
Madelyn Olson
2e9855fbd0 Disable some workflows since I don't want to burn through the free tier 2024-03-21 19:39:21 -07:00
Madelyn Olson
bd7387354a Fixed fork/exec problem 2024-03-21 19:36:11 -07:00
Madelyn Olson
9a6721bd11 Fix check aof 2024-03-21 19:19:40 -07:00
Madelyn Olson
3586485355 Moved to correct cli and benchmark 2024-03-21 19:16:03 -07:00
Madelyn Olson
ee107481e5 Refactor some tests to reference new executable 2024-03-21 19:11:08 -07:00
Madelyn Olson
0aaae734f4 Fix incorrect find/replace 2024-03-21 19:04:09 -07:00
Madelyn Olson
38632278fd A single commit to get stuff building 2024-03-21 19:00:46 -07:00
Yanqi Lv
e64d91c371
Fix dict use-after-free problem in kvs->rehashing (#13154)
In ASAN CI, we find server may crash because of NULL ptr in `kvstoreIncrementallyRehash`.
the reason is that we use two phase unlink in `dbGenericDelete`. After `kvstoreDictTwoPhaseUnlinkFind`,
the dict may be in rehashing and only have one element in ht[0] of `db->keys`.

When we delete the last element in `db->keys` meanwhile `db->keys` is in rehashing, we may free the
dict in `kvstoreDictTwoPhaseUnlinkFree` without deleting the node in `kvs->rehashing`. Then we may
use this freed ptr in `kvstoreIncrementallyRehash` in the `serverCron` and cause the crash.
This is indeed a use-after-free problem.

The fix is to call rehashingCompleted in dictRelease and dictEmpty, so that every call for
rehashingStarted is always matched with a rehashingCompleted.

Adding a test in the unit test to catch it consistently

---------

Co-authored-by: Oran Agra <oran@redislabs.com>
Co-authored-by: debing.sun <debing.sun@redis.com>
2024-03-20 22:44:28 +02:00
Yanqi Lv
bad33f8738
fix wrong data type conversion in zrangeResultBeginStore (#13148)
In `beginResultEmission`, -1 means the result length is not known in
advance. But after #12185, if we pass -1 to `zrangeResultBeginStore`, it
will convert to SIZE_MAX in `zsetTypeCreate` and try to `dictExpand`.
Although `dictExpand` won't succeed because the size overflows, I think
we'd better to avoid this wrong conversion.

This bug can be triggered when the source of `zrangestore` doesn't exist
or we use `zrangestore` command with `byscore` or `bylex`.
The impact is that dst keys will be converted to use skiplist instead of
listpack.
2024-03-19 08:52:55 +02:00
Binbin
e04d41d78d
Prevent lua error_reply abuse from causing errorstats to become larger (#13141)
Users who abuse lua error_reply will generate a new error object on each
error call, which can make server.errors get bigger and bigger. This
will
cause the server to block when calling INFO (we also return errorstats
by
default).

To prevent the damage it can cause, when a misuse is detected, we will
print a warning log and disable the errorstats to avoid adding more new
errors. It can be re-enabled via CONFIG RESETSTAT.

Because server.errors may be very large (it may be better now since we
have the limit), config resetstat may block for a while. So in
resetErrorTableStats, we will try to lazyfree server.errors.

See the related discussion at the end of #8217.
2024-03-19 08:18:22 +02:00
Chen Tianjie
aeada20140
Avoid unnecessary dict shrink in zremrangeGenericCommand (#13143)
If the skiplist is emptied, there is no need to shrink the dict in
skiplist, it can be deleted directly.
2024-03-19 10:14:19 +08:00
Binbin
7b070423b8
Fix dictionary use-after-free in active expire and make kvstore iter to respect EMPTY flag (#13135)
After #13072, there is an use-after-free error. In expireScanCallback, we
will delete the dict, and then in dictScan we will continue to use the dict,
like we will doing `dictResumeRehashing(d)` in the end, this casued an error.

In this PR, in freeDictIfNeeded, if the dict's pauserehash is set, don't
delete the dict yet, and then when scan returns try to delete it again.

At the same time, we noticed that there will be similar problems in iterator.
We may also delete elements during the iteration process, causing the dict
to be deleted, so the part related to iter in the PR has also been modified.
dictResetIterator was also missing from the previous kvstoreIteratorNextDict,
we currently have no scenario that elements will be deleted in kvstoreIterator
process, deal with it together to avoid future problems. Added some simple
tests to verify the changes.

In addition, the modification in #13072 omitted initTempDb and emptyDbAsync,
and they were also added. This PR also remove the slow flag from the expire
test (consumes 1.3s) so that problems can be found in CI in the future.
2024-03-18 17:41:54 +02:00
Alexander Mahone
98a6e55d4e
Add missing REDIS_STATIC in quicklist (#13147)
Compiler complained when I tried to compile only quicklist.c.
Since static keyword is needed when a static function declaration is
placed before its implementation.

```
#ifndef REDIS_STATIC
#define REDIS_STATIC static
#endif
```

[How to solve static declaration follows non-static declaration in GCC C
code?](https://stackoverflow.com/questions/3148244/how-to-solve-static-declaration-follows-non-static-declaration-in-gcc-c-code)
2024-03-18 08:22:19 +02:00
Madelyn Olson
3f725b8619
Change mmap rand bits as a temporary mitigation to resolve asan bug (#13150)
There is a new change in linux kernel 6.6.6 that uses randomization of
address space to harden security, but it interferes with the way ASAN
works. Folks are working on a fix, but this is a temporary mitigation
for us to get our CI to be green again.

See https://github.com/google/sanitizers/issues/1716 for more
information

See
https://github.com/redis/redis/actions/runs/8305126288/job/22731614306?pr=13149
for a recent failure
2024-03-17 09:06:51 +02:00
Viktor Söderqvist
1d77a8e2c5
Makefile respect user's REDIS_CFLAGS and OPT (#13073)
This change to the Makefile makes it possible to opt out of
`-fno-omit-frame-pointer` added in #12973 and `-flto` (#11350). Those
features were implemented by conditionally modifying the `REDIS_CFLAGS`
and `REDIS_LDFLAGS` variables. Historically, those variables provided a
way for users to pass options to the compiler and linker unchanged.

Instead of conditionally appending optimization flags to REDIS_CFLAGS
and REDIS_LDFLAGS, I want to append them to the OPTIMIZATION variable.

Later in the Makefile, we have `OPT=$(OPTIMIZATION)` (meaning
OPTIMIZATION is only a default for OPT, but OPT can be overridden by the
user), and later the flags are combined like this:

FINAL_CFLAGS=$(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) $(REDIS_CFLAGS)
    FINAL_LDFLAGS=$(LDFLAGS) $(OPT) $(REDIS_LDFLAGS) $(DEBUG)

This makes it possible for the the user to override all optimization
flags with e.g. `make OPT=-O1` or just `make OPT=`.

For some reason `-O3` was also already added to REDIS_LDFLAGS by default
in #12339, so I added OPT to FINAL_LDFLAGS to avoid more complex logic
(such as introducing a separate LD_OPT variable).
2024-03-13 17:02:00 +02:00
Binbin
3b3d16f748
Add KVSTORE_FREE_EMPTY_DICTS to cluster mode keys / expires kvstore (#13072)
Currently (following #11695, and #12822), keys kvstore and expires
kvstore both flag with ON_DEMAND, it means that a cluster node will
only allocate a dict when the slot is assigned to it and populated,
but on the other hand, when the slot is unassigned, the dict will
remain allocated.

We considered releasing the dict when the slot is unassigned, but it
causes complications on replicas. On the other hand, from benchmarks
we conducted, it looks like the performance impact of releasing the
dict when it becomes empty and re-allocate it when a key is added
again, isn't huge.

This PR add KVSTORE_FREE_EMPTY_DICTS to cluster mode keys / expires
kvstore.

The impact is about about 2% performance drop, for this hopefully
uncommon scenario.

---------

Co-authored-by: Oran Agra <oran@redislabs.com>
2024-03-13 08:30:20 +02:00
Binbin
ad28d222ed
Lua eval scripts first in first out LRU eviction (#13108)
In some cases, users will abuse lua eval. Each EVAL call generates
a new lua script, which is added to the lua interpreter and cached
to redis-server, consuming a large amount of memory over time.

Since EVAL is mostly the one that abuses the lua cache, and these
won't have pipeline issues (i.e. the script won't disappear
unexpectedly,
and cause errors like it would with SCRIPT LOAD and EVALSHA),
we implement a plain FIFO LRU eviction only for these (not for
scripts loaded with SCRIPT LOAD).

### Implementation notes:
When not abused we'll probably have less than 100 scripts, and when
abused we'll have many thousands. So we use a hard coded value of 500
scripts. And considering that we don't have many scripts, then unlike
keys, we don't need to worry about the memory usage of keeping a true
sorted LRU linked list. We compute the SHA of each script anyway,
and put the script in a dict, we can store a listNode there, and use
it for quick removal and re-insertion into an LRU list each time the
script is used.

### New interfaces:
At the same time, a new `evicted_scripts` field is added to
INFO, which represents the number of evicted eval scripts. Users
can check it to see if they are abusing EVAL.

### benchmark:
`./src/redis-benchmark -P 10 -n 1000000 -r 10000000000 eval "return
__rand_int__" 0`

The simple abuse of eval benchmark test that will create 1 million EVAL
scripts. The performance has been improved by 50%, and the max latency
has dropped from 500ms to 13ms (this may be caused by table expansion
inside Lua when the number of scripts is large). And in the INFO memory,
it used to consume 120MB (server cache) + 310MB (lua engine), but now
it only consumes 70KB (server cache) + 210KB (lua_engine) because of
the scripts eviction.

For non-abusive case of about 100 EVAL scripts, there's no noticeable
change in performance or memory usage.

### unlikely potentially breaking change:
in theory, a user can maybe load a
script with EVAL and then use EVALSHA to call it (by calculating the
SHA1 value on the client side), it could be that if we read the docs
carefully we'll realized it's a valid scenario, but we suppose it's
extremely rare. So it may happen that EVALSHA acts on a script created
by EVAL, and the script is evicted and EVALSHA returns a NOSCRIPT error.
that is if you have more than 500 scripts being used in the same
transaction / pipeline.

This solves the second point in #13102.
2024-03-13 08:27:41 +02:00
Ronen Kalish
a8e745117f
Xread last entry in stream (#7388) (#13117)
Allow using `+` as a special ID for last item in stream on XREAD
command.

This would allow to iterate on a stream with XREAD starting with the
last available message instead of the next one which `$` is used for.
I.e. the caller can use `BLOCK` and `+` on the first call, and change to
`$` on the next call.

Closes #7388

---------

Co-authored-by: Felipe Machado <462154+felipou@users.noreply.github.com>
2024-03-13 08:23:32 +02:00
Viktor Söderqvist
9efc6ad6a6
Add API RedisModule_ClusterKeySlot and RedisModule_ClusterCanonicalKeyNameInSlot (#13069)
Sometimes it's useful to compute a key's cluster slot in a module.

This API function is just like the command CLUSTER KEYSLOT (but faster).

A "reverse" API is also added:
`RedisModule_ClusterCanonicalKeyNameInSlot`. Given a slot, it returns a
short string that we can call a canonical key for the slot.
2024-03-12 09:26:12 -07:00
Andy Pan
9c065c417d
Enable accept4() on *BSD (#13104)
Redis enabled `accept4` on Linux after #9177, reducing extra system
calls for sockets.

`accept4` system call is also widely supported on *BSD and Solaris in
addition to Linux. This PR enables `accept4` on all platforms that
support it.

### References
- [accept4 on
FreeBSD](https://man.freebsd.org/cgi/man.cgi?query=accept4&sektion=2&n=1)
- [accept4 on
DragonFly](https://man.dragonflybsd.org/?command=accept&section=2)
- [accept4 on NetBSD](https://man.netbsd.org/accept.2)
- [accept4 on OpenBSD](https://man.openbsd.org/accept4.2)
- [accept4 on
Solaris](https://docs.oracle.com/cd/E88353_01/html/E37843/accept4-3c.html)
2024-03-12 16:35:52 +02:00