|
26 | 26 | #include "redisai.h"
|
27 | 27 | #undef REDISAI_H_INCLUDE
|
28 | 28 |
|
| 29 | +int redisMajorVersion; |
| 30 | +int redisMinorVersion; |
| 31 | +int redisPatchVersion; |
| 32 | + |
| 33 | +int rlecMajorVersion; |
| 34 | +int rlecMinorVersion; |
| 35 | +int rlecPatchVersion; |
| 36 | +int rlecBuild; |
| 37 | + |
| 38 | +void getRedisVersion() { |
| 39 | + RedisModuleCtx *ctx = RedisModule_GetThreadSafeContext(NULL); |
| 40 | + RedisModuleCallReply *reply = RedisModule_Call(ctx, "info", "c", "server"); |
| 41 | + assert(RedisModule_CallReplyType(reply) == REDISMODULE_REPLY_STRING); |
| 42 | + size_t len; |
| 43 | + const char *replyStr = RedisModule_CallReplyStringPtr(reply, &len); |
| 44 | + |
| 45 | + int n = sscanf(replyStr, "# Server\nredis_version:%d.%d.%d", &redisMajorVersion, |
| 46 | + &redisMinorVersion, &redisPatchVersion); |
| 47 | + |
| 48 | + assert(n == 3); |
| 49 | + |
| 50 | + rlecMajorVersion = -1; |
| 51 | + rlecMinorVersion = -1; |
| 52 | + rlecPatchVersion = -1; |
| 53 | + rlecBuild = -1; |
| 54 | + char *enterpriseStr = strstr(replyStr, "rlec_version:"); |
| 55 | + if (enterpriseStr) { |
| 56 | + n = sscanf(enterpriseStr, "rlec_version:%d.%d.%d-%d", &rlecMajorVersion, &rlecMinorVersion, |
| 57 | + &rlecPatchVersion, &rlecBuild); |
| 58 | + if (n != 4) { |
| 59 | + RedisModule_Log(NULL, "warning", "Could not extract enterprise version"); |
| 60 | + } |
| 61 | + } |
| 62 | + |
| 63 | + RedisModule_FreeCallReply(reply); |
| 64 | + RedisModule_FreeThreadSafeContext(ctx); |
| 65 | +} |
| 66 | + |
| 67 | +static inline int IsEnterprise() { |
| 68 | + return rlecMajorVersion != -1; |
| 69 | +} |
29 | 70 |
|
30 | 71 | /* ----------------------- RedisAI Module Commands ------------------------- */
|
31 | 72 |
|
@@ -1192,6 +1233,23 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
|
1192 | 1233 | if (RedisModule_Init(ctx, "ai", RAI_ENC_VER, REDISMODULE_APIVER_1)
|
1193 | 1234 | == REDISMODULE_ERR) return REDISMODULE_ERR;
|
1194 | 1235 |
|
| 1236 | + getRedisVersion(); |
| 1237 | + RedisModule_Log(ctx, "notice", "Redis version found by RedisAI: %d.%d.%d - %s", |
| 1238 | + redisMajorVersion, redisMinorVersion, redisPatchVersion, |
| 1239 | + IsEnterprise() ? "enterprise" : "oss"); |
| 1240 | + if (IsEnterprise()) { |
| 1241 | + RedisModule_Log(ctx, "notice", "Redis Enterprise version found by RedisAI: %d.%d.%d-%d", |
| 1242 | + rlecMajorVersion, rlecMinorVersion, rlecPatchVersion, rlecBuild); |
| 1243 | + } |
| 1244 | + |
| 1245 | + if (redisMajorVersion < 5 || |
| 1246 | + (redisMajorVersion == 5 && redisMinorVersion == 0 && redisPatchVersion < 7)) { |
| 1247 | + RedisModule_Log(ctx, "warning", "RedisAI requires Redis version equal or greater than 5.0.7"); |
| 1248 | + return REDISMODULE_ERR; |
| 1249 | + } |
| 1250 | + |
| 1251 | + RedisModule_Log(ctx, "notice", "RedisAI version: %d", RAI_ENC_VER); |
| 1252 | + |
1195 | 1253 | int flags = RedisModule_GetContextFlags(ctx);
|
1196 | 1254 |
|
1197 | 1255 | if(RedisAI_RegisterApi(ctx) != REDISMODULE_OK){
|
|
0 commit comments