HBASE-16444 CellUtil#estimatedSerializedSizeOfKey() should consider

KEY_INFRASTRUCTURE_SIZ (Ram)
This commit is contained in:
Ramkrishna 2016-08-23 10:53:33 +05:30
parent a8909f5cba
commit e7cd7fffbf
1 changed files with 11 additions and 3 deletions

View File

@ -526,6 +526,7 @@ public final class CellUtil {
}
/**
* Estimate based on keyvalue's serialization format.
* @param cell
* @return Estimate of the <code>cell</code> size in bytes.
* @deprecated please use estimatedSerializedSizeOf(Cell)
@ -549,7 +550,7 @@ public final class CellUtil {
return getSumOfCellElementLengths(cell) +
// Use the KeyValue's infrastructure size presuming that another implementation would have
// same basic cost.
KeyValue.KEY_INFRASTRUCTURE_SIZE +
KeyValue.ROW_LENGTH_SIZE + KeyValue.FAMILY_LENGTH_SIZE +
// Serialization is probably preceded by a length (it is in the KeyValueCodec at least).
Bytes.SIZEOF_INT;
}
@ -573,10 +574,17 @@ public final class CellUtil {
KeyValue.TIMESTAMP_TYPE_SIZE;
}
/**
* Calculates the serialized key size. We always serialize in the KeyValue's serialization
* format.
* @param cell the cell for which the key size has to be calculated.
* @return the key size
*/
public static int estimatedSerializedSizeOfKey(final Cell cell) {
if (cell instanceof KeyValue) return ((KeyValue)cell).getKeyLength();
// This will be a low estimate. Will do for now.
return getSumOfCellKeyElementLengths(cell);
return cell.getRowLength() + cell.getFamilyLength() +
cell.getQualifierLength() +
KeyValue.KEY_INFRASTRUCTURE_SIZE;
}
/**