Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-1178

Double copy in setSafe for VariableLengthVectors

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 0.1.0-m1
    • 0.5.0
    • Execution - Codegen
    • None

    Description

      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.

      Attachments

        Activity

          People

            DrillCommitter DrillCommitter
            parthc Parth Chandra
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: