1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.omid.transaction;
19
20 import java.io.IOException;
21 import org.apache.hadoop.hbase.client.Get;
22 import org.apache.hadoop.hbase.client.Result;
23 import org.apache.hadoop.hbase.client.ResultScanner;
24 import org.apache.hadoop.hbase.client.Scan;
25 import org.apache.hadoop.hbase.client.Table;
26 import org.apache.hadoop.hbase.util.Bytes;
27 import org.apache.omid.proto.TSOProto;
28
29
30 public class AttributeSetSnapshotFilter implements SnapshotFilter {
31
32 private Table table;
33
34 public AttributeSetSnapshotFilter(Table table) {
35 this.table = table;
36 }
37
38 private TSOProto.Transaction.Builder getBuilder(HBaseTransaction transaction) {
39 return TSOProto.Transaction.newBuilder().setTimestamp(transaction.getTransactionId())
40 .setReadTimestamp(transaction.getReadTimestamp())
41 .setVisibilityLevel(transaction.getVisibilityLevel().ordinal())
42 .setEpoch(transaction.getEpoch());
43 }
44
45 @Override
46 public Result get(Get get, HBaseTransaction transaction) throws IOException {
47 get.setAttribute(CellUtils.TRANSACTION_ATTRIBUTE, getBuilder(transaction).build().toByteArray());
48 get.setAttribute(CellUtils.CLIENT_GET_ATTRIBUTE, Bytes.toBytes(true));
49 get.setAttribute(CellUtils.LL_ATTRIBUTE, Bytes.toBytes(transaction.isLowLatency()));
50
51 return table.get(get);
52 }
53
54 @Override
55 public ResultScanner getScanner(Scan scan, HBaseTransaction transaction) throws IOException {
56 scan.setAttribute(CellUtils.TRANSACTION_ATTRIBUTE, getBuilder(transaction).build().toByteArray());
57 scan.setAttribute(CellUtils.LL_ATTRIBUTE, Bytes.toBytes(transaction.isLowLatency()));
58 return table.getScanner(scan);
59 }
60
61 public void close() throws IOException {
62 table.close();
63 }
64 }