View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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  }