From: Jens Axboe Date: Wed, 19 Nov 2014 15:36:12 +0000 (-0700) Subject: trigger: enable separate remote and local trigger X-Git-Tag: fio-2.2.0~55 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=b63efd302dc3b762a21264ca66e07c74b697b608 trigger: enable separate remote and local trigger Change the options so that we have the trigger file and command separate, and remote and local trigger command separate as well. Signed-off-by: Jens Axboe --- diff --git a/backend.c b/backend.c index 77f52337..9bb01745 100644 --- a/backend.c +++ b/backend.c @@ -1804,9 +1804,12 @@ void exec_trigger(const char *cmd) void check_trigger_file(void) { if (__check_trigger_file() || trigger_timedout()) { - if (nr_clients) - fio_clients_send_trigger(trigger_cmd); - else { + if (nr_clients) { + if (trigger_remote_cmd) + fio_clients_send_trigger(trigger_remote_cmd); + if (trigger_cmd) + exec_trigger(trigger_cmd); + } else { verify_save_state(); fio_terminate_threads(TERMINATE_ALL); exec_trigger(trigger_cmd); diff --git a/fio.h b/fio.h index 50cf1b03..0601b376 100644 --- a/fio.h +++ b/fio.h @@ -393,6 +393,7 @@ extern int helper_do_stat; extern pthread_cond_t helper_cond; extern char *trigger_file; extern char *trigger_cmd; +extern char *trigger_remote_cmd; extern long long trigger_timeout; extern struct thread_data *threads; diff --git a/init.c b/init.c index 108f2b88..b72689a3 100644 --- a/init.c +++ b/init.c @@ -65,8 +65,9 @@ int read_only = 0; int status_interval = 0; char *trigger_file = NULL; -char *trigger_cmd = NULL; long long trigger_timeout = 0; +char *trigger_cmd = NULL; +char *trigger_remote_cmd = NULL; static int prev_group_jobs; @@ -246,7 +247,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .val = 'L', }, { - .name = (char *) "trigger", + .name = (char *) "trigger-file", .has_arg = required_argument, .val = 'W', }, @@ -255,6 +256,16 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .has_arg = required_argument, .val = 'B', }, + { + .name = (char *) "trigger", + .has_arg = required_argument, + .val = 'H', + }, + { + .name = (char *) "trigger-remote", + .has_arg = required_argument, + .val = 'J', + }, { .name = NULL, }, @@ -287,6 +298,11 @@ static void free_shm(void) free_threads_shm(); } + free(trigger_file); + free(trigger_cmd); + free(trigger_remote_cmd); + trigger_file = trigger_cmd = trigger_remote_cmd = NULL; + options_free(fio_options, &def_thread); fio_filelock_exit(); scleanup(); @@ -1679,8 +1695,10 @@ static void usage(const char *name) #ifdef CONFIG_ZLIB printf(" --inflate-log=log\tInflate and output compressed log\n"); #endif - printf(" --trigger=file:cmd\tExecute trigger cmd when file exists\n"); + printf(" --trigger-file=file\tExecute trigger cmd when file exists\n"); printf(" --trigger-timeout=t\tExecute trigger af this time\n"); + printf(" --trigger=cmd\t\tSet this command as local trigger\n"); + printf(" --trigger-remote=cmd\tSet this command as remote trigger\n"); printf("\nFio was written by Jens Axboe "); printf("\n Jens Axboe "); printf("\n Jens Axboe \n"); @@ -2200,33 +2218,15 @@ int parse_cmd_line(int argc, char *argv[], int client_type) status_interval = val / 1000; break; } - case 'W': { - char *split, *cmd; - size_t sz; - - split = strchr(optarg, ':'); - if (!split) { - log_err("fio: trigger is file:command\n"); - do_exit++; - exit_val = 1; - } - - sz = split - optarg; - if (sz) { - trigger_file = calloc(1, sz + 1); - strncpy(trigger_file, optarg, sz); - } - - split++; - cmd = trigger_cmd = strdup(split); - strip_blank_front(&trigger_cmd); - strip_blank_end(trigger_cmd); - if (strlen(trigger_cmd) == 0) { - free(cmd); - trigger_cmd = NULL; - } + case 'W': + trigger_file = strdup(optarg); + break; + case 'H': + trigger_cmd = strdup(optarg); + break; + case 'J': + trigger_remote_cmd = strdup(optarg); break; - } case 'B': if (check_str_time(optarg, &trigger_timeout, 1)) { log_err("fio: failed parsing time %s\n", optarg);