org.apache.hadoop.hbase.codec.prefixtree.scanner.CellSearcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alihbase-prefix-tree Show documentation
Show all versions of alihbase-prefix-tree Show documentation
Prefix Tree Data Block Encoder
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.codec.prefixtree.scanner;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.Cell;
/**
* Methods for seeking to a random {@link Cell} inside a sorted collection of cells. Indicates that
* the implementation is able to navigate between cells without iterating through every cell.
*/
@InterfaceAudience.Private
public interface CellSearcher extends ReversibleCellScanner {
/**
* Reset any state in the scanner so it appears it was freshly opened.
*/
void resetToBeforeFirstEntry();
/**
* Do everything within this scanner's power to find the key. Look forward and backwards.
*
* Abort as soon as we know it can't be found, possibly leaving the Searcher in an invalid state.
*
* @param key position the CellScanner exactly on this key
* @return true if the cell existed and getCurrentCell() holds a valid cell
*/
boolean positionAt(Cell key);
/**
* Same as positionAt(..), but go to the extra effort of finding the previous key if there's no
* exact match.
*
* @param key position the CellScanner on this key or the closest cell before
* @return AT if exact match
* BEFORE if on last cell before key
* BEFORE_FIRST if key was before the first cell in this scanner's scope
*/
CellScannerPosition positionAtOrBefore(Cell key);
/**
* Same as positionAt(..), but go to the extra effort of finding the next key if there's no exact
* match.
*
* @param key position the CellScanner on this key or the closest cell after
* @return AT if exact match
* AFTER if on first cell after key
* AFTER_LAST if key was after the last cell in this scanner's scope
*/
CellScannerPosition positionAtOrAfter(Cell key);
/**
* Note: Added for backwards compatibility with
* {@link org.apache.hadoop.hbase.regionserver.KeyValueScanner#reseek}
*
* Look for the key, but only look after the current position. Probably not needed for an
* efficient tree implementation, but is important for implementations without random access such
* as unencoded KeyValue blocks.
*
* @param key position the CellScanner exactly on this key
* @return true if getCurrent() holds a valid cell
*/
boolean seekForwardTo(Cell key);
/**
* Same as seekForwardTo(..), but go to the extra effort of finding the next key if there's no
* exact match.
*
* @param key
* @return AT if exact match
* AFTER if on first cell after key
* AFTER_LAST if key was after the last cell in this scanner's scope
*/
CellScannerPosition seekForwardToOrBefore(Cell key);
/**
* Same as seekForwardTo(..), but go to the extra effort of finding the next key if there's no
* exact match.
*
* @param key
* @return AT if exact match
* AFTER if on first cell after key
* AFTER_LAST if key was after the last cell in this scanner's scope
*/
CellScannerPosition seekForwardToOrAfter(Cell key);
/**
* Note: This may not be appropriate to have in the interface. Need to investigate.
*
* Position the scanner in an invalid state after the last cell: CellScannerPosition.AFTER_LAST.
* This is used by tests and for handling certain edge cases.
*/
void positionAfterLastCell();
}