jraft源码阅读5一写log

raft收到请求,首先做的事情其实就写log了。
jraft中是通过LogManagerImpl来实现的

日志入口
LogEntryAndClosureHandler


jraft源码阅读5一写log_第1张图片
image.png

executeApplyingTasks:构建日志对象LogEntry,准备写入


jraft源码阅读5一写log_第2张图片
image.png

appendEntries:转成事件,异步处理


jraft源码阅读5一写log_第3张图片
image.png

StableClosureEventHandler#onEvent :异步处理事件


jraft源码阅读5一写log_第4张图片
image.png

jraft源码阅读5一写log_第5张图片
image.png

flush:交给Storage来处理,


jraft源码阅读5一写log_第6张图片
image.png

appendToStorage:调appendEntries继续处理
final int nAppent = this.logStorage.appendEntries(toAppend);

appendEntries:再调addDataBatch


jraft源码阅读5一写log_第7张图片
image.png

addDataBatch:把数据放到WriteBatch


image.png

最后用RocksDB的write方法,处理WriteBatch


jraft源码阅读5一写log_第8张图片
image.png
这里只是看到write,按道理raft的每条日志都应该是立即flush到磁盘的,这里的write就有个writeOptions,来控制是否同步flush了。
jraft源码阅读5一写log_第9张图片
image.png

RaftOptions:可以看到默认的配置是同步flush的


image.png

你可能感兴趣的:(jraft源码阅读5一写log)