client: respect terse output on client <--> backend relationship
authorLuis Chamberlain <mcgrof@kernel.org>
Tue, 21 Aug 2018 13:24:36 +0000 (07:24 -0600)
committerLuis Chamberlain <mcgrof@kernel.org>
Thu, 23 Aug 2018 17:01:48 +0000 (11:01 -0600)
You end up with different results if you run this terse output
on a local system which also runs its own backend Vs running a
client to connect to a remote server which is running fio as a
backend only. The reason is the client ops handle printing of
threads / disk utils separately. The terse output created *by*
the backend is the right and expected output, so just use that,
and we can piggy back off of the fact that the server will send
its own output via FIO_NET_CMD_TEXT.

Another solution is to address getting the disk util data sent
to be cached locally, and then upon handle_ts() print that, but that
would require significant re-architecturing.

Terse output is supposed to be just that, terse. This implies
that it will not be clear from what backend data came from, but
for this the best strategy is to *extend* the terse version with
yet another field, the remote hostname/ip address.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
client.c
stat.c

index e2525c812a94fd91c296e35ccff8c87255b31de5..bc0275b639be6f7d0a1ecb46e4229e1abe99119b 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1058,6 +1058,9 @@ static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd)
        struct flist_head *opt_list = NULL;
        struct json_object *tsobj;
 
+       if (output_format & FIO_OUTPUT_TERSE)
+               return;
+
        if (client->opt_lists && p->ts.thread_number <= client->jobs)
                opt_list = &client->opt_lists[p->ts.thread_number - 1];
 
@@ -1094,6 +1097,9 @@ static void handle_gs(struct fio_client *client, struct fio_net_cmd *cmd)
 {
        struct group_run_stats *gs = (struct group_run_stats *) cmd->payload;
 
+       if (output_format & FIO_OUTPUT_TERSE)
+               return;
+
        if (output_format & FIO_OUTPUT_NORMAL)
                show_group_stats(gs, NULL);
 }
@@ -1140,7 +1146,7 @@ static void handle_text(struct fio_client *client, struct fio_net_cmd *cmd)
 
        name = client->name ? client->name : client->hostname;
 
-       if (!client->skip_newline)
+       if (!client->skip_newline && !(output_format & FIO_OUTPUT_TERSE))
                fprintf(f_out, "<%s> ", name);
        ret = fwrite(buf, pdu->buf_len, 1, f_out);
        fflush(f_out);
@@ -1184,6 +1190,9 @@ static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd)
 {
        struct cmd_du_pdu *du = (struct cmd_du_pdu *) cmd->payload;
 
+       if (output_format & FIO_OUTPUT_TERSE)
+               return;
+
        if (!client->disk_stats_shown) {
                client->disk_stats_shown = true;
                log_info("\nDisk stats (read/write):\n");
@@ -1195,8 +1204,6 @@ static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd)
                duobj = json_array_last_value_object(du_array);
                json_object_add_client_info(duobj, client);
        }
-       if (output_format & FIO_OUTPUT_TERSE)
-               print_disk_util(&du->dus, &du->agg, 1, NULL);
        if (output_format & FIO_OUTPUT_NORMAL)
                print_disk_util(&du->dus, &du->agg, 0, NULL);
 }
@@ -1456,6 +1463,9 @@ static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd)
        const char *os, *arch;
        char bit[16];
 
+       if (output_format & FIO_OUTPUT_TERSE)
+               return;
+
        os = fio_get_os_string(probe->os);
        if (!os)
                os = "unknown";
diff --git a/stat.c b/stat.c
index 82e79dfcf1885b7cbcf3e2ad1212be29e79877c2..edf9ecf6a0760804247fbdc3c8f90499fb009e06 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1922,6 +1922,8 @@ void __show_run_stats(void)
                if (is_backend) {
                        fio_server_send_job_options(opt_lists[i], i);
                        fio_server_send_ts(ts, rs);
+                       if (output_format & FIO_OUTPUT_TERSE)
+                               show_thread_status_terse(ts, rs, &output[__FIO_OUTPUT_TERSE]);
                } else {
                        if (output_format & FIO_OUTPUT_TERSE)
                                show_thread_status_terse(ts, rs, &output[__FIO_OUTPUT_TERSE]);