1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver.wal;
19
20 import java.io.DataInputStream;
21 import java.io.DataOutputStream;
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.io.OutputStream;
25
26 import org.apache.hadoop.conf.Configuration;
27 import org.apache.hadoop.hbase.codec.Codec;
28 import org.apache.hadoop.hbase.codec.Decoder;
29 import org.apache.hadoop.hbase.codec.Encoder;
30 import org.apache.hadoop.hbase.codec.KeyValueCodec;
31 import org.apache.hadoop.hbase.regionserver.wal.KeyValueCompression.CompressedKvEncoder;
32
33 public class WALEditCodec implements Codec {
34
35 public static final String WAL_EDIT_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";
36
37 private CompressionContext compression;
38
39
40
41
42
43
44
45
46 public WALEditCodec() {
47 }
48
49
50
51
52
53
54 public void init(Configuration conf) {
55 }
56
57 public void setCompression(CompressionContext compression) {
58 this.compression = compression;
59 }
60
61 @Override
62 public Decoder getDecoder(InputStream is) {
63 return
64 (compression == null) ? new KeyValueCodec.KeyValueDecoder((DataInputStream) is)
65 : new KeyValueCompression.CompressedKvDecoder((DataInputStream) is, compression);
66 }
67
68 @Override
69 public Encoder getEncoder(OutputStream os) {
70 return
71 (compression == null) ? new KeyValueCodec.KeyValueEncoder((DataOutputStream) os)
72 : new CompressedKvEncoder((DataOutputStream) os, compression);
73 }
74
75
76
77
78
79
80
81
82
83
84 public static WALEditCodec create(Configuration conf, CompressionContext compressionContext)
85 throws IOException {
86 Class<? extends WALEditCodec> codecClazz = conf.getClass(WALEditCodec.WAL_EDIT_CODEC_CLASS_KEY,
87 WALEditCodec.class, WALEditCodec.class);
88 try {
89 WALEditCodec codec = codecClazz.newInstance();
90 codec.init(conf);
91 codec.setCompression(compressionContext);
92 return codec;
93 } catch (InstantiationException e) {
94 throw new IOException("Couldn't instantiate the configured WALEditCodec!", e);
95 } catch (IllegalAccessException e) {
96 throw new IOException("Couldn't instantiate the configured WALEditCodec!", e);
97 }
98 }
99 }