[
https://issues.apache.org/jira/browse/DRILL-1178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sudheesh Katkam updated DRILL-1178:
-----------------------------------
Due Date: 15/Aug/14
> Double copy in setSafe for VariableLengthVectors
> ------------------------------------------------
>
> Key: DRILL-1178
> URL: https://issues.apache.org/jira/browse/DRILL-1178
> Project: Apache Drill
> Issue Type: Bug
> Components: Execution - Codegen
> Affects Versions: m1
> Reporter: Parth Chandra
> Assignee: Sudheesh Katkam
> Fix For: 0.5.0
>
>
> In the code generated for the VariableLengthVectors there appears to be a
> double copy in the setSafe function that takes a Holder as a parameter.
> Snippet below is for the VarBinaryVector class.
> public boolean setSafe(int index, VarBinaryHolder holder){
> int start = holder.start;
> int end = holder.end;
> int len = end - start;
>
> int outputStart = offsetVector.data.getInt(index * 4);
>
> if(data.capacity() < outputStart + len) {
> decrementAllocationMonitor();
> return false;
> }
>
> holder.buffer.getBytes(start, data, outputStart, len); // COPY 1
> if (!offsetVector.getMutator().setSafe( index+1, outputStart + len)) {
> return false;
> }
> set(index, holder); // COPY 2
> return true;
> }
> if (!offsetVector.getMutator().setSafe( index+1, outputStart + len)) {
> return false;
> }
> set(index, holder);
> return true;
> }
> protected void set(int index, VarBinaryHolder holder){
> int length = holder.end - holder.start;
> int currentOffset = offsetVector.getAccessor().get(index);
> offsetVector.getMutator().set(index + 1, currentOffset + length);
> data.setBytes(currentOffset, holder.buffer, holder.start, length); //
> COPY 2
> }
> The line holder.buffer.getBytes copies from the holder into 'data'.
> Then in the set function, the data.setBytes call copies again.
--
This message was sent by Atlassian JIRA
(v6.2#6252)