summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Update README.md with instructions how to build with systemd support (#7730)Leoš Literák2020-08-311-0/+5
| | | #7728 - update instructions for systemd support
* Fix oom-score-adj on older distros. (#7724)Yossi Gottlieb2020-08-301-2/+2
| | | | Don't assume `ps` handles `-h` to display output without headers and manually trim headers line from output.
* Optimize __ziplistCascadeUpdate algorithm (#6886)maohuazhu2020-08-281-47/+202
| | | | | | | | | | | | | | The previous algorithm is of O(n^2) time complexity. It would have run through the ziplist entries one by one, each time doing a `realloc` and a `memmove` (moving the entire tail of the ziplist). The new algorithm is O(n), it runs over all the records once, computing the size of the `realloc` needed, then does one `realloc`, and run thought the records again doing many smaller `memmove`s, each time moving just one record. So this change reduces many reallocs, and moves each record just once. Co-authored-by: zhumaohua <zhumaohua@megvii.com> Co-authored-by: Oran Agra <oran@redislabs.com>
* Use H/W Monotonic clock and updates to AE (#7644)Jim Brunner2020-08-288-90/+279
| | | | | | | | | | | | | | | | | | | | | | | Update adds a general source for retrieving a monotonic time. In addition, AE has been updated to utilize the new monotonic clock for timer processing. This performance improvement is **not** enabled in a default build due to various H/W compatibility concerns, see README.md for details. It does however change the default use of gettimeofday with clock_gettime and somewhat improves performance. This update provides the following 1. An interface for retrieving a monotonic clock. getMonotonicUs returns a uint64_t (aka monotime) with the number of micro-seconds from an arbitrary point. No more messing with tv_sec/tv_usec. Simple routines are provided for measuring elapsed milli-seconds or elapsed micro-seconds (the most common use case for a monotonic timer). No worries about time moving backwards. 2. High-speed assembler implementation for x86 and ARM. The standard method for retrieving the monotonic clock is POSIX.1b (1993): clock_gettime(CLOCK_MONOTONIC, timespec*). However, most modern processors provide a constant speed instruction clock which can be retrieved in a fraction of the time that it takes to call clock_gettime. For x86, this is provided by the RDTSC instruction. For ARM, this is provided by the CNTVCT_EL0 instruction. As a compile-time option, these high-speed timers can be chosen. (Default is POSIX clock_gettime.) 3. Refactor of event loop timers. The timer processing in ae.c has been refactored to use the new monotonic clock interface. This results in simpler/cleaner logic and improved performance.
* Fix rejectCommand trims newline in shared error objects, hung clients (#7714)Oran Agra2020-08-274-23/+42
| | | | | | | | | | | | | | | | | 65a3307bc (released in 6.0.6) has a side effect, when processCommand rejects a command with pre-made shared object error string, it trims the newlines from the end of the string. if that string is later used with addReply, the newline will be missing, breaking the protocol, and leaving the client hung. It seems that the only scenario which this happens is when replying with -LOADING to some command, and later using that reply from the CONFIG SET command (still during loading). this will result in hung client. Refactoring the code in order to avoid trimming these newlines from shared string objects, and do the newline trimming only in other cases where it's needed. Co-authored-by: Guy Benoish <guy.benoish@redislabs.com>
* Update memory metrics for INFO during loading (#7690)Oran Agra2020-08-276-36/+62
| | | | | | | | | | | | | | | During a long AOF or RDB loading, the memory stats were not updated, and INFO would return stale data, specifically about fragmentation and RSS. In the past some of these were sampled directly inside the INFO command, but were moved to cron as an optimization. This commit introduces a concept of loadingCron which should take some of the responsibilities of serverCron. It attempts to limit it's rate to approximately the server Hz, but may not be very accurate. In order to avoid too many system call, we use the cached ustime, and also make sure to update it in both AOF loading and RDB loading inside processEventsWhileBlocked (it seems AOF loading was missing it).
* EXEC with only read commands should not be rejected when OOM (#7696)valentinogeron2020-08-272-8/+51
| | | | | | | | If the server gets MULTI command followed by only read commands, and right before it gets the EXEC it reaches OOM, the client will get OOM response. So, from now on, it will get OOM response only if there was at least one command that was tagged with `use-memory` flag
* Add test coverage for CLIENT UNBLOCK (#7712)Oran Agra2020-08-271-1/+52
| | | plus minor other fixes to list.tcl
* Extended redis-benchmark instant metrics and overall latency report (#7600)filipe oliveira2020-08-2510-56/+2125
| | | A first step to enable a consistent full percentile analysis on query latency so that we can fully understand the performance and stability characteristics of the redis-server system we are measuring. It also improves the instantaneous reported metrics, and the csv output format.
* Expands lazyfree's effort estimate to include Streams (#5794)Itamar Haber2020-08-251-0/+24
| | | | | | | | Otherwise, it is treated as a single allocation and freed synchronously. The following logic is used for estimating the effort in constant-ish time complexity: 1. Check the number of nodes. 1. Add an allocation for each consumer group registered inside the stream. 1. Check the number of PELs in the first CG, and then add this count times the number of CGs. 1. Check the number of consumers in the first CG, and then add this count times the number of CGs.
* Fix wrong format specifiers of 'sdscatfmt' for the INFO command (#7706)Wang Yuan2020-08-241-1/+1
| | | unlike printf, sdscatfmt doesn't take %d
* Fix data race in bugReportStart (#7700)Wang Yuan2020-08-241-1/+4
| | | | | | | The previous fix using _Atomic was insufficient, since we check and set it in different places. The implications of this bug are just that a portion of the bug report will be shown twice, in the race case of two concurrent crashes.
* Add language servers stuff, test/tls to gitignore. (#7698)Yossi Gottlieb2020-08-241-0/+4
|
* Assert that setDeferredAggregateLen isn't called with negative valueValentino Geron2020-08-231-0/+1
| | | | | In case the redis is about to return broken reply we want to crash with assert so that we are notified about the bug. see #7687.
* Fix LPOS command when RANK is greater than matchesValentino Geron2020-08-232-2/+9
| | | | | | | | | | | | | | | | | | | | When calling to LPOS command when RANK is higher than matches, the return value is non valid response. For example: ``` LPUSH l a :1 LPOS l b RANK 5 COUNT 10 *-4 ``` It may break client-side parser. Now, we count how many replies were replied in the array. ``` LPUSH l a :1 LPOS l b RANK 5 COUNT 10 *0 ```
* Tests: fix redis-cli with remote hosts. (#7693)Yossi Gottlieb2020-08-233-5/+5
|
* fix make warnings (#7692)Wen Hui2020-08-211-3/+4
|
* use dictSlots for getting total slots number in dict (#7691)Wen Hui2020-08-211-3/+1
|
* RedisModuleEvent_LoadingProgress always at 100% progress (#7685)huangzhw2020-08-201-2/+2
| | | | It was also using the wrong struct, but luckily RedisModuleFlushInfo and RedisModuleLoadingProgress are identical.
* Modules: Invalidate saved_oparray after use (#7688)guybe72020-08-201-0/+2
| | | We wanna avoid a chance of someone using the pointer in it after it'll be freed / realloced.
* Fix flock cluster config may cause failure to restart after kill -9 (#7674)杨博东2020-08-204-7/+31
| | | | | | | | | | | After fork, the child process(redis-aof-rewrite) will get the fd opened by the parent process(redis), when redis killed by kill -9, it will not graceful exit(call prepareForShutdown()), so redis-aof-rewrite thread may still alive, the fd(lock) will still be held by redis-aof-rewrite thread, and redis restart will fail to get lock, means fail to start. This issue was causing failures in the cluster tests in github actions. Co-authored-by: Oran Agra <oran@redislabs.com>
* Update clusterMsgDataPublish to clusterMsgModule (#7682)Raghav Muddur2020-08-191-1/+1
| | | Correcting the variable to clusterMsgModule.
* Fixed hset error since it's shared with hmset (#7678)Madelyn Olson2020-08-191-1/+1
|
* Add comments on 'slave.repldboff' when use diskless replication (#7679)Wang Yuan2020-08-191-0/+2
|
* PERSIST should signalModifiedKey (Like EXPIRE does) (#7671)guybe72020-08-181-0/+1
|
* OOM Crash log include size of allocation attempt. (#7670)Oran Agra2020-08-181-1/+2
| | | | | Since users often post just the crash log in github issues, the log print that's above it is missing. No reason not to include the size in the panic message itself.
* edit auth failed message (#7648)Wen Hui2020-08-182-2/+2
| | | Edit auth failed message include user disabled case in hello command
* [module] using predefined REDISMODULE_NO_EXPIRE in RM_GetExpire (#7669)Wen Hui2020-08-181-1/+2
| | | It was already defined in the API header and the documentation, but not used by the implementation.
* Trim trailing spaces in error replies coming from rejectCommand (#7668)Oran Agra2020-08-181-1/+5
| | | | | | | | | | 65a3307bc9 added rejectCommand which takes an robj reply and passes it through addReplyErrorSafe to addReplyErrorLength. The robj contains newline at it's end, but addReplyErrorSafe converts it to spaces, and passes it to addReplyErrorLength which adds the protocol newlines. The result was that most error replies (like OOM) had extra two trailing spaces in them.
* Module API: fix missing RM_CLIENTINFO_FLAG_SSL. (#7666)Yossi Gottlieb2020-08-176-1/+82
| | | The `REDISMODULE_CLIENTINFO_FLAG_SSL` flag was already a part of the `RedisModuleClientInfo` structure but was not implemented.
* TLS: relax verification on CONFIG SET. (#7665)Yossi Gottlieb2020-08-172-7/+24
| | | | | | | | | | | | Avoid re-configuring (and validating) SSL/TLS configuration on `CONFIG SET` when TLS is not actively enabled for incoming connections, cluster bus or replication. This fixes failures when tests run without `--tls` on binaries that were built with TLS support. An additional benefit is that it's now possible to perform a multi-step configuration process while TLS is disabled. The new configuration will be verified and applied only when TLS is effectively enabled.
* Merge pull request #7661 from michael-grunder/hiredis-unique-sds-symbolsOran Agra2020-08-1613-627/+723
|\ | | | | | | | | | | | | | | | | | | | | This resolves an issue with sentinel that was created when hiredis was recently updated. this was due to sds symbol names clashing, since hiredis now includes different implementation of sdsrange than the one in redis. The state of things is that redis-benchamrk and redis-cli include only hiredis sds implementation. redis-cli even operates (calls sdscatlen) on sds that's allocated by hiredis. Sentinel however has both implementations of the sds library in it (now each with it's own unique symbols).
| * Use Hiredis' sdscompat.h to map sds* calls to hi_sds*michael-grunder2020-08-152-0/+2
| |
| * Merge commit 'bffbbeaa9a1a6b8e81384297272cb0631502e8fd' into ↵michael-grunder2020-08-1511-627/+721
| |\ |/ / | | | | hiredis-unique-sds-symbols
| * Squashed 'deps/hiredis/' changes from d5b4c69b7..00272d669michael-grunder2020-08-1511-627/+721
| | | | | | | | | | | | | | 00272d669 Rename sds calls so they don't conflict in Redis. git-subtree-dir: deps/hiredis git-subtree-split: 00272d669b11e96b8311d9bfe167c117f8887dd6
* | Annotate module API functions in redismodule.h for use with -fno-common (#6900)Nathan Scott2020-08-141-241/+265
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to keep the redismodule.h self-contained but still usable with gcc v10 and later, annotate each API function tentative definition with the __common__ attribute. This avoids the 'multiple definition' errors modules will otherwise see for all API functions at link time. Further details at gcc.gnu.org/gcc-10/porting_to.html Turn the existing __attribute__ ((unused)), ((__common__)) and ((print)) annotations into conditional macros for any compilers not accepting this syntax. These macros only expand to API annotations under gcc. Provide a pre- and post- macro for every API function, so that they can be defined differently by the file that includes redismodule.h. Removing REDISMODULE_API_FUNC in the interest of keeping the function declarations readable. Co-authored-by: Yossi Gottlieb <yossigo@gmail.com> Co-authored-by: Oran Agra <oran@redislabs.com>
* | wait command optimization (#7333)caozb2020-08-131-3/+3
| | | | | | | | | | | | | | | | Client that issued WAIT last will most likely have the highest replication offset, so imagine a probably common case where all clients are waiting for the same number of replicas. we prefer the loop to start from the last client (one waiting for the highest offset), so that the optimization in the function will call replicationCountAcksByOffset for each client until it found a good one, and stop calling it for the rest of the clients. the way the loop was implemented would mean that in such case it is likely to call replicationCountAcksByOffset for all clients. Note: the change from > to >= is not directly related to the above. Co-authored-by: 曹正斌 <caozb@jiedaibao.com>
* | Set the initial seed for random() (#5679)RemRain2020-08-121-0/+1
| |
* | Add oom-score-adj configuration option to control Linux OOM killer. (#1690)Yossi Gottlieb2020-08-128-0/+306
| | | | | | | | | | | | | | | | | | | | | | Add Linux kernel OOM killer control option. This adds the ability to control the Linux OOM killer oom_score_adj parameter for all Redis processes, depending on the process role (i.e. master, replica, background child). A oom-score-adj global boolean flag control this feature. In addition, specific values can be configured using oom-score-adj-values if additional tuning is required.
* | fix misleading typo hasActiveChildProcess doc comment (#7588)HarveyLiu2020-08-122-2/+2
| | | | | | and a misspell in rax.c
* | Fixed timer warning (#5953)Madelyn Olson2020-08-121-1/+1
| |
* | Replace usage of wrongtypeerr with helper (#7633)Madelyn Olson2020-08-119-64/+38
| | | | | | * Replace usage of wrongtypeerr with helper
* | Test:Fix invalid cases in hash.tcl and dump.tcl (#4611)Mota2020-08-122-5/+5
| |
* | Adds redis-cli and redis-benchmark dependencies for `make test` targetMota2020-08-111-2/+2
| | | | | | Obsoletes the need to run `make` before `make test`.
* | allow --pattern to be used along with --bigkeys (#3586)Wagner Francisco Mezaroba2020-08-111-2/+9
| | | | | | Adds --pattern option to cli's --bigkeys, --hotkeys & --scan modes
* | Merge pull request #6777 from pponnuvel/typos_in_readmeItamar Haber2020-08-111-2/+2
|\ \ | | | | | | Fix typos in README.md
| * | Fix typos in README.mdPonnuvel Palaniyappan2020-01-141-2/+2
| | |
* | | redis-benchmark: fix wrong random key for hset (#4895)zhaozhao.zz2020-08-111-1/+1
| | |
* | | Merge pull request #7618 from ShooterIT/benchmark-zsetItamar Haber2020-08-111-1/+17
|\ \ \ | | | | | | | | [Redis-benchmark] Support zset type
| * | | [Redis-benchmark] Remove zrem test, add zpopmin testShooterIT2020-08-081-5/+5
| | | |