1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.regionserver;
21
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.conf.Configuration;
27 import org.apache.hadoop.hbase.KeyValue.KVComparator;
28 import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;
29 import org.apache.hadoop.hbase.regionserver.compactions.CompactionPolicy;
30 import org.apache.hadoop.hbase.regionserver.compactions.Compactor;
31 import org.apache.hadoop.hbase.util.ReflectionUtils;
32
33
34
35
36
37
38 @InterfaceAudience.Private
39 public abstract class StoreEngine<SF extends StoreFlusher,
40 CP extends CompactionPolicy, C extends Compactor, SFM extends StoreFileManager> {
41 protected SF storeFlusher;
42 protected CP compactionPolicy;
43 protected C compactor;
44 protected SFM storeFileManager;
45
46
47
48
49
50 public static final String STORE_ENGINE_CLASS_KEY = "hbase.hstore.engine.class";
51
52 private static final Class<? extends StoreEngine<?, ?, ?, ?>>
53 DEFAULT_STORE_ENGINE_CLASS = DefaultStoreEngine.class;
54
55
56
57
58 public CompactionPolicy getCompactionPolicy() {
59 return this.compactionPolicy;
60 }
61
62
63
64
65 public Compactor getCompactor() {
66 return this.compactor;
67 }
68
69
70
71
72 public StoreFileManager getStoreFileManager() {
73 return this.storeFileManager;
74 }
75
76
77
78
79 public StoreFlusher getStoreFlusher() {
80 return this.storeFlusher;
81 }
82
83
84
85
86
87 public abstract boolean needsCompaction(List<StoreFile> filesCompacting);
88
89
90
91
92
93
94 public abstract CompactionContext createCompaction() throws IOException;
95
96
97
98
99 protected abstract void createComponents(
100 Configuration conf, Store store, KVComparator kvComparator) throws IOException;
101
102 private void createComponentsOnce(
103 Configuration conf, Store store, KVComparator kvComparator) throws IOException {
104 assert compactor == null && compactionPolicy == null
105 && storeFileManager == null && storeFlusher == null;
106 createComponents(conf, store, kvComparator);
107 assert compactor != null && compactionPolicy != null
108 && storeFileManager != null && storeFlusher != null;
109 }
110
111
112
113
114
115
116
117
118
119 public static StoreEngine<?, ?, ?, ?> create(
120 Store store, Configuration conf, KVComparator kvComparator) throws IOException {
121 String className = conf.get(STORE_ENGINE_CLASS_KEY, DEFAULT_STORE_ENGINE_CLASS.getName());
122 try {
123 StoreEngine<?,?,?,?> se = ReflectionUtils.instantiateWithCustomCtor(
124 className, new Class[] { }, new Object[] { });
125 se.createComponentsOnce(conf, store, kvComparator);
126 return se;
127 } catch (Exception e) {
128 throw new IOException("Unable to load configured store engine '" + className + "'", e);
129 }
130 }
131 }