- 16 Dec, 2016 7 commits
-
-
antirez authored
The new algorithm provides the same speed with a smaller error for cardinalities in the range 0-100k. Before switching, the new and old algorithm behavior was studied in details in the context of issue #3677. You can find a few graphs and motivations there.
-
antirez authored
Otherwise for small cardinalities the algorithm will output something like, for example, 4.99 for a candinality of 5, that will be converted to 4 producing a huge error.
-
antirez authored
The PFADD now takes an array and has mandatory two arguments.
-
Harish Murthy authored
Config option to use LogLog-Beta Algorithm for Cardinality
-
Salvatore Sanfilippo authored
fixed stop condition in RM_ZsetRangeNext and RM_ZsetRangePrev
-
antirez authored
-
antirez authored
The commit improves ziplistRepr() and adds a new debugging subcommand so that we can trigger the dump directly from the Redis API. This command capability was used while investigating issue #3684.
-
- 14 Dec, 2016 3 commits
-
-
Dvir Volk authored
-
antirez authored
After the fix for #3673 the ttl var is always initialized inside the loop itself, so the early initialization is not needed. Variables declaration also moved to a more local scope.
-
Salvatore Sanfilippo authored
Reset the ttl for additional keys
-
- 13 Dec, 2016 5 commits
-
-
antirez authored
-
antirez authored
We need to use a dictionary type that frees the key, since we copy the keys in the dictionary we use to track expires created in the slave side.
-
antirez authored
-
antirez authored
-
antirez authored
BACKGROUND AND USE CASEj Redis slaves are normally write only, however the supprot a "writable" mode which is very handy when scaling reads on slaves, that actually need write operations in order to access data. For instance imagine having slaves replicating certain Sets keys from the master. When accessing the data on the slave, we want to peform intersections between such Sets values. However we don't want to intersect each time: to cache the intersection for some time often is a good idea. To do so, it is possible to setup a slave as a writable slave, and perform the intersection on the slave side, perhaps setting a TTL on the resulting key so that it will expire after some time. THE BUG Problem: in order to have a consistent replication, expiring of keys in Redis replication is up to the master, that synthesize DEL operations to send in the replication stream. However slaves logically expire keys by hiding them from read attempts from clients so that if the master did not promptly sent a DEL, the client still see logically expired keys as non existing. Because slaves don't actively expire keys by actually evicting them but just masking from the POV of read operations, if a key is created in a writable slave, and an expire is set, the key will be leaked forever: 1. No DEL will be received from the master, which does not know about such a key at all. 2. No eviction will be performed by the slave, since it needs to disable eviction because it's up to masters, otherwise consistency of data is lost. THE FIX In order to fix the problem, the slave should be able to tag keys that were created in the slave side and have an expire set in some way. My solution involved using an unique additional dictionary created by the writable slave only if needed. The dictionary is obviously keyed by the key name that we need to track: all the keys that are set with an expire directly by a client writing to the slave are tracked. The value in the dictionary is a bitmap of all the DBs where such a key name need to be tracked, so that we can use a single dictionary to track keys in all the DBs used by the slave (actually this limits the solution to the first 64 DBs, but the default with Redis is to use 16 DBs). This solution allows to pay both a small complexity and CPU penalty, which is zero when the feature is not used, actually. The slave-side eviction is encapsulated in code which is not coupled with the rest of the Redis core, if not for the hook to track the keys. TODO I'm doing the first smoke tests to see if the feature works as expected: so far so good. Unit tests should be added before merging into the 4.0 branch.
-
- 12 Dec, 2016 2 commits
-
-
Salvatore Sanfilippo authored
Fix redis-cli rare crash.
-
Yossi Gottlieb authored
This happens if the server (mysteriously) returns an unexpected response to the COMMAND command.
-
- 08 Dec, 2016 1 commit
-
-
Jan-Erik Rediger authored
Before, if a previous key had a TTL set but the current one didn't, the TTL was reused and thus resulted in wrong expirations set. This behaviour was experienced, when `MigrateDefaultPipeline` in redis-trib was set to >1 Fixes #3655
-
- 06 Dec, 2016 2 commits
-
-
Salvatore Sanfilippo authored
Add '\n' to MEMORY DOCTOR command output message
-
wangshaonan authored
is 0 or empty is 1
-
- 05 Dec, 2016 5 commits
-
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
The test now uses more diverse radius sizes, especially sizes near or greater the whole earth surface are used, that are known to trigger edge cases. Moreover the PRNG seeding was probably resulting into the same sequence tested over and over again, now seeding unsing the current unix time in milliseconds. Related to #3631.
-
antirez authored
A bug was reported in the context in issue #3631. The root cause of the bug was that certain neighbor boxes were zeroed after the "inside the bounding box or not" check, simply because the bounding box computation function was wrong. A few debugging infos where enhanced and moved in other parts of the code. A check to avoid steps=0 was added, but is unrelated to this issue and I did not verified it was an actual bug in practice.
-
- 02 Dec, 2016 1 commit
-
-
antirez authored
No longer makes sense since writable slaves only do local writes now: writes are no longer passed to sub-slaves in the stream.
-
- 01 Dec, 2016 2 commits
-
-
Chris Lamb authored
-
Salvatore Sanfilippo authored
Fix typo in RedisModuleTypeMethods declaration.
-
- 30 Nov, 2016 4 commits
-
-
Yossi Gottlieb authored
-
Salvatore Sanfilippo authored
fix memory corruption on RM_FreeCallReply
-
antirez authored
-
Dvir Volk authored
-
- 29 Nov, 2016 5 commits
- 28 Nov, 2016 2 commits
-
-
antirez authored
This actually includes two changes: 1) No newlines to take the master-slave link up when the upstream master is down. Doing this is dangerous because the sub-slave often is received replication protocol for an half-command, so can't receive newlines without desyncing the replication link, even with the code in order to cancel out the bytes that PSYNC2 was using. Moreover this is probably also not needed/sane, because anyway the slave can keep serving requests, and because if it's configured to don't serve stale data, it's a good idea, actually, to break the link. 2) When a +CONTINUE with a different ID is received, we now break connection with the sub-slaves: they need to be notified as well. This was part of the original specification but for some reason it was not implemented in the code, and was alter found as a PSYNC2 bug in the integration testing.
-
antirez authored
This is the PSYNC2 test that helped find issues in the code, and that still can show a protocol desync from time to time. Work is in progress in order to find the issue. For now the test is not enabled in "make test" and must be run manually.
-
- 25 Nov, 2016 1 commit
-
-
antirez authored
-