summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* In Redis RDB check: more details in error reportings.rdb-checkantirez2016-07-011-13/+21
|
* In Redis RDB check: log decompression errors.antirez2016-07-012-2/+23
|
* In Redis RDB check: log object type on error.antirez2016-07-011-2/+27
|
* Added a trivial program to randomly corrupt RDB files in /utils.antirez2016-07-011-0/+44
|
* In Redis RDB check: minor output message changes.antirez2016-07-011-1/+4
|
* In Redis RDB check: better error reporting.antirez2016-07-014-14/+71
|
* In Redis RDB check: initial POC.antirez2016-06-302-660/+189
| | | | | | | | | | | | | | So far we used an external program (later executed within Redis) and parser in order to check RDB files for correctness. This forces, at each RDB format update, to have two copies of the same format implementation that are hard to keep in sync. Morover the former RDB checker only checked the very high-level format of the file, without actually trying to load things in memory. Certain corruptions can only be handled by really loading key-value pairs. This first commit attempts to unify the Redis RDB loadig code with the task of checking the RDB file for correctness. More work is needed but it looks like a sounding direction so far.
* Test: new randomized stress tester for #3343 alike bugs.antirez2016-06-281-2/+27
|
* Stress tester WIP.antirez2016-06-281-0/+3
|
* Regression test for issue #3343 exact min crash sequence.antirez2016-06-281-0/+16
| | | | | Note: it was verified that it can crash the test suite without the patch applied.
* Merge branch 'unstable' of github.com:/antirez/redis into unstableantirez2016-06-272-2/+2
|\
| * Merge pull request #3342 from yossigo/fix_callocSalvatore Sanfilippo2016-06-241-1/+1
| |\ | | | | | | Fix RedisModule_Calloc() definition typo.
| | * Fix RedisModule_Calloc() definition typo.Yossi Gottlieb2016-06-231-1/+1
| |/
| * Merge pull request #3324 from mishan/fix-wrong-comment-about-sentinel-modeSalvatore Sanfilippo2016-06-231-1/+1
| |\ | | | | | | Fix incorrect comment for checkForSentinelMode function
| | * Fix incorrect comment for checkForSentinelMode functionMisha Nasledov2016-06-161-1/+1
| | |
* | | Fix quicklistReplaceAtIndex() by updating the quicklist ziplist size.antirez2016-06-271-0/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The quicklist takes a cached version of the ziplist representation size in bytes. The implementation must update this length every time the underlying ziplist changes. However quicklistReplaceAtIndex() failed to fix the length. During LSET calls, the size of the ziplist blob and the cached size inside the quicklist diverged. Later, when this size is used in an authoritative way, for example during nodes splitting in order to copy the nodes, we end with a duplicated node that may contain random garbage. This commit should fix issue #3343, however several problems were found reviewing the quicklist.c code in search of this bug that should be addressed soon or later. For example: 1. To take a cached ziplist length is fragile since failing to update it leads to this kind of issues. 2. The node splitting code needs auditing. For example it works just for a side effect of ziplistDeleteRange() to be able to cope with a wrong count of elements to remove. The code inside quicklist.c assumes that -1 means "delete till the end" while actually it's just a count of how many elements to delete, and is an unsigned count. So -1 gets converted into the maximum integer, and just by chance the ziplist code stops deleting elements after there are no more to delete. 3. Node splitting is extremely inefficient, it copies the node and removes elements from both nodes even when actually there is to move a single entry from one node to the other, or when the new resulting node is empty at all so there is nothing to copy but just to create a new node. However at least for Redis 3.2 to introduce fresh code inside quicklist.c may be even more risky, so instead I'm writing a better fuzzy tester to stress the internals a bit more in order to anticipate other possible bugs. This bug was found using a fuzzy tester written after having some clue about where the bug could be. The tester eventually created a ~2000 commands sequence able to always crash Redis. I wrote a better version of the tester that searched for the smallest sequence that could crash Redis automatically. Later this smaller sequence was minimized by removing random commands till it still crashed the server. This resulted into a sequence of 7 commands. With this small sequence it was just a matter of filling the code with enough printf() to understand enough state to fix the bug.
* | Modules: mention RedisModule_Calloc() in the doc.antirez2016-06-231-0/+1
| |
* | Merge pull request #3335 from dvirsky/rm_callocSalvatore Sanfilippo2016-06-232-1/+13
|\ \ | | | | | | added RM_Calloc implementation
| * | added RM_Calloc implementationDvir Volk2016-06-222-1/+13
| | |
* | | Merge branch 'unstable' of github.com:/antirez/redis into unstableantirez2016-06-235-2/+26
|\ \ \
| * \ \ Merge pull request #3336 from yossigo/create_string_from_stringSalvatore Sanfilippo2016-06-235-2/+26
| |\ \ \ | | | | | | | | | | Add RedisModule_CreateStringFromString().
| | * | | Add RedisModule_CreateStringFromString().Yossi Gottlieb2016-06-225-2/+26
| | | | |
* | | | | Actually remove static from #3331.antirez2016-06-231-2/+1
|/ / / / | | | | | | | | | | | | I forgot -a when amending in the previous commit.
* | | | Minor change to conform PR #3331 to Redis code base style.antirez2016-06-231-2/+1
| | | | | | | | | | | | | | | | Also avoid "static" in order to have symbols during crashes.
* | | | Merge pull request #3331 from yossigo/fix_openkey_crashSalvatore Sanfilippo2016-06-231-6/+13
|\ \ \ \ | | | | | | | | | | Fix occasional RM_OpenKey() crashes.
| * | | | Cleanup: remove zset reset function from RM_ZsetRangeStop().Yossi Gottlieb2016-06-221-7/+13
| | | | |
| * | | | Fix occasional RM_OpenKey() crashes.Yossi Gottlieb2016-06-211-0/+1
| | |/ / | |/| |
* | | | Merge pull request #3338 from tielei/unstableSalvatore Sanfilippo2016-06-231-2/+2
|\ \ \ \ | | | | | | | | | | A string with 21 chars is not representable as a 64-bit integer.
| * | | | A string with 21 chars is not representable as a 64-bit integer.tielei2016-06-231-2/+2
|/ / / /
* | | | Merge pull request #3330 from yossigo/fix_constSalvatore Sanfilippo2016-06-2313-38/+38
|\ \ \ \ | | | | | | | | | | Use const in Redis Module API where possible.
| * | | | Use const in Redis Module API where possible.Yossi Gottlieb2016-06-2013-38/+38
| |/ / /
* | | | Modules: changes to logging function.antirez2016-06-233-19/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit changes what provided by PR #3315 (merged) in order to let the user specify the log level as a string. The define could be also used, but when this happens, they must be decoupled from the defines in the Redis core, like in the other part of the Redis modules implementations, so that a switch statement (or a function) remaps between the two, otherwise we are no longer free to change the internal Redis defines.
* | | | Add RedisModule_Log() logging API function.Yossi Gottlieb2016-06-233-0/+42
| | | |
* | | | Commit change in autoMemoryFreed(): first -> last.antirez2016-06-231-1/+2
| | | | | | | | | | | | | | | | | | | | It's more natural to call the last entry added as "last", the original commet got me confused until I actually read the code.
* | | | Modules: implement zig-zag scanning in autoMemoryFreed().antirez2016-06-231-16/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of the time to check the last element is the way to go, however there are patterns where the contrary is the best choice. Zig-zag scanning implemented in this commmit always checks the obvious element first (the last added -- think at a loop where the last element allocated gets freed again and again), and continues checking one element in the head and one in the tail. Thanks to @dvisrky that fixed the original implementation of the function and proposed zig zag scanning.
* | | | Merge pull request #3244 from dvirsky/optimize_autoMemoryFreedSalvatore Sanfilippo2016-06-231-4/+12
|\ \ \ \ | |_|/ / |/| | | Optimized autoMemoryFreed loop
| * | | optimized amFree even furtherDvir Volk2016-05-191-4/+9
| | | |
| * | | Optimized autoMemoryFreed loopDvir Volk2016-05-191-1/+4
| | | |
* | | | Modules doc: hint about replacing libc malloc calls.antirez2016-06-221-1/+15
| |/ / |/| |
* | | Merge pull request #3252 from oranagra/config_fixSalvatore Sanfilippo2016-06-171-3/+3
|\ \ \ | |_|/ |/| | fix: config set list-max-ziplist-size didn't support negative values
| * | config set list-max-ziplist-size didn't support negative values, unlike ↵oranagra2016-05-221-3/+3
| |/ | | | | | | config file
* | Fix Sentinel pending commands counting.antirez2016-06-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This bug most experienced effect was an inability of Redis to reconfigure back old masters to slaves after they are reachable again after a failover. This was due to failing to reset the count of the pending commands properly, so the master appeared fovever down. Was introduced in Redis 3.2 new Sentinel connection sharing feature which is a lot more complex than the 3.0 code, but more scalable. Many thanks to people reporting the issue, and especially to @sskorgal for investigating the issue in depth. Hopefully closes #3285.
* | redis-cli: really connect to the right server.antirez2016-06-161-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | I recently introduced populating the autocomplete help array with the COMMAND command if available. However this was performed before parsing the arguments, defaulting to instance 6379. After the connection is performed it remains stable. The effect is that if there is an instance running on port 6339, whatever port you specify is ignored and 6379 is connected to instead. The right port will be selected only after a reconnection. Close #3314.
* | RESTORE: accept RDB dumps with older versions.antirez2016-06-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Reference issue #3218. Checking the code I can't find a reason why the original RESTORE code was so opinionated about restoring only the current version. The code in to `rdb.c` appears to be capable as always to restore data from older versions of Redis, and the only places where it is needed the current version in order to correctly restore data, is while loading the opcodes, not the values itself as it happens in the case of RESTORE. For the above reasons, this commit enables RESTORE to accept older versions of values payloads.
* | Merge pull request #3255 from oranagra/error_stringSalvatore Sanfilippo2016-06-161-1/+1
|\ \ | | | | | | CLIENT error message was out of date
| * | CLIENT error message was out of dateoranagra2016-05-231-1/+1
| |/
* | Merge pull request #3256 from oranagra/georasius_negSalvatore Sanfilippo2016-06-161-2/+5
|\ \ | | | | | | fix georadius returns multiple replies
| * | fix georadius returns multiple repliesoranagra2016-05-231-2/+5
| |/
* | Minor aesthetic fixes to PR #3264.antirez2016-06-161-5/+5
| | | | | | | | | | | | | | Comment format fixed + local var modified from camel case to underscore separators as Redis code base normally does (camel case is mostly used for global symbols like structure names, function names, global vars, ...).
* | Merge pull request #3264 from oranagra/bitfield_fix2Salvatore Sanfilippo2016-06-161-9/+20
|\ \ | | | | | | fix crash in BITFIELD GET on non existing key or wrong type see #3259