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

Xu Cang commented on HBASE-19275:
---------------------------------

[~apurtell] I put some time today to debug this, below is my findings.

#createAndTestSnapshot tries to verify file existence before and after 
"refreshCache", but this won't work because #getUnreferencedFiles is called, 
inside this method, it calls #refreshCache here:  
[https://github.com/apache/hbase/blob/c3b4f788b16ac4e0e8cfd319f495308ba4d158f5/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java#L190]
 

Also, #refreshCache will be called periodically from RefreshCacheTask.  

So, I think it's good and safe to remove this check as shown below:

 
{quote}fs.delete(builder.getSnapshotsDir(), true);
FSUtils.logFileSystemState(fs, rootDir, LOG);

- // The files should be in cache until next refresh
- for (Path filePath: files) {
- Iterable<FileStatus> nonSnapshotFiles = getNonSnapshotFiles(cache, filePath);
- assertFalse("Cache didn't find " + filePath.getName(), 
Iterables.contains(nonSnapshotFiles,
- filePath.getName()));
- }
{quote}
I am uploading a new patch for review. please let me know if I understood 
something wrong. 

> TestSnapshotFileCache never worked properly
> -------------------------------------------
>
>                 Key: HBASE-19275
>                 URL: https://issues.apache.org/jira/browse/HBASE-19275
>             Project: HBase
>          Issue Type: Sub-task
>    Affects Versions: 3.0.0, 1.4.0, 1.5.0, 2.0.0
>            Reporter: Andrew Purtell
>            Priority: Major
>         Attachments: HBASE-19275-branch-1.patch
>
>
> Error-prone noticed we were asking Iterables.contains() questions with the 
> wrong type in TestSnapshotFileCache. I've attached a fixed version of the 
> test. The results suggest the cache is not evicting entries properly. 
> {noformat}
> java.lang.AssertionError: Cache found 
> 'hdfs://localhost:52867/user/apurtell/test-data/8ce04c85-ce4b-4844-b454-5303482ade95/data/default/snapshot1/9e49edd0ab41657fb0c6ebb4d9dfad15/cf/f132e5b06f66443f8003363ed1535aac',
>  but it shouldn't have.
>       at org.junit.Assert.fail(Assert.java:88)
>       at org.junit.Assert.assertTrue(Assert.java:41)
>       at org.junit.Assert.assertFalse(Assert.java:64)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.createAndTestSnapshot(TestSnapshotFileCache.java:260)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.createAndTestSnapshotV1(TestSnapshotFileCache.java:206)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.testReloadModifiedDirectory(TestSnapshotFileCache.java:102)
> {noformat}
> {noformat}
> java.lang.AssertionError: Cache found 
> 'hdfs://localhost:52867/user/apurtell/test-data/8ce04c85-ce4b-4844-b454-5303482ade95/data/default/snapshot1a/2e81adb9212c98cff970eafa006fc40b/cf/a2ec478d850e4e348359699c53b732c4',
>  but it shouldn't have.
>       at org.junit.Assert.fail(Assert.java:88)
>       at org.junit.Assert.assertTrue(Assert.java:41)
>       at org.junit.Assert.assertFalse(Assert.java:64)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.createAndTestSnapshot(TestSnapshotFileCache.java:260)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.createAndTestSnapshotV1(TestSnapshotFileCache.java:206)
>       at 
> org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCache.testLoadAndDelete(TestSnapshotFileCache.java:88)
> {noformat}
> These changes are part of HBASE-19239
> I've disabled the offending test cases with @Ignore in that patch, but they 
> should be reenabled and fixed. 



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

Reply via email to