From edd7328e7265c13083e5ed632d8dec8203d6faae Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 18 Apr 2024 11:34:57 -0400 Subject: [PATCH] MT#55283 move periodic Redis updates to main timer Update calls involving SRTP to Redis every 5 minutes to keep the SRTP sequence numbers intact. Change-Id: I04ae24572cb2845284eab27fa7421a8ba072d239 --- daemon/call.c | 13 ++++++++++++- daemon/media_socket.c | 8 -------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 5a881c516..fe7d0711e 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -136,6 +136,7 @@ void call_make_own_foreign(call_t *c, bool foreign) { static void call_timer_iterator(call_t *c, struct iterator_helper *hlp) { unsigned int check; bool good = false; + bool has_srtp = false; struct packet_stream *ps; stream_fd *sfd; int tmp_t_reason = UNKNOWN; @@ -239,6 +240,9 @@ next: for (__auto_type it = c->medias.head; it; it = it->next) { struct call_media *media = it->data; + if (media->protocol && media->protocol->srtp) + has_srtp = true; + if (rtpe_config.measure_rtp) { media_update_stats(media); ssrc_collect_metrics(media); @@ -247,7 +251,14 @@ next: hlp->transcoded_media++; } - if (good || IS_FOREIGN_CALL(c)) { + if (good) { + if (IS_FOREIGN_CALL(c)) + goto out; + + // update every 5 minutes + if (has_srtp && rtpe_now.tv_sec - atomic64_get_na(&c->last_redis_update) > 60*5) + redis_update_onekey(c, rtpe_redis_write); + goto out; } diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 6f31ac132..41f34be41 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -3385,8 +3385,6 @@ enum thread_looper_action kernel_stats_updater(void) { goto next; } - bool update = false; - bool active_media = (rtpe_now.tv_sec - packet_stream_last_packet(ps) < 1); if (active_media) CALL_CLEAR(sfd->call, FOREIGN_MEDIA); @@ -3420,7 +3418,6 @@ enum thread_looper_action kernel_stats_updater(void) { if (rtpe_now.tv_sec - atomic64_get_na(&in_ctx->stats->last_packet) < 2) payload_tracker_add(&ctx->tracker, atomic_get_na(&in_ctx->stats->last_pt)); - // XXX redis update } mutex_unlock(&sink->out_lock); } @@ -3438,17 +3435,12 @@ enum thread_looper_action kernel_stats_updater(void) { if (rtpe_now.tv_sec - atomic64_get_na(&ctx->stats->last_packet) < 2) payload_tracker_add(&ctx->tracker, atomic_get_na(&ctx->stats->last_pt)); - - // XXX redis update } mutex_unlock(&ps->in_lock); } rwlock_unlock_r(&sfd->call->master_lock); - if (update) - redis_update_onekey(ps->call, rtpe_redis_write); - next: g_slice_free1(sizeof(*ke), ke); kl = t_slist_delete_link(kl, kl);