So,

This is happening due to changes made to DrillBuffer as a part of
Drill-4134 (53dcabeb83f53c8e29aff9c9282eaaa20a8b27ee)

@Override

public String toString(int index, int length, Charset charset) {
  final String basics =
      String.format("{DrillBuf[%d], udle identityHashCode == %d,
identityHashCode == %d}",
          id, System.identityHashCode(byteBuf),
System.identityHashCode(refCnt));

  if (length == 0) {
    return basics;
  }

  final ByteBuffer nioBuffer;
  if (nioBufferCount() == 1) {
    nioBuffer = nioBuffer(index, length);
  } else {
    nioBuffer = ByteBuffer.allocate(length);
    getBytes(index, nioBuffer);
    nioBuffer.flip();
  }

  return basics + '\n' + ByteBufUtil.decodeString(nioBuffer, charset);
}

Now the returned value is prefixed with the *basics* part.

I have no idea what the intention is here but it must be breaking more
code than just mine.

Its also interesting that this signature is formatted/created every
time a value is fetched.

Regards,
 -Stefán




On Fri, Jan 8, 2016 at 7:48 PM, Stefán Baxter <ste...@activitystream.com>
wrote:

> Hi again,
>
> This code can be used to reproduce this behavior:
>
> @FunctionTemplate(name = "asEcho", scope = 
> FunctionTemplate.FunctionScope.SIMPLE, nulls = 
> FunctionTemplate.NullHandling.NULL_IF_NULL)
> public static class asEcho implements DrillSimpleFunc {
>
>     @Param
>     VarCharHolder input1;
>
>     @Output
>     VarCharHolder output;
>
>     @Inject
>     DrillBuf buffer;
>
>     public void setup() { }
>
>     public void eval() {
>         String someValue = input1.buffer.toString(input1.start, 
> input1.end-input1.start, java.nio.charset.Charset.defaultCharset());
>         output.buffer = buffer.reallocIfNeeded(someValue.length());
>         for (Byte aByte : someValue.toString().getBytes()) 
> output.buffer.setByte(output.end ++, aByte);
>     }
> }
>
>
>
>
>
> On Fri, Jan 8, 2016 at 7:43 PM, Stefán Baxter <ste...@activitystream.com>
> wrote:
>
>> Hi,
>>
>> This seems to have something to do with reading string values from a
>> VarCharHolder.
>>
>> Here is the code that has stopped working:
>>
>> String someValue = input2.buffer.toString(input2.start, input2.end-input2
>> .start, java.nio.charset.Charset.defaultCharset())
>>
>>
>> It used to return only the string value but now it returns:
>>
>> {DrillBuf[77], udle identityHashCode == 1660956802, identityHashCode ==
>> 343154168}
>> PT1H
>>
>>
>> The value is there in the second line (Seems to include a newline
>> character)
>>
>> Any ideas?
>>
>> Regards,
>>  -Stefan
>>
>>
>> On Fri, Jan 8, 2016 at 7:24 PM, Stefán Baxter <ste...@activitystream.com>
>> wrote:
>>
>>> Hi,
>>>
>>> My UDFs have stopped working with the latest version of 1.5-SNAPSHOT
>>> (pulled just now).
>>>
>>> The error is:
>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
>>> further details.
>>> Error: SYSTEM ERROR: IllegalArgumentException: Invalid format:
>>> "{DrillBuf[74], udle identityHash..."
>>>
>>> Fragment 1:5
>>>
>>> [Error Id: 17b0165d-8ff3-4101-961a-0e40fdff0392 on Lightning:31010]
>>> (state=,code=0)
>>>
>>>
>>> Does anyone know what might be causing this?
>>>
>>> (The UDFs are compiled using the same target)
>>>
>>> Regards,
>>>  -Stefán
>>>
>>
>>
>

Reply via email to