Il Mar 2 Giu 2020, 15:20 Unmesh Joshi <unmeshjo...@gmail.com> ha scritto:
> Hi, > > I was going through bookkeeper code, particularly to see when and how > transaction logs are written and flushed to disk. > Just curious to understand, why in, Bookie.addEntryInternal method, writes > to journal happen after the writes to ledger. ( > > https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java > ) > Also, journal writes are not flushed to disk synchronously, as they happen > in their own dedicated thread (and can also be done in batches). > So I had two questions. > 1. Why journal writes are not done before the writes to ledgers > This sounds strange and you are not the first one that is asking this question. Basically entries in BK are immutabile and when the bookie restarts it replays the journal. The LAC protocol shields reader clients from reading entries that have not been acknowledged to the writer. 2. Why not to wait till journal writes are successful (even if not synced > to disk may be) before returning the response. > The acknowledgement is sent to the client only after a successful fdatasync on the journal (if you do not ask for DEFERRED_SYNC or disable fsyncs explicitly) This is basically one of the core features of BK: it is super fast and it guarantees the data have been persisted durable. Enrico If these things are not done, there is always a risk of losing data in case > of server or disk crash? > > Thanks, > Unmesh >