通过本文可以获得如下知识:
- StripeReader#readStripe源码逻辑。
- readDataForDecoding、readParityChunks方法源码详细分析。
- prepareDecodeInputs、prepareParityChunk方法源码详细分析。
- readChunk、getNextCompletedStripedRead方法源码详细分析。
- decode方法简要逻辑介绍
一、背景
读EC文件的时候,假设我们使用RS(k,m)的算法,则最多允许m个data cell的读取失败,然后可以通过k-m个数据块和m个校验块对丢失的(missing)data cell进行解码还原。
本文就是介绍EC读流程中,如果遇到数据块missing的情况下的EC解码(decode)过程。主要就是对StripeReader#readStripe 方法及其内部调用的关键方法进行源码解析。
二、StripeReader#readStripe整体流程
为什么要从这个readStripe 方法开始呢? 因为在StripedInputStream 的read的方法内部,有两个用来读stripe的方法: DFSStripedInputStream#fetchBlockByteRange 和DFSStripedInputStream#readOneStripe ,内部就是使用readStripe 方法来对条带数据进行读取。
StripeReader#readStripe 方法的主要功能: <
|