jraft源码阅读5一写log

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。