Do you mean to say you see this from the RFile Reader?

Dylan Hutchison wrote:
While debugging a custom iterator today to find the source of a logical
error, I discovered something an iterator developer may not expect.  The
getTopValue() of RFile returns a reference to the RFile's internal Value
private variable.  The private variable is modified inside RFile via


    val.readFields(currBlock);


which means that if an iterator stores the reference from getTopValue(),
that is, without copying the Value to a new Object, then the value will
be updated in the iterator when the RFile's next() method is called.

Here is an example snippet to demonstrate:

    Value v1 = source.getTopValue();

    source.next();                                   // v1 is modified!


The following code would not have a problem:

    Value v1 = new Value(source.getTopValue());

    source.next();


I bet this is done for performance reasons.  Is this expected?

Regards, Dylan

Reply via email to