drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sudheesh Katkam (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (DRILL-1178) Double copy in setSafe for VariableLengthVectors
Date Wed, 13 Aug 2014 21:30:13 GMT

     [ https://issues.apache.org/jira/browse/DRILL-1178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Sudheesh Katkam reassigned DRILL-1178:
--------------------------------------

    Assignee: DrillCommitter  (was: Sudheesh Katkam)

> 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: DrillCommitter
>             Fix For: 0.5.0
>
>         Attachments: DRILL-1178-removing-second-set.patch
>
>
> 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)

Mime
View raw message