21 Commits

Author SHA1 Message Date
Guy Benoish
6731e0dab5 Stream: Handle streamID-related edge cases
This commit solves several edge cases that are related to
exhausting the streamID limits: We should correctly calculate
the succeeding streamID instead of blindly incrementing 'seq'
This affects both XREAD and XADD.

Other (unrelated) changes:
Reply with a better error message when trying to add an entry
to a stream that has exhausted last_id
2019-12-26 15:31:37 +05:30
Guy Benoish
ce913eea4c Support streams in general module API functions
Fixes GitHub issue #6492
Added stream support in RM_KeyType and RM_ValueLength.
Also moduleDelKeyIfEmpty was updated, even though it has
no effect now (It will be relevant when stream type direct
API will be coded - i.e. RM_StreamAdd)
2019-11-06 15:52:19 +05:30
Jamison Judge
3e9241c541 stream.h: fix typo 2019-10-07 11:01:01 -07:00
Oran Agra
73a945c73c prevent diskless replica from terminating on short read
now that replica can read rdb directly from the socket, it should avoid exiting
on short read and instead try to re-sync.

this commit tries to have minimal effects on non-diskless rdb reading.
and includes a test that tries to trigger this scenario on various read cases.
2019-07-17 16:46:22 +02:00
dejun.xdj
eaadabab87 Streams: add streamCompareID() declaration in stream.h. 2018-07-14 15:02:24 +08:00
antirez
a7f0b02fd2 Streams: iterator entry deletion abilities. 2018-04-17 17:18:00 +02:00
antirez
b9383e918d CG: AOF rewriting implemented. 2018-03-23 17:21:31 +01:00
antirez
d7fa510612 CG: Replication WIP 1: XREADGROUP and XCLAIM propagated as XCLAIM. 2018-03-19 18:02:19 +01:00
antirez
f979275a2a CG: RDB loading first implementation. 2018-03-15 12:54:10 +01:00
antirez
922b74828b CG: XPENDING should not create consumers and obey to count. 2018-03-15 12:54:10 +01:00
antirez
f49cbaf84c CG: Now XREADGROUP + blocking operations work. 2018-03-15 12:54:10 +01:00
antirez
018f8a3c1d CG: first draft of streamReplyWithRangeFromConsumerPEL(). 2018-03-15 12:54:10 +01:00
antirez
840ad8cec6 CG: creation of NACK entries in PELs. 2018-03-15 12:54:10 +01:00
antirez
0f43a908f9 CG: consumer lookup + initial streamReplyWithRange() work to supprot CG. 2018-03-15 12:54:10 +01:00
antirez
d293a8a11e CG: XGROUPREAD group option parsing and groups lookup. 2018-03-15 12:54:10 +01:00
antirez
2c348dafd0 CG: data structures design + XGROUP CREATE implementation. 2018-03-15 12:54:10 +01:00
antirez
009c14e944 Streams: state machine for reverse iteration WIP 1. 2017-12-01 10:24:25 +01:00
antirez
13ae1fa2b9 Streams: items compression implemented.
The approach used is to set a fixed header at the start of every
listpack blob (that contains many entries). The header contains a
"master" ID and fields, that are initially just obtained from the first
entry inserted in the listpack, so that the first enty is always well
compressed. Later every new entry is checked against these fields, and
if it matches, the SAMEFIELD flag is set in the entry so that we know to
just use the master entry flags. The IDs are always delta-encoded
against the first entry. This approach avoids cascading effects in which
entries are encoded depending on the previous entries, in order to avoid
complexity and rewritings of the data when data is removed in the middle
(which is a planned feature).
2017-12-01 10:24:24 +01:00
antirez
3f8ed9a516 Streams: export iteration API. 2017-12-01 10:24:24 +01:00
antirez
fac980c6d1 Streams: RDB saving. 2017-12-01 10:24:24 +01:00
antirez
1850ff43f4 Streams: 12 commits squashed into the initial Streams implementation. 2017-12-01 10:24:24 +01:00