[ 
https://issues.apache.org/jira/browse/HBASE-18099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16023940#comment-16023940
 ] 

Jerry He commented on HBASE-18099:
----------------------------------

I still don't understand.  As an example, there is a read only table, 
writestate.writesEnabled is false. Then region flush will return CANNOT_FLUSH 
right away.
This snapshot should succeed, but now it will fail. 
CANNOT_FLUSH_MEMSTORE_EMPTY checks the size of the memstore, which we have not 
come to that point.

> 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)

Reply via email to