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.regionserver.compactions.DefaultCompactionPolicy;
31 import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;
32 import org.apache.hadoop.hbase.util.ReflectionUtils;
33
34
35
36
37
38
39 @InterfaceAudience.Private
40 public abstract class StoreEngine<
41 CP extends CompactionPolicy, C extends Compactor, SFM extends StoreFileManager> {
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
80
81 public abstract CompactionContext createCompaction() throws IOException;
82
83
84
85
86 protected abstract void createComponents(
87 Configuration conf, Store store, KVComparator kvComparator) throws IOException;
88
89 private void createComponentsOnce(
90 Configuration conf, Store store, KVComparator kvComparator) throws IOException {
91 assert compactor == null && compactionPolicy == null && storeFileManager == null;
92 createComponents(conf, store, kvComparator);
93 assert compactor != null && compactionPolicy != null && storeFileManager != null;
94 }
95
96
97
98
99
100
101
102
103
104 public static StoreEngine<?, ?, ?> create(
105 Store store, Configuration conf, KVComparator kvComparator) throws IOException {
106 String className = conf.get(STORE_ENGINE_CLASS_KEY, DEFAULT_STORE_ENGINE_CLASS.getName());
107 try {
108 StoreEngine<?,?,?> se = ReflectionUtils.instantiateWithCustomCtor(
109 className, new Class[] { }, new Object[] { });
110 se.createComponentsOnce(conf, store, kvComparator);
111 return se;
112 } catch (Exception e) {
113 throw new IOException("Unable to load configured store engine '" + className + "'", e);
114 }
115 }
116 }