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

ramkrishna.s.vasudevan commented on HBASE-19893:
------------------------------------------------

bq.As restore_snapshot is done offline, after finishing it, we need to enable 
the target table. When enabling the table, EnableTableProcedure gets regions of 
the table from AM and assigns them:
Ok so I get it now. The table is disabled when this procedure runs. So by the 
time the procedure completes the AM in memory structures are cleared and when 
the table enable happens the AM is able to get the updated info.
So one more doubt,
So this process of restore snapshot procs adds the in memory info that the 
procedures has to the META. So when the table is enabled after restore 
snapshot, this META info is not taken as the source of truth is it? Ya i think 
we may not know whether after disabling and when we enable if the enable is 
from the snapshot or frm some where else. In that sense this fix LGTM. 
So the change in TestRestoreSnapshotFromClient if run without the fix it would 
fail and now it would pass I believe.
Finally one more question,
If the Master crashes and gets started again just after restore snapshot 
procedure is run and then you enable the table, what happens? Atleast that time 
do we read from META? Thanks for the nice work [~brfrn169]. 

> restore_snapshot is broken in master branch when region splits
> --------------------------------------------------------------
>
>                 Key: HBASE-19893
>                 URL: https://issues.apache.org/jira/browse/HBASE-19893
>             Project: HBase
>          Issue Type: Bug
>          Components: snapshots
>            Reporter: Toshihiro Suzuki
>            Assignee: Toshihiro Suzuki
>            Priority: Critical
>         Attachments: HBASE-19893.master.001.patch, 
> HBASE-19893.master.002.patch
>
>
> When I was investigating HBASE-19850, I found restore_snapshot didn't work in 
> master branch.
>  
> Steps to reproduce are as follows:
> 1. Create a table
> {code:java}
> create "test", "cf"
> {code}
> 2. Load data (2000 rows) to the table
> {code:java}
> (0...2000).each{|i| put "test", "row#{i}", "cf:col", "val"}
> {code}
> 3. Split the table
> {code:java}
> split "test"
> {code}
> 4. Take a snapshot
> {code:java}
> snapshot "test", "snap"
> {code}
> 5. Load more data (2000 rows) to the table and split the table agin
> {code:java}
> (2000...4000).each{|i| put "test", "row#{i}", "cf:col", "val"}
> split "test"
> {code}
> 6. Restore the table from the snapshot 
> {code:java}
> disable "test"
> restore_snapshot "snap"
> enable "test"
> {code}
> 7. Scan the table
> {code:java}
> scan "test"
> {code}
> However, this scan returns only 244 rows (it should return 2000 rows) like 
> the following:
> {code:java}
> hbase(main):038:0> scan "test"
> ROW COLUMN+CELL
>  row78 column=cf:col, timestamp=1517298307049, value=val
> ....
>   row999 column=cf:col, timestamp=1517298307608, value=val
> 244 row(s)
> Took 0.1500 seconds
> {code}
>  
> Also, the restored table should have 2 online regions but it has 3 online 
> regions.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to