Skip to content

Commit afcf7ef

Browse files
committed
Minor PR changes such as:
- argv field in DagOp is pointing to the given DAGRUN command argv at the corresponding position (not allocated). - Fix cleanup in _MangleTensorsNames.
1 parent 4f233f0 commit afcf7ef

File tree

5 files changed

+49
-45
lines changed

5 files changed

+49
-45
lines changed

src/DAG/dag_parser.c

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,8 @@ void _SetTensorsInDagLocalContext(RedisAI_RunInfo *rinfo) {
3030
demangle the keys in order to persist them.*/
3131
int _MangleTensorsNames(RedisModuleCtx *ctx, RedisAI_RunInfo *rinfo) {
3232

33+
int res = REDISMODULE_ERR;
3334
AI_dict *mangled_tensors = AI_dictCreate(&AI_dictTypeHeapRStrings, NULL);
34-
if (!mangled_tensors) {
35-
return REDISMODULE_ERR;
36-
}
3735

3836
{
3937
AI_dictIterator *iter = AI_dictGetSafeIterator(rinfo->dagTensorsContext);
@@ -61,9 +59,9 @@ int _MangleTensorsNames(RedisModuleCtx *ctx, RedisAI_RunInfo *rinfo) {
6159
RedisModuleString *key = currentOp->inkeys[j];
6260
AI_dictEntry *entry = AI_dictFind(mangled_tensors, key);
6361
if (!entry) {
64-
AI_dictRelease(mangled_tensors);
62+
array_free(mangled_inkeys);
6563
RedisModule_ReplyWithError(ctx, "ERR INPUT key cannot be found in DAG");
66-
return REDISMODULE_ERR;
64+
goto cleanup;
6765
}
6866
int *instance = AI_dictGetVal(entry);
6967
char buf[16];
@@ -94,8 +92,19 @@ int _MangleTensorsNames(RedisModuleCtx *ctx, RedisAI_RunInfo *rinfo) {
9492
mangled_outkeys = array_append(mangled_outkeys, mangled_key);
9593
}
9694

97-
array_free(currentOp->inkeys);
98-
array_free(currentOp->outkeys);
95+
if (currentOp->inkeys) {
96+
for (size_t j = 0; j < array_len(currentOp->inkeys); j++) {
97+
RedisModule_FreeString(NULL, currentOp->inkeys[j]);
98+
}
99+
array_free(currentOp->inkeys);
100+
}
101+
102+
if (currentOp->outkeys) {
103+
for (size_t j = 0; j < array_len(currentOp->outkeys); j++) {
104+
RedisModule_FreeString(NULL, currentOp->outkeys[j]);
105+
}
106+
array_free(currentOp->outkeys);
107+
}
99108

100109
currentOp->inkeys = mangled_inkeys;
101110
currentOp->outkeys = mangled_outkeys;
@@ -109,11 +118,10 @@ int _MangleTensorsNames(RedisModuleCtx *ctx, RedisAI_RunInfo *rinfo) {
109118
RedisModuleString *key = (RedisModuleString *)AI_dictGetKey(entry);
110119
AI_dictEntry *mangled_entry = AI_dictFind(mangled_tensors, key);
111120
if (!mangled_entry) {
112-
AI_dictRelease(mangled_tensors);
113121
AI_dictRelease(mangled_persisted);
114122
AI_dictReleaseIterator(iter);
115123
RedisModule_ReplyWithError(ctx, "ERR PERSIST key cannot be found in DAG");
116-
return REDISMODULE_ERR;
124+
goto cleanup;
117125
}
118126
int *instance = AI_dictGetVal(mangled_entry);
119127
char buf[16];
@@ -130,25 +138,25 @@ int _MangleTensorsNames(RedisModuleCtx *ctx, RedisAI_RunInfo *rinfo) {
130138
AI_dictRelease(rinfo->dagTensorsPersistedContext);
131139
rinfo->dagTensorsPersistedContext = mangled_persisted;
132140

133-
{
134-
AI_dictIterator *iter = AI_dictGetSafeIterator(mangled_tensors);
135-
AI_dictEntry *entry = AI_dictNext(iter);
136-
while (entry) {
137-
int *val = (int *)AI_dictGetVal(entry);
138-
RedisModule_Free(val);
139-
entry = AI_dictNext(iter);
140-
}
141-
AI_dictReleaseIterator(iter);
142-
}
143-
AI_dictRelease(mangled_tensors);
144-
mangled_tensors = NULL;
145-
146141
for (long long i = 0; i < array_len(rinfo->dagOps); i++) {
147142
if (rinfo->dagOps[i]->devicestr == NULL) {
148143
rinfo->dagOps[i]->devicestr = "CPU";
149144
}
150145
}
151-
return REDISMODULE_OK;
146+
res = REDISMODULE_OK;
147+
148+
cleanup : {
149+
AI_dictIterator *iter = AI_dictGetSafeIterator(mangled_tensors);
150+
AI_dictEntry *entry = AI_dictNext(iter);
151+
while (entry) {
152+
int *val = (int *)AI_dictGetVal(entry);
153+
RedisModule_Free(val);
154+
entry = AI_dictNext(iter);
155+
}
156+
AI_dictReleaseIterator(iter);
157+
}
158+
AI_dictRelease(mangled_tensors);
159+
return res;
152160
}
153161

154162
/**
@@ -277,19 +285,18 @@ static int _parseTimeout(RedisModuleCtx *ctx, RedisModuleString **argv, int argc
277285
static RAI_DagOp *_AddEmptyOp(RedisAI_RunInfo *rinfo) {
278286
RAI_DagOp *currentDagOp;
279287
RAI_InitDagOp(&currentDagOp);
280-
currentDagOp->argv = (RedisModuleString **)array_new(RedisModuleString *, 1);
281288
rinfo->dagOps = array_append(rinfo->dagOps, currentDagOp);
282289
return currentDagOp;
283290
}
284291

285292
// Go over the args and save them in the current op until we see another "|>" or finish.
286293
int _CollectOpArgs(RedisModuleString **argv, int argc, int arg_pos, RAI_DagOp *op) {
287294

295+
op->argv = &argv[arg_pos];
288296
while (arg_pos < argc) {
289297
const char *arg_string = RedisModule_StringPtrLen(argv[arg_pos], NULL);
290298
if (!strcasecmp(arg_string, "|>"))
291299
return op->argc;
292-
op->argv = array_append(op->argv, argv[arg_pos]);
293300
op->argc++;
294301
arg_pos++;
295302
}
@@ -413,7 +420,8 @@ int ParseDAGRunCommand(RedisAI_RunInfo *rinfo, RedisModuleCtx *ctx, RedisModuleS
413420
goto cleanup;
414421
}
415422
rinfo->dagOpCount = array_len(rinfo->dagOps);
416-
if(rinfo->dagOpCount < 1) goto cleanup;
423+
if (rinfo->dagOpCount < 1)
424+
goto cleanup;
417425
if (_ParseDAGOps(ctx, rinfo) != REDISMODULE_OK)
418426
goto cleanup;
419427
if (_MangleTensorsNames(ctx, rinfo) != REDISMODULE_OK)

src/redisai.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,6 @@ typedef void (*RAI_OnFinishCB)(RAI_OnFinishCtx *ctx, void *private_data);
5050
#define RedisAI_ErrorCode_EDAGRUN 16
5151
#define RedisAI_ErrorCode_EFINISHCTX 17
5252

53-
typedef enum RedisAI_DataFmt {
54-
REDISAI_DATA_NONE = 0,
55-
REDISAI_DATA_VALUES,
56-
REDISAI_DATA_META,
57-
REDISAI_DATA_BLOB_WITH_META,
58-
REDISAI_DATA_VALUES_WITH_META,
59-
REDISAI_DATA_BLOB
60-
} RedisAI_DataFmt;
61-
6253
int MODULE_API_FUNC(RedisAI_InitError)(RAI_Error **err);
6354
void MODULE_API_FUNC(RedisAI_ClearError)(RAI_Error *err);
6455
void MODULE_API_FUNC(RedisAI_FreeError)(RAI_Error *err);

src/run_info.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,8 @@ int RAI_ShallowCopyDagRunInfo(RedisAI_RunInfo **result, RedisAI_RunInfo *src) {
106106
void RAI_FreeDagOp(RAI_DagOp *dagOp) {
107107

108108
RAI_FreeError(dagOp->err);
109-
// argv items where not hold.
110-
if (dagOp->argv)
111-
array_free(dagOp->argv);
112109
if (dagOp->runkey)
113110
RedisModule_FreeString(NULL, dagOp->runkey);
114-
// dagOp->inkeys is released on all argv release above
115-
// dagOp->outkeys is released on all argv release above
116-
// dagOp->outTensors is released on RunInfo after checking what tensors to
117-
// persist
118111

119112
if (dagOp->outTensor)
120113
RAI_TensorFree(dagOp->outTensor);

src/tensor.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ static const char *RAI_DATATYPE_STR_INT64 = "INT64";
3333
static const char *RAI_DATATYPE_STR_UINT8 = "UINT8";
3434
static const char *RAI_DATATYPE_STR_UINT16 = "UINT16";
3535

36+
typedef enum RedisAI_DataFmt {
37+
REDISAI_DATA_NONE = 0,
38+
REDISAI_DATA_VALUES,
39+
REDISAI_DATA_META,
40+
REDISAI_DATA_BLOB_WITH_META,
41+
REDISAI_DATA_VALUES_WITH_META,
42+
REDISAI_DATA_BLOB
43+
} RedisAI_DataFmt;
44+
3645
extern RedisModuleType *RedisAI_TensorType;
3746

3847
/**

tests/module/LLAPI.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@ int RAI_llapi_basic_check(RedisModuleCtx *ctx, RedisModuleString **argv, int arg
2727

2828
RAI_Error *err;
2929
RedisAI_InitError(&err);
30-
if(RedisAI_GetErrorCode(err) == RedisAI_ErrorCode_OK)
31-
return RedisModule_ReplyWithSimpleString(ctx, "OK");
32-
return RedisModule_ReplyWithError(ctx, "ERROR");
30+
if(RedisAI_GetErrorCode(err) == RedisAI_ErrorCode_OK) {
31+
RedisModule_ReplyWithSimpleString(ctx, "OK");
32+
}
33+
RedisModule_ReplyWithError(ctx, "ERROR");
34+
RedisAI_FreeError(err);
35+
return REDISMODULE_OK;
3336
}
3437

3538
static void _ScriptFinishFunc(RAI_OnFinishCtx *onFinishCtx, void *private_data) {

0 commit comments

Comments
 (0)