accumulo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dylan Hutchison <dhutc...@mit.edu>
Subject Unexpected aliasing from RFile getTopValue()
Date Wed, 15 Apr 2015 00:55:26 GMT
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

Mime
View raw message