fix: ensure async flush waits for completion#191
fix: ensure async flush waits for completion#191TennyZhuang wants to merge 1 commit intofast:mainfrom
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.
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.
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.
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