diff --git a/src/command_parser.c b/src/command_parser.c index aaa805c11..b538c7b59 100644 --- a/src/command_parser.c +++ b/src/command_parser.c @@ -30,9 +30,8 @@ static int _ModelRunCommand_ParseArgs(RedisModuleCtx *ctx, RedisModuleString **a size_t argpos = 1; RedisModuleKey *modelKey; const int status = - RAI_GetModelFromKeyspace(ctx, argv[argpos], &modelKey, model, REDISMODULE_READ); + RAI_GetModelFromKeyspace(ctx, argv[argpos], &modelKey, model, REDISMODULE_READ, error); if (status == REDISMODULE_ERR) { - RAI_SetError(error, RAI_EMODELRUN, "ERR Model not found"); return REDISMODULE_ERR; } RAI_HoldString(NULL, argv[argpos]); diff --git a/src/model.c b/src/model.c index 511f04b62..908b172d3 100644 --- a/src/model.c +++ b/src/model.c @@ -20,21 +20,22 @@ #include "util/string_utils.h" #include #include "DAG/dag.h" +#include "err.h" /* Return REDISMODULE_ERR if there was an error getting the Model. * Return REDISMODULE_OK if the model value stored at key was correctly * returned and available at *model variable. */ int RAI_GetModelFromKeyspace(RedisModuleCtx *ctx, RedisModuleString *keyName, RedisModuleKey **key, - RAI_Model **model, int mode) { + RAI_Model **model, int mode, RAI_Error *error) { *key = RedisModule_OpenKey(ctx, keyName, mode); if (RedisModule_KeyType(*key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_CloseKey(*key); - RedisModule_ReplyWithError(ctx, "ERR model key is empty"); + RAI_SetError(error, REDISMODULE_KEYTYPE_EMPTY, "ERR model key is empty"); return REDISMODULE_ERR; } if (RedisModule_ModuleTypeGetType(*key) != RedisAI_ModelType) { RedisModule_CloseKey(*key); - RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE); + RAI_SetError(error, REDISMODULE_ERR, REDISMODULE_ERRORMSG_WRONGTYPE); return REDISMODULE_ERR; } *model = RedisModule_ModuleTypeGetValue(*key); diff --git a/src/model.h b/src/model.h index 703528826..049c19f04 100644 --- a/src/model.h +++ b/src/model.h @@ -116,12 +116,13 @@ int RAI_ModelSerialize(RAI_Model *model, char **buffer, size_t *len, RAI_Error * * a Redis key with the requested access mode * @param model destination model structure * @param mode key access mode + * @param error contains the error in case of problem with retrival * @return REDISMODULE_OK if the model value stored at key was correctly * returned and available at *model variable, or REDISMODULE_ERR if there was * an error getting the Model */ int RAI_GetModelFromKeyspace(RedisModuleCtx *ctx, RedisModuleString *keyName, RedisModuleKey **key, - RAI_Model **model, int mode); + RAI_Model **model, int mode, RAI_Error *error); /** * When a module command is called in order to obtain the position of diff --git a/src/redisai.c b/src/redisai.c index 069c9bb31..c82e24f80 100644 --- a/src/redisai.c +++ b/src/redisai.c @@ -414,8 +414,11 @@ int RedisAI_ModelGet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, RAI_Model *mto; RedisModuleKey *key; - const int status = RAI_GetModelFromKeyspace(ctx, argv[1], &key, &mto, REDISMODULE_READ); + RAI_Error err = {0}; + const int status = RAI_GetModelFromKeyspace(ctx, argv[1], &key, &mto, REDISMODULE_READ, &err); if (status == REDISMODULE_ERR) { + RedisModule_ReplyWithError(ctx, err.detail); + RAI_ClearError(&err); return REDISMODULE_ERR; } @@ -434,7 +437,6 @@ int RedisAI_ModelGet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, return RedisModule_ReplyWithError(ctx, "ERR no META or BLOB specified"); } - RAI_Error err = {0}; char *buffer = NULL; size_t len = 0; @@ -512,11 +514,14 @@ int RedisAI_ModelDel_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, if (argc != 2) return RedisModule_WrongArity(ctx); + RAI_Error err = {0}; RAI_Model *mto; RedisModuleKey *key; - const int status = - RAI_GetModelFromKeyspace(ctx, argv[1], &key, &mto, REDISMODULE_READ | REDISMODULE_WRITE); + const int status = RAI_GetModelFromKeyspace(ctx, argv[1], &key, &mto, + REDISMODULE_READ | REDISMODULE_WRITE, &err); if (status == REDISMODULE_ERR) { + RedisModule_ReplyWithError(ctx, err.detail); + RAI_ClearError(&err); return REDISMODULE_ERR; }