Details
-
Sub-task
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
1.3.0, 2.0.0
-
None
-
Reviewed
-
Now we pass on list of memstoreScanners to the StoreScanner along with the new files to ensure that the StoreScanner sees the latest memstore after flush.
Description
The scanner of latest memstore may be lost if we make quick flushes. The following step may help explain this issue.
- put data_A (seq id = 10, active store data_A and snapshots is empty)
- snapshot of 1st flush (active is empty and snapshot stores data_A)
- put data_B (seq id = 11, active store data_B and snapshot store data_A)
- create user scanner (read point = 11, so It should see the data_B)
- commit of 1st flush
- clear snapshot ((hfile_A has data_A, active store data_B, and snapshot is empty)
- update the reader (the user scanner receives the hfile_A)
- snapshot of 2st flush (active is empty and snapshot store data_B)
- commit of 2st flush
- clear snapshot (hfile_A has data_A, hfile_B has data_B, active is empty, and snapshot is empty) – this is critical piece.
update the reader(haven't happen)
- user scanner update the kv scanners (it creates scanner of hfile_A but nothing of memstore)
- user see the older data A – wrong result
Attachments
Attachments
Issue Links
- blocks
-
HBASE-17876 Release 1.2.6
- Closed
- is related to
-
HBASE-14970 Backport HBASE-13082 and its sub-jira to branch-1
- Closed
- relates to
-
HBASE-18145 The flush may cause the corrupt data for reading
- Closed
-
HBASE-17863 Procedure V2: Proc Executor cleanup. Split FINISHED state to two states: SUCCESS and FAILED.
- Closed
- links to