void start_backup(int nid) { int ferr; nid = nid; // no-warn ferr = msg_mon_get_process_info(NULL, &nid, &gpeer_pid); TEST_CHK_FEOK(ferr); gpeer_nid = 1 - nid; gpeer_pid = -1; myprintf("starting backup process with open.\n"); ferr = msg_mon_start_process(gprog, // prog gname, // name NULL, // ret name gargc, gargp, TPT_REF(gpeer_phandle), 0, // open &gpeer_oid, MS_ProcessType_Generic, // type 0, // priority 0, // debug 1, // backup &gpeer_nid, // nid &gpeer_pid, // pid NULL, // infile NULL); // outfile TEST_CHK_FEOK(ferr); ferr = msg_mon_open_process_backup(gname, TPT_REF(gpeer_phandle), &gpeer_oid); TEST_CHK_FEOK(ferr); myprintf("after start_backup - peer p-id=%d/%d\n", gpeer_nid, gpeer_pid); mypairinfo(true); }
void pp_start_backup(int nid) { int ferr; if (gshutdown) { if (gverbosepp) pp_printf("NOT starting backup process - shutdown.\n"); return; } nid = nid; // no-warn ferr = msg_mon_get_process_info(NULL, &nid, &gpeer_pid); TEST_CHK_FEOK(ferr); for (;;) { gpeer_nid = -1; if (gnid == 1) gpeer_nid = 2; else gpeer_nid = 1; gpeer_pid = -1; if (gverbosepp) pp_printf("starting backup process with open, nid=%d.\n", gpeer_nid); ferr = msg_mon_start_process(gprog, // prog gname, // name NULL, // ret name gargc, gargp, TPT_REF(gpeer_phandle), 0, // open &gpeer_oid, MS_ProcessType_TSE, // type 0, // priority 0, // debug 1, // backup &gpeer_nid, // nid &gpeer_pid, // pid NULL, // infile NULL); // outfile if (ferr == XZFIL_ERR_OK) break; printf("backup did not start error=%d\n", ferr); sleep(1); } TEST_CHK_FEOK(ferr); ferr = msg_mon_open_process_backup(gname, TPT_REF(gpeer_phandle), &gpeer_oid); TEST_CHK_FEOK(ferr); if (gverbosepp) pp_printf("after start_backup - peer p-id=%d/%d\n", gpeer_nid, gpeer_pid); pp_pairinfo(true); }
void start_server(int argc, char **argv) { int arg; int disable; int ferr; char prog[MS_MON_MAX_PROCESS_PATH]; char ret_name[MS_MON_MAX_PROCESS_NAME]; sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; // TODO: remove disable/loop disable = msg_test_assert_disable(); do { server_nid = my_nid; ferr = msg_mon_start_process(prog, // prog (char *) server_name, // name ret_name, // ret name argc, argv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile if (ferr == XZFIL_ERR_BOUNDSERR) { printf("TODO: remove this sleep - BOUNDSERR\n"); sleep(1); } if (ferr == XZFIL_ERR_FSERR) { printf("TODO: remove this sleep - FSERR\n"); sleep(1); } } while ((ferr == XZFIL_ERR_BOUNDSERR) || (ferr == XZFIL_ERR_FSERR)); TEST_CHK_FEOK(ferr); msg_test_assert_enable(disable); }
void restart_server() { int disable; int ferr; MS_Mon_Process_Info_Type info; char prog[BUFSIZ]; TPT_DECL (server_phandle); ferr = msg_mon_get_process_info_detail((char *) "$srv", &info); if (ferr == XZFIL_ERR_OK) return; // server is alive sprintf(prog, "%s/%s", getenv("PWD"), gargv[0]); if (verbose) printf("%s - starting server\n", who); // TODO: remove disable/loop disable = msg_test_assert_disable(); do { ferr = msg_mon_start_process(prog, // prog (char *) "$srv", // name NULL, // ret name *gargc, gargv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup NULL, // nid NULL, // pid NULL, // infile NULL); // outfile if (ferr == XZFIL_ERR_BOUNDSERR) { printf("TODO: remove this sleep - $srv already in use\n"); sleep(1); } } while (ferr == XZFIL_ERR_BOUNDSERR); TEST_CHK_FEOK(ferr); msg_test_assert_enable(disable); }
void restart_server(int argc, char **argv) { int arg; int disable; int ferr; char prog[MS_MON_MAX_PROCESS_PATH]; char ret_name[MS_MON_MAX_PROCESS_NAME]; sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; printf("restarting server\n"); for (int inx = 0; inx < 10; inx++) { server_nid = -1; disable = msg_test_assert_disable(); // allow for errors in start ferr = msg_mon_start_process(prog, // prog srv1, // name ret_name, // ret name argc, argv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile msg_test_assert_enable(disable); if (ferr == XZFIL_ERR_OK) break; sleep(1); printf("retrying-start\n"); } TEST_CHK_FEOK(ferr); }
void start_server(int argc, char **argv) { int arg; char device[MS_MON_MAX_PROCESS_PATH+10]; int disable; bool done; int ferr; char *nodes; char prog[MS_MON_MAX_PROCESS_PATH]; char server_name[10]; int server_nid; int server_pid; const char *z0; const char *z1; strcpy(server_name, "$srv"); nodes = getenv("SQ_VIRTUAL_NODES"); if ((nodes != NULL) && (atoi(nodes) > 2)) { z0 = "1"; z1 = "2"; } else { z0 = "0"; z1 = "1"; } ferr = msg_mon_reg_set(MS_Mon_ConfigType_Process, // type server_name, // group (char *) "ZONE", // key (char *) z0); // value TEST_CHK_FEOK(ferr); ferr = msg_mon_reg_set(MS_Mon_ConfigType_Process, // type server_name, // group (char *) "ZONE-B", // key (char *) z1); // value TEST_CHK_FEOK(ferr); sprintf(device, "%s/%s", getenv("PWD"), server_name); ferr = msg_mon_reg_set(MS_Mon_ConfigType_Process, // type server_name, // group (char *) "DEVICE", // key device); // value TEST_CHK_FEOK(ferr); sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; // TODO: remove disable/loop disable = msg_test_assert_disable(); do { done = true; server_nid = -1; ferr = msg_mon_start_process(prog, // prog server_name, // name NULL, // ret name argc, argv, NULL, // phandle 0, // open NULL, // oid MS_ProcessType_TSE, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile if (ferr == XZFIL_ERR_BOUNDSERR) { printf("TODO: remove this sleep - $srv already in use\n"); sleep(1); done = false; } else if (ferr == XZFIL_ERR_FSERR) { printf("TODO: remove this sleep - $srv already in use\n"); sleep(1); done = false; } } while (!done); TEST_CHK_FEOK(ferr); msg_test_assert_enable(disable); }
int main(int argc, char *argv[]) { int arg; bool attach = false; _xcc_status cc; bool chook = false; bool client = false; unsigned short count_read; unsigned short count_written; int ferr; short filenum; int inx; int loop = 10; char my_name[BUFSIZ]; char prog[MS_MON_MAX_PROCESS_PATH]; char recv_buffer[BUFSIZ]; char ret_name[MS_MON_MAX_PROCESS_NAME]; char send_buffer[BUFSIZ]; const char *server_name = "$SRV"; int server_nid = -1; TPT_DECL (server_phandle); int server_pid; bool shook = false; TAD zargs[] = { { "-attach", TA_Bool, TA_NOMAX, &attach }, { "-chook", TA_Bool, TA_NOMAX, &chook }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-shook", TA_Bool, TA_NOMAX, &shook }, { "", TA_End, TA_NOMAX, NULL } }; #ifdef DEBUG_ENV env = environ; while (*env != NULL) { printf("env=%s\n", *env); env++; } #endif arg_proc_args(zargs, false, argc, argv); if (chook && client) test_debug_hook("c", "c"); if (shook && !client) test_debug_hook("s", "s"); if (client && attach) ferr = file_init_attach(&argc, &argv, true, (char *) "$CLI"); else ferr = file_init(&argc, &argv); TEST_CHK_FEOK(ferr); util_test_start(client); ferr = file_mon_process_startup(!client); // system messages TEST_CHK_FEOK(ferr); util_gethostname(my_name, sizeof(my_name)); if (client) { sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; ferr = msg_mon_start_process(prog, // prog (char *) server_name, // name ret_name, // ret name argc, argv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile TEST_CHK_FEOK(ferr); assert(strcmp(ret_name, server_name) == 0); ferr = XFILE_OPEN_((char *) server_name, (short) strlen(server_name), &filenum, 0, 0, 0, 0, 0, 0, 0, NULL); TEST_CHK_FEOK(ferr); for (inx = 0; inx < loop; inx++) { sprintf(send_buffer, "hello, greetings from %s, inx=%d", my_name, inx); cc = XWRITEREADX(filenum, send_buffer, (short) (strlen(send_buffer) + 1), BUFSIZ, &count_read, 0); TEST_CHK_CCEQ(cc); printf("%s\n", send_buffer); } ferr = XFILE_CLOSE_(filenum, 0); TEST_CHK_FEOK(ferr); } else { ferr = XFILE_OPEN_((char *) "$RECEIVE", 8, &filenum, 0, 0, 0, 1, 1, // no sys msg 0, 0, NULL); TEST_CHK_FEOK(ferr); for (inx = 0; inx < loop; inx++) { cc = XREADUPDATEX(filenum, recv_buffer, BUFSIZ, &count_read, 0); TEST_CHK_CCEQ(cc); strcat(recv_buffer, "- reply from "); strcat(recv_buffer, my_name); count_read = (short) (strlen(recv_buffer) + 1); cc = XREPLYX(recv_buffer, count_read, &count_written, 0, XZFIL_ERR_OK); TEST_CHK_CCEQ(cc); } } ferr = file_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { int arg; bool chook = false; bool client = false; int ferr; int inx; int loop = 10; char my_name[BUFSIZ]; bool nowait = false; int nid; int pid; char prog[MS_MON_MAX_PROCESS_PATH]; char retname[BUFSIZ]; char server_name[30]; int server_nid; TPT_DECL (server_phandle); int server_pid; bool shook = false; int status; TAD zargs[] = { { "-chook", TA_Bool, TA_NOMAX, &chook }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-nowait", TA_Bool, TA_NOMAX, &nowait }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-shook", TA_Bool, TA_NOMAX, &shook }, { "", TA_End, TA_NOMAX, NULL } }; arg_proc_args(zargs, false, argc, argv); if (chook && client) test_debug_hook("c", "c"); if (shook && !client) test_debug_hook("s", "s"); ferr = msg_init(&argc, &argv); TEST_CHK_FEOK(ferr); if (client) msg_mon_enable_mon_messages(true); util_test_start(client); msg_mon_enable_mon_messages(true); ferr = msg_mon_process_startup(client); // system messages TEST_CHK_FEOK(ferr); ferr = msg_mon_get_process_info(NULL, &nid, &pid); TEST_CHK_FEOK(ferr); ferr = msg_mon_get_my_process_name(my_name, sizeof(my_name)); TEST_CHK_FEOK(ferr); if (client) { sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; for (inx = 0; inx < loop; inx++) { sprintf(server_name, "$SRV%d", inx); server_nid = -1; if (nowait) ferr = msg_mon_start_process_nowait_cb(cb, // callback prog, // prog server_name, // name retname, // ret-name argc, // argc argv, // argv MS_ProcessType_Generic, // type 0, // priority false, // debug false, // backup inx, // tag &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile else ferr = msg_mon_start_process(prog, // prog server_name, // name NULL, // ret name argc, argv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile printf("process started, err=%d\n", ferr); TEST_CHK_FEOK(ferr); if (nowait) { status = cv.wait(true); TEST_CHK_STATUSOK(status); } wait_death(); } } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { int arg; bool bm = false; char *buf; double busy; bool chook = false; bool client = false; char errnobuf[100]; char error_txt[200]; int event_len; char event_data[MS_MON_MAX_SYNC_DATA]; int ferr; int inx; int key; int lerr; int loop = 10; int msid; int pid; char prog[MS_MON_MAX_PROCESS_PATH]; struct rusage r_start; struct rusage r_stop; const char *server_name = "$SRV"; int server_nid; TPT_DECL (server_phandle); int server_pid; bool shook = false; struct timeval t_elapsed; struct timeval t_start; struct timeval t_stop; TAD zargs[] = { { "-bm", TA_Bool, TA_NOMAX, &bm }, { "-chook", TA_Bool, TA_NOMAX, &chook }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-shook", TA_Bool, TA_NOMAX, &shook }, { "", TA_End, TA_NOMAX, NULL } }; ferr = msg_init(&argc, &argv); arg_proc_args(zargs, false, argc, argv); if (chook && client) test_debug_hook("c", "c"); if (shook && !client) test_debug_hook("s", "s"); util_test_start(client); ferr = msg_mon_process_startup(!client); // system messages? TEST_CHK_FEOK(ferr); proc_enable_external_wakeups(); // allow external wakeups if (client) { ferr = msg_mon_get_process_info(NULL, &server_nid, &server_pid); TEST_CHK_FEOK(ferr); sprintf(prog, "%s/%s", getenv("PWD"), argv[0]); for (arg = 0; arg < argc; arg++) if (strcmp(argv[arg], "-client") == 0) // start_process argv[arg] = (char *) "-server"; ferr = msg_mon_start_process(prog, // prog (char *) server_name, // name NULL, // ret name argc, argv, TPT_REF(server_phandle), 0, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority 0, // debug 0, // backup &server_nid, // nid &server_pid, // pid NULL, // infile NULL); // outfile printf("process started, err=%d\n", ferr); TEST_CHK_FEOK(ferr); } util_gethostname(my_name, sizeof(my_name)); lerr = XWAIT(LREQ, -1); // remove first LREQ assert(lerr == LREQ); ferr = msg_mon_get_my_segid(&key); TEST_CHK_FEOK(ferr); // process-wait for client/server/shell ferr = msfs_util_wait_process_count(MS_ProcessType_Generic, 3, NULL, false); TEST_CHK_FEOK(ferr); if (client) { ferr = msg_mon_event_wait(1, &event_len, event_data); TEST_CHK_FEOK(ferr); msid = shmget(key, sizeof(recv_buffer), 0640); if (msid == -1) { perror("client shmget"); sprintf(error_txt, "client shmget(%d)=%s\n", key, strerror_r(errno, errnobuf, sizeof(errnobuf))); } assert(msid != -1); buf = (char *) shmat(msid, NULL, 0); assert(buf != NULL); } else { msid = shmget(key, sizeof(recv_buffer), IPC_CREAT | 0640); if (msid == -1) { perror("server shmget"); sprintf(error_txt, "server shmget(%d)=%s\n", key, strerror_r(errno, errnobuf, sizeof(errnobuf))); } assert(msid != -1); buf = (char *) shmat(msid, NULL, 0); assert(buf != NULL); ferr = msg_mon_event_send(-1, // nid -1, // pid MS_ProcessType_Undefined, // process-type 1, // event-id 0, // event-len NULL); // event-data TEST_CHK_FEOK(ferr); ferr = msg_mon_event_wait(1, &event_len, event_data); TEST_CHK_FEOK(ferr); } util_time_timer_start(&t_start); util_cpu_timer_start(&r_start); if (client) { pid = server_pid; for (inx = 0; inx < loop; inx++) { lerr = XPROCESS_AWAKE_(pid, LREQ); assert(lerr == XZFIL_ERR_OK); lerr = XWAIT(LDONE, -1); assert(lerr == LDONE); } } else { ferr = msg_mon_get_process_info((char *) "$CLI", &server_nid, &pid); TEST_CHK_FEOK(ferr); for (inx = 0; inx < loop; inx++) { lerr = XWAIT(LREQ, -1); assert(lerr == LREQ); lerr = XPROCESS_AWAKE_(pid, LDONE); assert(lerr == XZFIL_ERR_OK); } } util_cpu_timer_stop(&r_stop); util_time_timer_stop(&t_stop); util_time_elapsed(&t_start, &t_stop, &t_elapsed); util_cpu_timer_busy(&r_start, &r_stop, &t_elapsed, &busy); if (client) { if (!bm) print_elapsed("", &t_elapsed); print_rate(bm, "", loop, 1024, &t_elapsed, busy); } else print_server_busy(bm, "", busy); ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { enum { MAX_RETRIES = 100 }; enum { SLEEP_US = 1000 }; bool attach = false; _xcc_status cc; bool client = false; int count; int count_read; int count_written; bool dif = false; double dloop; double dms; double dsec; int err; bool exec = false; int ferr; bool fin = false; MS_Mon_Process_Info_Type info; MS_Mon_Process_Info_Type *infop; int inx; int inx2; int inx3; short len; short lerr; short lerr2; int loop = 10; int max; int nid; pid_t pid; int sargc; ssize_t size; int snid; int spid; bool startup = false; xzsys_ddl_smsg_def *sys_msgp = (xzsys_ddl_smsg_def *) recv_buffer; int sys_msg; int sys_msg_count; bool verbose = false; TAD zargs[] = { { "-attach", TA_Bool, TA_NOMAX, &attach }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-dif", TA_Bool, TA_NOMAX, &dif }, { "-exec", TA_Bool, TA_NOMAX, &exec }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-maxsp", TA_Int, TA_NOMAX, &maxsp }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-startup", TA_Bool, TA_NOMAX, &startup }, { "-trace", TA_Bool, TA_NOMAX, &trace }, { "-v", TA_Bool, TA_NOMAX, &verbose }, { "-verbose", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; arg_proc_args(zargs, false, argc, argv); sprintf(fifo1, "%s-%s", FIFO1, getenv("USER")); sprintf(fifo2, "%s-%s", FIFO2, getenv("USER")); if (trace) msg_init_trace(); if (exec) return 0; if (startup) { err = fifo_open(fifo1, O_WRONLY); assert(err != -1); ffds[1] = err; err = fifo_open(fifo2, O_RDONLY); assert(err != -1); ffds[0] = err; if (trace) trace_printf("cli: writing fifo\n"); size = write(ffds[1], recv_buffer, 1); if (trace) trace_printf("cli: fifo write, size=%d\n", (int) size); assert(size == 1); if (trace) trace_printf("cli: fifo written\n"); close(ffds[1]); return 0; } if (attach) ferr = file_init_attach(&argc, &argv, false, NULL); else ferr = file_init(&argc, &argv); TEST_CHK_FEOK(ferr); util_test_start(client); ferr = msg_mon_process_startup(true); // system messages util_check("msg_mon_process_startup", ferr); ferr = msg_mon_get_my_process_name(procname, BUFSIZ); util_check("msg_mon_get_my_process_name", ferr); ferr = msg_mon_get_process_info(procname, &nid, &pid); TEST_CHK_FEOK(ferr); if (trace) trace_printf("proc=%s, nid=%d, pid=%d\n", procname, nid, pid); dloop = (double) loop; for (inx = 0; inx < T_MAX; inx++) t_elapsed[inx] = 0.0; if (client) { printf("loop=%d, maxsp=%d\n", loop, maxsp); sargc = argc; assert(sargc < MAX_ARGS); for (inx2 = 0; inx2 < argc; inx2++) { if (strcmp(argv[inx2], "-client") == 0) sargv[inx2] = (char *) "-server"; else sargv[inx2] = argv[inx2]; if (strcmp(argv[inx2], "-attach") == 0) sargv[inx2] = (char *) "-server"; } sargv[argc] = NULL; sprintf(sprog, "%s/%s", getenv("PWD"), argv[0]); time_start(T_TOTAL); for (inx = 0; inx < loop; inx += maxsp) { if (dif) snid = -1; else snid = nid; max = loop - inx; if (max > maxsp) max = maxsp; for (inx2 = 0; inx2 < max; inx2++) sname[inx2][0] = 0; // mon picks name if (trace) trace_printf("cli: newproc, inx=%d\n", inx); time_start(T_NEWPROC); for (inx2 = 0; inx2 < max; inx2++) { ferr = msg_mon_start_process(sprog, // prog sname[inx2], // name sname[inx2], // ret_name sargc, // argc sargv, // argv TPT_REF2(sphandle,inx2),// phandle false, // open &soid[inx2], // oid MS_ProcessType_Generic, // type 0, // priority false, // debug false, // backup &snid, // nid &spid, // pid NULL, // infile NULL); // outfile TEST_CHK_FEOK(ferr); } time_stop(T_NEWPROC); time_elapsed(T_NEWPROC); // wait here until processes are 'up' // so that open timing is correct inx3 = 0; for (inx2 = 0; inx2 < max; inx2++) { ferr = msg_mon_get_process_info_detail(sname[inx2], &info); TEST_CHK_FEOK(ferr); if (info.state != MS_Mon_State_Up) { inx3++; if (inx3 > MAX_RETRIES) { printf("process %s did not enter 'UP' state\n", sname[inx2]); assert(inx3 < MAX_RETRIES); } usleep(SLEEP_US); inx2--; continue; } else inx3 = 0; } if (trace) trace_printf("cli: open, inx=%d\n", inx); time_start(T_OPEN); for (inx2 = 0; inx2 < max; inx2++) { if (trace) trace_printf("cli: opening inx=%d, name=%s\n", inx, sname[inx2]); len = (short) strlen(sname[inx2]); ferr = BFILE_OPEN_(sname[inx2], len, &sfilenum[inx2], 0, 0, 0, 0, 0, 0, 0); if (trace) trace_printf("cli: open, inx=%d, name=%s, ferr=%d\n", inx, sname[inx2], ferr); TEST_CHK_FEOK(ferr); } time_stop(T_OPEN); time_elapsed(T_OPEN); if (trace) trace_printf("cli: procinfo, inx=%d\n", inx); time_start(T_PROCINFO); for (inx2 = 0; inx2 < max; inx2++) { ferr = msg_mon_get_process_info_detail(sname[inx2], &info); TEST_CHK_FEOK(ferr); } time_stop(T_PROCINFO); time_elapsed(T_PROCINFO); if (trace) trace_printf("cli: procinfo-type, inx=%d\n", inx); time_start(T_PROCINFO_TYPE); ferr = msg_mon_get_process_info_type(MS_ProcessType_Generic, &count, MAX_SRV, infotype); TEST_CHK_FEOK(ferr); time_stop(T_PROCINFO_TYPE); time_elapsed(T_PROCINFO_TYPE); if (verbose) { for (inx2 = 0; inx2 < count; inx2++) { infop = &infotype[inx2]; char s_em = infop->event_messages ? 'E' : '-'; char s_sm = infop->system_messages ? 'S' : '-'; char s_pr = infop->pending_replication ? 'R' : '-'; char s_pd = infop->pending_delete ? 'D' : '-'; char s_s = infop->state == MS_Mon_State_Up ? 'A' : 'U'; char s_o = infop->opened ? 'O' : '-'; char s_p = infop->paired ? 'P' : infop->backup ? 'B' : '-'; printf("%3.3d,%8.8d %3.3d %d %c%c%c%c%c%c%c %-11s %-11s %-15s\n", infop->nid, infop->pid, infop->priority, infop->state, s_em, s_sm, s_pr, s_pd, s_s, s_o, s_p, infop->process_name, infop->parent_name, infop->program); } } if (trace) trace_printf("cli: close, inx=%d\n", inx); time_start(T_CLOSE); for (inx2 = 0; inx2 < max; inx2++) { ferr = BFILE_CLOSE_(sfilenum[inx2]); TEST_CHK_FEOK(ferr); } time_stop(T_CLOSE); time_elapsed(T_CLOSE); // re-open/close for (inx2 = 0; inx2 < max; inx2++) { if (trace) trace_printf("cli: re-opening inx=%d, name=%s\n", inx, sname[inx2]); len = (short) strlen(sname[inx2]); ferr = BFILE_OPEN_(sname[inx2], len, &sfilenum[inx2], 0, 0, 0, 0, 0, 0, 0); TEST_CHK_FEOK(ferr); } if (trace) trace_printf("cli: re-close, inx=%d\n", inx); for (inx2 = 0; inx2 < max; inx2++) { ferr = BFILE_CLOSE_(sfilenum[inx2]); TEST_CHK_FEOK(ferr); } if (trace) trace_printf("cli: newproc-forkexec, inx=%d\n", inx); sargc = 2; sargv[0] = argv[0]; sargv[1] = (char *) "-exec"; if (trace) sargv[sargc++] = (char *) "-trace"; sargv[sargc] = NULL; time_start(T_FORKEXEC); for (inx2 = 0; inx2 < max; inx2++) { pid = fork(); assert(pid >= 0); if (pid == 0) { // child err = execv(sprog, sargv); assert(err == 0); } } time_stop(T_FORKEXEC); time_elapsed(T_FORKEXEC); if (trace) trace_printf("cli: newproc-forkexec-su, inx=%d\n", inx); sargc = 2; sargv[0] = argv[0]; sargv[1] = (char *) "-startup"; if (trace) sargv[sargc++] = (char *) "-trace"; sargv[sargc] = NULL; time_start(T_FORKEXEC_SU); for (inx2 = 0; inx2 < max; inx2++) { fifo_create(fifo1, fifo2); pid = fork(); assert(pid >= 0); if (pid > 0) { // parent err = fifo_open(fifo1, O_RDONLY); assert(err != -1); ffds[0] = err; err = fifo_open(fifo2, O_WRONLY); assert(err != -1); ffds[1] = err; if (trace) trace_printf("cli: reading fifo, inx=%d\n", inx2); size = ::read(ffds[0], recv_buffer, 1); if (trace) trace_printf("cli: fifo read, size=%d\n", (int) size); assert(size == 1); if (trace) trace_printf("cli: fifo read, inx=%d\n", inx2); ::read(ffds[0], recv_buffer, 1); err = fifo_close(ffds[0]); assert(err == 0); err = fifo_close(ffds[1]); assert(err == 0); fifo_destroy(fifo1, fifo1); } else { // child err = execv(sprog, sargv); assert(err == 0); } } fifo_destroy(fifo2, fifo2); time_stop(T_FORKEXEC_SU); time_elapsed(T_FORKEXEC_SU); } } else { sys_msg_count = 0; time_start(T_TOTAL); ferr = BFILE_OPEN_((char *) "$RECEIVE", 8, &filenumr, 0, 0, 0, 1, 0); // sys msgs TEST_CHK_FEOK(ferr); for (inx = 0; !fin; inx++) { if (trace) trace_printf("srv: readupdate, inx=%d\n", inx); cc = BREADUPDATEX(filenumr, recv_buffer, 4, &count_read, 0); sys_msg = _xstatus_ne(cc); if (trace && sys_msg) trace_printf("srv: rcvd sys msg=%d\n", sys_msgp->u_z_msg.z_msgnumber[0]); if (sys_msg) { sys_msg_count++; inx--; } lerr2 = BFILE_GETINFO_(filenumr, &lerr); TEST_CHK_FEIGNORE(lerr2); if (trace) trace_printf("srv: reply, inx=%d\n", inx); cc = BREPLYX(recv_buffer, (unsigned short) 0, &count_written, 0, XZFIL_ERR_OK); TEST_CHK_CCEQ(cc); if (sys_msg_count >= 4) fin = true; } } time_stop(T_TOTAL); time_elapsed(T_TOTAL); if (client) { dsec = time_sec(T_TOTAL); dms = dsec * 1000.0; printf("elapsed=%f\n", dms); printf("open/close/newprocess/processinfo/forkexec=%d\n", loop); dsec = time_sec(T_OPEN); dms = dsec * 1000.0; printf("open : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_CLOSE); dms = dsec * 1000.0; printf("close : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_PROCINFO); dms = dsec * 1000.0; printf("procinfo : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_PROCINFO_TYPE); dms = dsec * 1000.0; printf("procinfo-type : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_NEWPROC); dms = dsec * 1000.0; printf("newproc : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_FORKEXEC); dms = dsec * 1000.0; printf("forkexec : total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); dsec = time_sec(T_FORKEXEC_SU); dms = dsec * 1000.0; printf("forkexec-startup: total-time=%f ms, time/loop=%f ms, ops/sec=%f\n", dms, dms / dloop, dloop / dsec); } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { bool client = false; bool client2 = false; int close_count; int cnid; int cpid; int ferr; bool fin = false; int inx; int lerr; int loop = 10; int oid; char *sname = (char *) "$srv"; BMS_SRE sre; bool verbose = false; TAD zargs[] = { { "-client", TA_Bool, TA_NOMAX, &client }, { "-client2", TA_Bool, TA_NOMAX, &client2 }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-v", TA_Bool, TA_NOMAX, &verbose }, { "-verbose", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; arg_proc_args(zargs, false, argc, argv); ferr = msg_init(&argc, &argv); TEST_CHK_FEOK(ferr); util_test_start(client); ferr = msg_mon_process_startup(true); // system messages TEST_CHK_FEOK(ferr); if (client) { msg_debug_hook("c", "c"); sprintf(cprog, "%s/%s", getenv("PWD"), argv[0]); for (inx = 0; inx < argc; inx++) { if (strcmp(argv[inx], "-client") == 0) argv[inx] = (char *) "-client2"; } for (inx = 0; inx < loop; inx++) { if (verbose) printf("cli: newproc, inx=%d\n", inx); sprintf(cname, "$cli%d", inx); cnid = -1; ferr = msg_mon_start_process(cprog, // prog cname, // name NULL, // ret_name argc, // argc argv, // argv TPT_REF(cphandle), // phandle false, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority false, // debug false, // backup &cnid, // nid &cpid, // pid NULL, // infile NULL); // outfile TEST_CHK_FEOK(ferr); } } else if (client2) { if (verbose) printf("cli: open\n"); ferr = msg_mon_open_process(sname, // name TPT_REF(sphandle), &oid); TEST_CHK_FEOK(ferr); } else { msg_mon_enable_mon_messages(true); close_count = 0; for (inx = 0; !fin; inx++) { do { lerr = XWAIT(LREQ, -1); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == BSRETYPE_NOWORK); if (sre.sre_flags & XSRE_MON) { ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata BUFSIZ); // bytecount MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer; if (verbose) printf("srv: rcvd mon msg=%d, inx=%d\n", msg->type, inx); if (msg->type == MS_MsgType_Close) if (++close_count >= loop) fin = true; } if (verbose) printf("srv: reply, inx=%d\n", inx); BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize NULL, // replydata 0, // replydatasize 0, // errorclass NULL); // newphandle } } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }