out_forward: fix memory leak during connection loss #8399
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I observed that memory consumption was constantly growing while the data sink of the forward plugin was unavailable. Using valgrind, it could be confirmed that there is a leak in the forward output plugin:
Further analysis showed that during connection loss
out_buf
is only freed iftime_as_integer
is set totrue
:Source: https://github.com/fluent/fluent-bit/blob/master/plugins/out_forward/forward.c#L1574-L1579
However, from the code it looks like
out_buf
is also used to write metadata inappend_options
(https://github.com/fluent/fluent-bit/blob/master/plugins/out_forward/forward_format.c#L85). To verify this assumption, I enabledTime_as_Integer
in the forward configuration. Afterwards, valgrind did no longer find a leak. Therefore, I removed the conditional, which is save because this is also done in other places (e.g. https://github.com/fluent/fluent-bit/blob/master/plugins/out_forward/forward.c#L1644) and even ifout_buf
is not used, it would beNULL
and freeingNULL
is valid.I ran the patched version for 12 hours and the memory consumption was perfectly constant.
Enter
[N/A]
in the box, if an item is not applicable to your change.Testing
Before we can approve your change; please submit the following in a comment:
Time_as_Integer
totrue
If this is a change to packaging of containers or native binaries then please confirm it works for all targets.
ok-package-test
label to test for all targets (requires maintainer to do).Documentation
Backporting
Fluent Bit is licensed under Apache 2.0, by submitting this pull request I understand that this code will be released under the terms of that license.