TFile.append compares initial key against null lastKey
--------------------------------------------------------
Key: HADOOP-6834
URL: https://issues.apache.org/jira/browse/HADOOP-6834
Project: Hadoop Common
Issue Type: Bug
Components: io
Affects Versions: 0.20.2, 0.20.1
Reporter: Ahad Rana
The following code in TFile.KeyReigster.close:
byte[] lastKey = lastKeyBufferOS.getBuffer();
int lastLen = lastKeyBufferOS.size();
if (tfileMeta.getComparator().compare(key, 0, len, lastKey, 0,
lastLen) < 0) {
throw new IOException("Keys are not added in sorted order");
}
compares the initial key (passed in via TFile.Writer.append) against a
technically NULL lastKey. lastKey is not initialized until after the first call
to TFile.Writer.append. The underlying RawComparator interface used for
comparisons does not stipulate the proper behavior when either length 1 or
length 2 is zero. In the case of LongWritable, its WritableComparator
implementation does an unsafe read on the passed in byte arrays b1 and b2.
Since TFile pre-allocates the buffer used for storing lastKey, this passes a
valid buffer with zero count to LongWritable's comparator, which ignores length
and thus produces incorrect results.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.