Skip to content

Commit 6550601

Browse files
committed
Extract interface
1 parent 4293207 commit 6550601

File tree

2 files changed

+35
-29
lines changed

2 files changed

+35
-29
lines changed

server/src/main/java/org/elasticsearch/index/codec/bloomfilter/ES93BloomFilterStoredFieldsFormat.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ private boolean isBloomFilterField(FieldInfo info) {
275275
}
276276

277277
private void addToBloomFilter(FieldInfo info, BytesRef value) {
278-
assert info.getName().equals(bloomFilterFieldName): "Expected " + bloomFilterFieldName + " but got " + info;
278+
assert info.getName().equals(bloomFilterFieldName) : "Expected " + bloomFilterFieldName + " but got " + info;
279279
bloomFilterFieldInfo = info;
280280
var termHashes = hashTerm(value, hashes);
281281
for (int hash : termHashes) {
@@ -338,7 +338,7 @@ public long ramBytesUsed() {
338338
}
339339
}
340340

341-
public static class Reader extends StoredFieldsReader {
341+
private static class Reader extends StoredFieldsReader implements BloomFilterProvider {
342342
@Nullable
343343
private final BloomFilterFieldReader bloomFilterFieldReader;
344344
private final StoredFieldsReader delegateReader;
@@ -386,8 +386,8 @@ public void document(int docID, StoredFieldVisitor visitor) throws IOException {
386386
delegateReader.document(docID, visitor);
387387
}
388388

389-
@Nullable
390-
BloomFilterFieldReader getBloomFilterFieldReader() {
389+
@Override
390+
public BloomFilter getBloomFilter() throws IOException {
391391
return bloomFilterFieldReader;
392392
}
393393
}
@@ -418,21 +418,16 @@ static BloomFilterMetadata readFrom(IndexInput in, FieldInfos fieldInfos) throws
418418
}
419419
}
420420

421-
public static class BloomFilterFieldReader implements Closeable {
421+
static class BloomFilterFieldReader implements BloomFilter {
422422
private final FieldInfo fieldInfo;
423423
private final IndexInput bloomFilterData;
424424
private final RandomAccessInput bloomFilterIn;
425425
private final int bloomFilterSizeInBits;
426426
private final int[] hashes;
427427

428428
@Nullable
429-
public static BloomFilterFieldReader open(
430-
Directory directory,
431-
SegmentInfo si,
432-
FieldInfos fn,
433-
IOContext context,
434-
String segmentSuffix
435-
) throws IOException {
429+
static BloomFilterFieldReader open(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context, String segmentSuffix)
430+
throws IOException {
436431
List<Closeable> toClose = new ArrayList<>();
437432
boolean success = false;
438433
try (var metaInput = directory.openChecksumInput(bloomFilterMetadataFileName(si, segmentSuffix))) {
@@ -486,7 +481,7 @@ public static BloomFilterFieldReader open(
486481
}
487482
}
488483

489-
public BloomFilterFieldReader(
484+
BloomFilterFieldReader(
490485
FieldInfo fieldInfo,
491486
RandomAccessInput bloomFilterIn,
492487
int bloomFilterSizeInBits,
@@ -551,4 +546,20 @@ private static String bloomFilterMetadataFileName(SegmentInfo segmentInfo, Strin
551546
private static String bloomFilterFileName(SegmentInfo segmentInfo, String segmentSuffix) {
552547
return IndexFileNames.segmentFileName(segmentInfo.name, segmentSuffix, STORED_FIELDS_BLOOM_FILTER_EXTENSION);
553548
}
549+
550+
public interface BloomFilter extends Closeable {
551+
/**
552+
* Tests whether the given term may exist in the specified field.
553+
*
554+
* @param field the field name to check
555+
* @param term the term to test for membership
556+
* @return true if term may be present, false if definitely absent
557+
*/
558+
boolean mayContainTerm(String field, BytesRef term) throws IOException;
559+
}
560+
561+
public interface BloomFilterProvider extends Closeable {
562+
@Nullable
563+
BloomFilter getBloomFilter() throws IOException;
564+
}
554565
}

server/src/test/java/org/elasticsearch/index/codec/bloomfilter/ES93BloomFilterStoredFieldsFormatTests.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -105,23 +105,17 @@ public void testBloomFilterFieldIsNotStoredAndBloomFilterCanBeChecked() throws I
105105

106106
try (var directoryReader = StandardDirectoryReader.open(writer)) {
107107
for (LeafReaderContext leaf : directoryReader.leaves()) {
108-
try (ES93BloomFilterStoredFieldsFormat.Reader fieldReader = getBloomFilterReaderFrom(leaf)) {
109-
var bloomFilterFieldReader = fieldReader.getBloomFilterFieldReader();
108+
try (ES93BloomFilterStoredFieldsFormat.BloomFilterProvider fieldReader = getBloomFilterProvider(leaf)) {
109+
var bloomFilter = fieldReader.getBloomFilter();
110110
// the bloom filter reader is null only if the _id field is not stored during indexing
111-
assertThat(bloomFilterFieldReader, is(not(nullValue())));
111+
assertThat(bloomFilter, is(not(nullValue())));
112112

113113
for (BytesRef indexedId : indexedIds) {
114-
assertThat(bloomFilterFieldReader.mayContainTerm(IdFieldMapper.NAME, indexedId), is(true));
114+
assertThat(bloomFilter.mayContainTerm(IdFieldMapper.NAME, indexedId), is(true));
115115
}
116-
assertThat(
117-
bloomFilterFieldReader.mayContainTerm(IdFieldMapper.NAME, getBytesRefFromString("random")),
118-
is(false)
119-
);
120-
121-
assertThat(
122-
bloomFilterFieldReader.mayContainTerm(IdFieldMapper.NAME, getBytesRefFromString("12345")),
123-
is(false)
124-
);
116+
assertThat(bloomFilter.mayContainTerm(IdFieldMapper.NAME, getBytesRefFromString("random")), is(false));
117+
118+
assertThat(bloomFilter.mayContainTerm(IdFieldMapper.NAME, getBytesRefFromString("12345")), is(false));
125119
}
126120
}
127121

@@ -144,15 +138,16 @@ private static BytesRef getBytesRefFromString(String random) {
144138
return new BytesRef(random.getBytes(StandardCharsets.UTF_8));
145139
}
146140

147-
private ES93BloomFilterStoredFieldsFormat.Reader getBloomFilterReaderFrom(LeafReaderContext leafReaderContext) throws IOException {
141+
private ES93BloomFilterStoredFieldsFormat.BloomFilterProvider getBloomFilterProvider(LeafReaderContext leafReaderContext)
142+
throws IOException {
148143
LeafReader reader = leafReaderContext.reader();
149144
var fieldInfos = reader.getFieldInfos();
150145
assertThat(reader, is(instanceOf(SegmentReader.class)));
151146
SegmentReader segmentReader = (SegmentReader) reader;
152147
SegmentInfo si = segmentReader.getSegmentInfo().info;
153148

154149
var storedFieldsReader = si.getCodec().storedFieldsFormat().fieldsReader(si.dir, si, fieldInfos, IOContext.DEFAULT);
155-
assertThat(storedFieldsReader, is(instanceOf(ES93BloomFilterStoredFieldsFormat.Reader.class)));
156-
return (ES93BloomFilterStoredFieldsFormat.Reader) storedFieldsReader;
150+
assertThat(storedFieldsReader, is(instanceOf(ES93BloomFilterStoredFieldsFormat.BloomFilterProvider.class)));
151+
return ((ES93BloomFilterStoredFieldsFormat.BloomFilterProvider) storedFieldsReader);
157152
}
158153
}

0 commit comments

Comments
 (0)