static gfarm_error_t gfj_server_put_info_entry(struct gfp_xdr *client, struct gfarm_job_info *info) { gfarm_error_t e; int i; e = gfp_xdr_send(client, "issssi", info->total_nodes, info->user, info->job_type, info->originate_host, info->gfarm_url_for_scheduling, info->argc); if (e != GFARM_ERR_NO_ERROR) return (e); for (i = 0; i < info->argc; i++) { e = gfp_xdr_send(client, "s", info->argv[i]); if (e != GFARM_ERR_NO_ERROR) return (e); } for (i = 0; i < info->total_nodes; i++) { e = gfp_xdr_send(client, "sii", info->nodes[i].hostname, info->nodes[i].pid, info->nodes[i].state); if (e != GFARM_ERR_NO_ERROR) return (e); } return (GFARM_ERR_NO_ERROR); }
gfarm_error_t gfj_server_list(struct peer *peer, int from_client, int skip) { gfarm_error_t e; struct gfp_xdr *client = peer_get_conn(peer); char *user; int i; gfarm_int32_t n; e = gfj_server_get_request(peer, "list", "s", &user); if (e != GFARM_ERR_NO_ERROR) return (e); if (skip) { free(user); return (GFARM_ERR_NO_ERROR); } if (!from_client) { e = gfj_server_put_reply(peer, "list", GFARM_ERR_OPERATION_NOT_PERMITTED, ""); if (e != GFARM_ERR_NO_ERROR) return (e); } else { /* XXX FIXME too long giant lock */ giant_lock(); n = 0; for (i = 0; i < job_table_size; i++) { if (job_table[i] != NULL && (*user == '\0' || strcmp(user, job_table[i]->info->user) == 0)) n++; } e = gfj_server_put_reply(peer, "register", GFARM_ERR_NO_ERROR, "i", n); if (e != GFARM_ERR_NO_ERROR) { giant_unlock(); return (e); } for (i = 0; i < job_table_size; i++) { if (job_table[i] != NULL && (*user == '\0' || strcmp(user, job_table[i]->info->user) == 0)) { e = gfp_xdr_send(client, "i", (gfarm_int32_t)i); if (e != GFARM_ERR_NO_ERROR) { giant_unlock(); return (e); } } } giant_unlock(); } free(user); return (GFARM_ERR_NO_ERROR); }
static gfarm_error_t gfj_server_put_info_entry(struct gfp_xdr *client, struct gfarm_job_info *info) { gfarm_error_t e; int i; e = gfp_xdr_send(client, "issssi", info->total_nodes, info->user, info->job_type, info->originate_host, info->gfarm_url_for_scheduling, info->argc); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001698, "gfp_xdr_send() failed"); return (e); } for (i = 0; i < info->argc; i++) { e = gfp_xdr_send(client, "s", info->argv[i]); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001699, "gfp_xdr_send(info->argv[%d]) failed", i); return (e); } } for (i = 0; i < info->total_nodes; i++) { e = gfp_xdr_send(client, "sii", info->nodes[i].hostname, info->nodes[i].pid, info->nodes[i].state); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001700, "gfp_xdr_send(info->nodes[%d]) failed", i); return (e); } } return (GFARM_ERR_NO_ERROR); }
gfarm_error_t gfj_server_list(struct peer *peer, gfp_xdr_xid_t xid, size_t *sizep, int from_client, int skip) { gfarm_error_t e; struct gfp_xdr *client = peer_get_conn(peer); char *user; int i; gfarm_int32_t n; static const char diag[] = "GFJ_PROTO_LIST"; e = gfj_server_get_request(peer, sizep, diag, "s", &user); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001694, "list request failure"); return (e); } if (skip) { free(user); return (GFARM_ERR_NO_ERROR); } if (!from_client) { e = gfj_server_put_reply(peer, xid, sizep, diag, GFARM_ERR_OPERATION_NOT_PERMITTED, ""); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001695, "gfj_server_put_reply(list) failed"); return (e); } } else { /* XXX FIXME too long giant lock */ giant_lock(); n = 0; for (i = 0; i < job_table_size; i++) { if (job_table[i] != NULL && (*user == '\0' || strcmp(user, job_table[i]->info->user) == 0)) n++; } /* XXXRELAY FIXME, reply size is not correct */ e = gfj_server_put_reply(peer, xid, sizep, diag, GFARM_ERR_NO_ERROR, "i", n); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001696, "gfj_server_put_reply(register) failed"); giant_unlock(); return (e); } for (i = 0; i < job_table_size; i++) { if (job_table[i] != NULL && (*user == '\0' || strcmp(user, job_table[i]->info->user) == 0)) { /* XXXRELAY FIXME */ e = gfp_xdr_send(client, "i", (gfarm_int32_t)i); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001697, "gfp_xdr_send() failed"); giant_unlock(); return (e); } } } giant_unlock(); } free(user); return (GFARM_ERR_NO_ERROR); }