in modules/core/src/main/java/org/apache/fluo/recipes/core/map/CollisionFreeMap.java [150:187]
public V get(SnapshotBase tx, K key) {
byte[] k = serializer.serialize(key);
int hash = Hashing.murmur3_32().hashBytes(k).asInt();
String bucketId = genBucketId(Math.abs(hash % numBuckets), numBuckets);
BytesBuilder rowBuilder = Bytes.builder();
rowBuilder.append(updatePrefix).append(bucketId).append(':').append(k);
Iterator<RowColumnValue> iter =
tx.scanner().over(Span.prefix(rowBuilder.toBytes())).build().iterator();
Iterator<V> ui;
if (iter.hasNext()) {
ui = Iterators.transform(iter, rcv -> deserVal(rcv.getValue()));
} else {
ui = Collections.<V>emptyList().iterator();
}
rowBuilder.setLength(0);
rowBuilder.append(dataPrefix).append(bucketId).append(':').append(k);
Bytes dataRow = rowBuilder.toBytes();
Bytes cv = tx.get(dataRow, DATA_COLUMN);
if (!ui.hasNext()) {
if (cv == null) {
return null;
} else {
return deserVal(cv);
}
}
return combiner.combine(key, concat(ui, cv)).orElse(null);
}