raft收到请求,首先做的事情其实就写log了。
jraft中是通过LogManagerImpl来实现的
日志入口
LogEntryAndClosureHandler
executeApplyingTasks:构建日志对象LogEntry,准备写入
appendEntries:转成事件,异步处理
StableClosureEventHandler#onEvent :异步处理事件
flush:交给Storage来处理,
appendToStorage:调appendEntries继续处理
final int nAppent = this.logStorage.appendEntries(toAppend);
appendEntries:再调addDataBatch
addDataBatch:把数据放到WriteBatch
最后用RocksDB的write方法,处理WriteBatch
这里只是看到write,按道理raft的每条日志都应该是立即flush到磁盘的,这里的write就有个writeOptions,来控制是否同步flush了。
RaftOptions:可以看到默认的配置是同步flush的