1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver;
20
21 import java.lang.reflect.Field;
22
23 import org.apache.hadoop.hbase.HBaseTestingUtility;
24 import org.apache.hadoop.hbase.ScheduledChore;
25 import org.apache.hadoop.hbase.testclassification.MediumTests;
26 import org.apache.hadoop.hbase.testclassification.RegionServerTests;
27 import org.junit.AfterClass;
28 import org.junit.Assert;
29 import org.junit.BeforeClass;
30 import org.junit.Test;
31 import org.junit.experimental.categories.Category;
32
33
34
35
36 @Category({RegionServerTests.class, MediumTests.class})
37 public class TestRSChoresScheduled {
38
39 private static HRegionServer hRegionServer;
40
41 private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
42
43 @BeforeClass
44 public static void setUp() throws Exception {
45 UTIL.startMiniCluster(1, 1);
46 hRegionServer = UTIL.getMiniHBaseCluster().getRegionServer(0);
47 }
48
49 @AfterClass
50 public static void tearDown() throws Exception {
51 UTIL.shutdownMiniCluster();
52 }
53
54 private static class TestChoreField<E extends ScheduledChore> {
55
56 private E getChoreObj(String fieldName) throws NoSuchFieldException,
57 IllegalAccessException {
58 Field hRegionServerField = HRegionServer.class.getDeclaredField(fieldName);
59 hRegionServerField.setAccessible(true);
60 E choreFieldVal = (E) hRegionServerField.get(hRegionServer);
61 return choreFieldVal;
62 }
63
64 private void testIfChoreScheduled(E choreObj) {
65 Assert.assertNotNull(choreObj);
66 Assert.assertTrue(hRegionServer.getChoreService().isChoreScheduled(choreObj));
67 }
68
69 }
70
71 @Test
72 public void testDefaultScheduledChores() throws Exception {
73
74 TestChoreField<HRegionServer.MovedRegionsCleaner> movedRegionsCleanerTestChoreField =
75 new TestChoreField<>();
76 HRegionServer.MovedRegionsCleaner movedRegionsCleaner = movedRegionsCleanerTestChoreField
77 .getChoreObj("movedRegionsCleaner");
78 movedRegionsCleanerTestChoreField.testIfChoreScheduled(movedRegionsCleaner);
79
80
81 TestChoreField<CompactedHFilesDischarger> compactedHFilesDischargerTestChoreField =
82 new TestChoreField<>();
83 CompactedHFilesDischarger compactedHFilesDischarger =
84 compactedHFilesDischargerTestChoreField.getChoreObj("compactedFileDischarger");
85 compactedHFilesDischargerTestChoreField.testIfChoreScheduled(compactedHFilesDischarger);
86
87
88 TestChoreField<ScheduledChore> compactionCheckerTestChoreField = new TestChoreField<>();
89 ScheduledChore compactionChecker =
90 compactionCheckerTestChoreField.getChoreObj("compactionChecker");
91 compactionCheckerTestChoreField.testIfChoreScheduled(compactionChecker);
92
93
94 TestChoreField<ScheduledChore> periodicMemstoreFlusherTestChoreField =
95 new TestChoreField<>();
96 ScheduledChore periodicFlusher =
97 periodicMemstoreFlusherTestChoreField.getChoreObj("periodicFlusher");
98 periodicMemstoreFlusherTestChoreField.testIfChoreScheduled(periodicFlusher);
99
100
101 TestChoreField<ScheduledChore> nonceManagerTestChoreField = new TestChoreField<>();
102 ScheduledChore nonceManagerChore =
103 nonceManagerTestChoreField.getChoreObj("nonceManagerChore");
104 nonceManagerTestChoreField.testIfChoreScheduled(nonceManagerChore);
105
106 }
107
108 }