-
Notifications
You must be signed in to change notification settings - Fork 687
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add API UpdateRuntimeArgs for updating the module arguments during runtime #1041
Add API UpdateRuntimeArgs for updating the module arguments during runtime #1041
Conversation
c52d35c
to
c3341b1
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## unstable #1041 +/- ##
============================================
+ Coverage 70.69% 70.86% +0.16%
============================================
Files 118 118
Lines 63549 63561 +12
============================================
+ Hits 44924 45040 +116
+ Misses 18625 18521 -104
|
3bb1f12
to
9884508
Compare
9884508
to
8a9d80e
Compare
Looks simple, but what's the use case? Why does a module need to update args in runtime? A module can already have config that is updated using CONFIG SET, right? |
eb9712a
to
fbc66dd
Compare
5038d52
to
ed24ce1
Compare
@zuiderkwast I update the top description for this PR, i think this is a good way to access the updated module arguments. Pls take a look when you have time, Thanks a lot |
You added a module API to access the argv. Interesting. But, I am not convinced. :) In a program written in C, the arguments are passed to main as The MODULE UNLOAD + MODULE LOAD doesn't have this problem. |
ed24ce1
to
50aa816
Compare
Thanks for your comment, but some cons for operation MODULE UNLOAD + MODULE LOAD
I would like to create an issue to let community to discuss this problem. Thanks |
50aa816
to
e313f86
Compare
0caa3bd
to
69c5083
Compare
69c5083
to
b4d698d
Compare
@madolson As we discussed, I desgin the API as int VM_UpdateRuntimeArgs(ValkeyModuleCtx *ctx, int argc, ValkeyModuleString **argv), please take a look, Thanks |
b4d698d
to
c35a618
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me. Only documentation comment missing.
What about VM_GetRuntimeArgs, is it not needed?
d62c9cd
to
a117ce9
Compare
357fa75
to
aa2ba36
Compare
158477e
to
05deaf2
Compare
I update some logic in module.c, now it works well. @zuiderkwast |
05deaf2
to
fc31906
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, now it looks better. Before, it couldn't work. :D
Just some small comment now, then ready to merge I think.
9de9f2a
to
b014eb2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
Signed-off-by: hwware <[email protected]>
b014eb2
to
263b276
Compare
Before Redis OSS 7, if we load a module with some arguments during runtime,
and run the command "config rewrite", the module information will not be saved into the
config file.
Since Redis OSS 7 and Valkey 7.2, if we load a module with some arguments during runtime,
the module information (path, arguments number, and arguments value) can be saved into the config file after config rewrite command is called.
Thus, the module will be loaded automatically when the server startup next time.
Following is one example:
bind 172.25.0.58
port 7000
protected-mode no
enable-module-command yes
Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
dir "/home/ubuntu/valkey"
save 3600 1 300 100 60 10000
user default on nopass sanitize-payload ~* &* +https://github.com/ALL
loadmodule tests/modules/datatype.so 10 20
However, there is one problem.
If developers write a module, and update the running arguments by someway, the updated arguments can not be saved into the config file even "config rewrite" is called.
The reason comes from the following function
rewriteConfigLoadmoduleOption (src/config.c)
void rewriteConfigLoadmoduleOption(struct rewriteConfigState *state) {
..........
struct ValkeyModule *module = dictGetVal(de);
line = sdsnew("loadmodule ");
line = sdscatsds(line, module->loadmod->path);
for (int i = 0; i < module->loadmod->argc; i++) {
line = sdscatlen(line, " ", 1);
line = sdscatsds(line, module->loadmod->argv[i]->ptr);
}
rewriteConfigRewriteLine(state, "loadmodule", line, 1);
.......
}
The function only save the initial arguments information (module->loadmod) into the configfile.
After core members discuss, ref #1177
We decide add the following API to implement this feature:
Original proposal:
int VM_UpdateRunTimeArgs(ValkeyModuleCtx *ctx, int index, char *value);
Updated proposal:
ValkeyModuleString **values VM_GetRuntimeArgs(ValkeyModuleCtx *ctx);
**int VM_UpdateRuntimeArgs(ValkeyModuleCtx *ctx, int argc, ValkeyModuleString **values);
Why we do not recommend the following way:
MODULE UNLOAD
Update module args in the conf file
MODULE LOAD
I think there are the following disadvantages: