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 e2525c8..bc0275b 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 82e79df..edf9ecf 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]);