server: always end back ETA reply
authorJens Axboe <axboe@fb.com>
Wed, 9 Dec 2015 19:37:05 +0000 (12:37 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 9 Dec 2015 19:37:05 +0000 (12:37 -0700)
Otherwise the client will time out waiting for a response. If we don't
have a local jobs_eta, then just send a zero filled one.

Signed-off-by: Jens Axboe <axboe@fb.com>
server.c

index 18b3a080c94655003094b39326492a814e027e8e..ee3f7aab7143e4b97bb3f849777353508407f916 100644 (file)
--- a/server.c
+++ b/server.c
@@ -709,33 +709,38 @@ static int handle_send_eta_cmd(struct fio_net_cmd *cmd)
        size_t size;
        int i;
 
-       je = get_jobs_eta(1, &size);
-       if (!je)
-               return 0;
-
        dprint(FD_NET, "server sending status\n");
 
-       je->nr_running          = cpu_to_le32(je->nr_running);
-       je->nr_ramp             = cpu_to_le32(je->nr_ramp);
-       je->nr_pending          = cpu_to_le32(je->nr_pending);
-       je->nr_setting_up       = cpu_to_le32(je->nr_setting_up);
-       je->files_open          = cpu_to_le32(je->files_open);
+       /*
+        * Fake ETA return if we don't have a local one, otherwise the client
+        * will end up timing out waiting for a response to the ETA request
+        */
+       je = get_jobs_eta(1, &size);
+       if (!je)
+               je = calloc(1, sizeof(*je));
+       else {
+               je->nr_running          = cpu_to_le32(je->nr_running);
+               je->nr_ramp             = cpu_to_le32(je->nr_ramp);
+               je->nr_pending          = cpu_to_le32(je->nr_pending);
+               je->nr_setting_up       = cpu_to_le32(je->nr_setting_up);
+               je->files_open          = cpu_to_le32(je->files_open);
+
+               for (i = 0; i < DDIR_RWDIR_CNT; i++) {
+                       je->m_rate[i]   = cpu_to_le32(je->m_rate[i]);
+                       je->t_rate[i]   = cpu_to_le32(je->t_rate[i]);
+                       je->m_iops[i]   = cpu_to_le32(je->m_iops[i]);
+                       je->t_iops[i]   = cpu_to_le32(je->t_iops[i]);
+                       je->rate[i]     = cpu_to_le32(je->rate[i]);
+                       je->iops[i]     = cpu_to_le32(je->iops[i]);
+               }
 
-       for (i = 0; i < DDIR_RWDIR_CNT; i++) {
-               je->m_rate[i]   = cpu_to_le32(je->m_rate[i]);
-               je->t_rate[i]   = cpu_to_le32(je->t_rate[i]);
-               je->m_iops[i]   = cpu_to_le32(je->m_iops[i]);
-               je->t_iops[i]   = cpu_to_le32(je->t_iops[i]);
-               je->rate[i]     = cpu_to_le32(je->rate[i]);
-               je->iops[i]     = cpu_to_le32(je->iops[i]);
+               je->elapsed_sec         = cpu_to_le64(je->elapsed_sec);
+               je->eta_sec             = cpu_to_le64(je->eta_sec);
+               je->nr_threads          = cpu_to_le32(je->nr_threads);
+               je->is_pow2             = cpu_to_le32(je->is_pow2);
+               je->unit_base           = cpu_to_le32(je->unit_base);
        }
 
-       je->elapsed_sec         = cpu_to_le64(je->elapsed_sec);
-       je->eta_sec             = cpu_to_le64(je->eta_sec);
-       je->nr_threads          = cpu_to_le32(je->nr_threads);
-       je->is_pow2             = cpu_to_le32(je->is_pow2);
-       je->unit_base           = cpu_to_le32(je->unit_base);
-
        fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, &tag, NULL);
        free(je);
        return 0;