jraft

jraft源码阅读5一写log

2019-04-11  本文已影响0人  黄云斌huangyunbin

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

日志入口
LogEntryAndClosureHandler


image.png

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


image.png

appendEntries:转成事件,异步处理


image.png

StableClosureEventHandler#onEvent :异步处理事件


image.png
image.png

flush:交给Storage来处理,


image.png

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

appendEntries:再调addDataBatch


image.png

addDataBatch:把数据放到WriteBatch


image.png

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


image.png
这里只是看到write,按道理raft的每条日志都应该是立即flush到磁盘的,这里的write就有个writeOptions,来控制是否同步flush了。
image.png

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


image.png
上一篇下一篇

猜你喜欢

热点阅读