Fix thread safety of EC decoding during concurrent preads (#3881)
(cherry picked from commit 0e74f1e467fde9622af4eb8f18312583d2354c0f) (cherry picked from commit 9071c9646c7d86706581d523a084a8584f2cdcab)
This commit is contained in:
parent
0d0c256de3
commit
62192478b2
@ -81,7 +81,7 @@ public RawErasureDecoder(ErasureCoderOptions coderOptions) {
|
|||||||
* @param outputs output buffers to put decoded data into according to
|
* @param outputs output buffers to put decoded data into according to
|
||||||
* erasedIndexes, ready for read after the call
|
* erasedIndexes, ready for read after the call
|
||||||
*/
|
*/
|
||||||
public void decode(ByteBuffer[] inputs, int[] erasedIndexes,
|
public synchronized void decode(ByteBuffer[] inputs, int[] erasedIndexes,
|
||||||
ByteBuffer[] outputs) throws IOException {
|
ByteBuffer[] outputs) throws IOException {
|
||||||
ByteBufferDecodingState decodingState = new ByteBufferDecodingState(this,
|
ByteBufferDecodingState decodingState = new ByteBufferDecodingState(this,
|
||||||
inputs, erasedIndexes, outputs);
|
inputs, erasedIndexes, outputs);
|
||||||
@ -130,7 +130,7 @@ protected abstract void doDecode(ByteBufferDecodingState decodingState)
|
|||||||
* erasedIndexes, ready for read after the call
|
* erasedIndexes, ready for read after the call
|
||||||
* @throws IOException if the decoder is closed.
|
* @throws IOException if the decoder is closed.
|
||||||
*/
|
*/
|
||||||
public void decode(byte[][] inputs, int[] erasedIndexes, byte[][] outputs)
|
public synchronized void decode(byte[][] inputs, int[] erasedIndexes, byte[][] outputs)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
ByteArrayDecodingState decodingState = new ByteArrayDecodingState(this,
|
ByteArrayDecodingState decodingState = new ByteArrayDecodingState(this,
|
||||||
inputs, erasedIndexes, outputs);
|
inputs, erasedIndexes, outputs);
|
||||||
@ -163,7 +163,7 @@ protected abstract void doDecode(ByteArrayDecodingState decodingState)
|
|||||||
* erasedIndexes, ready for read after the call
|
* erasedIndexes, ready for read after the call
|
||||||
* @throws IOException if the decoder is closed
|
* @throws IOException if the decoder is closed
|
||||||
*/
|
*/
|
||||||
public void decode(ECChunk[] inputs, int[] erasedIndexes,
|
public synchronized void decode(ECChunk[] inputs, int[] erasedIndexes,
|
||||||
ECChunk[] outputs) throws IOException {
|
ECChunk[] outputs) throws IOException {
|
||||||
ByteBuffer[] newInputs = CoderUtil.toBuffers(inputs);
|
ByteBuffer[] newInputs = CoderUtil.toBuffers(inputs);
|
||||||
ByteBuffer[] newOutputs = CoderUtil.toBuffers(outputs);
|
ByteBuffer[] newOutputs = CoderUtil.toBuffers(outputs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user