diff --git a/adaptived/doc/internal/list-of-built-in-effects.md b/adaptived/doc/internal/list-of-built-in-effects.md
index 2147cdb..a8fe1db 100644
--- a/adaptived/doc/internal/list-of-built-in-effects.md
+++ b/adaptived/doc/internal/list-of-built-in-effects.md
@@ -14,6 +14,7 @@ Parameters that accept long long or float also support some human-readable forma
| [logger](../../src/effects/logger.c) | Given an array of files, write their contents to "logfile" |
- "logfile" (string) - Output file to store the log data
- "max_file_size" (int - optional) - Maximum amount of data that will be copied from each source file. Defaults to 32kB if not specified
- "files" (array)
- "file" (string) - file to copy
- "separator_prefix" (string - optional) - If specified, this string will be written each time this effect triggers
- "date_format" (string - optional) - If specified, the date will be written in the specified format each time the effect triggers
- "utc" (boolean - optional) - If specified, the date will be recorded in UTC time. Otherwise, the machine's localtime() will be used
- "separator_postfix" (string - optional) - If specified, this string will be written each time this effect triggers
- "file_separator" (string - optional) -If specified, this string will be written between each file being logged
| [ftest 043](../../tests/ftests/043-effect-logger-no-separators.json)
[ftest 044](../../tests/ftests/044-effect-logger-date-format.json) | |
| [print](../../src/effects/print.c) | Print a message to a file | - "message" (string - optional) - message to output
- "file" (string) - file to write to. Currently only supports "stdout" or "stderr"
| [Jimmy Buffett Example](../examples/jimmy-buffett-config.json) | |
| [print_schedstat](../../src/effects/print_schedstat.c) | Print schedstat to a file | - "file" (string) - file to write to. Currently only supports "stdout" or "stderr"
| [ftest 054](../../tests/ftests/054-effect-print_schedstat.json) | |
+| [sd_bus_setting](../../src/effects/sd_bus_setting.c) | Operate on sd_bus properties | - "target" (string) - cgroup slice name or scope name
- "setting" (string) - sd_bus property name (e.g. MemoryMax)
- "value" (string, long long, or double) - value to write to the property. If the operator is set to add or subtract, this value will be added/subtracted from the current value of the property
- "operator" (string) - add, subtract, or set
- "limit" (string, long long, or double - optional) - if provided, this effect will use the value as an upper or lower limit when the operator is set to add or subtract, respectfully
- "validate" (boolean - optional) - if true, the setting effect will read from the property to ensure the value was properly set
- "runtime" (boolean - optional) - if true, make changes only temporarily, so that they are lost on the next reboot.
| [ftest 1000](../../tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.json)
[ftest 1001](../../tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.json)
[ftest 1002](../../tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.json)
[ftest 1003](../../tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.json)
[ftest 1004](../../tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.json)
[ftest 1005](../../tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.json)
[ftest 1006](../../tests/ftests/1006-sudo-effect-sd_bus_setting_set_int_scope.json)
[ftest 1007](../../tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.json) | |
| [setting](../../src/effects/cgroup_setting.c) | Write to a setting file | - "setting" (string) - full path to the setting
- "value" (string, long long, or double) - value to write to the setting file. If the operator is set to add or subtract, this value will be added/subtracted from the current value of setting
- "operator" (string) - add, subtract, or set
- "limit" (string, long long, or double - optional) - if provided, this effect will use the value as an upper or lower limit when the operator is set to add or subtract, respectfully
- "validate" (boolean - optional) - if true, the setting effect will read from the setting file to ensure the value was properly set
| [ftest 055](../../tests/ftests/055-effect-setting_set_int.json)
[ftest 056](../../tests/ftests/056-effect-setting_add_int.json)
[ftest 057](../../tests/ftests/057-effect-setting_sub_int.json) | Shares a code base with the cgroup effect code |
| [signal](../../src/effects/kill_processes.c) | Send a signal to the process(es) that match the user-specified process name(s) | - "proc_names" (array)
- "name" (string) - process name (as found in /proc/{pid}/stat)
- "signal" (int - optional) - signal to send to the processes being killed. Curently only supports integers. Default - 10 (i.e. SIGUSR1)
| [ftest_069](../../tests/ftests/069-effect-signal.json) | |
| [snooze](../../src/effects/snooze.c) | Once the cause(s) in a rule have triggered, snooze (i.e. ignore any more triggers) for a specified duration | - "duration" (int) - how long to ignore triggers, in interval milliseconds
| [ftest 010](../../tests/ftests/010-snooze_effect.json) | |
diff --git a/adaptived/include/adaptived-utils.h b/adaptived/include/adaptived-utils.h
index 1a23779..8ca3678 100644
--- a/adaptived/include/adaptived-utils.h
+++ b/adaptived/include/adaptived-utils.h
@@ -263,6 +263,7 @@ int adaptived_farray_linear_regression(float * const array, int array_len, int i
int interp_x, float * const interp_y);
#define ADAPTIVED_CGROUP_FLAGS_VALIDATE 0x1
+#define ADAPTIVED_CGROUP_FLAGS_RUNTIME 0x2 /* systemctl --runtime: make changes only temporarily */
/**
* Write a long long value to a cgroup setting
diff --git a/adaptived/src/effects/sd_bus_setting.c b/adaptived/src/effects/sd_bus_setting.c
index ebad5ec..f4ff0a9 100644
--- a/adaptived/src/effects/sd_bus_setting.c
+++ b/adaptived/src/effects/sd_bus_setting.c
@@ -46,6 +46,7 @@ struct cg_opts {
enum effect_op_enum op;
+ bool runtime;
bool limit_provided;
struct adaptived_cgroup_value limit; /* optional */
bool validate;
@@ -69,6 +70,7 @@ int sd_bus_setting_init(struct adaptived_effect * const eff, struct json_object
opts->value.type = ADAPTIVED_CGVAL_CNT;
opts->limit.type = ADAPTIVED_CGVAL_CNT;
opts->limit_provided = false;
+ opts->runtime = false;
ret = adaptived_parse_string(args_obj, "target", &target_str);
if (ret)
@@ -152,6 +154,15 @@ int sd_bus_setting_init(struct adaptived_effect * const eff, struct json_object
}
}
+ ret = adaptived_parse_bool(args_obj, "runtime", &opts->runtime);
+ if (ret == -ENOENT) {
+ opts->runtime = false;
+ ret = 0;
+ } else if (ret) {
+ adaptived_err("Failed to parse the sd_bus_setting runtime arg: %d\n", ret);
+ goto error;
+ }
+
ret = adaptived_parse_bool(args_obj, "validate", &opts->validate);
if (ret == -ENOENT) {
opts->validate = false;
@@ -212,6 +223,9 @@ static int add(const struct cg_opts * const opts, struct adaptived_cgroup_value
if (opts->validate)
cgflags |= ADAPTIVED_CGROUP_FLAGS_VALIDATE;
+ if (opts->runtime)
+ cgflags |= ADAPTIVED_CGROUP_FLAGS_RUNTIME;
+
ret = adaptived_sd_bus_set_ll(opts->target, opts->setting, sum, cgflags);
if (ret)
return ret;
@@ -244,6 +258,9 @@ static int subtract(const struct cg_opts * const opts, struct adaptived_cgroup_v
if (opts->validate)
cgflags |= ADAPTIVED_CGROUP_FLAGS_VALIDATE;
+ if (opts->runtime)
+ cgflags |= ADAPTIVED_CGROUP_FLAGS_RUNTIME;
+
ret = adaptived_sd_bus_set_ll(opts->target, opts->setting, diff, cgflags);
if (ret)
return ret;
@@ -292,6 +309,8 @@ static int _sd_bus_setting_main(struct adaptived_effect * const eff)
case EOP_SET:
if (opts->validate)
cgflags |= ADAPTIVED_CGROUP_FLAGS_VALIDATE;
+ if (opts->runtime)
+ cgflags |= ADAPTIVED_CGROUP_FLAGS_RUNTIME;
ret = adaptived_sd_bus_set_value(opts->target, opts->setting, &opts->value, cgflags);
if (ret)
@@ -318,6 +337,9 @@ int sd_bus_setting_main(struct adaptived_effect * const eff)
if (ret)
return ret;
+ if (opts->runtime)
+ cgflags |= ADAPTIVED_CGROUP_FLAGS_RUNTIME;
+
ret = adaptived_sd_bus_set_ll(opts->target, opts->setting, ll_value, cgflags);
if (ret)
return ret;
@@ -332,8 +354,14 @@ int sd_bus_setting_main(struct adaptived_effect * const eff)
ret = adaptived_get_meminfo_field(PROC_MEMINFO, "MemTotal", &ll_value);
if (ret)
return ret;
+
+ cgflags = ADAPTIVED_CGROUP_FLAGS_VALIDATE;
+
+ if (opts->runtime)
+ cgflags |= ADAPTIVED_CGROUP_FLAGS_RUNTIME;
+
ret = adaptived_sd_bus_set_ll(opts->target, opts->setting, ll_value,
- ADAPTIVED_CGROUP_FLAGS_VALIDATE);
+ cgflags);
if (ret)
return ret;
adaptived_dbg("%s: %s at max. Changed to %lld\n", __func__, opts->setting, ll_value);
diff --git a/adaptived/src/parse.c b/adaptived/src/parse.c
index d81aa91..94591e1 100644
--- a/adaptived/src/parse.c
+++ b/adaptived/src/parse.c
@@ -624,6 +624,8 @@ static int parse_json(struct adaptived_ctx * const ctx, const char * const buf)
obj = json_tokener_parse_verbose(buf, &err);
if (!obj || err) {
+ if (err)
+ adaptived_err("%s: %s\n", __func__, json_tokener_error_desc(err));
ret = -EINVAL;
goto out;
}
diff --git a/adaptived/src/utils/sd_bus_utils.c b/adaptived/src/utils/sd_bus_utils.c
index 1896ff5..f2a6405 100644
--- a/adaptived/src/utils/sd_bus_utils.c
+++ b/adaptived/src/utils/sd_bus_utils.c
@@ -234,7 +234,7 @@ static int property_assignment(sd_bus_message *m, cgroupType t, const char *prop
}
static int set_property(const char *name, const char *property,
- const struct adaptived_cgroup_value * const value)
+ const struct adaptived_cgroup_value * const value, bool arg_runtime)
{
sd_bus_error error = SD_BUS_ERROR_NULL;
sd_bus_message *m = NULL;
@@ -242,7 +242,7 @@ static int set_property(const char *name, const char *property,
int r;
cgroupType t;
- adaptived_dbg("set_property: name=%s, property=%s\n", name, property);
+ adaptived_dbg("set_property: name=%s, property=%s, arg_runtime=%d\n", name, property, arg_runtime);
r = sd_bus_default_system(&bus);
if (r < 0) {
@@ -264,7 +264,7 @@ static int set_property(const char *name, const char *property,
return t;
}
- r = sd_bus_message_append(m, "sb", name, false);
+ r = sd_bus_message_append(m, "sb", name, arg_runtime);
if (r < 0) {
adaptived_err("set_property: sd_bus_message_append() failed, r=%d\n", r);
return r;
@@ -359,6 +359,7 @@ API int adaptived_sd_bus_set_ll(const char * const target, const char * const pr
{
struct adaptived_cgroup_value val;
int ret = 0;
+ bool arg_runtime = false;
if (!target || !property)
return -EINVAL;
@@ -368,7 +369,10 @@ API int adaptived_sd_bus_set_ll(const char * const target, const char * const pr
val.type = ADAPTIVED_CGVAL_LONG_LONG;
val.value.ll_value = value;
- ret = set_property(target, property, &val);
+ if (flags & ADAPTIVED_CGROUP_FLAGS_RUNTIME)
+ arg_runtime = true;
+
+ ret = set_property(target, property, &val, arg_runtime);
if (ret < 0)
return ret;
@@ -395,6 +399,7 @@ API int adaptived_sd_bus_set_str(const char * const target, const char * const p
{
struct adaptived_cgroup_value val;
int ret = 0;
+ bool arg_runtime = false;
if (!target || !property || !value)
return -EINVAL;
@@ -404,7 +409,10 @@ API int adaptived_sd_bus_set_str(const char * const target, const char * const p
val.type = ADAPTIVED_CGVAL_STR;
val.value.str_value = (char *)value;
- ret = set_property(target, property, &val);
+ if (flags & ADAPTIVED_CGROUP_FLAGS_RUNTIME)
+ arg_runtime = true;
+
+ ret = set_property(target, property, &val, arg_runtime);
if (ret < 0)
return ret;
diff --git a/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.c b/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.c
index 35f9b8d..8c44956 100644
--- a/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.c
+++ b/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.c
@@ -67,11 +67,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.json b/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.json
index 1cd2192..71f8836 100644
--- a/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.json
+++ b/adaptived/tests/ftests/1000-sudo-effect-sd_bus_setting_set_int.json
@@ -17,7 +17,8 @@
"setting": "MemoryMax",
"value": 89997312,
"operator": "set",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.c b/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.c
index 633300c..f9a26b3 100644
--- a/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.c
+++ b/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.c
@@ -67,11 +67,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.json b/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.json
index 3e013c6..6051a4a 100644
--- a/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.json
+++ b/adaptived/tests/ftests/1001-sudo-effect-sd_bus_setting_add_int.json
@@ -16,7 +16,8 @@
"target": "sudo1001.slice",
"setting": "MemoryMax",
"value": 89997312,
- "operator": "set"
+ "operator": "set",
+ "runtime": true
}
},
{
@@ -26,7 +27,8 @@
"setting": "MemoryMax",
"value": 4096,
"operator": "add",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.c b/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.c
index ff79f1f..0f34a12 100644
--- a/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.c
+++ b/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.c
@@ -67,11 +67,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.json b/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.json
index 2f7bf05..48dad0b 100644
--- a/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.json
+++ b/adaptived/tests/ftests/1002-sudo-effect-sd_bus_setting_sub_int.json
@@ -16,7 +16,8 @@
"target": "sudo1002.slice",
"setting": "MemoryMax",
"value": 89997312,
- "operator": "set"
+ "operator": "set",
+ "runtime": true
}
},
{
@@ -26,7 +27,8 @@
"setting": "MemoryMax",
"value": 4096,
"operator": "subtract",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.c b/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.c
index fa8ef1e..12296e0 100644
--- a/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.c
+++ b/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.c
@@ -73,11 +73,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.json b/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.json
index c85c97a..6557b4c 100644
--- a/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.json
+++ b/adaptived/tests/ftests/1003-sudo-effect-sd_bus_setting-CPUQuota.json
@@ -16,7 +16,8 @@
"target": "sudo1003.slice",
"setting": "CPUQuotaPeriodSec",
"value": "1s",
- "operator": "set"
+ "operator": "set",
+ "runtime": true
}
},
{
@@ -25,7 +26,8 @@
"target": "sudo1003.slice",
"setting": "CPUQuota",
"value": "44%",
- "operator": "set"
+ "operator": "set",
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.c b/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.c
index 811a4a0..a32ced1 100644
--- a/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.c
+++ b/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.c
@@ -68,11 +68,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.json b/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.json
index 6b03ef5..f140702 100644
--- a/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.json
+++ b/adaptived/tests/ftests/1004-sudo-effect-sd_bus_setting_add_int_infinity.json
@@ -17,7 +17,8 @@
"setting": "MemoryMax",
"value": "infinity",
"operator": "set",
- "validate": true
+ "validate": true,
+ "runtime": true
}
},
{
@@ -27,7 +28,8 @@
"setting": "MemoryMax",
"value": 4096,
"operator": "add",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.c b/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.c
index 77eaf26..0832c35 100644
--- a/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.c
+++ b/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.c
@@ -73,11 +73,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.json b/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.json
index ecd4e4a..f293e95 100644
--- a/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.json
+++ b/adaptived/tests/ftests/1005-sudo-effect-sd_bus_setting_sub_infinity.json
@@ -17,7 +17,8 @@
"setting": "MemoryMax",
"value": "infinity",
"operator": "set",
- "validate": true
+ "validate": true,
+ "runtime": true
}
},
{
@@ -27,7 +28,8 @@
"setting": "MemoryMax",
"value": 4096,
"operator": "subtract",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1006-sudo-effect-sd_bus_setting_set_int_scope.json b/adaptived/tests/ftests/1006-sudo-effect-sd_bus_setting_set_int_scope.json
index d7a228c..de97120 100644
--- a/adaptived/tests/ftests/1006-sudo-effect-sd_bus_setting_set_int_scope.json
+++ b/adaptived/tests/ftests/1006-sudo-effect-sd_bus_setting_set_int_scope.json
@@ -17,7 +17,8 @@
"setting": "MemoryMax",
"value": 89997312,
"operator": "set",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.c b/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.c
index aa3201e..b682ccf 100644
--- a/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.c
+++ b/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.c
@@ -68,11 +68,7 @@ int main(int argc, char *argv[])
ret = adaptived_set_attr(ctx, ADAPTIVED_ATTR_LOG_LEVEL, LOG_DEBUG);
if (ret)
goto err;
- ret = start_slice(cgroup_slice_name, "cat");
- if (ret) {
- adaptived_err("Failed to create slice: %s, ret=%d\n", cgroup_slice_name, ret);
- goto err;
- }
+
ret = adaptived_loop(ctx, true);
if (ret != EXPECTED_RET)
goto err;
diff --git a/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.json b/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.json
index b58238e..514ee26 100644
--- a/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.json
+++ b/adaptived/tests/ftests/1007-sudo-effect-sd_bus_setting_set_str.json
@@ -17,7 +17,8 @@
"setting": "DevicePolicy",
"value": "closed",
"operator": "set",
- "validate": true
+ "validate": true,
+ "runtime": true
}
}
]
diff --git a/adaptived/tests/ftests/ftests.c b/adaptived/tests/ftests/ftests.c
index b5f93c5..7b50cd1 100644
--- a/adaptived/tests/ftests/ftests.c
+++ b/adaptived/tests/ftests/ftests.c
@@ -389,6 +389,7 @@ double time_elapsed(const struct timespec * const start, const struct timespec *
int stop_transient(const char *transient_name)
{
char cmdline[FILENAME_MAX];
+ char *cgrp_path = NULL;
int ret;
if (!transient_name)
@@ -399,6 +400,25 @@ int stop_transient(const char *transient_name)
return ret;
ret = system(cmdline);
adaptived_dbg("stop_transient: %s, ret=%d\n", cmdline, ret);
+
+ ret = build_systemd_cgroup_path(transient_name, &cgrp_path);
+ if (ret < 0 || cgrp_path == NULL) {
+ adaptived_err("%s: Failed to build the systemd cgroup path for %s, ret: %d\n", __func__, transient_name, ret);
+ return ret;
+ }
+
+ if (access(cgrp_path, F_OK) == 0) {
+ adaptived_dbg("stop_transient: %s still exists...\n", cgrp_path);
+ ret = snprintf(cmdline, FILENAME_MAX - 1, "sudo rmdir %s", cgrp_path);
+ if (ret < 0)
+ return ret;
+ ret = system(cmdline);
+ adaptived_dbg("stop_transient: %s, ret=%d\n", cmdline, ret);
+ }
+
+err:
+ if (cgrp_path)
+ free(cgrp_path);
return 0;
}