- 01 Jul, 2016 1 commit
-
-
sskorgal authored
-
- 28 Jun, 2016 3 commits
- 27 Jun, 2016 2 commits
-
-
antirez authored
-
antirez authored
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.
-
- 24 Jun, 2016 1 commit
-
-
Salvatore Sanfilippo authored
Fix RedisModule_Calloc() definition typo.
-
- 23 Jun, 2016 17 commits
-
-
Yossi Gottlieb authored
-
Salvatore Sanfilippo authored
Fix incorrect comment for checkForSentinelMode function
-
antirez authored
-
Salvatore Sanfilippo authored
added RM_Calloc implementation
-
antirez authored
-
antirez authored
I forgot -a when amending in the previous commit.
-
Salvatore Sanfilippo authored
Add RedisModule_CreateStringFromString().
-
antirez authored
Also avoid "static" in order to have symbols during crashes.
-
Salvatore Sanfilippo authored
Fix occasional RM_OpenKey() crashes.
-
Salvatore Sanfilippo authored
A string with 21 chars is not representable as a 64-bit integer.
-
tielei authored
-
Salvatore Sanfilippo authored
Use const in Redis Module API where possible.
-
antirez authored
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.
-
Yossi Gottlieb authored
-
antirez authored
It's more natural to call the last entry added as "last", the original commet got me confused until I actually read the code.
-
antirez authored
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.
-
Salvatore Sanfilippo authored
Optimized autoMemoryFreed loop
-
- 22 Jun, 2016 4 commits
-
-
Yossi Gottlieb authored
-
Dvir Volk authored
-
antirez authored
-
Yossi Gottlieb authored
-
- 21 Jun, 2016 1 commit
-
-
Yossi Gottlieb authored
-
- 20 Jun, 2016 1 commit
-
-
Yossi Gottlieb authored
-
- 17 Jun, 2016 1 commit
-
-
Salvatore Sanfilippo authored
fix: config set list-max-ziplist-size didn't support negative values
-
- 16 Jun, 2016 8 commits
-
-
Misha Nasledov authored
-
antirez authored
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.
-
antirez authored
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.
-
antirez authored
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.
-
Salvatore Sanfilippo authored
CLIENT error message was out of date
-
Salvatore Sanfilippo authored
fix georadius returns multiple replies
-
antirez authored
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, ...).
-
Salvatore Sanfilippo authored
fix crash in BITFIELD GET on non existing key or wrong type see #3259
-
- 15 Jun, 2016 1 commit
-
-
Salvatore Sanfilippo authored
Sentinel: fix check when can't send the command to the promoted slave
-