001/**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *     http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019package org.apache.hadoop.hbase.regionserver.handler;
020
021import java.io.IOException;
022import java.util.concurrent.CountDownLatch;
023
024import org.apache.yetus.audience.InterfaceAudience;
025import org.slf4j.Logger;
026import org.slf4j.LoggerFactory;
027import org.apache.hadoop.hbase.Cell;
028import org.apache.hadoop.hbase.executor.EventHandler;
029import org.apache.hadoop.hbase.executor.EventType;
030import org.apache.hadoop.hbase.regionserver.KeyValueScanner;
031
032/**
033 * Handler to seek storefiles in parallel.
034 */
035@InterfaceAudience.Private
036public class ParallelSeekHandler extends EventHandler {
037  private static final Logger LOG = LoggerFactory.getLogger(ParallelSeekHandler.class);
038  private KeyValueScanner scanner;
039  private Cell keyValue;
040  private long readPoint;
041  private CountDownLatch latch;
042  private Throwable err = null;
043
044  public ParallelSeekHandler(KeyValueScanner scanner,Cell keyValue, 
045      long readPoint, CountDownLatch latch) {
046    super(null, EventType.RS_PARALLEL_SEEK);
047    this.scanner = scanner;
048    this.keyValue = keyValue;
049    this.readPoint = readPoint;
050    this.latch = latch;
051  }
052
053  @Override
054  public void process() {
055    try {
056      scanner.seek(keyValue);
057    } catch (IOException e) {
058      LOG.error("", e);
059      setErr(e);
060    } finally {
061      latch.countDown();
062    }
063  }
064
065  public Throwable getErr() {
066    return err;
067  }
068
069  public void setErr(Throwable err) {
070    this.err = err;
071  }
072}