FSDatasetInterface.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:8k
源码类别:

网格计算

开发平台:

Java

  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.hadoop.hdfs.server.datanode;
  19. import java.io.Closeable;
  20. import java.io.FilterInputStream;
  21. import java.io.IOException;
  22. import java.io.InputStream;
  23. import java.io.OutputStream;
  24. import org.apache.hadoop.hdfs.server.datanode.metrics.FSDatasetMBean;
  25. import org.apache.hadoop.hdfs.protocol.Block;
  26. import org.apache.hadoop.io.IOUtils;
  27. import org.apache.hadoop.util.DiskChecker.DiskErrorException;
  28. /**
  29.  * This is an interface for the underlying storage that stores blocks for
  30.  * a data node. 
  31.  * Examples are the FSDataset (which stores blocks on dirs)  and 
  32.  * SimulatedFSDataset (which simulates data).
  33.  *
  34.  */
  35. public interface FSDatasetInterface extends FSDatasetMBean {
  36.   
  37.   
  38.   /**
  39.    * Returns the length of the metadata file of the specified block
  40.    * @param b - the block for which the metadata length is desired
  41.    * @return the length of the metadata file for the specified block.
  42.    * @throws IOException
  43.    */
  44.   public long getMetaDataLength(Block b) throws IOException;
  45.   
  46.   /**
  47.    * This class provides the input stream and length of the metadata
  48.    * of a block
  49.    *
  50.    */
  51.   static class MetaDataInputStream extends FilterInputStream {
  52.     MetaDataInputStream(InputStream stream, long len) {
  53.       super(stream);
  54.       length = len;
  55.     }
  56.     private long length;
  57.     
  58.     public long getLength() {
  59.       return length;
  60.     }
  61.   }
  62.   
  63.   /**
  64.    * Returns metaData of block b as an input stream (and its length)
  65.    * @param b - the block
  66.    * @return the metadata input stream; 
  67.    * @throws IOException
  68.    */
  69.   public MetaDataInputStream getMetaDataInputStream(Block b)
  70.         throws IOException;
  71.   
  72.   /**
  73.    * Does the meta file exist for this block?
  74.    * @param b - the block
  75.    * @return true of the metafile for specified block exits
  76.    * @throws IOException
  77.    */
  78.   public boolean metaFileExists(Block b) throws IOException;
  79.   /**
  80.    * Returns the specified block's on-disk length (excluding metadata)
  81.    * @param b
  82.    * @return   the specified block's on-disk length (excluding metadta)
  83.    * @throws IOException
  84.    */
  85.   public long getLength(Block b) throws IOException;
  86.   /**
  87.    * @return the generation stamp stored with the block.
  88.    */
  89.   public Block getStoredBlock(long blkid) throws IOException;
  90.   /**
  91.    * Returns an input stream to read the contents of the specified block
  92.    * @param b
  93.    * @return an input stream to read the contents of the specified block
  94.    * @throws IOException
  95.    */
  96.   public InputStream getBlockInputStream(Block b) throws IOException;
  97.   
  98.   /**
  99.    * Returns an input stream at specified offset of the specified block
  100.    * @param b
  101.    * @param seekOffset
  102.    * @return an input stream to read the contents of the specified block,
  103.    *  starting at the offset
  104.    * @throws IOException
  105.    */
  106.   public InputStream getBlockInputStream(Block b, long seekOffset)
  107.             throws IOException;
  108.   /**
  109.    * Returns an input stream at specified offset of the specified block
  110.    * The block is still in the tmp directory and is not finalized
  111.    * @param b
  112.    * @param blkoff
  113.    * @param ckoff
  114.    * @return an input stream to read the contents of the specified block,
  115.    *  starting at the offset
  116.    * @throws IOException
  117.    */
  118.   public BlockInputStreams getTmpInputStreams(Block b, long blkoff, long ckoff)
  119.             throws IOException;
  120.      /**
  121.       * 
  122.       * This class contains the output streams for the data and checksum
  123.       * of a block
  124.       *
  125.       */
  126.      static class BlockWriteStreams {
  127.       OutputStream dataOut;
  128.       OutputStream checksumOut;
  129.       BlockWriteStreams(OutputStream dOut, OutputStream cOut) {
  130.         dataOut = dOut;
  131.         checksumOut = cOut;
  132.       }
  133.       
  134.     }
  135.   /**
  136.    * This class contains the input streams for the data and checksum
  137.    * of a block
  138.    */
  139.   static class BlockInputStreams implements Closeable {
  140.     final InputStream dataIn;
  141.     final InputStream checksumIn;
  142.     BlockInputStreams(InputStream dataIn, InputStream checksumIn) {
  143.       this.dataIn = dataIn;
  144.       this.checksumIn = checksumIn;
  145.     }
  146.     /** {@inheritDoc} */
  147.     public void close() {
  148.       IOUtils.closeStream(dataIn);
  149.       IOUtils.closeStream(checksumIn);
  150.     }
  151.   }
  152.     
  153.   /**
  154.    * Creates the block and returns output streams to write data and CRC
  155.    * @param b
  156.    * @param isRecovery True if this is part of erro recovery, otherwise false
  157.    * @return a BlockWriteStreams object to allow writing the block data
  158.    *  and CRC
  159.    * @throws IOException
  160.    */
  161.   public BlockWriteStreams writeToBlock(Block b, boolean isRecovery) throws IOException;
  162.   /**
  163.    * Update the block to the new generation stamp and length.  
  164.    */
  165.   public void updateBlock(Block oldblock, Block newblock) throws IOException;
  166.   
  167.   /**
  168.    * Finalizes the block previously opened for writing using writeToBlock.
  169.    * The block size is what is in the parameter b and it must match the amount
  170.    *  of data written
  171.    * @param b
  172.    * @throws IOException
  173.    */
  174.   public void finalizeBlock(Block b) throws IOException;
  175.   /**
  176.    * Unfinalizes the block previously opened for writing using writeToBlock.
  177.    * The temporary file associated with this block is deleted.
  178.    * @param b
  179.    * @throws IOException
  180.    */
  181.   public void unfinalizeBlock(Block b) throws IOException;
  182.   /**
  183.    * Returns the block report - the full list of blocks stored
  184.    * @return - the block report - the full list of blocks stored
  185.    */
  186.   public Block[] getBlockReport();
  187.   /**
  188.    * Is the block valid?
  189.    * @param b
  190.    * @return - true if the specified block is valid
  191.    */
  192.   public boolean isValidBlock(Block b);
  193.   /**
  194.    * Invalidates the specified blocks
  195.    * @param invalidBlks - the blocks to be invalidated
  196.    * @throws IOException
  197.    */
  198.   public void invalidate(Block invalidBlks[]) throws IOException;
  199.     /**
  200.      * Check if all the data directories are healthy
  201.      * @throws DiskErrorException
  202.      */
  203.   public void checkDataDir() throws DiskErrorException;
  204.       
  205.     /**
  206.      * Stringifies the name of the storage
  207.      */
  208.   public String toString();
  209.   
  210.   /**
  211.    * Shutdown the FSDataset
  212.    */
  213.   public void shutdown();
  214.   /**
  215.    * Returns the current offset in the data stream.
  216.    * @param b
  217.    * @param stream The stream to the data file and checksum file
  218.    * @return the position of the file pointer in the data stream
  219.    * @throws IOException
  220.    */
  221.   public long getChannelPosition(Block b, BlockWriteStreams stream) throws IOException;
  222.   /**
  223.    * Sets the file pointer of the data stream and checksum stream to
  224.    * the specified values.
  225.    * @param b
  226.    * @param stream The stream for the data file and checksum file
  227.    * @param dataOffset The position to which the file pointre for the data stream
  228.    *        should be set
  229.    * @param ckOffset The position to which the file pointre for the checksum stream
  230.    *        should be set
  231.    * @throws IOException
  232.    */
  233.   public void setChannelPosition(Block b, BlockWriteStreams stream, long dataOffset,
  234.                                  long ckOffset) throws IOException;
  235.   /**
  236.    * Validate that the contents in the Block matches
  237.    * the file on disk. Returns true if everything is fine.
  238.    * @param b The block to be verified.
  239.    * @throws IOException
  240.    */
  241.   public void validateBlockMetadata(Block b) throws IOException;
  242. }