(1)当WALEdit对象写入到本地系统的缓存后,会产生一个自增变量txid。且当WALEdit对象全部写入之后,会释放行锁、共享锁。
(2)待WALEdit对象全部写完在之后,负责将WALEdit对象写入到HLog的线程会阻塞在syncedTillHere里面。
(3)待行锁和共享锁释放之后,会携带自增变量txid去唤醒AsyncWriter线程
(4)AsyncWriter线程会将所有在本地buffer中缓存的WALEdit对象写入到HDFS文件系统缓存中(在写入的过程中,AsyncWriter先会对比之前写入的旧的txid,比较传进来的txid是否大于,若小于,则表示已经写入过了,直接跳过)
(5)当AsyncWriter线程将所有的WALEdit对象写入到HDFS文件系统缓存中后,会携带maxTxid去唤醒AsyncFlusher线程
(6)此时AsyncFlusher线程会将所有写入到HDFS文件系统缓存的WALEdit对象全部Sync落地到HDFS上(HFile中)
(7)待WALEdit对象全部落地到HDFS上后,会调用setFlushTxid方法唤醒AsyncNotifier线程
(8)AsyncNotifier线程会唤醒所有阻塞在syncedTillHere的工作线程。所有工作线程被唤醒之后,则表示WAL写入完成
(9)执行MVCC结束写事务
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。