mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 08:08:53 -05:00
Added RM_MonotonicMicroseconds() API to provide monotonic time function (#10101)
Added RM_MonotonicMicroseconds(). Modules can use monotonic timestamp counter for measurements.
This commit is contained in:
parent
e9bff7978a
commit
f41cc87088
@ -1326,6 +1326,11 @@ long long RM_Milliseconds(void) {
|
||||
return mstime();
|
||||
}
|
||||
|
||||
/* Return counter of micro-seconds relative to an arbitrary point in time. */
|
||||
uint64_t RM_MonotonicMicroseconds(void) {
|
||||
return getMonotonicUs();
|
||||
}
|
||||
|
||||
/* Mark a point in time that will be used as the start time to calculate
|
||||
* the elapsed execution time when RM_BlockedClientMeasureTimeEnd() is called.
|
||||
* Within the same command, you can call multiple times
|
||||
@ -10599,6 +10604,7 @@ void moduleRegisterCoreAPI(void) {
|
||||
REGISTER_API(GetBlockedClientPrivateData);
|
||||
REGISTER_API(AbortBlock);
|
||||
REGISTER_API(Milliseconds);
|
||||
REGISTER_API(MonotonicMicroseconds);
|
||||
REGISTER_API(BlockedClientMeasureTimeStart);
|
||||
REGISTER_API(BlockedClientMeasureTimeEnd);
|
||||
REGISTER_API(GetThreadSafeContext);
|
||||
|
@ -837,6 +837,7 @@ REDISMODULE_API int (*RedisModule_GetToDbIdFromOptCtx)(RedisModuleKeyOptCtx *ctx
|
||||
REDISMODULE_API const RedisModuleString * (*RedisModule_GetKeyNameFromOptCtx)(RedisModuleKeyOptCtx *ctx) REDISMODULE_ATTR;
|
||||
REDISMODULE_API const RedisModuleString * (*RedisModule_GetToKeyNameFromOptCtx)(RedisModuleKeyOptCtx *ctx) REDISMODULE_ATTR;
|
||||
REDISMODULE_API long long (*RedisModule_Milliseconds)(void) REDISMODULE_ATTR;
|
||||
REDISMODULE_API uint64_t (*RedisModule_MonotonicMicroseconds)(void) REDISMODULE_ATTR;
|
||||
REDISMODULE_API void (*RedisModule_DigestAddStringBuffer)(RedisModuleDigest *md, unsigned char *ele, size_t len) REDISMODULE_ATTR;
|
||||
REDISMODULE_API void (*RedisModule_DigestAddLongLong)(RedisModuleDigest *md, long long ele) REDISMODULE_ATTR;
|
||||
REDISMODULE_API void (*RedisModule_DigestEndSequence)(RedisModuleDigest *md) REDISMODULE_ATTR;
|
||||
@ -1154,6 +1155,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
|
||||
REDISMODULE_GET_API(GetDbIdFromOptCtx);
|
||||
REDISMODULE_GET_API(GetToDbIdFromOptCtx);
|
||||
REDISMODULE_GET_API(Milliseconds);
|
||||
REDISMODULE_GET_API(MonotonicMicroseconds);
|
||||
REDISMODULE_GET_API(DigestAddStringBuffer);
|
||||
REDISMODULE_GET_API(DigestAddLongLong);
|
||||
REDISMODULE_GET_API(DigestEndSequence);
|
||||
|
@ -302,6 +302,14 @@ int test_weird_cmd(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
|
||||
int test_monotonic_time(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
||||
REDISMODULE_NOT_USED(argv);
|
||||
REDISMODULE_NOT_USED(argc);
|
||||
|
||||
RedisModule_ReplyWithLongLong(ctx, RedisModule_MonotonicMicroseconds());
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
|
||||
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
||||
REDISMODULE_NOT_USED(argv);
|
||||
REDISMODULE_NOT_USED(argc);
|
||||
@ -341,6 +349,8 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
|
||||
/* Add a command with ':' in it's name, so that we can check commandstats sanitization. */
|
||||
if (RedisModule_CreateCommand(ctx,"test.weird:cmd", test_weird_cmd,"readonly",0,0,0) == REDISMODULE_ERR)
|
||||
return REDISMODULE_ERR;
|
||||
if (RedisModule_CreateCommand(ctx,"test.monotonic_time", test_monotonic_time,"",0,0,0) == REDISMODULE_ERR)
|
||||
return REDISMODULE_ERR;
|
||||
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
|
@ -128,4 +128,9 @@ start_server {tags {"modules"}} {
|
||||
set info [r info commandstats]
|
||||
assert_match {*cmdstat_test.weird_cmd:calls=1*} $info
|
||||
}
|
||||
|
||||
test {test monotonic time} {
|
||||
set x [r test.monotonic_time]
|
||||
assert { [r test.monotonic_time] >= $x }
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user