Skip to content

Commit

Permalink
in_tail: signal pending only once
Browse files Browse the repository at this point in the history
Prior to this commit, if the tail is watching over multiple files, each
file signals pending and results in calling in_tail_collect_pending()
multiple times. Since function in_tail_collect_pending() goes through
all watched files for pending data so calling it once is sufficient.

This commit changes that by only signal pending event when there is any
pending data from any watched files.

Signed-off-by: Eric Lin <[email protected]>
  • Loading branch information
linxiulei committed Jul 16, 2024
1 parent 71b9639 commit cc1411e
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion plugins/in_tail/tail_fs_stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ static int tail_fs_check(struct flb_input_instance *ins,
struct flb_tail_file *file = NULL;
struct fs_stat *fst;
struct stat st;
int pending_data_detected;

pending_data_detected = FLB_FALSE;

/* Lookup watched file */
mk_list_foreach_safe(head, tmp, &ctx->files_event) {
Expand Down Expand Up @@ -142,7 +145,7 @@ static int tail_fs_check(struct flb_input_instance *ins,

if (file->offset < st.st_size) {
file->pending_bytes = (st.st_size - file->offset);
tail_signal_pending(ctx);
pending_data_detected = FLB_TRUE;
}
else {
file->pending_bytes = 0;
Expand Down Expand Up @@ -173,6 +176,10 @@ static int tail_fs_check(struct flb_input_instance *ins,

}

if (pending_data_detected) {
tail_signal_pending(ctx);
}

return 0;
}

Expand Down

0 comments on commit cc1411e

Please sign in to comment.