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