Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
dfe9714c
Unverified
Commit
dfe9714c
authored
Sep 20, 2020
by
Wen Hui
Committed by
GitHub
Sep 20, 2020
Browse files
Add Swapdb Module Event (#7804)
parent
1b3b7520
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/db.c
View file @
dfe9714c
...
@@ -1157,6 +1157,8 @@ void swapdbCommand(client *c) {
...
@@ -1157,6 +1157,8 @@ void swapdbCommand(client *c) {
addReplyError
(
c
,
"DB index is out of range"
);
addReplyError
(
c
,
"DB index is out of range"
);
return
;
return
;
}
else
{
}
else
{
RedisModuleSwapDbInfo
si
=
{
REDISMODULE_SWAPDBINFO_VERSION
,
id1
,
id2
};
moduleFireServerEvent
(
REDISMODULE_EVENT_SWAPDB
,
0
,
&
si
);
server
.
dirty
++
;
server
.
dirty
++
;
addReply
(
c
,
shared
.
ok
);
addReply
(
c
,
shared
.
ok
);
}
}
...
...
src/module.c
View file @
dfe9714c
...
@@ -7174,6 +7174,20 @@ void ModuleForkDoneHandler(int exitcode, int bysignal) {
...
@@ -7174,6 +7174,20 @@ void ModuleForkDoneHandler(int exitcode, int bysignal) {
* int32_t progress; // Approximate progress between 0 and 1024,
* int32_t progress; // Approximate progress between 0 and 1024,
* or -1 if unknown.
* or -1 if unknown.
*
*
* RedisModuleEvent_SwapDB
*
* This event is called when a swap db command has been successfully
* Executed.
* For this event call currently there is no subevents available.
*
* The data pointer can be casted to a RedisModuleSwapDbInfo
* structure with the following fields:
*
* int32_t dbnum_first; // Swap Db first dbnum
* int32_t dbnum_second; // Swap Db second dbnum
*
*
*
* The function returns REDISMODULE_OK if the module was successfully subscribed
* The function returns REDISMODULE_OK if the module was successfully subscribed
* for the specified event. If the API is called from a wrong context then
* for the specified event. If the API is called from a wrong context then
* REDISMODULE_ERR is returned. */
* REDISMODULE_ERR is returned. */
...
@@ -7278,6 +7292,8 @@ void moduleFireServerEvent(uint64_t eid, int subid, void *data) {
...
@@ -7278,6 +7292,8 @@ void moduleFireServerEvent(uint64_t eid, int subid, void *data) {
moduledata
=
data
;
moduledata
=
data
;
}
else
if
(
eid
==
REDISMODULE_EVENT_CRON_LOOP
)
{
}
else
if
(
eid
==
REDISMODULE_EVENT_CRON_LOOP
)
{
moduledata
=
data
;
moduledata
=
data
;
}
else
if
(
eid
==
REDISMODULE_EVENT_SWAPDB
)
{
moduledata
=
data
;
}
}
ModulesInHooks
++
;
ModulesInHooks
++
;
...
...
src/redismodule.h
View file @
dfe9714c
...
@@ -190,6 +190,7 @@ typedef uint64_t RedisModuleTimerID;
...
@@ -190,6 +190,7 @@ typedef uint64_t RedisModuleTimerID;
#define REDISMODULE_EVENT_CRON_LOOP 8
#define REDISMODULE_EVENT_CRON_LOOP 8
#define REDISMODULE_EVENT_MODULE_CHANGE 9
#define REDISMODULE_EVENT_MODULE_CHANGE 9
#define REDISMODULE_EVENT_LOADING_PROGRESS 10
#define REDISMODULE_EVENT_LOADING_PROGRESS 10
#define REDISMODULE_EVENT_SWAPDB 11
typedef
struct
RedisModuleEvent
{
typedef
struct
RedisModuleEvent
{
uint64_t
id
;
/* REDISMODULE_EVENT_... defines. */
uint64_t
id
;
/* REDISMODULE_EVENT_... defines. */
...
@@ -243,6 +244,10 @@ static const RedisModuleEvent
...
@@ -243,6 +244,10 @@ static const RedisModuleEvent
RedisModuleEvent_LoadingProgress
=
{
RedisModuleEvent_LoadingProgress
=
{
REDISMODULE_EVENT_LOADING_PROGRESS
,
REDISMODULE_EVENT_LOADING_PROGRESS
,
1
1
},
RedisModuleEvent_SwapDB
=
{
REDISMODULE_EVENT_SWAPDB
,
1
};
};
/* Those are values that are used for the 'subevent' callback argument. */
/* Those are values that are used for the 'subevent' callback argument. */
...
@@ -374,6 +379,17 @@ typedef struct RedisModuleLoadingProgressInfo {
...
@@ -374,6 +379,17 @@ typedef struct RedisModuleLoadingProgressInfo {
#define RedisModuleLoadingProgress RedisModuleLoadingProgressV1
#define RedisModuleLoadingProgress RedisModuleLoadingProgressV1
#define REDISMODULE_SWAPDBINFO_VERSION 1
typedef
struct
RedisModuleSwapDbInfo
{
uint64_t
version
;
/* Not used since this structure is never passed
from the module to the core right now. Here
for future compatibility. */
int32_t
dbnum_first
;
/* Swap Db first dbnum */
int32_t
dbnum_second
;
/* Swap Db second dbnum */
}
RedisModuleSwapDbInfoV1
;
#define RedisModuleSwapDbInfo RedisModuleSwapDbInfoV1
/* ------------------------- End of common defines ------------------------ */
/* ------------------------- End of common defines ------------------------ */
#ifndef REDISMODULE_CORE
#ifndef REDISMODULE_CORE
...
...
tests/modules/hooks.c
View file @
dfe9714c
...
@@ -253,6 +253,16 @@ void moduleChangeCallback(RedisModuleCtx *ctx, RedisModuleEvent e, uint64_t sub,
...
@@ -253,6 +253,16 @@ void moduleChangeCallback(RedisModuleCtx *ctx, RedisModuleEvent e, uint64_t sub,
LogStringEvent
(
ctx
,
keyname
,
ei
->
module_name
);
LogStringEvent
(
ctx
,
keyname
,
ei
->
module_name
);
}
}
void
swapDbCallback
(
RedisModuleCtx
*
ctx
,
RedisModuleEvent
e
,
uint64_t
sub
,
void
*
data
)
{
REDISMODULE_NOT_USED
(
e
);
REDISMODULE_NOT_USED
(
sub
);
RedisModuleSwapDbInfo
*
ei
=
data
;
LogNumericEvent
(
ctx
,
"swapdb-first"
,
ei
->
dbnum_first
);
LogNumericEvent
(
ctx
,
"swapdb-second"
,
ei
->
dbnum_second
);
}
/* This function must be present on each Redis module. It is used in order to
/* This function must be present on each Redis module. It is used in order to
* register the commands into the Redis server. */
* register the commands into the Redis server. */
int
RedisModule_OnLoad
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
int
RedisModule_OnLoad
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
...
@@ -289,6 +299,8 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
...
@@ -289,6 +299,8 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
RedisModuleEvent_CronLoop
,
cronLoopCallback
);
RedisModuleEvent_CronLoop
,
cronLoopCallback
);
RedisModule_SubscribeToServerEvent
(
ctx
,
RedisModule_SubscribeToServerEvent
(
ctx
,
RedisModuleEvent_ModuleChange
,
moduleChangeCallback
);
RedisModuleEvent_ModuleChange
,
moduleChangeCallback
);
RedisModule_SubscribeToServerEvent
(
ctx
,
RedisModuleEvent_SwapDB
,
swapDbCallback
);
event_log
=
RedisModule_CreateDict
(
ctx
);
event_log
=
RedisModule_CreateDict
(
ctx
);
...
...
tests/unit/moduleapi/hooks.tcl
View file @
dfe9714c
...
@@ -147,6 +147,12 @@ tags "modules" {
...
@@ -147,6 +147,12 @@ tags "modules" {
set replica_stdout
[
srv 0 stdout
]
set replica_stdout
[
srv 0 stdout
]
}
}
test
{
Test swapdb hooks
}
{
r swapdb 0 10
assert_equal
[
r hooks.event_last swapdb-first
]
0
assert_equal
[
r hooks.event_last swapdb-second
]
10
}
# look into the log file of the server that just exited
# look into the log file of the server that just exited
test
{
Test shutdown hook
}
{
test
{
Test shutdown hook
}
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment