[ https://issues.apache.org/jira/browse/HBASE-18099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16023763#comment-16023763 ]
Ted Yu commented on HBASE-18099: -------------------------------- Return value of 0 indicates that there is not flush (e.g. writestate.readOnly being true). This allows the subprocedure to know whether the flush actually completes or not. > FlushSnapshotSubprocedure should check the return value from Region#flush() > --------------------------------------------------------------------------- > > Key: HBASE-18099 > URL: https://issues.apache.org/jira/browse/HBASE-18099 > Project: HBase > Issue Type: Bug > Reporter: Ted Yu > Attachments: 18099.v1.txt, 18099.v2.txt > > > In the following thread: > http://search-hadoop.com/m/HBase/YGbbMXkeHlI9zo > Jacob described the scenario where data from certain region were missing in > the snapshot. > Here was related region server log: > https://pastebin.com/1ECXjhRp > He pointed out that concurrent flush from MemStoreFlusher.1 thread was not > initiated from the thread pool for snapshot. > In RegionSnapshotTask#call() method there is this: > {code} > region.flush(true); > {code} > The return value is not checked. > In HRegion#flushcache(), Result.CANNOT_FLUSH may be returned due to: > {code} > String msg = "Not flushing since " > + (writestate.flushing ? "already flushing" > : "writes not enabled"); > {code} > This implies that FlushSnapshotSubprocedure may incorrectly skip waiting for > the concurrent flush to complete. -- This message was sent by Atlassian JIRA (v6.3.15#6346)