1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver;
19
20 import java.util.List;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.hadoop.hbase.ScheduledChore;
25 import org.apache.hadoop.hbase.Server;
26 import org.apache.hadoop.hbase.Stoppable;
27 import org.apache.hadoop.hbase.classification.InterfaceAudience;
28 import org.apache.hadoop.hbase.executor.EventType;
29
30 import com.google.common.annotations.VisibleForTesting;
31
32
33
34
35
36
37 @InterfaceAudience.Private
38 public class CompactedHFilesDischarger extends ScheduledChore {
39 private static final Log LOG = LogFactory.getLog(CompactedHFilesDischarger.class);
40 private RegionServerServices regionServerServices;
41
42 @VisibleForTesting
43 private boolean useExecutor = true;
44
45
46
47
48
49
50 public CompactedHFilesDischarger(final int period, final Stoppable stopper,
51 final RegionServerServices regionServerServices) {
52
53 super("CompactedHFilesCleaner", stopper, period);
54 this.regionServerServices = regionServerServices;
55 }
56
57
58
59
60
61
62
63 @VisibleForTesting
64 public CompactedHFilesDischarger(final int period, final Stoppable stopper,
65 final RegionServerServices regionServerServices, boolean useExecutor) {
66
67 this(period, stopper, regionServerServices);
68 this.useExecutor = useExecutor;
69 }
70
71 @Override
72 public void chore() {
73 if (regionServerServices == null) return;
74 List<Region> onlineRegions = regionServerServices.getOnlineRegions();
75 if (onlineRegions != null) {
76 for (Region region : onlineRegions) {
77 if (LOG.isTraceEnabled()) {
78 LOG.trace(
79 "Started the compacted hfiles cleaner for the region " + region.getRegionInfo());
80 }
81 for (Store store : region.getStores()) {
82 try {
83 if (useExecutor && regionServerServices != null) {
84 CompactedHFilesDischargeHandler handler = new CompactedHFilesDischargeHandler(
85 (Server) regionServerServices, EventType.RS_COMPACTED_FILES_DISCHARGER,
86 (HStore) store);
87 regionServerServices.getExecutorService().submit(handler);
88 } else {
89
90
91 store.closeAndArchiveCompactedFiles();
92 }
93 if (LOG.isTraceEnabled()) {
94 LOG.trace("Completed archiving the compacted files for the region "
95 + region.getRegionInfo() + " under the store " + store.getColumnFamilyName());
96 }
97 } catch (Exception e) {
98 LOG.error("Exception while trying to close and archive the compacted store "
99 + "files of the store " + store.getColumnFamilyName() + " in the" + " region "
100 + region.getRegionInfo(), e);
101 }
102 }
103 if (LOG.isTraceEnabled()) {
104 LOG.trace(
105 "Completed the compacted hfiles cleaner for the region " + region.getRegionInfo());
106 }
107 }
108 }
109 }
110 }