in_tail: use the latest id when finding offset from the db #2960
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.
DB may have two or more records with the same inode values. The problem is that when restarting, if a resumed file has same inode of a DB record whose file is already deleted, in_tail uses the offset for deleted file. This leads to unexpected behavior.
We can ensure that when DB contains two records with the same inode value, the one with the smaller id can be ignored because file system cannot have two files with the same inode if we can ignores hard links. Thus, it is safe to query a record with the largest id.
Below is a part of DB from our server. I removed some sensitive information.
When I tried to upgrade (v1.3.6 -> v1.6.9) and restart fluent-bit, fluent-bit starts to process a too large amount of logs. Note that, at that time, the file corresponding to id 10582 was not rotated and resumed. For the old versions, it is not a problem because fluent-bit also checks the name of the file and that of the record.
If we do not check the name, I think we should check the id to prevent the above situation.
Signed-off-by: Lee Byeoksan [email protected]
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:
Documentation
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.