diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-01-21 22:40:55 +0100 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-01-21 22:40:55 +0100 |
| commit | 5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda (patch) | |
| tree | 1acdfa5220cd13b7be43a2a01368e80d306473ca /examples/redis-unstable/src/functions.h | |
| parent | c7ab12bba64d9c20ccd79b132dac475f7bc3923e (diff) | |
| download | crep-5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda.tar.gz | |
Add Redis source code for testing
Diffstat (limited to 'examples/redis-unstable/src/functions.h')
| -rw-r--r-- | examples/redis-unstable/src/functions.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/examples/redis-unstable/src/functions.h b/examples/redis-unstable/src/functions.h new file mode 100644 index 0000000..e8a3042 --- /dev/null +++ b/examples/redis-unstable/src/functions.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021-Present, Redis Ltd. + * All rights reserved. + * + * Licensed under your choice of (a) the Redis Source Available License 2.0 + * (RSALv2); or (b) the Server Side Public License v1 (SSPLv1); or (c) the + * GNU Affero General Public License v3 (AGPLv3). + */ + +#ifndef __FUNCTIONS_H_ +#define __FUNCTIONS_H_ + +/* + * functions.c unit provides the Redis Functions API: + * * FUNCTION LOAD + * * FUNCTION LIST + * * FUNCTION CALL (FCALL and FCALL_RO) + * * FUNCTION DELETE + * * FUNCTION STATS + * * FUNCTION KILL + * * FUNCTION FLUSH + * * FUNCTION DUMP + * * FUNCTION RESTORE + * * FUNCTION HELP + * + * Also contains implementation for: + * * Save/Load function from rdb + * * Register engines + */ + +#include "server.h" +#include "script.h" +#include "redismodule.h" + +typedef struct functionLibInfo functionLibInfo; + +typedef struct engine { + /* engine specific context */ + void *engine_ctx; + + /* Create function callback, get the engine_ctx, and function code + * engine_ctx - opaque struct that was created on engine initialization + * li - library information that need to be provided and when add functions + * code - the library code + * timeout - timeout for the library creation (0 for no timeout) + * err - description of error (if occurred) + * returns C_ERR on error and set err to be the error message */ + int (*create)(void *engine_ctx, functionLibInfo *li, sds code, size_t timeout, sds *err); + + /* Invoking a function, r_ctx is an opaque object (from engine POV). + * The r_ctx should be used by the engine to interaction with Redis, + * such interaction could be running commands, set resp, or set + * replication mode + */ + void (*call)(scriptRunCtx *r_ctx, void *engine_ctx, void *compiled_function, + robj **keys, size_t nkeys, robj **args, size_t nargs); + + /* get current used memory by the engine */ + size_t (*get_used_memory)(void *engine_ctx); + + /* Return memory overhead for a given function, + * such memory is not counted as engine memory but as general + * structs memory that hold different information */ + size_t (*get_function_memory_overhead)(void *compiled_function); + + /* Return memory overhead for engine (struct size holding the engine)*/ + size_t (*get_engine_memory_overhead)(void *engine_ctx); + + /* free the given function */ + void (*free_function)(void *engine_ctx, void *compiled_function); + + /* Free the engine context. */ + void (*free_ctx)(void *engine_ctx); +} engine; + +/* Hold information about an engine. + * Used on rdb.c so it must be declared here. */ +typedef struct engineInfo { + sds name; /* Name of the engine */ + engine *engine; /* engine callbacks that allows to interact with the engine */ + client *c; /* Client that is used to run commands */ +} engineInfo; + +/* Hold information about the specific function. + * Used on rdb.c so it must be declared here. */ +typedef struct functionInfo { + sds name; /* Function name */ + void *function; /* Opaque object that set by the function's engine and allow it + to run the function, usually it's the function compiled code. */ + functionLibInfo* li; /* Pointer to the library created the function */ + sds desc; /* Function description */ + uint64_t f_flags; /* Function flags */ +} functionInfo; + +/* Hold information about the specific library. + * Used on rdb.c so it must be declared here. */ +struct functionLibInfo { + sds name; /* Library name */ + dict *functions; /* Functions dictionary */ + engineInfo *ei; /* Pointer to the function engine */ + sds code; /* Library code */ +}; + +int functionsRegisterEngine(const char *engine_name, engine *engine_ctx); +sds functionsCreateWithLibraryCtx(sds code, int replace, sds* err, functionsLibCtx *lib_ctx, size_t timeout); +unsigned long functionsMemoryVM(void); +unsigned long functionsMemoryEngine(void); +unsigned long functionsNum(void); +unsigned long functionsLibNum(void); +dict* functionsLibGet(void); +size_t functionsLibCtxFunctionsLen(functionsLibCtx *functions_ctx); +functionsLibCtx* functionsLibCtxGetCurrent(void); +functionsLibCtx* functionsLibCtxCreate(void); +void functionsLibCtxClearCurrent(int async); +void functionsLibCtxFree(functionsLibCtx *lib_ctx); +void functionsLibCtxClear(functionsLibCtx *lib_ctx); +void functionsLibCtxSwapWithCurrent(functionsLibCtx *lib_ctx); + +int functionLibCreateFunction(sds name, void *function, functionLibInfo *li, sds desc, uint64_t f_flags, sds *err); + +int luaEngineInitEngine(void); +int functionsInit(void); +void functionsFree(functionsLibCtx *lib_ctx, dict *engs); + +void createFunctionDumpPayload(rio *payload); + +#endif /* __FUNCTIONS_H_ */ |
