一、MessageTree写入磁盘逻辑序列图
二、MessageTree写入逻辑步骤
-
MessageTree被Period分发到不同的PeriodTask
-
不同的PeriodTask调用对应的Analyzer处理MessageTree,上面的序列图,是以DumpAnalyzer为例
-
DumpAnalyzer调用抽象父类AbstractMessageAnalyzer中的analyze方法,处理messageTree,该方法内容调用抽象方法process,每一个Analyzer的process都有具体的Analyzer做不同的实现。DumpAnalyzer按照自己的业务逻辑实现process方法。
-
该DumpAnalyzer的process方法调用LocalMessageBucketManager的storeMessage方法,将MessageTree落盘。具体的落盘分两步,如下:
第一步: 1、将MessageTree分发到队列中,启动20个MessageZip的异步线程,做压缩处理,将多个MessageTree压缩进一个MessageBlock,如果MessageBlock的大小>=64k,就将该MessageBlock插入到m_messageBlocks队列中,交个BlockDumper和LogviewUploader处理。
第二步: BlockDumper将m_messageBlocks队列中的block逐个写入磁盘,具体写入逻辑,参考
LogviewUploader将不在有效期内的所有文件给删了。