~ubuntu-branches/ubuntu/precise/hbase/precise

« back to all changes in this revision

Viewing changes to src/java/org/apache/hadoop/hbase/filter/PageFilter.java

  • Committer: Bazaar Package Importer
  • Author(s): Thomas Koch
  • Date: 2010-05-06 14:20:42 UTC
  • Revision ID: james.westby@ubuntu.com-20100506142042-r3hlvgxdcpb8tynl
Tags: upstream-0.20.4+dfsg1
ImportĀ upstreamĀ versionĀ 0.20.4+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Copyright 2009 The Apache Software Foundation
 
3
 *
 
4
 * Licensed to the Apache Software Foundation (ASF) under one
 
5
 * or more contributor license agreements.  See the NOTICE file
 
6
 * distributed with this work for additional information
 
7
 * regarding copyright ownership.  The ASF licenses this file
 
8
 * to you under the Apache License, Version 2.0 (the
 
9
 * "License"); you may not use this file except in compliance
 
10
 * with the License.  You may obtain a copy of the License at
 
11
 *
 
12
 *     http://www.apache.org/licenses/LICENSE-2.0
 
13
 *
 
14
 * Unless required by applicable law or agreed to in writing, software
 
15
 * distributed under the License is distributed on an "AS IS" BASIS,
 
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
17
 * See the License for the specific language governing permissions and
 
18
 * limitations under the License.
 
19
 */
 
20
package org.apache.hadoop.hbase.filter;
 
21
 
 
22
import java.io.DataInput;
 
23
import java.io.DataOutput;
 
24
import java.io.IOException;
 
25
 
 
26
import org.apache.hadoop.hbase.KeyValue;
 
27
 
 
28
/**
 
29
 * Implementation of Filter interface that limits results to a specific page
 
30
 * size. It terminates scanning once the number of filter-passed rows is >
 
31
 * the given page size.
 
32
 * <p>
 
33
 * Note that this filter cannot guarantee that the number of results returned
 
34
 * to a client are <= page size. This is because the filter is applied
 
35
 * separately on different region servers. It does however optimize the scan of
 
36
 * individual HRegions by making sure that the page size is never exceeded
 
37
 * locally.
 
38
 */
 
39
public class PageFilter implements Filter {
 
40
  private long pageSize = Long.MAX_VALUE;
 
41
  private int rowsAccepted = 0;
 
42
 
 
43
  /**
 
44
   * Default constructor, filters nothing. Required though for RPC
 
45
   * deserialization.
 
46
   */
 
47
  public PageFilter() {
 
48
    super();
 
49
  }
 
50
 
 
51
  /**
 
52
   * Constructor that takes a maximum page size.
 
53
   * 
 
54
   * @param pageSize Maximum result size.
 
55
   */
 
56
  public PageFilter(final long pageSize) {
 
57
    this.pageSize = pageSize;
 
58
  }
 
59
 
 
60
  public long getPageSize() {
 
61
    return pageSize;
 
62
  }
 
63
 
 
64
  public void reset() {
 
65
    // noop
 
66
  }
 
67
 
 
68
  public boolean filterAllRemaining() {
 
69
    return this.rowsAccepted >= this.pageSize;
 
70
  }
 
71
 
 
72
  public boolean filterRowKey(byte[] rowKey, int offset, int length) {
 
73
    return false;
 
74
  }
 
75
 
 
76
  public void readFields(final DataInput in) throws IOException {
 
77
    this.pageSize = in.readLong();
 
78
  }
 
79
 
 
80
  public void write(final DataOutput out) throws IOException {
 
81
    out.writeLong(pageSize);
 
82
  }
 
83
 
 
84
  public ReturnCode filterKeyValue(KeyValue v) {
 
85
    return ReturnCode.INCLUDE;
 
86
  }
 
87
 
 
88
  public boolean filterRow() {
 
89
    this.rowsAccepted++;
 
90
    return this.rowsAccepted > this.pageSize;
 
91
  }
 
92
}
 
 
b'\\ No newline at end of file'