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
