Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions db/db_tunables.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ extern int gbl_all_prepare_abort;
extern int gbl_all_prepare_leak;
extern int gbl_flush_on_prepare;
extern int gbl_debug_sleep_before_prepare;
static char *gbl_debug_default_string_update = "debug_default_string_update_value";
extern int gbl_wait_for_prepare_seqnum;
extern int gbl_flush_replicant_on_prepare;
extern int gbl_slow_rep_log_get_loop;
Expand Down Expand Up @@ -1407,6 +1408,14 @@ int register_tunable(comdb2_tunable *tunable)
/* Keep tunable names in lower case (to be consistent). */
tunable_tolower(t->name);

// Ensure the initial value for tunables without an update function
// is heap-allocated so the default update handler can safely free() it.
if ((tunable->type == TUNABLE_STRING || tunable->type == TUNABLE_RAW) && !tunable->update) {
if (tunable->var && *(char **)tunable->var) {
*((char **)tunable->var) = strdup(*(char **)tunable->var);
}
}

t->descr = tunable->descr;

if (tunable->type >= TUNABLE_INVALID) {
Expand Down
3 changes: 3 additions & 0 deletions db/db_tunables.h
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,9 @@ REGISTER_TUNABLE("sleep_before_dispatch", "Sleep before dispatching on master. (
&gbl_debug_sleep_before_dispatch, EXPERIMENTAL | INTERNAL, NULL, NULL, NULL, NULL);
REGISTER_TUNABLE("debug_sleep_before_prepare", "Sleep for 5 seconds before preparing. (Default: off)", TUNABLE_BOOLEAN,
&gbl_debug_sleep_before_prepare, EXPERIMENTAL | INTERNAL, NULL, NULL, NULL, NULL);
REGISTER_TUNABLE("debug_default_string_update",
"Test default string update handler. (Default: debug_default_string_update_value)", TUNABLE_STRING,
&gbl_debug_default_string_update, EXPERIMENTAL | INTERNAL, NULL, NULL, NULL, NULL);

REGISTER_TUNABLE("disable_prefault_udp", "Disables 'enable_prefault_udp'", TUNABLE_BOOLEAN, &gbl_prefault_udp,
INVERSE_VALUE | NOARG, NULL, NULL, NULL, NULL);
Expand Down
1 change: 0 additions & 1 deletion tests/readearly_string_tunable.test/lrl.options

This file was deleted.

1 change: 0 additions & 1 deletion tests/readearly_string_tunable.test/t00.expected

This file was deleted.

2 changes: 0 additions & 2 deletions tests/readearly_string_tunable.test/t00.sql

This file was deleted.

2 changes: 2 additions & 0 deletions tests/string_tunable_update.test/lrl.options
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
iam_metrics_namespace comdb2-iam-test
debug_default_string_update comdb2-string-tunable-test
2 changes: 2 additions & 0 deletions tests/string_tunable_update.test/t00.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(value='comdb2-iam-test')
(value='comdb2-string-tunable-test')
4 changes: 4 additions & 0 deletions tests/string_tunable_update.test/t00.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Verify that setting a string tunable via LRL does not crash.
SELECT value FROM comdb2_tunables WHERE name = 'iam_metrics_namespace';
PUT TUNABLE mask_internal_tunables 0
SELECT value FROM comdb2_tunables WHERE name = 'debug_default_string_update';
1 change: 1 addition & 0 deletions tests/string_tunable_update.test/t01.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(value='comdb2-string-tunable-test-runtime')
4 changes: 4 additions & 0 deletions tests/string_tunable_update.test/t01.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Verify that updating a string tunable with initial value
# but no update handler at runtime does not crash.
PUT TUNABLE debug_default_string_update 'comdb2-string-tunable-test-runtime';
SELECT value FROM comdb2_tunables WHERE name = 'debug_default_string_update';
Loading