Commit Graph

7120 Commits

Author SHA1 Message Date
antirez f9c84d6d39 Hopefully improve commenting of #5126.
Reading the PR gave me the opportunity to better specify what the code
was doing in places where I was not immediately sure about what was
going on. Moreover I documented the structure in server.h so that people
reading the header file will immediately understand what the structure
is useful for.
2018-07-16 17:56:54 +02:00
Salvatore Sanfilippo e22a1218bc
Merge pull request #5126 from oranagra/slave_buf_memory_2
slave buffers were wasteful and incorrectly counted causing eviction
2018-07-16 17:45:50 +02:00
Salvatore Sanfilippo 28dd8dd150
Merge pull request #5132 from soloestoy/propagate-xdel-correctly
Streams: correctly propagate xdel if needed
2018-07-16 16:04:32 +02:00
Oran Agra bf680b6f8c slave buffers were wasteful and incorrectly counted causing eviction
A) slave buffers didn't count internal fragmentation and sds unused space,
   this caused them to induce eviction although we didn't mean for it.

B) slave buffers were consuming about twice the memory of what they actually needed.
- this was mainly due to sdsMakeRoomFor growing to twice as much as needed each time
  but networking.c not storing more than 16k (partially fixed recently in 237a38737).
- besides it wasn't able to store half of the new string into one buffer and the
  other half into the next (so the above mentioned fix helped mainly for small items).
- lastly, the sds buffers had up to 30% internal fragmentation that was wasted,
  consumed but not used.

C) inefficient performance due to starting from a small string and reallocing many times.

what i changed:
- creating dedicated buffers for reply list, counting their size with zmalloc_size
- when creating a new reply node from, preallocate it to at least 16k.
- when appending a new reply to the buffer, first fill all the unused space of the
  previous node before starting a new one.

other changes:
- expose mem_not_counted_for_evict info field for the benefit of the test suite
- add a test to make sure slave buffers are counted correctly and that they don't cause eviction
2018-07-16 16:43:42 +03:00
zhaozhao.zz 73306c6fed Streams: correctly propagate xdel if needed 2018-07-16 20:48:07 +08:00
antirez 103c5a1a3c Add a few comments to streamIteratorRemoveEntry(). 2018-07-16 12:41:55 +02:00
Salvatore Sanfilippo a317f55d25
Merge pull request #5131 from soloestoy/optimize-xdel
Streams: free lp if all elements are deleted
2018-07-16 12:39:38 +02:00
antirez 185e0d9cd8 Modify XINFO field from last-id to last-generated-id.
Related to #5129.
2018-07-16 12:25:26 +02:00
Salvatore Sanfilippo 4215e74be5
Merge pull request #5129 from soloestoy/xinfo-show-last-id
Streams: show last id for streams and groups
2018-07-16 12:24:14 +02:00
zhaozhao.zz c9324f81a2 Streams: free lp if all elements are deleted 2018-07-16 15:57:41 +08:00
zhaozhao.zz b4ba5ac840 Streams: show last id for streams and groups 2018-07-16 13:24:54 +08:00
Salvatore Sanfilippo ab33bcd346
Merge pull request #5120 from andrewsensus/leap-year-comment-patch-1
update leap year comment
2018-07-13 18:18:45 +02:00
antirez 2352a51992 Test: XDEL fuzz testing. Remove and check stage. 2018-07-13 17:58:17 +02:00
antirez 3d7d20b7f3 Test: fix lshuffle by providing the "K" combinator. 2018-07-13 17:52:39 +02:00
antirez 967ad3643c Test: add lshuffle in the Tcl utility functions set. 2018-07-13 17:51:03 +02:00
antirez d6efd5fc1d Test: XDEL fuzz testing, stream creation. 2018-07-13 17:47:26 +02:00
andrewsensus 8dc08ae215
update leap year comment 2018-07-13 09:46:30 -06:00
antirez 699971535e Merge branch 'unstable' of github.com:/antirez/redis into unstable 2018-07-13 17:41:10 +02:00
antirez a93f8f0998 Test: XDEL basic test. 2018-07-13 17:40:48 +02:00
Salvatore Sanfilippo a44a59340c
Merge pull request #5119 from trevor211/fixSlowlogConfig
Fix slowlog config
2018-07-13 17:35:15 +02:00
WuYunlong d6ba4fd56d Fix config set slowlog-log-slower-than and condition in createLatencyReport 2018-07-13 17:53:55 +08:00
WuYunlong b3660be8f5 Add test in slowlog.tcl 2018-07-13 17:51:06 +08:00
artix d4182a0a0d Cluster Manager: more checks on --cluster-weight option. 2018-07-13 10:51:58 +02:00
artix d222eda9f0 Redis-trib deprecated: it no longer works and it
outputs a warning to the user.
2018-07-13 10:51:58 +02:00
artix 513eb5728c Cluster Manager: auth support (-a argument). 2018-07-13 10:51:58 +02:00
Salvatore Sanfilippo f3980bb9fd
Merge pull request #5115 from shenlongxing/patch-1
Delete unused role checking.
2018-07-12 19:07:40 +02:00
Shen Longxing c2a85fb3c5
Delete unused role checking.
When check rdb file, it is unnecessary to check role.
2018-07-12 21:21:37 +08:00
Salvatore Sanfilippo 4cb5bd4e9d
Merge pull request #4820 from charpty/wip-serverc-simplify
Remove unnecessary return statements
2018-07-12 13:42:15 +02:00
antirez 8d6b7861a7 Add regression test for #5111. 2018-07-12 13:35:17 +02:00
antirez b6260a0270 Streams: when re-delivering because of SETID, reset deliveries counter.
We don't want to increment the deliveries here, because the sysadmin
reset the consumer group so the desire is likely to restart processing,
and having the PEL polluted with old information is not useful but
probably confusing.

Related to #5111.
2018-07-12 13:19:39 +02:00
antirez a7c180e559 Simplify duplicated NACK #5112 fix.
We don't really need to distinguish between the case the consumer is the
same or is a different one.
2018-07-12 13:15:54 +02:00
Salvatore Sanfilippo bf4def0fbc
Merge pull request #5112 from 0xtonyxia/fix-xreadgroup-crash-after-setid
Streams: fix xreadgroup crash after xgroup SETID is sent.
2018-07-12 13:04:22 +02:00
Salvatore Sanfilippo 167705519b
Merge pull request #5114 from oranagra/defrag_32
Active defrag fixes for 32bit builds (again)
2018-07-11 22:07:46 +02:00
Oran Agra 920158ec81 Active defrag fixes for 32bit builds (again)
* overflow in jemalloc fragmentation hint to the defragger
2018-07-11 16:09:00 +03:00
Salvatore Sanfilippo f45e790125
Merge pull request #4967 from JingchengLi/unstable
fix repeat argument issue and reduce unnessary loop times for redis-cli.
2018-07-10 15:13:20 +02:00
tengfeng 9505dd2011 fix repeat argument issue and reduce unnessary loop times for redis-cli. 2018-07-10 20:58:01 +08:00
antirez 0420c3276f Merge branch 'unstable' of github.com:/antirez/redis into unstable 2018-07-10 12:06:44 +02:00
antirez 28e95c7c52 Streams: fix typo "consumer". 2018-07-10 12:04:31 +02:00
antirez a8c1bb310e Streams: fix new XREADGROUP sync logic. 2018-07-10 12:02:03 +02:00
antirez 1a02b5f6ee Streams: make blocking for > a truly special case.
To simplify the semantics of blocking for a group, this commit changes
the implementation to better match the description we provide of
conusmer groups: blocking for > will make the consumer waiting for new
elements in the group. However blocking for any other ID will always
serve the local history of the consumer.

However it must be noted that the > ID is actually an alias for the
special ID ms/seq of UINT64_MAX,UINT64_MAX.
2018-07-10 11:34:17 +02:00
antirez a71e814853 Streams: send an error to consumers blocked on non-existing group.
To detect when the group (or the whole key) is destroyed to send an
error to the consumers blocked in such group is a problem, so we leave
the consumers listening, the sysadmin is free to create or destroy
groups assuming she/he knows what to do. However a client may be blocked
in a given consumer group, that is later destroyed. Then the stream
receives new elements. In that case there is no sane behavior to serve
the consumer... but to report an error about the group no longer
existing.

More about detecting this synchronously and why it is not done:

1. Normally we don't do that, we leave clients blocked for other data
types such as lists.

2. When we free a stream object there is no longer information about
what was the key it was associated with, so while destroying the
consumer groups we miss the info to unblock the clients in that moment.

3. Objects can be reclaimed in other threads where it is no longer safe
to do client operations.
2018-07-10 11:19:06 +02:00
antirez 09327f11dd Streams: fix unblocking logic into a consumer group.
When a client blocks for a consumer group, we don't know the actual ID
we want to be served: other clients blocked in the same consumer group
may be served first, so the consumer group latest delivered ID changes.
This was not handled correctly, all the clients in the consumer group
were unblocked without data but the first.
2018-07-10 11:11:41 +02:00
dejun.xdj 3f8a3efe5f Streams: fix xreadgroup crash after xgroup SETID is sent.
For issue #5111.
2018-07-10 16:26:13 +08:00
Salvatore Sanfilippo 7239e9ca5f
Merge pull request #5095 from 0xtonyxia/fix-indentation
Fix indentation.
2018-07-09 13:56:39 +02:00
dejun.xdj 61f12973f7 Bugfix: PEL is incorrect when consumer is blocked using xreadgroup with NOACK option.
Save NOACK option into client.blockingState structure.
2018-07-09 13:40:29 +02:00
antirez b67f027699 redis-cli: fix #4990 additional argument in help. 2018-07-09 13:36:47 +02:00
antirez 18d65849fd redis-cli: fix #5096 double error message. 2018-07-09 13:25:48 +02:00
antirez 846203279c redis-cli: cliConnect() flags CC_FORCE and CC_QUIET.
We need CC_QUIET in order to fix #5096 by silently failing if needed.
2018-07-09 13:24:30 +02:00
Amit Dey a3a5a25fa0 fixing broken link in CONTRIBUTING
http://help.github.com/send-pull-requests/ 
is no longer supported

this change modifies the link to the working one
https://help.github.com/articles/creating-a-pull-request/
2018-07-09 13:14:57 +02:00
dejun.xdj 289d8d9c2c CLIENT UNBLOCK: fix client unblock help message. 2018-07-09 13:03:57 +02:00