1
0
Fork 0
mirror of https://github.com/dragonflydb/dragonfly.git synced 2024-12-15 17:51:06 +00:00
Commit graph

2724 commits

Author SHA1 Message Date
Roman Gershman
14c94e41d7
chore: optimize element removal for integer lists (#3827)
Fixes #3806

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-30 15:19:01 +03:00
Kostas Kyrimis
ec353e1522
chore: add logs to test_acl_cat_commands_multi_exec_squash (#3826)
* add logs to test

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-30 12:03:40 +00:00
Andy Dunstall
820431605e
fix(rdb_load): fix appending to an expired key (#3829) 2024-09-30 11:07:06 +00:00
Kostas Kyrimis
b19f722011
chore: do not close connections at the end of pytest (#3811)
A common case is that we need to clean up a connection before we exit a test via .close() method. This is needed because otherwise the connection will raise a warning that it is left unclosed. However, remembering to call .close() at each connection at the end of the test is cumbersome! Luckily, fixtures in python can be marked as async which allow us to:

* cache all clients created by DflyInstance.client()
* clean them all at the end of the fixture in one go

---------

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-30 09:54:41 +03:00
Kostas Kyrimis
ed11c8d3a4
chore: allow config set notify_keyspace_events (#3790)
We do not allow notify_keyspace_events to be set at runtime via config set command.

* allow notify_keyspace_events in config set command
* add tests

---------

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-30 09:54:02 +03:00
Andy Dunstall
5d64e1471a
fix(rdb_load): fix loading huge hmaps with ttl (#3825) 2024-09-30 08:34:28 +03:00
Roman Gershman
ee2f00de27
chore: now it's not needed to allocate quicklistIter on heap (#3814) 2024-09-29 12:46:57 +03:00
Andy Dunstall
520dea06bf
feat(rdb_load): add support for loading huge sets (#3807)
* feat(rdb_load): add support for loading huge sets
2024-09-29 10:25:30 +03:00
Roman Gershman
73002dc048
chore: add a benchmark comparing lpStringToInt64 to SimpleAtoi (#3815)
Seems that lpStringToInt64 is fairly optimized.
On c7g:

```
BM_LpString2Int/1      27383 ns        27381 ns       204149
BM_LpString2Int/2      24535 ns        24534 ns       227981
```

so SimpleAtoi has only ~10% improvement.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-29 09:04:25 +03:00
Roman Gershman
a3cabd10d3
chore: introduce an optimized integer compare algorithm for lists (#3813)
* chore: introduce an optimized integer compare algorithm for lists

Problem: when lists are long OpRem will spend lots of time comparing an element with records in the list.
For integer-based lists, most of the time is spent in lpCompare.
In addition, lpGet has lots of branches that penalize integers use-cases.

This PR:
1. Introduces lpGet2 - the improved version with less branches.
2. Benchmarks lpCompare vs an algorithm that compares records to an integer.
3. Benchmarks lpGet vs lpGet2

```
----------------------------------------------------------
Benchmark                Time             CPU   Iterations
----------------------------------------------------------
BM_LpCompare          1187 ns         1187 ns      4715144
BM_LpCompareInt        371 ns          371 ns     15216611
BM_LpGet/1             265 ns          265 ns     21473149
BM_LpGet/2             214 ns          214 ns     26075164
```

There are no functional changes to the Dragonfly code.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>

* chore: fixes

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-29 09:04:01 +03:00
Vladislav
753a7808d3
chore: singlehop XREAD (#3817)
Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
2024-09-28 20:22:05 +03:00
Vladislav
55699a9bb9
chore: refactor XRead (#3775)
Previously XREAD:
- Fetched group consumer info (with a hop)
- Looked up last stream ids (with a hop)
- Determined if there are entries to read (on coordinator)
- Dispatched a hop to read entries or retired to blocking mode

Instead we can merge steps (1), (2) and (3) into a single step, optionally with step (4) for single shard operations that can avoid concluding (we had this optimization before)
2024-09-27 18:47:20 +00:00
Borys
895567f3b9
fix: empty strings and Nan in the sort command (#3809)
* fix: empty strings and Nan in the SORT command
2024-09-27 14:17:05 +03:00
Roman Gershman
8ae71411bd
chore: reformat listpack according to valkey 8 (#3810)
Also add benchmarks for lpCompare code when list contains integers.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-27 09:22:08 +00:00
Roman Gershman
6a13329523
fix: make sure dfly_bench reliably connects (#3802)
1. Issue ping upon connect, add a comment why.
2. log error if dfly_bench disconnects before all the requests were processed.
3. Refactor memcache parsing code into ParseMC function.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-26 23:28:20 +03:00
Roman Gershman
3945b7e4fa
chore: tune TieredStorageTest.MemoryPressure (#3805)
* chore: tune TieredStorageTest.MemoryPressure

* chore: print more stats on failure
2024-09-26 15:42:28 +00:00
adiholden
fbf12e9abb
chore: cleanup not used opcodes in replication (#3804)
feat server: cleanup not used opcodes in replication

Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-09-26 14:51:57 +00:00
Stepan Bagritsevich
c2da601f6b
fix(generic_family): Update indexes in the RESTORE and RENAME commands (#3803) 2024-09-26 14:04:09 +00:00
Borys
cd279af6d4
fix: bitcount invalid range (#3792) 2024-09-26 16:31:09 +03:00
Borys
ce0320300b
test: update test_noreply_pipeline to prevent false fail (#3801) 2024-09-26 12:12:53 +00:00
Roman Gershman
70ad113e4b
chore: ScheduleInternal refactoring (#3794)
A small refactoring to improve the flow of ScheduleInternal() as well as
to prepare it for the next change that will reduce the CPU load from the shard queue.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-26 08:14:26 +03:00
Kostas Kyrimis
a5d34adc4c
chore: remove goto statements (#3791)
* replace goto statements with lambda calls

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-25 16:08:31 +03:00
romange
734be21407 chore(helm-chart): update to v1.23.0 2024-09-25 09:58:17 +00:00
Lakshya Garg
fb2ee90b2d
chore(acl_family): add allcomands and nocommands (#3783)
* add allcommands alias for acl
* add nocommands alias for acl
* add test
2024-09-25 10:58:33 +03:00
Kostas Kyrimis
105c2bd761
fix: bitop do not add dst key if result is empty (#3751)
* fix bitiop creating the dst key if result is empty
* fix replicating dst with the wrong type
* make bitop a blind update (similar to set command)

---------

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-25 09:45:20 +03:00
Borys
987e6feaa5
fix: GETRANGE params validation (#3781)
fix: getrange params validation
2024-09-24 13:54:35 +00:00
Shahar Mike
526bce4222
chore: Forbid replicating a replica (#3779)
* chore: Forbid replicating a replica

We do not support connecting a replica to a replica, but before this PR
we allowed doing so. This PR disables that behavior.

Fixes #3679

* `replicaof_mu_`
2024-09-24 13:42:22 +00:00
Shahar Mike
9aadc0cd2b
fix: Fix flaky test test_acl_revoke_pub_sub_while_subscribed (#3768)
fix: Fix flaky test `test_acl_revoke_pub_sub_while_subscribed`

The reason it failed is that, in some rare cases, the subscriber did not
get the first few messages of the publisher. This is likely due to
timing of subscribe and publish, in different connections / threads.

Given Pub/Sub has very weak guarantees, it's probably ok as is, so I
just added a sleep to get the test to pass always.
2024-09-24 11:47:17 +03:00
Borys
3804076ea9
fix: setrange with empty value doesn't modify the DB (#3771) 2024-09-23 19:09:53 +03:00
Roman Gershman
b7b4cabacc
chore: some renames + fix a typo in RETURN_ON_BAD_STATUS (#3763)
* chore: some renames + fix a typo in RETURN_ON_BAD_STATUS

Renames in transaction.h - no functional changes.
Fix a typo in error.h following  #3758
---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-23 13:16:50 +03:00
Borys
9303591010
fix: mark pubusb commands as unsupported for cluster (#3767) 2024-09-23 09:59:13 +00:00
Roman Gershman
9c49aee43d
chore: give up on InlinedVector due to spurious warnings with optional (#3765) 2024-09-23 11:34:39 +03:00
adiholden
7df95dfb6e
fix server: fix last error reply (#3728)
fix 1: in multi command squasher error message was not set therefore it was not printed to log on the relevant command only on exec, fixed by setting the last error in CapturingReplyBuilder::SendError
fix 2: non clearing cached error replies before the command is Invoked

---------

Signed-off-by: adi_holden <adi@dragonflydb.io>
Co-authored-by: kostas <kostas@dragonflydb.io>
2024-09-23 11:34:13 +03:00
Andy Dunstall
45ffc605bd
feat(zset_family): add ZRANGESTORE (#3757) 2024-09-23 11:28:12 +03:00
Borys
6185617949
fix: substr/getrange result for invalid range (#3766) 2024-09-23 08:20:08 +00:00
Roman Gershman
0a049ab631
chore: add more error logs around ziplist parsing checks (#3764)
Also, reformat ziplist.c to valkey 8 formatting (no code changes besides this).

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-23 10:13:36 +03:00
Kostas Kyrimis
15fce9df2d
chore: logs on assert fail for test_acl_cat_commands_multi_exec_squash (#3749)
* print result if assertion fails

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-23 09:51:58 +03:00
Roman Gershman
29b18f0dcb
fix: tune test_replicaof_reject_on_load parameters (#3762)
Reduce the snapshot size by 20% and increase the timeout to avoid failures due to slow loads.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-23 09:50:10 +03:00
Roman Gershman
f1f8ee17dc
fix: make snapshotting process more responsive (#3759)
* fix: improve BreakStalledFlowsInShard heuristic

Before this change - we wrote in a single call whatever record chunks we pulled from the channel.
This can be problematic for 1GB chunks for example, which might take 10sec to write.

Lately we added a replication breaker on the master side that breaks the fully sync after
a predefined threshold has passed. By default it was 10sec. To improve the robustness of this
breaker, we now write chunks of upto 1MB and update last_write_time_ns_ more frequently.

Also, we added more logs to make replication delays on both sides more visible.
We also added logs of breaking the replication on the master sides.

Unfortunately, this did not help making BreakStalledFlowsInShard more robust because now the
problem moved to replica side which may take 20s+ seconds to parse huge values.
Therefore, I increased the threshold for breaking the replication to 30s.

Finally, instrument GetMetrics call as it takes sometimes more than 1 sec.

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-22 17:05:28 +03:00
Roman Gershman
2e9b133ea0
chore: add integrity checks to consumer->pel (#3754)
Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-22 15:40:42 +03:00
Roman Gershman
e09ebe0c5c
fix: test deadlock with processing the stdout of sed (#3735)
Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-22 15:40:27 +03:00
adiholden
4d38271efa
feat(server): introduce rss oom limit (#3702)
* introduce rss denyoom limit

Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-09-22 13:28:24 +03:00
adiholden
5cf917871c
feat(server): introduce oom_deny_commands flag (#3718)
* server: introduce oom_deny_commands flag

Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-09-22 09:32:18 +03:00
Stefan Roman
69db21db4c
feat(helm): add hostNetwork, topologySpreadConstraint and clusterIP su… (#3389)
* add(helm): add hostNetwork, topologySpreadConstraint and clusterIP support

* parameters hostNetwork and clusterIP shouold not be templated if they are not explicitly used

---------

Signed-off-by: Stefan Roman <elegant.frog3113@fastmail.com>
Co-authored-by: Stefan Roman <elegant.frog3113@fastmail.com>
2024-09-22 08:08:01 +03:00
Vladislav
d9f8f2553b
chore: fix return on bad status (#3758) 2024-09-22 01:36:39 +03:00
Roman Gershman
cce2eb35ed
chore: refactor a lambda function into a named one (#3753)
Also did some cosmetic improvements. No functionality should be changed.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-22 01:35:56 +03:00
Andy Dunstall
9dd79657ce
fix: zset store conclude transaction on error (#3755) 2024-09-21 19:08:53 +03:00
Borys
ce79da0f7a
fix: add value range check for SETBIT command (#3750) 2024-09-20 18:20:35 +03:00
Roman Gershman
c9a2334f6d
fix: allow the healthcheck run in non-privileged containers as well (#3731)
fix: allow the healthcheck running in non-privileged containers as well

Fixes #3644 (again).

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-09-20 05:41:06 +00:00
Kostas Kyrimis
ed21867fe9
chore: add missing await in test_take_over_seeder (#3744)
* add missing await

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-09-19 17:03:11 +00:00