diff options
-rw-r--r-- | valkey-loadmod.patch | 98 | ||||
-rw-r--r-- | valkey.spec | 5 |
2 files changed, 57 insertions, 46 deletions
diff --git a/valkey-loadmod.patch b/valkey-loadmod.patch index 94a6b25..3341863 100644 --- a/valkey-loadmod.patch +++ b/valkey-loadmod.patch @@ -1,28 +1,38 @@ -From ca074200a9ea12a2d7e9a1e0c370614b4512e2e2 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Sat, 4 Oct 2025 07:23:52 +0200 -Subject: [PATCH] Fix #2678 don't add loadmodule when from config +Adapted for 8.1.4 from +https://github.com/valkey-io/valkey/pull/2689 ---- - src/config.c | 4 ++-- - src/module.c | 17 ++++++++++++----- - src/module.h | 4 ++-- - 3 files changed, 16 insertions(+), 9 deletions(-) - -diff --git a/src/config.c b/src/config.c -index d0158b2c4d..87f4790c23 100644 ---- a/src/config.c -+++ b/src/config.c -@@ -572,7 +572,7 @@ void loadServerConfigFromString(sds config) { +diff -up ./src/config.c.loadmod ./src/config.c +--- ./src/config.c.loadmod 2025-10-03 21:17:43.000000000 +0200 ++++ ./src/config.c 2025-10-06 03:06:41.774448336 +0200 +@@ -438,6 +438,8 @@ static int updateClientOutputBufferLimit + * within conf file parsing. This is only needed to support the deprecated + * abnormal aggregate `save T C` functionality. Remove in the future. */ + static int reading_config_file; ++/* support detecting include vs main config file */ ++static int reading_include_file = 0; + + void loadServerConfigFromString(char *config) { + deprecatedConfig deprecated_configs[] = { +@@ -529,7 +531,9 @@ void loadServerConfigFromString(char *co + + /* Execute config directives */ + if (!strcasecmp(argv[0], "include") && argc == 2) { ++ reading_include_file = 1; + loadServerConfig(argv[1], 0, NULL); ++ reading_include_file = 0; + } else if (!strcasecmp(argv[0], "rename-command") && argc == 3) { + struct serverCommand *cmd = lookupCommandBySds(argv[1]); + +@@ -562,7 +566,7 @@ void loadServerConfigFromString(char *co goto loaderr; } } else if (!strcasecmp(argv[0], "loadmodule") && argc >= 2) { - moduleEnqueueLoadModule(argv[1], &argv[2], argc - 2); -+ moduleEnqueueLoadModule(argv[1], &argv[2], argc - 2, 1); ++ moduleEnqueueLoadModule(argv[1], &argv[2], argc - 2, reading_include_file); } else if (strchr(argv[0], '.')) { if (argc < 2) { err = "Module config specified without value"; -@@ -1605,7 +1605,7 @@ void rewriteConfigLoadmoduleOption(struct rewriteConfigState *state) { +@@ -1579,7 +1583,7 @@ void rewriteConfigLoadmoduleOption(struc while ((de = dictNext(di)) != NULL) { struct ValkeyModule *module = dictGetVal(de); line = moduleLoadQueueEntryToLoadmoduleOptionStr(module, "loadmodule"); @@ -31,73 +41,72 @@ index d0158b2c4d..87f4790c23 100644 } dictReleaseIterator(di); /* Mark "loadmodule" as processed in case modules is empty. */ -diff --git a/src/module.c b/src/module.c -index e5afa952fa..dd440d1edf 100644 ---- a/src/module.c -+++ b/src/module.c -@@ -84,6 +84,7 @@ +diff -up ./src/module.c.loadmod ./src/module.c +--- ./src/module.c.loadmod 2025-10-03 21:17:43.000000000 +0200 ++++ ./src/module.c 2025-10-06 03:05:36.498290506 +0200 +@@ -83,6 +83,7 @@ struct moduleLoadQueueEntry { sds path; -+ int conf; ++ int from_include; int argc; robj **argv; }; -@@ -670,7 +671,7 @@ void freeClientModuleData(client *c) { +@@ -669,7 +670,7 @@ void freeClientModuleData(client *c) { c->module_data = NULL; } -void moduleEnqueueLoadModule(sds path, sds *argv, int argc) { -+void moduleEnqueueLoadModule(sds path, sds *argv, int argc, int is_config) { ++void moduleEnqueueLoadModule(sds path, sds *argv, int argc, int from_include) { int i; struct moduleLoadQueueEntry *loadmod; -@@ -678,6 +679,7 @@ void moduleEnqueueLoadModule(sds path, sds *argv, int argc) { +@@ -677,6 +678,7 @@ void moduleEnqueueLoadModule(sds path, s loadmod->argv = argc ? zmalloc(sizeof(robj *) * argc) : NULL; loadmod->path = sdsnew(path); loadmod->argc = argc; -+ loadmod->conf = is_config; ++ loadmod->from_include = from_include; for (i = 0; i < argc; i++) { loadmod->argv[i] = createRawStringObject(argv[i], sdslen(argv[i])); } -@@ -688,6 +690,10 @@ sds moduleLoadQueueEntryToLoadmoduleOptionStr(ValkeyModule *module, +@@ -687,6 +689,10 @@ sds moduleLoadQueueEntryToLoadmoduleOpti const char *config_option_str) { sds line; -+ if (module->loadmod->conf) { ++ if (module->loadmod->from_include) { + /* no need to add as already from config */ + return NULL; + } line = sdsnew(config_option_str); line = sdscatlen(line, " ", 1); line = sdscatsds(line, module->loadmod->path); -@@ -12350,7 +12356,7 @@ void moduleLoadFromQueue(void) { +@@ -12188,7 +12194,7 @@ void moduleLoadFromQueue(void) { listRewind(server.loadmodule_queue, &li); while ((ln = listNext(&li))) { struct moduleLoadQueueEntry *loadmod = ln->value; - if (moduleLoad(loadmod->path, (void **)loadmod->argv, loadmod->argc, 0) == C_ERR) { -+ if (moduleLoad(loadmod->path, (void **)loadmod->argv, loadmod->argc, 0, loadmod->conf) == C_ERR) { ++ if (moduleLoad(loadmod->path, (void **)loadmod->argv, loadmod->argc, 0, loadmod->from_include) == C_ERR) { serverLog(LL_WARNING, "Can't load module from %s: server aborting", loadmod->path); exit(1); } -@@ -12531,7 +12537,7 @@ void moduleUnregisterCleanup(ValkeyModule *module) { +@@ -12369,7 +12375,7 @@ void moduleUnregisterCleanup(ValkeyModul /* Load a module and initialize it. On success C_OK is returned, otherwise * C_ERR is returned. */ -int moduleLoad(const char *path, void **module_argv, int module_argc, int is_loadex) { -+int moduleLoad(const char *path, void **module_argv, int module_argc, int is_loadex, int is_config) { ++int moduleLoad(const char *path, void **module_argv, int module_argc, int is_loadex, int from_include) { int (*onload)(void *, void **, int); void *handle; -@@ -12606,6 +12612,7 @@ int moduleLoad(const char *path, void **module_argv, int module_argc, int is_loa +@@ -12444,6 +12450,7 @@ int moduleLoad(const char *path, void ** ctx.module->loadmod->path = sdsnew(path); ctx.module->loadmod->argv = module_argc ? zmalloc(sizeof(robj *) * module_argc) : NULL; ctx.module->loadmod->argc = module_argc; -+ ctx.module->loadmod->conf = is_config; ++ ctx.module->loadmod->from_include = from_include; for (int i = 0; i < module_argc; i++) { ctx.module->loadmod->argv[i] = module_argv[i]; incrRefCount(ctx.module->loadmod->argv[i]); -@@ -13529,7 +13536,7 @@ void moduleCommand(client *c) { +@@ -13361,7 +13368,7 @@ void moduleCommand(client *c) { argv = &c->argv[3]; } @@ -106,7 +115,7 @@ index e5afa952fa..dd440d1edf 100644 addReply(c, shared.ok); else addReplyError(c, "Error loading the extension. Please check the server logs."); -@@ -13544,7 +13551,7 @@ void moduleCommand(client *c) { +@@ -13376,7 +13383,7 @@ void moduleCommand(client *c) { /* If this is a loadex command we want to populate server.module_configs_queue with * sds NAME VALUE pairs. We also want to increment argv to just after ARGS, if supplied. */ if (parseLoadexArguments((ValkeyModuleString ***)&argv, &argc) == VALKEYMODULE_OK && @@ -115,25 +124,24 @@ index e5afa952fa..dd440d1edf 100644 addReply(c, shared.ok); else { dictEmpty(server.module_configs_queue, NULL); -diff --git a/src/module.h b/src/module.h -index f6c266b592..e48a98f4ba 100644 ---- a/src/module.h -+++ b/src/module.h -@@ -169,7 +169,7 @@ static inline void moduleInitDigestContext(ValkeyModuleDigest *mdvar) { +diff -up ./src/module.h.loadmod ./src/module.h +--- ./src/module.h.loadmod 2025-10-03 21:17:43.000000000 +0200 ++++ ./src/module.h 2025-10-06 03:05:36.498698194 +0200 +@@ -169,7 +169,7 @@ static inline void moduleInitDigestConte memset(mdvar->x, 0, sizeof(mdvar->x)); } -void moduleEnqueueLoadModule(sds path, sds *argv, int argc); -+void moduleEnqueueLoadModule(sds path, sds *argv, int argc, int is_config); ++void moduleEnqueueLoadModule(sds path, sds *argv, int argc, int from_include); sds moduleLoadQueueEntryToLoadmoduleOptionStr(ValkeyModule *module, const char *config_option_str); ValkeyModuleCtx *moduleAllocateContext(void); -@@ -180,7 +180,7 @@ void moduleFreeContext(ValkeyModuleCtx *ctx); +@@ -180,7 +180,7 @@ void moduleFreeContext(ValkeyModuleCtx * void moduleInitModulesSystem(void); void moduleInitModulesSystemLast(void); void modulesCron(void); -int moduleLoad(const char *path, void **argv, int argc, int is_loadex); -+int moduleLoad(const char *path, void **argv, int argc, int is_loadex, int is_config); ++int moduleLoad(const char *path, void **argv, int argc, int is_loadex, int from_include); int moduleUnload(sds name, const char **errmsg); void moduleLoadFromQueue(void); int moduleGetCommandKeysViaAPI(struct serverCommand *cmd, robj **argv, int argc, getKeysResult *result); diff --git a/valkey.spec b/valkey.spec index a1197dc..e81251f 100644 --- a/valkey.spec +++ b/valkey.spec @@ -9,7 +9,7 @@ Name: valkey Version: 8.1.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A persistent key-value database # valkey: BSD-3-Clause # hiredis: BSD-3-Clause @@ -355,6 +355,9 @@ exit 0 %changelog +* Mon Oct 6 2025 Remi Collet <remi@fedoraproject.org> - 8.1.4-2 +- improve path for loadmodule directive + * Sat Oct 4 2025 Remi Collet <remi@fedoraproject.org> - 8.1.4-1 - Valkey 8.1.4 - Released Fri 09 October 2025 - Upgrade urgency SECURITY: |