Add terse version 2 output format
[fio.git] / server.c
index c1ced42dd351c9e25666cb495fbff7c884ee35cb..4da8bf0040397d5173987b3b993e5a794f1959fc 100644 (file)
--- a/server.c
+++ b/server.c
@@ -183,8 +183,12 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk)
 
                if (first)
                        memcpy(cmdret, &cmd, sizeof(cmd));
-               else
-                       assert(cmdret->opcode == cmd.opcode);
+               else if (cmdret->opcode != cmd.opcode) {
+                       log_err("fio: fragment opcode mismatch (%d != %d)\n",
+                                       cmdret->opcode, cmd.opcode);
+                       ret = 1;
+                       break;
+               }
 
                if (!cmd.pdu_len)
                        break;
@@ -328,6 +332,8 @@ static int fio_server_send_quit_cmd(void)
 static int handle_job_cmd(struct fio_net_cmd *cmd)
 {
        char *buf = (char *) cmd->payload;
+       struct cmd_start_pdu spdu;
+       struct cmd_end_pdu epdu;
        int ret;
 
        if (parse_jobs_ini(buf, 1, 0)) {
@@ -335,9 +341,14 @@ static int handle_job_cmd(struct fio_net_cmd *cmd)
                return -1;
        }
 
-       fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0, NULL);
+       spdu.jobs = cpu_to_le32(thread_number);
+       fio_net_send_cmd(server_fd, FIO_NET_CMD_START, &spdu, sizeof(spdu), 0);
 
        ret = exec_run();
+
+       epdu.error = ret;
+       fio_net_send_cmd(server_fd, FIO_NET_CMD_STOP, &epdu, sizeof(epdu), 0);
+
        fio_server_send_quit_cmd();
        reset_fio_state();
        return ret;