You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Siddharth Teotia (JIRA)" <ji...@apache.org> on 2017/09/12 21:36:00 UTC
[jira] [Created] (ARROW-1533) As part of buffer transfer
(transferTo function), we should transfer the state for realloc
Siddharth Teotia created ARROW-1533:
---------------------------------------
Summary: As part of buffer transfer (transferTo function), we should transfer the state for realloc
Key: ARROW-1533
URL: https://issues.apache.org/jira/browse/ARROW-1533
Project: Apache Arrow
Issue Type: Bug
Components: Java - Vectors
Reporter: Siddharth Teotia
Assignee: Siddharth Teotia
We recently encountered a problem when we were trying to add JSON files with complex schema as datasets.
Initially we started with a Float8Vector with default memory allocation of (4096 * 8) 32KB.
Went through several iterations of setSafe() to trigger a realloc() from 32KB to 64KB.
Another round of setSafe() calls to trigger a realloc() from 64KB to 128KB
After that we encountered a BigInt and promoted our vector to UnionVector.
This required us to create a UnionVector with BigIntVector and Float8Vector. The latter required us to transfer the Float8Vector we were earlier working with to the Float8Vector inside the Union.
As part of transferTo(), the target Float8Vector got all the ArrowBuf state (capacity, buffer contents) etc transferred from the source vector.
Later, a realloc was triggered on the Float8Vector inside the UnionVector.
The computation inside realloc() to determine the amount of memory to be reallocated goes wrong since it makes the decision based on allocateSizeInBytes -- although this vector was created as part of transfer() from 128KB source vector, allocateSizeInBytes is still at the initial/default value of 32KB
We end up allocating a 64KB buffer and attempt to copy 128KB over 64KB and seg fault when invoking setBytes().
There is a wrong assumption in realloc() that allocateSizeInBytes is always equal to data.capacity(). The particular scenario described above exposes where this assumption could go wrong.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)