|
31 | 31 | import org.apache.lucene.store.IOContext; |
32 | 32 | import org.apache.lucene.store.MergeInfo; |
33 | 33 | import org.elasticsearch.common.util.set.Sets; |
| 34 | +import org.elasticsearch.index.store.FsDirectoryFactory; |
34 | 35 |
|
35 | 36 | import java.io.IOException; |
36 | 37 | import java.util.Set; |
@@ -66,24 +67,30 @@ public FlatVectorsWriter fieldsWriter(SegmentWriteState state) throws IOExceptio |
66 | 67 | return new Lucene99FlatVectorsWriter(state, vectorsScorer); |
67 | 68 | } |
68 | 69 |
|
| 70 | + static boolean shouldUseDirectIO(SegmentReadState state) { |
| 71 | + return FsDirectoryFactory.isHybridFs(state.directory); |
| 72 | + } |
| 73 | + |
69 | 74 | @Override |
70 | 75 | public FlatVectorsReader fieldsReader(SegmentReadState state) throws IOException { |
71 | | - // only override the context for the random-access use case |
72 | | - SegmentReadState directIOState = state.context.context() == IOContext.Context.DEFAULT |
73 | | - ? new SegmentReadState( |
| 76 | + if (shouldUseDirectIO(state) && state.context.context() == IOContext.Context.DEFAULT) { |
| 77 | + // only override the context for the random-access use case |
| 78 | + SegmentReadState directIOState = new SegmentReadState( |
74 | 79 | state.directory, |
75 | 80 | state.segmentInfo, |
76 | 81 | state.fieldInfos, |
77 | 82 | new DirectIOContext(state.context.hints()), |
78 | 83 | state.segmentSuffix |
79 | | - ) |
80 | | - : state; |
81 | | - // Use mmap for merges and direct I/O for searches. |
82 | | - // TODO: Open the mmap file with sequential access instead of random (current behavior). |
83 | | - return new MergeReaderWrapper( |
84 | | - new Lucene99FlatVectorsReader(directIOState, vectorsScorer), |
85 | | - new Lucene99FlatVectorsReader(state, vectorsScorer) |
86 | | - ); |
| 84 | + ); |
| 85 | + // Use mmap for merges and direct I/O for searches. |
| 86 | + // TODO: Open the mmap file with sequential access instead of random (current behavior). |
| 87 | + return new MergeReaderWrapper( |
| 88 | + new Lucene99FlatVectorsReader(directIOState, vectorsScorer), |
| 89 | + new Lucene99FlatVectorsReader(state, vectorsScorer) |
| 90 | + ); |
| 91 | + } else { |
| 92 | + return new Lucene99FlatVectorsReader(state, vectorsScorer); |
| 93 | + } |
87 | 94 | } |
88 | 95 |
|
89 | 96 | @Override |
|
0 commit comments