Skip to content

Commit dfc7c11

Browse files
committed
addressing more comments
1 parent a03c5fc commit dfc7c11

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

fdb-extensions/src/main/java/com/apple/foundationdb/async/hnsw/OnReadListener.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package com.apple.foundationdb.async.hnsw;
2222

2323
import javax.annotation.Nonnull;
24+
import javax.annotation.Nullable;
2425
import java.util.concurrent.CompletableFuture;
2526

2627
/**
@@ -67,12 +68,12 @@ default void onNodeRead(int layer, @Nonnull Node<? extends NodeReference> node)
6768
* The default implementation is a no-op and does nothing.
6869
* @param layer the layer from which the key-value pair was read.
6970
* @param key the key that was read, guaranteed to be non-null.
70-
* @param value the value associated with the key, guaranteed to be non-null.
71+
* @param value the value associated with the key, can be null if the key was not found
7172
*/
7273
@SuppressWarnings("unused")
7374
default void onKeyValueRead(int layer,
7475
@Nonnull byte[] key,
75-
@Nonnull byte[] value) {
76+
@Nullable byte[] value) {
7677
// nothing
7778
}
7879
}

fdb-extensions/src/main/java/com/apple/foundationdb/async/hnsw/StorageAdapter.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ static RealVector vectorFromBytes(@Nonnull final Config config, @Nonnull final b
235235
*/
236236
@Nonnull
237237
@SuppressWarnings("PrimitiveArrayArgumentToVarargsMethod")
238-
static Tuple tupleFromVector(final RealVector vector) {
238+
static Tuple tupleFromVector(@Nonnull final RealVector vector) {
239239
return Tuple.from(vector.getRawData());
240240
}
241241

@@ -249,15 +249,15 @@ static CompletableFuture<AccessInfo> fetchAccessInfo(@Nonnull final Config confi
249249
@Nonnull final ReadTransaction readTransaction,
250250
@Nonnull final Subspace subspace,
251251
@Nonnull final OnReadListener onReadListener) {
252-
final Subspace entryNodeSubspace = subspace.subspace(Tuple.from(SUBSPACE_PREFIX_ACCESS_INFO));
252+
final Subspace entryNodeSubspace = accessInfoSubspace(subspace);
253253
final byte[] key = entryNodeSubspace.pack();
254254

255255
return readTransaction.get(key)
256256
.thenApply(valueBytes -> {
257+
onReadListener.onKeyValueRead(-1, key, valueBytes);
257258
if (valueBytes == null) {
258259
return null; // not a single node in the index
259260
}
260-
onReadListener.onKeyValueRead(-1, key, valueBytes);
261261

262262
final Tuple entryTuple = Tuple.fromBytes(valueBytes);
263263
final int layer = (int)entryTuple.getLong(0);
@@ -293,7 +293,7 @@ static void writeAccessInfo(@Nonnull final Transaction transaction,
293293
@Nonnull final Subspace subspace,
294294
@Nonnull final AccessInfo accessInfo,
295295
@Nonnull final OnWriteListener onWriteListener) {
296-
final Subspace entryNodeSubspace = subspace.subspace(Tuple.from(SUBSPACE_PREFIX_ACCESS_INFO));
296+
final Subspace entryNodeSubspace = accessInfoSubspace(subspace);
297297
final EntryNodeReference entryNodeReference = accessInfo.getEntryNodeReference();
298298
final RealVector centroid = accessInfo.getCentroid();
299299
final byte[] key = entryNodeSubspace.pack();
@@ -312,7 +312,7 @@ static CompletableFuture<List<AggregatedVector>> consumeSampledVectors(@Nonnull
312312
@Nonnull final Subspace subspace,
313313
final int numMaxVectors,
314314
@Nonnull final OnReadListener onReadListener) {
315-
final Subspace prefixSubspace = subspace.subspace(Tuple.from(SUBSPACE_PREFIX_SAMPLES));
315+
final Subspace prefixSubspace = samplesSubspace(subspace);
316316

317317
final byte[] prefixKey = prefixSubspace.pack();
318318
final ReadTransaction snapshot = transaction.snapshot();
@@ -326,6 +326,7 @@ static CompletableFuture<List<AggregatedVector>> consumeSampledVectors(@Nonnull
326326
final byte[] key = keyValue.getKey();
327327
final byte[] value = keyValue.getValue();
328328
resultBuilder.add(aggregatedVectorFromRaw(prefixSubspace, key, value));
329+
transaction.addReadConflictKey(key);
329330
transaction.clear(key);
330331
onReadListener.onKeyValueRead(-1, key, value);
331332
}
@@ -338,7 +339,7 @@ static void appendSampledVector(@Nonnull final Transaction transaction,
338339
final int partialCount,
339340
@Nonnull final Transformed<RealVector> vector,
340341
@Nonnull final OnWriteListener onWriteListener) {
341-
final Subspace prefixSubspace = subspace.subspace(Tuple.from(SUBSPACE_PREFIX_SAMPLES));
342+
final Subspace prefixSubspace = samplesSubspace(subspace);
342343
final Subspace keySubspace = prefixSubspace.subspace(Tuple.from(partialCount, UUID.randomUUID()));
343344
final byte[] prefixKey = keySubspace.pack();
344345
// getting underlying is okay as it is only written to the database
@@ -348,8 +349,7 @@ static void appendSampledVector(@Nonnull final Transaction transaction,
348349
}
349350

350351
static void removeAllSampledVectors(@Nonnull final Transaction transaction, @Nonnull final Subspace subspace) {
351-
final Subspace prefixSubspace =
352-
subspace.subspace(Tuple.from(SUBSPACE_PREFIX_SAMPLES));
352+
final Subspace prefixSubspace = samplesSubspace(subspace);
353353

354354
final byte[] prefixKey = prefixSubspace.pack();
355355
final Range range = Range.startsWith(prefixKey);
@@ -366,4 +366,14 @@ private static AggregatedVector aggregatedVectorFromRaw(@Nonnull final Subspace
366366

367367
return new AggregatedVector(partialCount, AffineOperator.identity().transform(vector));
368368
}
369+
370+
@Nonnull
371+
static Subspace accessInfoSubspace(@Nonnull final Subspace rootSubspace) {
372+
return rootSubspace.subspace(Tuple.from(SUBSPACE_PREFIX_ACCESS_INFO));
373+
}
374+
375+
@Nonnull
376+
static Subspace samplesSubspace(@Nonnull final Subspace rootSubspace) {
377+
return rootSubspace.subspace(Tuple.from(SUBSPACE_PREFIX_SAMPLES));
378+
}
369379
}

fdb-extensions/src/test/java/com/apple/foundationdb/async/hnsw/HNSWTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.slf4j.LoggerFactory;
6060

6161
import javax.annotation.Nonnull;
62+
import javax.annotation.Nullable;
6263
import java.io.IOException;
6364
import java.nio.channels.FileChannel;
6465
import java.nio.file.Path;
@@ -495,9 +496,9 @@ public void onNodeRead(final int layer, @Nonnull final Node<? extends NodeRefere
495496
}
496497

497498
@Override
498-
public void onKeyValueRead(final int layer, @Nonnull final byte[] key, @Nonnull final byte[] value) {
499+
public void onKeyValueRead(final int layer, @Nonnull final byte[] key, @Nullable final byte[] value) {
499500
bytesReadByLayer.compute(layer, (l, oldValue) -> (oldValue == null ? 0 : oldValue) +
500-
key.length + value.length);
501+
key.length + (value == null ? 0 : value.length));
501502
}
502503
}
503504

0 commit comments

Comments
 (0)