Lines Matching refs:client
27 static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd);
28 static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd);
29 static void handle_gs(struct fio_client *client, struct fio_net_cmd *cmd);
30 static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd);
31 static void handle_text(struct fio_client *client, struct fio_net_cmd *cmd);
32 static void handle_stop(struct fio_client *client, struct fio_net_cmd *cmd);
33 static void handle_start(struct fio_client *client, struct fio_net_cmd *cmd);
70 static void fio_client_add_hash(struct fio_client *client) in fio_client_add_hash() argument
72 int bucket = hash_long(client->fd, FIO_CLIENT_HASH_BITS); in fio_client_add_hash()
75 flist_add(&client->hash_list, &client_hash[bucket]); in fio_client_add_hash()
78 static void fio_client_remove_hash(struct fio_client *client) in fio_client_remove_hash() argument
80 if (!flist_empty(&client->hash_list)) in fio_client_remove_hash()
81 flist_del_init(&client->hash_list); in fio_client_remove_hash()
119 struct fio_client *client; in find_client_by_fd() local
123 client = flist_entry(entry, struct fio_client, hash_list); in find_client_by_fd()
125 if (client->fd == fd) { in find_client_by_fd()
126 client->refs++; in find_client_by_fd()
127 return client; in find_client_by_fd()
134 void fio_put_client(struct fio_client *client) in fio_put_client() argument
136 if (--client->refs) in fio_put_client()
139 free(client->hostname); in fio_put_client()
140 if (client->argv) in fio_put_client()
141 free(client->argv); in fio_put_client()
142 if (client->name) in fio_put_client()
143 free(client->name); in fio_put_client()
144 while (client->nr_ini_file) in fio_put_client()
145 free(client->ini_file[--client->nr_ini_file]); in fio_put_client()
146 if (client->ini_file) in fio_put_client()
147 free(client->ini_file); in fio_put_client()
149 if (!client->did_stat) in fio_put_client()
150 sum_stat_clients -= client->nr_stat; in fio_put_client()
152 free(client); in fio_put_client()
155 static void remove_client(struct fio_client *client) in remove_client() argument
157 assert(client->refs); in remove_client()
159 dprint(FD_NET, "client: removed <%s>\n", client->hostname); in remove_client()
161 if (!flist_empty(&client->list)) in remove_client()
162 flist_del_init(&client->list); in remove_client()
164 fio_client_remove_hash(client); in remove_client()
166 if (!flist_empty(&client->eta_list)) { in remove_client()
167 flist_del_init(&client->eta_list); in remove_client()
168 fio_client_dec_jobs_eta(client->eta_in_flight, client->ops->eta); in remove_client()
171 close(client->fd); in remove_client()
172 client->fd = -1; in remove_client()
174 if (client->ops->removed) in remove_client()
175 client->ops->removed(client); in remove_client()
178 fio_put_client(client); in remove_client()
181 struct fio_client *fio_get_client(struct fio_client *client) in fio_get_client() argument
183 client->refs++; in fio_get_client()
184 return client; in fio_get_client()
187 static void __fio_client_add_cmd_option(struct fio_client *client, in __fio_client_add_cmd_option() argument
192 index = client->argc++; in __fio_client_add_cmd_option()
193 client->argv = realloc(client->argv, sizeof(char *) * client->argc); in __fio_client_add_cmd_option()
194 client->argv[index] = strdup(opt); in __fio_client_add_cmd_option()
200 struct fio_client *client = cookie; in fio_client_add_cmd_option() local
203 if (!client || !opt) in fio_client_add_cmd_option()
206 __fio_client_add_cmd_option(client, opt); in fio_client_add_cmd_option()
212 client = flist_entry(entry, struct fio_client, arg_list); in fio_client_add_cmd_option()
214 __fio_client_add_cmd_option(client, opt); in fio_client_add_cmd_option()
222 struct fio_client *client; in fio_client_add_explicit() local
224 client = malloc(sizeof(*client)); in fio_client_add_explicit()
225 memset(client, 0, sizeof(*client)); in fio_client_add_explicit()
227 INIT_FLIST_HEAD(&client->list); in fio_client_add_explicit()
228 INIT_FLIST_HEAD(&client->hash_list); in fio_client_add_explicit()
229 INIT_FLIST_HEAD(&client->arg_list); in fio_client_add_explicit()
230 INIT_FLIST_HEAD(&client->eta_list); in fio_client_add_explicit()
231 INIT_FLIST_HEAD(&client->cmd_list); in fio_client_add_explicit()
233 client->hostname = strdup(hostname); in fio_client_add_explicit()
236 client->is_sock = 1; in fio_client_add_explicit()
242 &client->addr.sin_addr, in fio_client_add_explicit()
243 &client->addr6.sin6_addr)) in fio_client_add_explicit()
246 client->port = port; in fio_client_add_explicit()
249 client->fd = -1; in fio_client_add_explicit()
250 client->ops = ops; in fio_client_add_explicit()
251 client->refs = 1; in fio_client_add_explicit()
252 client->type = ops->client_type; in fio_client_add_explicit()
254 __fio_client_add_cmd_option(client, "fio"); in fio_client_add_explicit()
256 flist_add(&client->list, &client_list); in fio_client_add_explicit()
258 dprint(FD_NET, "client: added <%s>\n", client->hostname); in fio_client_add_explicit()
259 return client; in fio_client_add_explicit()
261 free(client); in fio_client_add_explicit()
267 struct fio_client *client = cookie; in fio_client_add_ini_file() local
270 dprint(FD_NET, "client <%s>: add ini %s\n", client->hostname, ini_file); in fio_client_add_ini_file()
272 new_size = (client->nr_ini_file + 1) * sizeof(char *); in fio_client_add_ini_file()
273 client->ini_file = realloc(client->ini_file, new_size); in fio_client_add_ini_file()
274 client->ini_file[client->nr_ini_file] = strdup(ini_file); in fio_client_add_ini_file()
275 client->nr_ini_file++; in fio_client_add_ini_file()
281 struct fio_client *client; in fio_client_add() local
296 client = malloc(sizeof(*client)); in fio_client_add()
297 memset(client, 0, sizeof(*client)); in fio_client_add()
299 INIT_FLIST_HEAD(&client->list); in fio_client_add()
300 INIT_FLIST_HEAD(&client->hash_list); in fio_client_add()
301 INIT_FLIST_HEAD(&client->arg_list); in fio_client_add()
302 INIT_FLIST_HEAD(&client->eta_list); in fio_client_add()
303 INIT_FLIST_HEAD(&client->cmd_list); in fio_client_add()
305 if (fio_server_parse_string(hostname, &client->hostname, in fio_client_add()
306 &client->is_sock, &client->port, in fio_client_add()
307 &client->addr.sin_addr, in fio_client_add()
308 &client->addr6.sin6_addr, in fio_client_add()
309 &client->ipv6)) in fio_client_add()
312 client->fd = -1; in fio_client_add()
313 client->ops = ops; in fio_client_add()
314 client->refs = 1; in fio_client_add()
315 client->type = ops->client_type; in fio_client_add()
317 __fio_client_add_cmd_option(client, "fio"); in fio_client_add()
319 flist_add(&client->list, &client_list); in fio_client_add()
321 dprint(FD_NET, "client: added <%s>\n", client->hostname); in fio_client_add()
322 *cookie = client; in fio_client_add()
326 static void probe_client(struct fio_client *client) in probe_client() argument
339 fio_net_send_cmd(client->fd, FIO_NET_CMD_PROBE, &pdu, sizeof(pdu), &tag, &client->cmd_list); in probe_client()
342 static int fio_client_connect_ip(struct fio_client *client) in fio_client_connect_ip() argument
348 if (client->ipv6) { in fio_client_connect_ip()
349 client->addr6.sin6_family = AF_INET6; in fio_client_connect_ip()
350 client->addr6.sin6_port = htons(client->port); in fio_client_connect_ip()
352 addr = (struct sockaddr *) &client->addr6; in fio_client_connect_ip()
353 socklen = sizeof(client->addr6); in fio_client_connect_ip()
355 client->addr.sin_family = AF_INET; in fio_client_connect_ip()
356 client->addr.sin_port = htons(client->port); in fio_client_connect_ip()
358 addr = (struct sockaddr *) &client->addr; in fio_client_connect_ip()
359 socklen = sizeof(client->addr); in fio_client_connect_ip()
374 log_err("fio: failed to connect to %s:%u\n", client->hostname, in fio_client_connect_ip()
375 client->port); in fio_client_connect_ip()
383 static int fio_client_connect_sock(struct fio_client *client) in fio_client_connect_sock() argument
385 struct sockaddr_un *addr = &client->addr_un; in fio_client_connect_sock()
391 strncpy(addr->sun_path, client->hostname, sizeof(addr->sun_path) - 1); in fio_client_connect_sock()
413 int fio_client_connect(struct fio_client *client) in fio_client_connect() argument
417 dprint(FD_NET, "client: connect to host %s\n", client->hostname); in fio_client_connect()
419 if (client->is_sock) in fio_client_connect()
420 fd = fio_client_connect_sock(client); in fio_client_connect()
422 fd = fio_client_connect_ip(client); in fio_client_connect()
424 dprint(FD_NET, "client: %s connected %d\n", client->hostname, fd); in fio_client_connect()
429 client->fd = fd; in fio_client_connect()
430 fio_client_add_hash(client); in fio_client_connect()
431 client->state = Client_connected; in fio_client_connect()
433 probe_client(client); in fio_client_connect()
437 int fio_client_terminate(struct fio_client *client) in fio_client_terminate() argument
439 return fio_net_send_quit(client->fd); in fio_client_terminate()
445 struct fio_client *client; in fio_clients_terminate() local
450 client = flist_entry(entry, struct fio_client, list); in fio_clients_terminate()
451 fio_client_terminate(client); in fio_clients_terminate()
494 static int send_client_cmd_line(struct fio_client *client) in send_client_cmd_line() argument
504 dprint(FD_NET, "client: send cmdline %d\n", client->argc); in send_client_cmd_line()
506 lens = malloc(client->argc * sizeof(unsigned int)); in send_client_cmd_line()
511 for (i = 0, mem = 0; i < client->argc; i++) { in send_client_cmd_line()
512 lens[i] = strlen(client->argv[i]) + 1; in send_client_cmd_line()
519 mem += sizeof(*clp) + (client->argc * sizeof(*cslp)); in send_client_cmd_line()
525 for (i = 0; i < client->argc; i++) { in send_client_cmd_line()
529 strcpy((char *) cslp->text, client->argv[i]); in send_client_cmd_line()
535 clp->lines = cpu_to_le16(client->argc); in send_client_cmd_line()
536 clp->client_type = __cpu_to_le16(client->type); in send_client_cmd_line()
537 ret = fio_net_send_cmd(client->fd, FIO_NET_CMD_JOBLINE, pdu, mem, NULL, NULL); in send_client_cmd_line()
544 struct fio_client *client; in fio_clients_connect() local
558 client = flist_entry(entry, struct fio_client, list); in fio_clients_connect()
560 ret = fio_client_connect(client); in fio_clients_connect()
562 remove_client(client); in fio_clients_connect()
566 if (client->argc > 1) in fio_clients_connect()
567 send_client_cmd_line(client); in fio_clients_connect()
573 int fio_start_client(struct fio_client *client) in fio_start_client() argument
575 dprint(FD_NET, "client: start %s\n", client->hostname); in fio_start_client()
576 return fio_net_send_simple_cmd(client->fd, FIO_NET_CMD_RUN, 0, NULL); in fio_start_client()
581 struct fio_client *client; in fio_start_all_clients() local
590 client = flist_entry(entry, struct fio_client, list); in fio_start_all_clients()
592 ret = fio_start_client(client); in fio_start_all_clients()
594 remove_client(client); in fio_start_all_clients()
606 static int __fio_client_send_ini(struct fio_client *client, const char *filename) in __fio_client_send_ini() argument
616 dprint(FD_NET, "send ini %s to %s\n", filename, client->hostname); in __fio_client_send_ini()
662 pdu->client_type = cpu_to_le32(client->type); in __fio_client_send_ini()
664 client->sent_job = 1; in __fio_client_send_ini()
665 ret = fio_net_send_cmd(client->fd, FIO_NET_CMD_JOB, pdu, p_size, NULL, NULL); in __fio_client_send_ini()
671 int fio_client_send_ini(struct fio_client *client, const char *filename) in fio_client_send_ini() argument
675 ret = __fio_client_send_ini(client, filename); in fio_client_send_ini()
677 client->sent_job = 1; in fio_client_send_ini()
684 struct fio_client *client; in fio_clients_send_ini() local
688 client = flist_entry(entry, struct fio_client, list); in fio_clients_send_ini()
690 if (client->nr_ini_file) { in fio_clients_send_ini()
693 for (i = 0; i < client->nr_ini_file; i++) { in fio_clients_send_ini()
694 const char *ini = client->ini_file[i]; in fio_clients_send_ini()
696 if (fio_client_send_ini(client, ini)) { in fio_clients_send_ini()
697 remove_client(client); in fio_clients_send_ini()
701 } else if (!filename || fio_client_send_ini(client, filename)) in fio_clients_send_ini()
702 remove_client(client); in fio_clients_send_ini()
708 int fio_client_update_options(struct fio_client *client, in fio_client_update_options() argument
713 pdu.thread_number = cpu_to_le32(client->thread_number); in fio_client_update_options()
714 pdu.groupid = cpu_to_le32(client->groupid); in fio_client_update_options()
717 …return fio_net_send_cmd(client->fd, FIO_NET_CMD_UPDATE_JOB, &pdu, sizeof(pdu), tag, &client->cmd_l… in fio_client_update_options()
826 struct fio_client *client) in json_object_add_client_info() argument
828 json_object_add_value_string(obj, "hostname", client->hostname); in json_object_add_client_info()
829 json_object_add_value_int(obj, "port", client->port); in json_object_add_client_info()
832 static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd) in handle_ts() argument
838 client->did_stat = 1; in handle_ts()
840 json_object_add_client_info(tsobj, client); in handle_ts()
859 json_object_add_client_info(tsobj, client); in handle_ts()
865 static void handle_gs(struct fio_client *client, struct fio_net_cmd *cmd) in handle_gs() argument
872 static void handle_text(struct fio_client *client, struct fio_net_cmd *cmd) in handle_text() argument
879 name = client->name ? client->name : client->hostname; in handle_text()
881 if (!client->skip_newline) in handle_text()
885 client->skip_newline = strchr(buf, '\n') == NULL; in handle_text()
921 static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd) in handle_du() argument
925 if (!client->disk_stats_shown) { in handle_du()
926 client->disk_stats_shown = 1; in handle_du()
934 json_object_add_client_info(duobj, client); in handle_du()
1001 static void remove_reply_cmd(struct fio_client *client, struct fio_net_cmd *cmd) in remove_reply_cmd() argument
1006 flist_for_each(entry, &client->cmd_list) { in remove_reply_cmd()
1025 int fio_client_wait_for_reply(struct fio_client *client, uint64_t tag) in fio_client_wait_for_reply() argument
1031 flist_for_each(entry, &client->cmd_list) { in fio_client_wait_for_reply()
1049 static void handle_eta(struct fio_client *client, struct fio_net_cmd *cmd) in handle_eta() argument
1056 assert(client->eta_in_flight == eta); in handle_eta()
1058 client->eta_in_flight = NULL; in handle_eta()
1059 flist_del_init(&client->eta_list); in handle_eta()
1061 if (client->ops->jobs_eta) in handle_eta()
1062 client->ops->jobs_eta(client, je); in handle_eta()
1065 fio_client_dec_jobs_eta(eta, client->ops->eta); in handle_eta()
1068 static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd) in handle_probe() argument
1089 if (!client->name) in handle_probe()
1090 client->name = strdup((char *) probe->hostname); in handle_probe()
1093 static void handle_start(struct fio_client *client, struct fio_net_cmd *cmd) in handle_start() argument
1097 client->state = Client_started; in handle_start()
1098 client->jobs = le32_to_cpu(pdu->jobs); in handle_start()
1099 client->nr_stat = le32_to_cpu(pdu->stat_outputs); in handle_start()
1104 sum_stat_clients += client->nr_stat; in handle_start()
1107 static void handle_stop(struct fio_client *client, struct fio_net_cmd *cmd) in handle_stop() argument
1109 if (client->error) in handle_stop()
1110 log_info("client <%s>: exited with error %d\n", client->hostname, client->error); in handle_stop()
1240 int fio_handle_client(struct fio_client *client) in fio_handle_client() argument
1242 struct client_ops *ops = client->ops; in fio_handle_client()
1245 dprint(FD_NET, "client: handle %s\n", client->hostname); in fio_handle_client()
1247 cmd = fio_net_recv_cmd(client->fd); in fio_handle_client()
1252 fio_server_op(cmd->opcode), client->hostname, cmd->pdu_len); in fio_handle_client()
1257 ops->quit(client, cmd); in fio_handle_client()
1258 remove_client(client); in fio_handle_client()
1263 ops->text(client, cmd); in fio_handle_client()
1272 ops->disk_util(client, cmd); in fio_handle_client()
1282 ops->thread_status(client, cmd); in fio_handle_client()
1291 ops->group_stats(client, cmd); in fio_handle_client()
1298 remove_reply_cmd(client, cmd); in fio_handle_client()
1300 handle_eta(client, cmd); in fio_handle_client()
1305 remove_reply_cmd(client, cmd); in fio_handle_client()
1306 ops->probe(client, cmd); in fio_handle_client()
1310 client->state = Client_running; in fio_handle_client()
1312 ops->job_start(client, cmd); in fio_handle_client()
1319 ops->start(client, cmd); in fio_handle_client()
1327 client->state = Client_stopped; in fio_handle_client()
1328 client->error = le32_to_cpu(pdu->error); in fio_handle_client()
1329 client->signal = le32_to_cpu(pdu->signal); in fio_handle_client()
1330 ops->stop(client, cmd); in fio_handle_client()
1337 client->thread_number = le32_to_cpu(pdu->thread_number); in fio_handle_client()
1338 client->groupid = le32_to_cpu(pdu->groupid); in fio_handle_client()
1341 ops->add_job(client, cmd); in fio_handle_client()
1350 ops->iolog(client, pdu); in fio_handle_client()
1355 ops->update_job(client, cmd); in fio_handle_client()
1356 remove_reply_cmd(client, cmd); in fio_handle_client()
1370 struct fio_client *client; in request_client_etas() local
1382 client = flist_entry(entry, struct fio_client, list); in request_client_etas()
1384 if (!flist_empty(&client->eta_list)) { in request_client_etas()
1388 if (client->state != Client_running) in request_client_etas()
1391 assert(!client->eta_in_flight); in request_client_etas()
1392 flist_add_tail(&client->eta_list, &eta_list); in request_client_etas()
1393 client->eta_in_flight = eta; in request_client_etas()
1394 fio_net_send_simple_cmd(client->fd, FIO_NET_CMD_SEND_ETA, in request_client_etas()
1395 (uintptr_t) eta, &client->cmd_list); in request_client_etas()
1404 static int client_check_cmd_timeout(struct fio_client *client, in client_check_cmd_timeout() argument
1411 flist_for_each_safe(entry, tmp, &client->cmd_list) { in client_check_cmd_timeout()
1417 log_err("fio: client %s, timeout on cmd %s\n", client->hostname, in client_check_cmd_timeout()
1424 return flist_empty(&client->cmd_list) && ret; in client_check_cmd_timeout()
1429 struct fio_client *client; in fio_check_clients_timed_out() local
1437 client = flist_entry(entry, struct fio_client, list); in fio_check_clients_timed_out()
1439 if (flist_empty(&client->cmd_list)) in fio_check_clients_timed_out()
1442 if (!client_check_cmd_timeout(client, &tv)) in fio_check_clients_timed_out()
1445 if (client->ops->timed_out) in fio_check_clients_timed_out()
1446 client->ops->timed_out(client); in fio_check_clients_timed_out()
1448 log_err("fio: client %s timed out\n", client->hostname); in fio_check_clients_timed_out()
1450 remove_client(client); in fio_check_clients_timed_out()
1471 struct fio_client *client; in fio_handle_clients() local
1475 client = flist_entry(entry, struct fio_client, list); in fio_handle_clients()
1477 if (!client->sent_job && !client->ops->stay_connected && in fio_handle_clients()
1478 flist_empty(&client->cmd_list)) { in fio_handle_clients()
1479 remove_client(client); in fio_handle_clients()
1483 pfds[i].fd = client->fd; in fio_handle_clients()
1519 client = find_client_by_fd(pfds[i].fd); in fio_handle_clients()
1520 if (!client) { in fio_handle_clients()
1524 if (!fio_handle_client(client)) { in fio_handle_clients()
1526 client->hostname); in fio_handle_clients()
1527 remove_client(client); in fio_handle_clients()
1529 } else if (client->error) in fio_handle_clients()
1531 fio_put_client(client); in fio_handle_clients()