FLUSH分析

    xiaoxiao2021-04-12  45

    调用点:MemStoreFlusherMemstoreFlusher有默认的2FlushHandler,每个FlushHandler都是一个线程,监听MemStoreFlusher的事件,最终的刷写动作是由FlushHandler线程来处理的;

     

     

     

     

     

    FLUSH具体实现步骤:

    1、如果不是meta region并且region已经有过多的store files,则需要将本次flush操作delay;如果是meta Region或者没有那么多的storefiles,则进行刷写

    2、从刷写队列中取出要刷写的FlushRegionEntry

    3、获取memstore级别的读锁

    4、调用region.flush进行真正的刷写操作

    4.1、在HRegion中,首先获取region级别的读锁

    4.2、为每个Storesnapshot

    4.2.1、获取region级别的updates写锁

    4.2.2、计算此次刷写完wal的flushedSeqId,并且将这条数据写进wal缓存

    4.2.3、给每个storesnapshot

    4.2.4、释放region级别的updates写锁

    4.2.5、将此次刷写完的记录对应的wal落盘

    4.3、将KVset指向新的内存,snapshot刷写到磁盘并生成StoreFile

    4.3.1、调用flush.flushcachesnapshot刷写到磁盘,并生成storefile

    4.3.1.1、将snapshot刷写到磁盘,首先创建snapshotscanner

    4.3.1.2、将scanner数据逐一写入StoreFile.Writer

    4.3.2、将落盘的snapshot生成对应的StoreFile文件

    4.3.3、将storefile添加到storeCommittedFiles队列中,正式完成flush

    4.3.4、写wal

    4.4、最后释放region级别的读锁

    5、判断是否要compactsplit

    6、释放memstore级别的读锁

    转载请注明原文地址: https://ju.6miu.com/read-668190.html

    最新回复(0)