* The main loop of the ic-proxy. */
| 524 | * The main loop of the ic-proxy. |
| 525 | */ |
| 526 | int |
| 527 | ic_proxy_server_main(void) |
| 528 | { |
| 529 | char path[MAXPGPATH]; |
| 530 | |
| 531 | elogif(gp_log_interconnect >= GPVARS_VERBOSITY_TERSE, |
| 532 | LOG, "ic-proxy: server setting up"); |
| 533 | |
| 534 | ic_proxy_pkt_cache_init(IC_PROXY_MAX_PKT_SIZE); |
| 535 | |
| 536 | uv_loop_init(&ic_proxy_server_loop); |
| 537 | |
| 538 | ic_proxy_reload_addresses(&ic_proxy_server_loop); |
| 539 | |
| 540 | ic_proxy_router_init(&ic_proxy_server_loop); |
| 541 | ic_proxy_peer_table_init(); |
| 542 | ic_proxy_client_table_init(); |
| 543 | |
| 544 | ic_proxy_peer_listening = false; |
| 545 | ic_proxy_peer_relistening = false; |
| 546 | ic_proxy_client_listening = false; |
| 547 | |
| 548 | uv_signal_init(&ic_proxy_server_loop, &ic_proxy_server_signal_hup); |
| 549 | uv_signal_start(&ic_proxy_server_signal_hup, ic_proxy_server_on_signal, SIGHUP); |
| 550 | |
| 551 | uv_signal_init(&ic_proxy_server_loop, &ic_proxy_server_signal_int); |
| 552 | uv_signal_start(&ic_proxy_server_signal_int, ic_proxy_server_on_signal, SIGINT); |
| 553 | |
| 554 | /* on master */ |
| 555 | uv_signal_init(&ic_proxy_server_loop, &ic_proxy_server_signal_term); |
| 556 | uv_signal_start(&ic_proxy_server_signal_term, ic_proxy_server_on_signal, SIGTERM); |
| 557 | |
| 558 | /* on segments */ |
| 559 | uv_signal_init(&ic_proxy_server_loop, &ic_proxy_server_signal_stop); |
| 560 | uv_signal_start(&ic_proxy_server_signal_stop, ic_proxy_server_on_signal, SIGQUIT); |
| 561 | |
| 562 | /* TODO: we could stop the timer if all the peers are connected */ |
| 563 | uv_timer_init(&ic_proxy_server_loop, &ic_proxy_server_timer); |
| 564 | uv_timer_start(&ic_proxy_server_timer, ic_proxy_server_on_timer, 100, 1000); |
| 565 | |
| 566 | /* monitor the postmaster pipe to check whether postmaster is still alive */ |
| 567 | uv_pipe_init(&ic_proxy_server_loop, &ic_proxy_postmaster_pipe, false); |
| 568 | uv_pipe_open(&ic_proxy_postmaster_pipe, postmaster_alive_fds[POSTMASTER_FD_WATCH]); |
| 569 | uv_read_start((uv_stream_t *)&ic_proxy_postmaster_pipe, ic_proxy_pkt_cache_alloc_buffer, |
| 570 | ic_proxy_server_on_read_postmaster_pipe); |
| 571 | |
| 572 | elogif(gp_log_interconnect >= GPVARS_VERBOSITY_TERSE, LOG, |
| 573 | "ic-proxy: server running"); |
| 574 | |
| 575 | /* We're now ready to receive signals */ |
| 576 | BackgroundWorkerUnblockSignals(); |
| 577 | |
| 578 | /* |
| 579 | * return non-zero value so we are restarted by the postmaster |
| 580 | */ |
| 581 | ic_proxy_server_exit_code = 1; |
| 582 | uv_run(&ic_proxy_server_loop, UV_RUN_DEFAULT); |
| 583 | uv_loop_close(&ic_proxy_server_loop); |
nothing calls this directly
no test coverage detected