1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.snapshot;
19
20 import static org.junit.Assert.assertTrue;
21
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.hadoop.fs.FileStatus;
27 import org.apache.hadoop.fs.FileSystem;
28 import org.apache.hadoop.fs.Path;
29 import org.apache.hadoop.hbase.HBaseTestingUtility;
30 import org.apache.hadoop.hbase.HConstants;
31 import org.apache.hadoop.hbase.SmallTests;
32 import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;
33 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
34 import org.apache.hadoop.hbase.snapshot.ReferenceRegionHFilesTask;
35 import org.apache.hadoop.hbase.util.FSUtils;
36 import org.junit.Test;
37 import org.junit.experimental.categories.Category;
38 import org.mockito.Mockito;
39
40 @Category(SmallTests.class)
41 public class TestReferenceRegionHFilesTask {
42 private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
43
44 @Test
45 public void testRun() throws IOException {
46 FileSystem fs = UTIL.getTestFileSystem();
47
48 Path testdir = UTIL.getDataTestDir();
49 Path regionDir = new Path(testdir, "region");
50 Path family1 = new Path(regionDir, "fam1");
51
52 Path family2 = new Path(regionDir, "fam2");
53 fs.mkdirs(family2);
54
55
56 Path file1 = new Path(family1, "05f99689ae254693836613d1884c6b63");
57 fs.createNewFile(file1);
58 Path file2 = new Path(family1, "7ac9898bf41d445aa0003e3d699d5d26");
59 fs.createNewFile(file2);
60
61
62 Path snapshotRegionDir = new Path(testdir, HConstants.SNAPSHOT_DIR_NAME);
63 fs.mkdirs(snapshotRegionDir);
64
65 SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName("name")
66 .setTable("table").build();
67 ForeignExceptionDispatcher monitor = Mockito.mock(ForeignExceptionDispatcher.class);
68 ReferenceRegionHFilesTask task = new ReferenceRegionHFilesTask(snapshot, monitor, regionDir,
69 fs, snapshotRegionDir);
70 ReferenceRegionHFilesTask taskSpy = Mockito.spy(task);
71 task.call();
72
73
74 Mockito.verify(taskSpy, Mockito.never()).snapshotFailure(Mockito.anyString(),
75 Mockito.any(Exception.class));
76
77
78 List<String> hfiles = new ArrayList<String>(2);
79 FileStatus[] regions = FSUtils.listStatus(fs, snapshotRegionDir);
80 for (FileStatus region : regions) {
81 FileStatus[] fams = FSUtils.listStatus(fs, region.getPath());
82 for (FileStatus fam : fams) {
83 FileStatus[] files = FSUtils.listStatus(fs, fam.getPath());
84 for (FileStatus file : files) {
85 hfiles.add(file.getPath().getName());
86 }
87 }
88 }
89 assertTrue("Didn't reference :" + file1, hfiles.contains(file1.getName()));
90 assertTrue("Didn't reference :" + file1, hfiles.contains(file2.getName()));
91 }
92 }