Skip to content

Commit 3d272e1

Browse files
authored
Enable ReadAdvice in checkvec utility (#137180)
1 parent 703eb43 commit 3d272e1

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

qa/vector/src/main/java/org/elasticsearch/test/knn/KnnIndexer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@
3535
import org.apache.lucene.index.VectorSimilarityFunction;
3636
import org.apache.lucene.store.Directory;
3737
import org.apache.lucene.store.FSDirectory;
38+
import org.apache.lucene.store.IOContext;
3839
import org.apache.lucene.store.MMapDirectory;
3940
import org.apache.lucene.store.NativeFSLockFactory;
41+
import org.apache.lucene.store.ReadAdvice;
4042
import org.apache.lucene.util.PrintStreamInfoStream;
4143
import org.elasticsearch.common.io.Channels;
44+
import org.elasticsearch.index.StandardIOBehaviorHint;
4245
import org.elasticsearch.index.store.FsDirectoryFactory;
4346

4447
import java.io.IOException;
@@ -51,12 +54,14 @@
5154
import java.util.ArrayList;
5255
import java.util.List;
5356
import java.util.Objects;
57+
import java.util.Optional;
5458
import java.util.concurrent.ExecutionException;
5559
import java.util.concurrent.ExecutorService;
5660
import java.util.concurrent.Executors;
5761
import java.util.concurrent.Future;
5862
import java.util.concurrent.TimeUnit;
5963
import java.util.concurrent.atomic.AtomicInteger;
64+
import java.util.function.BiFunction;
6065

6166
import static org.elasticsearch.test.knn.KnnIndexTester.logger;
6267

@@ -241,11 +246,21 @@ public boolean isEnabled(String component) {
241246
static Directory getDirectory(Path indexPath) throws IOException {
242247
Directory dir = FSDirectory.open(indexPath);
243248
if (dir instanceof MMapDirectory mmapDir) {
249+
mmapDir.setReadAdvice(getReadAdviceFunc()); // enable madvise
244250
return new FsDirectoryFactory.HybridDirectory(NativeFSLockFactory.INSTANCE, mmapDir, 64);
245251
}
246252
return dir;
247253
}
248254

255+
private static BiFunction<String, IOContext, Optional<ReadAdvice>> getReadAdviceFunc() {
256+
return (name, context) -> {
257+
if (context.hints().contains(StandardIOBehaviorHint.INSTANCE) || name.endsWith(".cfs")) {
258+
return Optional.of(ReadAdvice.NORMAL);
259+
}
260+
return MMapDirectory.ADVISE_BY_CONTEXT.apply(name, context);
261+
};
262+
}
263+
249264
static class IndexerThread extends Thread {
250265
private final IndexWriter iw;
251266
private final AtomicInteger numDocsIndexed;

0 commit comments

Comments
 (0)