-
Notifications
You must be signed in to change notification settings - Fork 25
fix: ensure async flush waits for completion #191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
logforth/appenders/async/src/state.rs Lines 66 to 78 in 5fce26f
The async appender threads would be joined on dropped or exit. Not quite sure if |
Not sure, but it seems somewhat unexpected that an operation named flush might not succeed. |
This is generally how Async appender implements, such as log4j etc. cc @SpriteOvO you may be interetsed in this API design topic :D |
| match done.recv() { | ||
| Ok(Ok(())) => Ok(()), | ||
| Ok(Err(err)) => Err(err), | ||
| Err(_) => Err(Error::new( | ||
| "async appender worker exited before completing flush", | ||
| )), | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if I missed some context, but isn't the point of async appender not to block the current thread? If we wait for the flushing result here wouldn't it be no different than sync appender?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From my understanding, flush always represents persistence. async only indicates that operations like write are asynchronous.
Since this is the expected behavior, I will close this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yea, I get your point, the meaning of the term "async" is varied a little bit in different contexts -- performs in a different thread, or not to block the current thread, or more meanings such as co-routines related, etc.
IMHO, the "async" in logging is more in favor of not blocking the current thread thus minimizing the performance impact and making sure that the logs are delivered eventually as much as possible.
Appreciate your contribution attempt anyway! :)
Summary