From 3af2fc786eeb781eb7210061503af746158d06d4 Mon Sep 17 00:00:00 2001 From: Hua Huang Date: Wed, 29 Jun 2022 05:07:22 -0600 Subject: [PATCH] Do reverse session cleanup in rpc_service_prepare_to_stop() instead. Originally, the reverse session cleanup is called in rpc_service_stop(). But this leads to: create new foms, init these foms, and try to queue these foms while the rpc service is stopped. This will cause the reverse session can be not cleaned up. Add delay of one second before doing fini in the UT to avoid some pending requests/foms are still active. Signed-off-by: Hua Huang --- rpc/service.c | 11 ++++++++--- sns/cm/repair/ut/flock.c | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/rpc/service.c b/rpc/service.c index 68b6673c7f7..07e8c54087a 100644 --- a/rpc/service.c +++ b/rpc/service.c @@ -67,7 +67,7 @@ static int rpc_service_start(struct m0_reqh_service *service) return 0; } -static void rpc_service_stop(struct m0_reqh_service *service) +static void rpc_service_prepare_to_stop(struct m0_reqh_service *service) { struct m0_rpc_service *svc; @@ -76,6 +76,10 @@ static void rpc_service_stop(struct m0_reqh_service *service) rev_conn_tlist_fini(&svc->rps_rev_conns); } +static void rpc_service_stop(struct m0_reqh_service *service) +{ +} + static void rpc_service_fini(struct m0_reqh_service *service) { struct m0_rpc_service *svc; @@ -95,7 +99,8 @@ static const struct m0_reqh_service_ops rpc_ops = { .rso_start = rpc_service_start, .rso_stop = rpc_service_stop, .rso_fini = rpc_service_fini, - .rso_fop_accept = rpc_service_fop_accept + .rso_fop_accept = rpc_service_fop_accept, + .rso_prepare_to_stop = rpc_service_prepare_to_stop }; static int rpc_service_allocate(struct m0_reqh_service **service, @@ -266,7 +271,7 @@ m0_rpc_service_reverse_sessions_cleanup(struct m0_reqh_service *service) false); } m0_tlist_endfor; m0_tl_teardown(rev_conn, &svc->rps_rev_conns, revc) { - if (revc->rcf_disc_wait.cl_group != NULL) { + if (m0_clink_is_armed(&revc->rcf_disc_wait)) { m0_chan_wait(&revc->rcf_disc_wait); m0_clink_fini(&revc->rcf_disc_wait); } diff --git a/sns/cm/repair/ut/flock.c b/sns/cm/repair/ut/flock.c index 48b268e47ed..f1fc6faa848 100644 --- a/sns/cm/repair/ut/flock.c +++ b/sns/cm/repair/ut/flock.c @@ -265,6 +265,7 @@ static int test_setup(void) static int test_fini(void) { + m0_nanosleep(m0_time(1, 0), NULL); m0_sns_cm_rm_fini(scm); m0_cm_ast_run_thread_fini(cm); cs_fini(&sctx);