19} 20} 21} 22}
1、内存里面的元数据刷盘
19}
接上期
——1.1 .1.1》 FSEditLog.logSync()
——1.1 .1.1.1》 EditLogOutputStream.flush()
▼
//第一次:FileJouranlManager -> EditLogFileOutputStream
//第二次:QuorumJounalManager -> QuorumOutputStream
flushAndSync(durable);
↓ 先看这个
——1.1 .1.1.1》EditLogFileOutputStream# flushAndSync(durable)
//TODO 涮写磁盘
doubleBuf.flushTo(fp);
↓ 再看这个
——1.1 .1.1.2》QuorumOutputStream#flushAndSync
——1.1 .1.1.2.1》AsyncLoggerSet#sendEdits()
//往journalnode去发送日志。
logger.sendEdits(segmentTxId, firstTxnId, numTxns, data);
2、内存里面的元数据刷盘和journalnode 19},20} 10分钟
3、standby的 namenode 同步 元数据 by journalnode
21} 40分钟 22} 18 分钟
/* EditLogTailer是一个后台线程,启动了以后会周期性的去journalnode集群上面去
-
读取元数据日志,然后再把这些元数据日志应用到自己的元数据里面(内存+磁盘)
*/
EditLogTailer类
EditLogTailer.EditLogTailerThread.run()方法
——1》EditLogTailer.EditLogTailerThread.doWork()
//TODO 重要的代码
doTailEdits();
//TODO