10327 Commits

Author SHA1 Message Date
John Sully
72293d62c9 Work around broken package installed on CI machines
Former-commit-id: 3340aaf8ad87fe0f7dd5c53254cd34605a3a8f12
2020-05-08 00:57:39 -04:00
John Sully
bab6512408 Update CI
Former-commit-id: 332900e24a539c694929dd4163a25037ded6b19e
2020-05-08 00:44:00 -04:00
John Sully
87b5eb649a Bump version
Former-commit-id: 88eeb1c13cdf21df274ea9c364f35c4de522d215
2020-05-08 00:25:19 -04:00
John Sully
e03a2bbb7f Merge branch 'keydbpro' into PRO_RELEASE_6
Former-commit-id: 219d7f3499fd826f039a1490ed3317791b084f94
2020-05-08 00:24:58 -04:00
John Sully
f4e938e1af Free memory before we enter a script and may not have a chance
Former-commit-id: 7a3173c74ca617b4d0f9e852ab580731fa92f3df
2020-05-08 00:15:58 -04:00
John Sully
da4cac6770 Fix bug where we don't correctly process maxmemory during bgsave
Former-commit-id: a0f2694d15784628df5d5ecb72b42c2979100f93
2020-05-08 00:14:55 -04:00
John Sully
a3b80c293b Be *much* more aggressive flushing memory
Former-commit-id: f0bdc4fb5fce02d79c1aa2bcf384aa06580ff9e1
2020-05-07 23:07:31 -04:00
John Sully
22b46fa2f2 Disable cluster tests
They are unreliable on slow hardware.

Former-commit-id: 86f9ed6248c6629af026e27d14d15a3eb50a2090
2020-05-07 01:49:04 -04:00
antirez
d36292e2b8 Redis 6.0.1. 2020-05-02 00:10:20 +02:00
antirez
1812dc1644 Cast printf() argument to the format specifier.
We could use uint64_t specific macros, but after all it's simpler to
just use an obvious equivalent type plus casting: this will be a no op
and is simpler than fixed size types printf macros.
2020-05-02 00:04:19 +02:00
antirez
410e48ffb4 Revert "optimize memory usage of deferred replies"
This reverts commit 4ed5b7cb74caf5bef6606909603e371af0da4f9b.
2020-05-02 00:04:19 +02:00
antirez
ef0c2a9268 Save a call to stopThreadedIOIfNeeded() for the base case.
Probably no performance changes, but the code should be trivial to
read as in "No threading? Use the normal function and return".
2020-05-02 00:04:19 +02:00
Diab Neiroukh
4e0d22e919 Clang requires libatomic to be linked via LDFLAGS
Clang requires the libatomic to be linked via LDFLAGS or else the linker
will fail to recognise __atomic macros.

An error as a result of not passing -latomic to the linker can be seen
below:

ld.lld: error: undefined symbol: __atomic_fetch_add_2
>>> referenced by sds.c:185
>>>               lto.tmp:(sdsdupshared)
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:276: keydb-server] Error 1
Former-commit-id: dcd7b684bbb7b4719a0e44d5764b01c48eb619dd
2020-04-30 15:06:10 -04:00
antirez
1367cb7b6d Redis 6.0.0 GA. 2020-04-30 15:04:41 +02:00
antirez
c7e3501d25 Update help.h again before Redis 6 GA. 2020-04-30 13:43:58 +02:00
antirez
9d5ba2e7be redis-cli: fix hints with subcommands. 2020-04-30 13:43:58 +02:00
antirez
6ffa739c13 redis-cli command help updated. 2020-04-30 13:02:59 +02:00
zhaozhao.zz
b5dc95d4cc lazyfree & eviction: record latency generated by lazyfree eviction
1. add eviction-lazyfree monitor
2. put eviction-del & eviction-lazyfree into eviction-cycle
   that means eviction-cycle contains all the latency in
   the eviction cycle including del and lazyfree
3. use getMaxmemoryState to check if we can break in lazyfree-evict
2020-04-30 13:02:59 +02:00
antirez
c3aa13a46a MIGRATE AUTH2 for ACL support. 2020-04-30 13:02:59 +02:00
antirez
4f61650c3c CLIENT KILL USER <username>. 2020-04-30 13:02:59 +02:00
antirez
aec7e4a836 Fix tracking table max keys option in redis.conf. 2020-04-30 13:02:58 +02:00
antirez
99569af4aa redis-cli: safer cluster fix with unreachalbe masters. 2020-04-30 13:02:58 +02:00
antirez
9a9953d331 redis-cli: simplify cluster nodes coverage display. 2020-04-30 13:02:58 +02:00
antirez
dbf803bf9c redis-cli: try to make clusterManagerFixOpenSlot() more readable.
Also improve the message to make clear that there is no *clear* owner,
not that there is no owner at all.
2020-04-30 13:02:58 +02:00
Guy Benoish
20a9fe531c XINFO STREAM FULL should have a default COUNT of 10 2020-04-30 13:02:58 +02:00
antirez
78b9c097c9 Comment clearly why we moved some code in #6623. 2020-04-30 13:02:58 +02:00
srzhao
e9811c3b12 fix pipelined WAIT performance issue.
If client gets blocked again in `processUnblockedClients`, redis will not send
`REPLCONF GETACK *` to slaves untill next eventloop, so the client will be
blocked for 100ms by default(10hz) if no other file event fired.

move server.get_ack_from_slaves sinppet after `processUnblockedClients`, so
that both the first WAIT command that puts client in blocked context and the
following WAIT command processed in processUnblockedClients would trigger
redis-sever to send `REPLCONF GETACK *`, so that the eventloop would get
`REPLCONG ACK <reploffset>` from slaves and unblocked ASAP.
2020-04-30 13:02:58 +02:00
antirez
d66ac30fd4 Fix create-cluster BIN_PATH. 2020-04-30 13:02:58 +02:00
Guy Benoish
dc3d865edc Extend XINFO STREAM output
Introducing XINFO STREAM <key> FULL
2020-04-30 13:02:58 +02:00
hwware
12bb6b0f08 Fix not used marco in cluster.c 2020-04-30 13:02:58 +02:00
Itamar Haber
1541e3e522 Update create-cluster 2020-04-30 13:02:58 +02:00
Itamar Haber
c028751ef0 Adds BIN_PATH to create-cluster
Allows for setting the binaries path if used outside the upstream repo.

Also documents `call` in usage clause (TODO: port to
`redis-cli --cluster call` or just deprecate it).
2020-04-30 13:02:58 +02:00
John Sully
a3e0c42dc4 cluster tests should be a named task
Former-commit-id: f715d0b860816165a2748ebf21876df87756a25a
2020-04-29 18:43:55 -04:00
John Sully
4a5aa68074 Run cluster tests as part of CI
Former-commit-id: 98d690b8499d0c3085ce56021dac499349898850
2020-04-29 18:41:51 -04:00
John Sully
ad3de92c57 use serverAssert() instead of assert() to get callstacks in fastlock
Former-commit-id: 45535e8a6377963dce5b158a9a6e448c5c22a0a8
2020-04-28 22:41:07 -04:00
John Sully
d9409d3614 Merge branch 'unstable' of https://github.com/JohnSully/KeyDB into unstable
Former-commit-id: c78895aaea4bbe058f49e28151238f4a4c8bae60
2020-04-28 22:24:45 -04:00
John Sully
83118f2584 Bump version
Former-commit-id: 8e12ff0cd9e50867b42b165af278a7dc91fc17e1
2020-04-28 20:49:39 -04:00
John Sully
c400e5825b Merge branch 'keydbpro' into PRO_RELEASE_6
Former-commit-id: 6e7ffcddfbde8ee310e07b510097b69104f862b8
2020-04-28 20:48:54 -04:00
John Sully
2ab2078085 Fix failure to count keys in cluster slots when reloading a FLASH database
Former-commit-id: f6dd863e51f91620f184ff80f08cfe518d29c87f
2020-04-28 20:48:46 -04:00
Oran Agra
fb0a0c6451 hickup, re-fix dictEncObjKeyCompare
come to think of it, in theory (not in practice), getDecodedObject can
return the same original object with refcount incremented, so the
pointer comparision in the previous commit was invalid.
so now instead of checking the encoding, we explicitly check the
refcount.
2020-04-28 11:20:15 +02:00
Oran Agra
a8995ce3c9 fix loading race in psync2 tests 2020-04-28 11:20:15 +02:00
antirez
ffbe6543ab Rework comment in dictEncObjKeyCompare(). 2020-04-28 11:20:15 +02:00
Oran Agra
d92f14e825 allow dictFind using static robj
since the recent addition of OBJ_STATIC_REFCOUNT and the assertion in
incrRefCount it is now impossible to use dictFind using a static robj,
because dictEncObjKeyCompare will call getDecodedObject which tries to
increment the refcount just in order to decrement it later.
2020-04-28 11:20:15 +02:00
Madelyn Olson
e853b8f137 Added crcspeed library 2020-04-28 11:20:15 +02:00
Madelyn Olson
e49a60d9df Made crc64 test consistent 2020-04-28 11:20:15 +02:00
Madelyn Olson
1652f7b897 Implemented CRC64 based on slice by 4 2020-04-28 11:20:15 +02:00
Oran Agra
f1cd7f5880 optimize memory usage of deferred replies
When deffered reply is added the previous reply node cannot be used so
all the extra space we allocated in it is wasted. in case someone uses
deffered replies in a loop, each time adding a small reply, each of
these reply nodes (the small string reply) would have consumed a 16k
block.
now when we add anther diferred reply node, we trim the unused portion
of the previous reply block.

see #7123
2020-04-27 16:46:14 +02:00
Oran Agra
58619c1286 Keep track of meaningful replication offset in replicas too
Now both master and replicas keep track of the last replication offset
that contains meaningful data (ignoring the tailing pings), and both
trim that tail from the replication backlog, and the offset with which
they try to use for psync.

the implication is that if someone missed some pings, or even have
excessive pings that the promoted replica has, it'll still be able to
psync (avoid full sync).

the downside (which was already committed) is that replicas running old
code may fail to psync, since the promoted replica trims pings form it's
backlog.

This commit adds a test that reproduces several cases of promotions and
demotions with stale and non-stale pings

Background:
The mearningful offset on the master was added recently to solve a problem were
the master is left all alone, injecting PINGs into it's backlog when no one is
listening and then gets demoted and tries to replicate from a replica that didn't
have any of the PINGs (or at least not the last ones).

however, consider this case:
master A has two replicas (B and C) replicating directly from it.
there's no traffic at all, and also no network issues, just many pings in the
tail of the backlog. now B gets promoted, A becomes a replica of B, and C
remains a replica of A. when A gets demoted, it trims the pings from its
backlog, and successfully replicate from B. however, C is still aware of
these PINGs, when it'll disconnect and re-connect to A, it'll ask for something
that's not in the backlog anymore (since A trimmed the tail of it's backlog),
and be forced to do a full sync (something it didn't have to do before the
meaningful offset fix).

Besides that, the psync2 test was always failing randomly here and there, it
turns out the reason were PINGs. Investigating it shows the following scenario:

cycle 1: redis #1 is master, and all the rest are direct replicas of #1
cycle 2: redis #2 is promoted to master, #1 is a replica of #2 and #3 is replica of #1
now we see that when #1 is demoted it prints:
17339:S 21 Apr 2020 11:16:38.523 * Using the meaningful offset 3929963 instead of 3929977 to exclude the final PINGs (14 bytes difference)
17339:S 21 Apr 2020 11:16:39.391 * Trying a partial resynchronization (request e2b3f8817735fdfe5fa4626766daa938b61419e5:3929964).
17339:S 21 Apr 2020 11:16:39.392 * Successful partial resynchronization with master.
and when #3 connects to the demoted #2, #2 says:
17339:S 21 Apr 2020 11:16:40.084 * Partial resynchronization not accepted: Requested offset for secondary ID was 3929978, but I can reply up to 3929964

so the issue here is that the meaningful offset feature saved the day for the
demoted master (since it needs to sync from a replica that didn't get the last
ping), but it didn't help one of the other replicas which did get the last ping.
2020-04-27 15:52:49 +02:00
antirez
a0c54d5622 Fix STRALGO command flags. 2020-04-27 15:52:49 +02:00
Dave-in-lafayette
1713328723 fix for unintended crash during panic response
If redis crashes early, before lua is set up (like, if File Descriptor 0 is closed before exec), it will crash again trying to print memory statistics.
2020-04-27 15:52:49 +02:00