diff --git a/src/module.c b/src/module.c index 1f1140b2..c0423a3d 100644 --- a/src/module.c +++ b/src/module.c @@ -1330,6 +1330,9 @@ int RM_GetSelectedDb(RedisModuleCtx *ctx) { * * * REDISMODULE_CTX_FLAGS_OOM: Redis is out of memory according to the * maxmemory setting. + * + * * REDISMODULE_CTX_FLAGS_OOM_WARNING: Less than 25% of memory remains before + * reaching the maxmemory level. */ int RM_GetContextFlags(RedisModuleCtx *ctx) { @@ -1369,8 +1372,10 @@ int RM_GetContextFlags(RedisModuleCtx *ctx) { } /* OOM flag. */ - if (getMaxmemoryState(NULL,NULL,NULL,NULL) == C_ERR) { + float level; + if (getMaxmemoryState(NULL,NULL,NULL,&level) == C_ERR) { flags |= REDISMODULE_CTX_FLAGS_OOM; + if (level > 0.75) flags |= REDISMODULE_CTX_FLAGS_OOM_WARNING; } return flags; diff --git a/src/redismodule.h b/src/redismodule.h index 517d1354..d500d28b 100644 --- a/src/redismodule.h +++ b/src/redismodule.h @@ -83,6 +83,8 @@ #define REDISMODULE_CTX_FLAGS_EVICT (1<<9) /* Redis is out of memory according to the maxmemory flag. */ #define REDISMODULE_CTX_FLAGS_OOM (1<<10) +/* Less than 25% of memory available according to maxmemory. */ +#define REDISMODULE_CTX_FLAGS_OOM_WARNING (1<<11) #define REDISMODULE_NOTIFY_GENERIC (1<<2) /* g */ #define REDISMODULE_NOTIFY_STRING (1<<3) /* $ */