1
0
Fork 0
mirror of https://github.com/dragonflydb/dragonfly.git synced 2024-12-14 11:58:02 +00:00
Commit graph

2091 commits

Author SHA1 Message Date
Roman Gershman
d467a348ac
fix: allow SELECT in multi/exec if it's a noop (#4146)
Fixes #4120

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-18 22:27:34 +02:00
Borys
e16ef838e4
feat: add INFO memory section for squashing replies memory consuming (#4147)
* feat: add INFO memory section for squashing replies memory consuming

* refactor: address comments
2024-11-18 21:16:41 +02:00
Borys
5e2b48c3f3
fix: migration ACK response processing (#4140) 2024-11-18 09:28:07 +02:00
Roman Gershman
ee01dc4fb5
chore: fix a potential crash during client list (#4141) 2024-11-18 06:32:30 +02:00
adiholden
59c81fb98a
fix server: fix write to slowlog on squashing flow (#4138)
Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-17 16:03:30 +02:00
Roman Gershman
8bd2b9ed3e
chore: optimize info command (#4137)
* chore: optimize info command

    Info command has a large latency when returning all the sections.
    But often a single section is required. Specifically,
    SERVER and REPLICATION sections are often fetched by clients
    or management components.

    This PR:
    1. Removes any hops for "INFO SERVER" command.
    2. Removes some redundant stats.
    3. Prints latency stats around GetMetrics command if it took to much.

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

* Update src/server/server_family.cc

Co-authored-by: Shahar Mike <chakaz@users.noreply.github.com>
Signed-off-by: Roman Gershman <romange@gmail.com>

* chore: remove GetMetrics dependency from the REPLICATION section

Also, address comments

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

* fix: clang build

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
Signed-off-by: Roman Gershman <romange@gmail.com>
Co-authored-by: Shahar Mike <chakaz@users.noreply.github.com>
2024-11-17 13:33:29 +02:00
Roman Gershman
2ff6bf35c1
chore: improve the state machine of RedisParser (#4085)
1. Simplify conditions inside the main loop.
2. Improve the logic inside ConsumeBulk() function.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-15 11:14:50 +02:00
Roman Gershman
c46cb2514f
chore: fix plain node insertion (#4134)
The blob allocation had invalid size and the value has never been copied.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-14 23:53:34 +02:00
adiholden
db67b35f8e
fix server: fix stats of pipeline squashed commands (#4132)
Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-14 20:57:05 +02:00
Shahar Mike
1513134247
fix: Use MOVED error type for moved replies (#4125)
**The problem:**

When in cluster mode, `MOVED` replies (which are arguably not even errors) are aggregated per slot-id + remote host, and displayed in `# Errorstats` as such. For example, in a server that does _not_ own 8k slots, we will aggregate 8k different errors, and their counts (in memory).

This slows down all `INFO` replies, takes a lot of memory, and also makes `INFO` replies very long.

**The fix:**

Use `type` `MOVED` for moved replies, making them all the same under `# Errorstats`

Fixes #4118
2024-11-14 13:12:38 +02:00
Shahar Mike
f04e5497bc
fix: Do not use cc_ in connection if it's null (#4131)
* fix: Do not use `cc_` in connection if it's null

This is a rare condition, which we know can happen during shutdown (see
[here](https://github.com/dragonflydb/dragonfly/pull/3873#issue-2568503374))

* add comment
2024-11-14 12:41:51 +02:00
Roman Gershman
ab6088f5d6
chore: simplify BumpUps deduplication (#4098)
* chore: simplify BumpUps deduplication

This pr #2474 introduced iterator protection by
tracking which keys where bumped up during the transaction operation.
This was done by managing keys view set. However, this can be simplified
using fingerprints. Also, fingerprints do not require that the original keys exist.

In addition, this #3241 PR introduces FetchedItemsRestorer that tracks bumped set and
saves it to protect against fiber context switch. My claim is that it's redundant.
Since we only keep the auto-laundering iterators, when a fiber preempts these iterators recognize it
(see IteratorT::LaunderIfNeeded) and refresh themselves anyway.

To summarize: fetched_items_ protect us from iterator invalidation during atomic scenarios,
and auto-laundering protects us from everything else, so fetched_items_ can be cleared in that case.
---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-13 17:27:53 +02:00
adiholden
fb84d47b4d
feat server: experimental_new_io flag add as deprecated (#4127)
* feat server: experimental_new_io flag add as deprecated

Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-13 13:29:40 +00:00
Roman Gershman
fa8f3f5564
fix: regression in squashing code when determining eval commands (#4116)
The regression was caused by #3947 and it causes crashes in bullmq.
It has not been found till now because python client sends commands in uppercase.
Fixes #4113

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
Co-authored-by: Kostas Kyrimis <kostas@dragonflydb.io>
2024-11-11 19:54:47 +00:00
Kostas Kyrimis
0facd6fd8f
fix: skip Send() in SinkReplyBuilder::Flush() when vec is empty (#4114)
* skip Send() in SinkReplyBuilder::Flush() when vec is empty

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-11-11 17:53:30 +00:00
adiholden
3ab244616a
feat(server) : snapshot traverse physical buckets (#4084)
Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-11 14:49:20 +02:00
Roman Gershman
79aa5d490d
chore: support rdb loading and container utils with QList. (#4109)
generic_family_test and rdb_test pass with qlist enabled.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-11 12:13:10 +02:00
Roman Gershman
50473b56aa
chore: decouple reply_builder from ConnectionContext (#4069)
Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 21:14:24 +02:00
Roman Gershman
9b7af7d750
chore: implement Erase for a range (#4106)
chore: implement Erase with a range

Also migrate more unit tests from valkey repo.
Finally, fix OpTrim

All tests `list_family_test --list_experimental_v2` pass.

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

chore: implement OpTrim with QList
2024-11-10 16:33:34 +00:00
Stepan Bagritsevich
503bb4ed33
fix(search_family): Process wrong field types in indexes for the FT.SEARCH and FT.AGGREGATE commands (#4070)
* fix(search_family): Process wrong field types in indexes for the FT.SEARCH and FT.AGGREGATE commands

fixes  #3986
---------

Signed-off-by: Stepan Bagritsevich <stefan@dragonflydb.io>
2024-11-10 16:56:25 +02:00
Roman Gershman
f745f3133d
chore: Implement LMOVE over QList (#4104)
* chore: Implement LMOVE over QList

All tests in list_family_test besides LTrim pass.

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 13:47:01 +00:00
Roman Gershman
be96e6cf99
chore: change Namespaces to be a global pointer (#4032)
* chore: change Namespaces to be a global pointer

Before the namespaces object was defined globally.
However it has non-trivial d'tor that is being called after main exits.
It's quite dangerous to have global non-POD objects being defined globally.
For example, if we used LOG(INFO) inside the Clear function , that would crash dragonfly on exit.

Ths PR changes it to be a global pointer.

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 10:45:53 +00:00
Roman Gershman
9366c67464
chore: Implement list Pop/Erase functionality with QList (#4099)
Adjusted OpRem/OpBPop/OpPop

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 12:37:42 +02:00
Roman Gershman
c43ba5f2cc
chore: RdbSerializer::SaveListObject supports QList (#4101)
Now, `./rdb_test --list_experimental_v2` passes.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 12:35:24 +02:00
Vladislav
eadce55b67
chore: remove old io (#3953)
* chore: Remove old IO

* fix: fix last error accounting
* chore: use unique_ptr<char> in MGetResponse storage

---------

Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
2024-11-10 11:56:41 +02:00
adiholden
2d49a28c15
fix(server): handle running script load inside multi (#4074)
Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-10 09:34:40 +02:00
Roman Gershman
75c961e7ed
chore: Add initial bindings for QList in list_family (#4093)
The feature is guarded by list_experimental_v2 flag, which is disabled.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-10 07:40:50 +02:00
Roman Gershman
1819e51f78
chore: implement QList::Erase functionality (#4092)
* chore: implement QList::Erase functionality

    Also add a parametrized test covering fill/compress options.
    Fix a compression bug introduced when copying the code.
    Introduce move c'tor/operator.

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

* chore: implement QList::Replace functionality

Also add a parametrized test covering fill/compress options.

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

---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-09 20:06:32 +02:00
Kostas Kyrimis
d3ef0a3630
fix(sanitizers): disable false positive FtProfileInvalidQuery (#4090)
* disable FtProfileInvalidQuery 

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-11-08 18:46:54 +02:00
Roman Gershman
5838ed99b4
chore: implement QList::Insert function (#4087)
* chore: implement QList::Insert function

Also add a basic test for Insertion.
Prepare the skeleton for Replace functionality.
---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-08 11:33:37 +00:00
Vladislav
b860b712c0
chore(acl): Implicit categories (#3411)
Most of our CO:: categories became meaningless with the introduction of acl. For example, CO::FAST literally doesn't mean anything, it's never read or used.

* add implicit categories

---------

Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
2024-11-08 12:40:56 +02:00
Roman Gershman
c9537bb52e
chore: implement QList::Iterate (#4086)
Also, copy the main flow for the Insert function.
It's not finished yet, hence no tests yet.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-08 11:19:54 +02:00
Roman Gershman
41d8df6e11
Add index based iterator to QList interface (#4083)
chore: add index based iterator to the interface

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-07 19:26:57 +00:00
Roman Gershman
2794239827
chore: Add QList::Iterator (#4082)
Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-07 20:51:09 +02:00
Roman Gershman
d5a0ce4004
chore: add push functionality to QList class (#4079)
The code is copied from quicklist.c
No functional changes.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-07 12:14:42 +02:00
Roman Gershman
c75683277b
chore: add QList class (#4078)
This class will consolidate list functionality across multiple layers, and eventually replace the original quicklist code.
Right now we added the skeleton files and defined most of the interface.
The implementation is not done yet.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-07 11:13:12 +02:00
Roman Gershman
c19af2bd43
chore: parser clean ups (#4077)
1. Eliminate redundant states
2. Eliminate redundant member variables

Added some comments. No functional changes.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-07 10:07:48 +02:00
Roman Gershman
f8b3fa0d7b
feat: support GCS storage for saving/loading snapshots (#4064) 2024-11-06 12:11:59 +02:00
adiholden
ae3faf59fb
feat(server): dont use channel for replication / save df (#4041)
* feat server: dont use channel for replication / save df

Signed-off-by: adi_holden <adi@dragonflydb.io>
2024-11-05 16:50:01 +02:00
Roman Gershman
7df8c268d8
chore: eliminate redundant ConnectionContext arguments (#4065) 2024-11-05 10:40:04 +02:00
Roman Gershman
8d61a91200
chore: pass reply_builder explicitly to pubsub module (#4021)
Also, deprecate `reply_builder()` access method.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-04 19:20:12 +02:00
Stepan Bagritsevich
7ac853567b
fix(search_family): Fix crash in FT.PROFILE command for invalid queries (#4043)
* refactor(search_family): Remove unnecessary std::move in FT.SEARCH

Signed-off-by: Stepan Bagritsevich <stefan@dragonflydb.io>

* fix(search_family): Fix crash in FT.PROFILE command for invalid queries

fixes dragonflydb#3983

Signed-off-by: Stepan Bagritsevich <stefan@dragonflydb.io>

* refactor(search_family_test): address comments

Signed-off-by: Stepan Bagritsevich <stefan@dragonflydb.io>

---------

Signed-off-by: Stepan Bagritsevich <stefan@dragonflydb.io>
2024-11-04 18:18:12 +01:00
Kostas Kyrimis
9c2fc3fe63
chore: add ForceUpdate to BPTree (#3993)
ReallocIfNeeded deleted and reinserted the same key in the BPTree stored in SortedMap. This is not really needed since the key is actually the same and we can just update the pointer within BPTree instead of doing the deletion + insertion chore.

---------

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-11-04 15:53:13 +02:00
Kostas Kyrimis
4859077122
chore(DenseSet): defrag all links in a chain (#4019)
* add defrag for all nodes in a link chain
* add tests

---------

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-11-04 08:34:22 +00:00
Roman Gershman
76b1f537b5
chore: refactor part of s3 logic for loading a snapshot. (#4044)
Is done as preparation to share some of its code with GCS implementation.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-11-04 10:13:53 +02:00
Kostas Kyrimis
e103254cf9
chore: add tx queue head debug info in AnalyzeTxQueue (#4026)
* add tx queue head debug info in AnalyzeTxQueue

Signed-off-by: kostas <kostas@dragonflydb.io>
2024-11-04 09:41:18 +02:00
Borys
e4b468d953
fix: reduce memory consumption during migration (#4017)
* refactor: reduce memory consumption for RestoreStreamer
* fix: add Throttling into RestoreStreamer::WriteBucket
2024-11-03 17:03:45 +02:00
Borys
cd2ab4a585
chore: decrease logs severity for OOM from error to warning (#4031) 2024-11-01 11:12:28 +02:00
Roman Gershman
d10e76b408
chore: support load/save from GCS (#4006)
Not everything is supported but manual load save is supported.

1. Run dragonfly with `--dir gs://bucket/path`
2. In redis-cli:
   a. SET foo bar
   b. SAVE DF gsdump
   c. DFLY LOAD gs://bucket/path/gsdump-summary.dfs

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-10-30 13:57:58 +02:00
Kostas Kyrimis
daf8604175
chore: flush journal to channel for non auto journal commands (#3945)
* flush journal to channel for non auto journal commands
2024-10-30 12:09:01 +02:00