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
394b9749
Commit
394b9749
authored
Sep 17, 2018
by
antirez
Browse files
Merge branch 'unstable' of github.com:/antirez/redis into unstable
parents
378218d7
bd33014f
Changes
1
Show whitespace changes
Inline
Side-by-side
src/module.c
View file @
394b9749
...
...
@@ -474,7 +474,7 @@ void moduleHandlePropagationAfterCommandCallback(RedisModuleCtx *ctx) {
if
(
c
->
flags
&
CLIENT_LUA
)
return
;
/* Handle the replication of the final EXEC, since whatever a command
* emits is always wrappe
re
d around MULTI/EXEC. */
* emits is always wrapped around MULTI/EXEC. */
if
(
ctx
->
flags
&
REDISMODULE_CTX_MULTI_EMITTED
)
{
robj
*
propargv
[
1
];
propargv
[
0
]
=
createStringObject
(
"EXEC"
,
4
);
...
...
@@ -2150,7 +2150,9 @@ int RM_ZsetRangePrev(RedisModuleKey *key) {
*
* The function is variadic and the user must specify pairs of field
* names and values, both as RedisModuleString pointers (unless the
* CFIELD option is set, see later).
* CFIELD option is set, see later). At the end of the field/value-ptr pairs,
* NULL must be specified as last argument to signal the end of the arguments
* in the variadic function.
*
* Example to set the hash argv[1] to the value argv[2]:
*
...
...
@@ -2987,7 +2989,7 @@ int RM_ModuleTypeSetValue(RedisModuleKey *key, moduleType *mt, void *value) {
}
/* Assuming RedisModule_KeyType() returned REDISMODULE_KEYTYPE_MODULE on
* the key, returns the modu
e
l type pointer of the value stored at key.
* the key, returns the modul
e
type pointer of the value stored at key.
*
* If the key is NULL, is not associated with a module type, or is empty,
* then NULL is returned instead. */
...
...
@@ -3287,7 +3289,7 @@ void RM_DigestAddLongLong(RedisModuleDigest *md, long long ll) {
mixDigest
(
md
->
o
,
buf
,
len
);
}
/* See the do
ucmne
tation for `RedisModule_DigestAddElement()`. */
/* See the do
cumen
tation for `RedisModule_DigestAddElement()`. */
void
RM_DigestEndSequence
(
RedisModuleDigest
*
md
)
{
xorDigest
(
md
->
x
,
md
->
o
,
sizeof
(
md
->
o
));
memset
(
md
->
o
,
0
,
sizeof
(
md
->
o
));
...
...
@@ -3484,7 +3486,7 @@ void unblockClientFromModule(client *c) {
* reply_timeout: called when the timeout is reached in order to send an
* error to the client.
*
* free_privdata: called in order to free the privat
a
data that is passed
* free_privdata: called in order to free the privat
e
data that is passed
* by RedisModule_UnblockClient() call.
*/
RedisModuleBlockedClient
*
RM_BlockClient
(
RedisModuleCtx
*
ctx
,
RedisModuleCmdFunc
reply_callback
,
RedisModuleCmdFunc
timeout_callback
,
void
(
*
free_privdata
)(
RedisModuleCtx
*
,
void
*
),
long
long
timeout_ms
)
{
...
...
@@ -3681,7 +3683,7 @@ void moduleBlockedClientTimedOut(client *c) {
bc
->
timeout_callback
(
&
ctx
,(
void
**
)
c
->
argv
,
c
->
argc
);
moduleFreeContext
(
&
ctx
);
/* For timeout events, we do not want to call the disconnect callback,
* because the bloc
e
kd client will be automatically disconnected in
* because the block
e
d client will be automatically disconnected in
* this case, and the user can still hook using the timeout callback. */
bc
->
disconnect_callback
=
NULL
;
}
...
...
@@ -3698,7 +3700,7 @@ int RM_IsBlockedTimeoutRequest(RedisModuleCtx *ctx) {
return
(
ctx
->
flags
&
REDISMODULE_CTX_BLOCKED_TIMEOUT
)
!=
0
;
}
/* Get the privat
a
data set by RedisModule_UnblockClient() */
/* Get the privat
e
data set by RedisModule_UnblockClient() */
void
*
RM_GetBlockedClientPrivateData
(
RedisModuleCtx
*
ctx
)
{
return
ctx
->
blocked_privdata
;
}
...
...
@@ -4084,7 +4086,7 @@ size_t RM_GetClusterSize(void) {
*
* * REDISMODULE_NODE_MYSELF This node
* * REDISMODULE_NODE_MASTER The node is a master
* * REDISMODULE_NODE_SLAVE The n
d
oe is a
slave
* * REDISMODULE_NODE_SLAVE The no
d
e is a
replica
* * REDISMODULE_NODE_PFAIL We see the node as failing
* * REDISMODULE_NODE_FAIL The cluster agrees the node is failing
* * REDISMODULE_NODE_NOFAILOVER The slave is configured to never failover
...
...
@@ -4243,7 +4245,7 @@ RedisModuleTimerID RM_CreateTimer(RedisModuleCtx *ctx, mstime_t period, RedisMod
}
/* Stop a timer, returns REDISMODULE_OK if the timer was found, belonged to the
* calling module, and was stoped, otherwise REDISMODULE_ERR is returned.
* calling module, and was stop
p
ed, otherwise REDISMODULE_ERR is returned.
* If not NULL, the data pointer is set to the value of the data argument when
* the timer was created. */
int
RM_StopTimer
(
RedisModuleCtx
*
ctx
,
RedisModuleTimerID
id
,
void
**
data
)
{
...
...
@@ -4260,7 +4262,7 @@ int RM_StopTimer(RedisModuleCtx *ctx, RedisModuleTimerID id, void **data) {
* (in milliseconds), and the private data pointer associated with the timer.
* If the timer specified does not exist or belongs to a different module
* no information is returned and the function returns REDISMODULE_ERR, otherwise
* REDISMODULE_OK is returned. The argum
n
ets remaining or data can be NULL if
* REDISMODULE_OK is returned. The argume
n
ts remaining or data can be NULL if
* the caller does not need certain information. */
int
RM_GetTimerInfo
(
RedisModuleCtx
*
ctx
,
RedisModuleTimerID
id
,
uint64_t
*
remaining
,
void
**
data
)
{
RedisModuleTimer
*
timer
=
raxFind
(
Timers
,(
unsigned
char
*
)
&
id
,
sizeof
(
id
));
...
...
@@ -4475,7 +4477,7 @@ int moduleUnload(sds name) {
moduleUnregisterCommands
(
module
);
/* Rem
v
oe any noification subscribers this module might have */
/* Remo
v
e any no
t
ification subscribers this module might have */
moduleUnsubscribeNotifications
(
module
);
/* Unregister all the hooks. TODO: Yet no hooks support here. */
...
...
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