27369 Commits

Author SHA1 Message Date
John Sully
15e1ee620f Fix TSAN errors in tests
Former-commit-id: 30207d2ab34f175b94f430f97581191343d23f1e
2021-03-16 02:29:24 +00:00
John Sully
6b579db919 Fix TSAN errors in tests
Former-commit-id: 30207d2ab34f175b94f430f97581191343d23f1e
2021-03-16 02:29:24 +00:00
benschermel
e40fe53395 re-label keydb-pro-server to keydb-server
Former-commit-id: eb6f61ad372f0f4e573b9b731eac6c7f2ada0d9f
2021-03-16 01:57:26 +00:00
benschermel
3adcc6efc7 re-label keydb-pro-server to keydb-server
Former-commit-id: eb6f61ad372f0f4e573b9b731eac6c7f2ada0d9f
2021-03-16 01:57:26 +00:00
John Sully
dc658ba47b Support deletes in the monkey
Former-commit-id: 84101aaa1bd0c89fbaffc11a264788cd75458c48
2021-03-15 19:41:38 +00:00
John Sully
712e524ea2 Support deletes in the monkey
Former-commit-id: 84101aaa1bd0c89fbaffc11a264788cd75458c48
2021-03-15 19:41:38 +00:00
guybe7
12991353b6 Missing EXEC on modules propagation after failed EVAL execution (#8654)
1. moduleReplicateMultiIfNeeded should use server.in_eval like
   moduleHandlePropagationAfterCommandCallback
2. server.in_eval could have been set to 1 and not reset back
   to 0 (a lot of missed early-exits after in_eval is already 1)

Note: The new assertions in processCommand cover (2) and I added
two module tests to cover (1)

Implications:
If an EVAL that failed (and thus left server.in_eval=1) runs before a module
command that replicates, the replication stream will contain MULTI (because
moduleReplicateMultiIfNeeded used to check server.lua_caller which is NULL
at this point) but not EXEC (because server.in_eval==1)
This only affects modules as module.c the only user of server.in_eval.

Affects versions 6.2.0, 6.2.1
2021-03-15 21:19:57 +02:00
guybe7
dba33a943d
Missing EXEC on modules propagation after failed EVAL execution (#8654)
1. moduleReplicateMultiIfNeeded should use server.in_eval like
   moduleHandlePropagationAfterCommandCallback
2. server.in_eval could have been set to 1 and not reset back
   to 0 (a lot of missed early-exits after in_eval is already 1)

Note: The new assertions in processCommand cover (2) and I added
two module tests to cover (1)

Implications:
If an EVAL that failed (and thus left server.in_eval=1) runs before a module
command that replicates, the replication stream will contain MULTI (because
moduleReplicateMultiIfNeeded used to check server.lua_caller which is NULL
at this point) but not EXEC (because server.in_eval==1)
This only affects modules as module.c the only user of server.in_eval.

Affects versions 6.2.0, 6.2.1
2021-03-15 21:19:57 +02:00
John Sully
ada1f2a527 Add the monkey script to enhance testing
Former-commit-id: 57ce7b9e9976ca6827415d756ea3cabef1a0d615
2021-03-15 15:32:43 +00:00
John Sully
8de2349fd6 Add the monkey script to enhance testing
Former-commit-id: 57ce7b9e9976ca6827415d756ea3cabef1a0d615
2021-03-15 15:32:43 +00:00
John Sully
319b4039af We can't swap databases if there are async rehashes
Former-commit-id: 4b8967f94667309c5585032db7403bf4c8885145
2021-03-15 05:46:52 +00:00
John Sully
96ab9c58ae We can't swap databases if there are async rehashes
Former-commit-id: 4b8967f94667309c5585032db7403bf4c8885145
2021-03-15 05:46:52 +00:00
John Sully
d7f3f2b4e5 Enable more asserts to better validate snapshots
Former-commit-id: 01113e2eec3a0dbe0d07f98289a0050df7713047
2021-03-14 23:40:41 +00:00
John Sully
f4eae316b2 Enable more asserts to better validate snapshots
Former-commit-id: 01113e2eec3a0dbe0d07f98289a0050df7713047
2021-03-14 23:40:41 +00:00
John Sully
7197ba2fe5 Fix incorrect memory order on refcounted strings
Former-commit-id: fcf3368b1d56ad7a11e510e5a66e415a46277e8b
2021-03-14 19:42:56 +00:00
John Sully
718c31000e Fix incorrect memory order on refcounted strings
Former-commit-id: fcf3368b1d56ad7a11e510e5a66e415a46277e8b
2021-03-14 19:42:56 +00:00
Huang Zhw
bbb0393c60 Fix typo and outdated comments. (#8640) 2021-03-14 09:41:43 +02:00
Huang Zhw
84d056d0f7
Fix typo and outdated comments. (#8640) 2021-03-14 09:41:43 +02:00
Guillem Jover
dc23b31573 Send the readiness notification when we are ready to accept connections (#8409)
On a replica we do accept connections, even though commands accessing
the database will operate in read-only mode. But the server is still
already operational and processing commands.

Not sending the readiness notification means that on a HA setup where
the nodes all start as replicas (with replicaof in the config) with
a replica that cannot connect to the master server and which might not
come back in a predictable amount of time or at all, the service
supervisor will end up timing out the service and terminating it, with
no option to promote it to be the main instance. This seems counter to
what the readiness notification is supposed to be signaling.

Instead send the readiness notification when we start accepting
commands, and then send the various server status changes as that.

Fixes: commit fb25e68f91045830c7239f3bd3eff1d84f572fa4
Fixes: commit eaf450c3011c2a28ac2b885bed677539115e837b
2021-03-14 08:46:26 +02:00
Guillem Jover
3a5905fa85
Send the readiness notification when we are ready to accept connections (#8409)
On a replica we do accept connections, even though commands accessing
the database will operate in read-only mode. But the server is still
already operational and processing commands.

Not sending the readiness notification means that on a HA setup where
the nodes all start as replicas (with replicaof in the config) with
a replica that cannot connect to the master server and which might not
come back in a predictable amount of time or at all, the service
supervisor will end up timing out the service and terminating it, with
no option to promote it to be the main instance. This seems counter to
what the readiness notification is supposed to be signaling.

Instead send the readiness notification when we start accepting
commands, and then send the various server status changes as that.

Fixes: commit 641c64ada10404356fc76c0b56a69b32c76f253c
Fixes: commit dfb598cf3304818e608ceb6b5d9529a293345c4a
2021-03-14 08:46:26 +02:00
John Sully
5bd11ae0eb Avoid queuing null pointers to be freed
Former-commit-id: f50541d437cd1d98139c29407bb3fb4d6ce17fca
2021-03-14 03:22:10 +00:00
John Sully
1f1f5bdc91 Avoid queuing null pointers to be freed
Former-commit-id: f50541d437cd1d98139c29407bb3fb4d6ce17fca
2021-03-14 03:22:10 +00:00
John Sully
767efb2519 Ensure the hash is passed through when moving tombstones
Former-commit-id: 91c8d2d38a33175c64c987b75e94c4b8782a3cdc
2021-03-14 03:21:09 +00:00
John Sully
b4d0679232 Ensure the hash is passed through when moving tombstones
Former-commit-id: 91c8d2d38a33175c64c987b75e94c4b8782a3cdc
2021-03-14 03:21:09 +00:00
John Sully
bb96b066e2 Reduce log spam
Former-commit-id: a5ba7bdde5435ad5b7cf066e0b45f6df1f784808
2021-03-14 03:19:41 +00:00
John Sully
b678ff7d3e Reduce log spam
Former-commit-id: a5ba7bdde5435ad5b7cf066e0b45f6df1f784808
2021-03-14 03:19:41 +00:00
John Sully
650fa335eb Remove rarely used bug-prone code paths from tricky snapshot code
Former-commit-id: dff84228afb97962d77caefe948154090dd5ce23
2021-03-14 03:19:04 +00:00
John Sully
5a53d87cb5 Remove rarely used bug-prone code paths from tricky snapshot code
Former-commit-id: dff84228afb97962d77caefe948154090dd5ce23
2021-03-14 03:19:04 +00:00
John Sully
6bf6956c30 Add checked build support to makefile
Former-commit-id: 7e27c371679d780137a5d39b03b9472651ddf686
2021-03-14 03:18:24 +00:00
John Sully
49cc53508d Add checked build support to makefile
Former-commit-id: 7e27c371679d780137a5d39b03b9472651ddf686
2021-03-14 03:18:24 +00:00
KinWaiYuen
ac5436d571 Optimize CLUSTER SLOTS reply by reducing unneeded loops (#8541)
This commit more efficiently computes the cluster bulk slots response 
by looping over the entire slot space once, instead of for each node.
2021-03-11 22:40:35 -08:00
KinWaiYuen
5b48d90049
Optimize CLUSTER SLOTS reply by reducing unneeded loops (#8541)
This commit more efficiently computes the cluster bulk slots response 
by looping over the entire slot space once, instead of for each node.
2021-03-11 22:40:35 -08:00
Wen Hui
063744b120 Sentinel: fix info_refresh time before sentinel get first response (#8567) 2021-03-11 22:28:21 +02:00
Wen Hui
3c09ce26fb
Sentinel: fix info_refresh time before sentinel get first response (#8567) 2021-03-11 22:28:21 +02:00
guybe7
606288ef68 Fix some memory leaks in propagagte.c (#8636)
Introduced by 5f91161823df27565710c1564e0860917222d21d
2021-03-11 13:50:13 +02:00
guybe7
a4f03bd7eb
Fix some memory leaks in propagagte.c (#8636)
Introduced by 3d0b427c30610b45c00b2377ee28bb69974ccea2
2021-03-11 13:50:13 +02:00
Oran Agra
6297c9cfdb allow RESET during busy scripts (#8629)
same as DISCARD, this command (RESET) is about client state, not server state
2021-03-11 07:52:27 +02:00
Oran Agra
4ae1bea323
allow RESET during busy scripts (#8629)
same as DISCARD, this command (RESET) is about client state, not server state
2021-03-11 07:52:27 +02:00
Harkrishn Patro
3e2aee4a3c Process hello command even if the default user has no permissions. (#8633)
Co-authored-by: Harkrishn Patro <harkrisp@amazon.com>
2021-03-10 21:19:35 -08:00
Harkrishn Patro
b70d81f60b
Process hello command even if the default user has no permissions. (#8633)
Co-authored-by: Harkrishn Patro <harkrisp@amazon.com>
2021-03-10 21:19:35 -08:00
cheese1
7afb218526 Changes http to https in texts (#8495) 2021-03-10 19:11:16 +02:00
cheese1
c945e1126a
Changes http to https in texts (#8495) 2021-03-10 19:11:16 +02:00
guybe7
5f91161823 Fix some issues with modules and MULTI/EXEC (#8617)
Bug 1:
When a module ctx is freed moduleHandlePropagationAfterCommandCallback
is called and handles propagation. We want to prevent it from propagating
commands that were not replicated by the same context. Example:
1. module1.foo does: RM_Replicate(cmd1); RM_Call(cmd2); RM_Replicate(cmd3)
2. RM_Replicate(cmd1) propagates MULTI and adds cmd1 to also_propagagte
3. RM_Call(cmd2) create a new ctx, calls call() and destroys the ctx.
4. moduleHandlePropagationAfterCommandCallback is called, calling
   alsoPropagates EXEC (Note: EXEC is still not written to socket),
   setting server.in_trnsaction = 0
5. RM_Replicate(cmd3) is called, propagagting yet another MULTI (now
   we have nested MULTI calls, which is no good) and then cmd3

We must prevent RM_Call(cmd2) from resetting server.in_transaction.
REDISMODULE_CTX_MULTI_EMITTED was revived for that purpose.

Bug 2:
Fix issues with nested RM_Call where some have '!' and some don't.
Example:
1. module1.foo does RM_Call of module2.bar without replication (i.e. no '!')
2. module2.bar internally calls RM_Call of INCR with '!'
3. at the end of module1.foo we call RM_ReplicateVerbatim

We want the replica/AOF to see only module1.foo and not the INCR from module2.bar

Introduced a global replication_allowed flag inside RM_Call to determine
whether we need to replicate or not (even if '!' was specified)

Other changes:
Split beforePropagateMultiOrExec to beforePropagateMulti afterPropagateExec
just for better readability
2021-03-10 18:02:17 +02:00
guybe7
3d0b427c30
Fix some issues with modules and MULTI/EXEC (#8617)
Bug 1:
When a module ctx is freed moduleHandlePropagationAfterCommandCallback
is called and handles propagation. We want to prevent it from propagating
commands that were not replicated by the same context. Example:
1. module1.foo does: RM_Replicate(cmd1); RM_Call(cmd2); RM_Replicate(cmd3)
2. RM_Replicate(cmd1) propagates MULTI and adds cmd1 to also_propagagte
3. RM_Call(cmd2) create a new ctx, calls call() and destroys the ctx.
4. moduleHandlePropagationAfterCommandCallback is called, calling
   alsoPropagates EXEC (Note: EXEC is still not written to socket),
   setting server.in_trnsaction = 0
5. RM_Replicate(cmd3) is called, propagagting yet another MULTI (now
   we have nested MULTI calls, which is no good) and then cmd3

We must prevent RM_Call(cmd2) from resetting server.in_transaction.
REDISMODULE_CTX_MULTI_EMITTED was revived for that purpose.

Bug 2:
Fix issues with nested RM_Call where some have '!' and some don't.
Example:
1. module1.foo does RM_Call of module2.bar without replication (i.e. no '!')
2. module2.bar internally calls RM_Call of INCR with '!'
3. at the end of module1.foo we call RM_ReplicateVerbatim

We want the replica/AOF to see only module1.foo and not the INCR from module2.bar

Introduced a global replication_allowed flag inside RM_Call to determine
whether we need to replicate or not (even if '!' was specified)

Other changes:
Split beforePropagateMultiOrExec to beforePropagateMulti afterPropagateExec
just for better readability
2021-03-10 18:02:17 +02:00
Itamar Haber
178d26cc87 Adds LEN to STRALGO's comment (#8626)
Ref: https://github.com/redis/redis-doc/pull/1529
2021-03-10 16:19:48 +02:00
Itamar Haber
ceb3a7a8f6
Adds LEN to STRALGO's comment (#8626)
Ref: https://github.com/redis/redis-doc/pull/1529
2021-03-10 16:19:48 +02:00
guybe7
7d3a985722 Cleanup ZADD_* flags (#8559)
Have a clear separation between in and out flags

Other changes:

delete dead code in RM_ZsetIncrby: if zsetAdd returned error (happens only if
the result of the operation is NAN or if score is NAN) we return immediately so
there is no way that zsetAdd succeeded and returned NAN in the out-flags
2021-03-10 16:09:43 +02:00
guybe7
61a73de64d
Cleanup ZADD_* flags (#8559)
Have a clear separation between in and out flags

Other changes:

delete dead code in RM_ZsetIncrby: if zsetAdd returned error (happens only if
the result of the operation is NAN or if score is NAN) we return immediately so
there is no way that zsetAdd succeeded and returned NAN in the out-flags
2021-03-10 16:09:43 +02:00
Oran Agra
cbfe4999dd strip % sign from current_fork_perc info field (#8628)
`master_sync_perc` and `loading_loaded_perc` don't have that sign,
and i think the info field should be a raw floating point number (the name suggests its units).

we already have `used_memory_peak_perc` and `used_memory_dataset_perc` which do add the `%` sign, but:
1) i think it was a mistake but maybe too late to fix now, and maybe not too late to fix for `current_fork_perc`
2) it is more important to be consistent with the two other "progress" "prec" metrics, and not with the "utilization" metric.
2021-03-10 15:25:16 +02:00
Oran Agra
7778f1b4b0
strip % sign from current_fork_perc info field (#8628)
`master_sync_perc` and `loading_loaded_perc` don't have that sign,
and i think the info field should be a raw floating point number (the name suggests its units).

we already have `used_memory_peak_perc` and `used_memory_dataset_perc` which do add the `%` sign, but:
1) i think it was a mistake but maybe too late to fix now, and maybe not too late to fix for `current_fork_perc`
2) it is more important to be consistent with the two other "progress" "prec" metrics, and not with the "utilization" metric.
2021-03-10 15:25:16 +02:00