/**
 * 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.hdfs;

import java.io.IOException;

/** 
  * This exception is thrown when a read encounters a block that has no locations
  * associated with it.
  */
public class BlockMissingException extends IOException {

  private static final long serialVersionUID = 1L;

  private String filename;
  private long   offset;

  /**
   * An exception that indicates that file was corrupted.
   * @param filename name of corrupted file
   * @param description a description of the corruption details
   */
  public BlockMissingException(String filename, String description, long offset) {
    super(description);
    this.filename = filename;
    this.offset = offset;
  }

  /**
   * Returns the name of the corrupted file.
   * @return name of corrupted file
   */
  public String getFile() {
    return filename;
  }

  /**
   * Returns the offset at which this file is corrupted
   * @return offset of corrupted file
   */
  public long getOffset() {
    return offset;
  }
}
