Skip to content

Commit

Permalink
Do not add a ZK store reader per log (#1238)
Browse files Browse the repository at this point in the history
  • Loading branch information
ermontross authored Feb 20, 2025
1 parent 790e93f commit efd67fe
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.slack.astra.logstore.search.fieldRedaction;

import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadataStore;
import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadata;
import java.io.IOException;
import java.util.HashMap;
import org.apache.lucene.codecs.StoredFieldsReader;
import org.apache.lucene.index.StoredFieldVisitor;

Expand All @@ -13,17 +14,17 @@
class RedactedFieldReader extends StoredFieldsReader {

private final StoredFieldsReader in;
private final FieldRedactionMetadataStore fieldRedactionMetadataStore;
private final HashMap<String, FieldRedactionMetadata> fieldRedactionsMap;

public RedactedFieldReader(
StoredFieldsReader in, FieldRedactionMetadataStore fieldRedactionMetadataStore) {
StoredFieldsReader in, HashMap<String, FieldRedactionMetadata> fieldRedactionsMap) {
this.in = in;
this.fieldRedactionMetadataStore = fieldRedactionMetadataStore;
this.fieldRedactionsMap = fieldRedactionsMap;
}

@Override
public StoredFieldsReader clone() {
return new RedactedFieldReader(in, fieldRedactionMetadataStore);
return new RedactedFieldReader(in, fieldRedactionsMap);
}

@Override
Expand All @@ -38,7 +39,7 @@ public void close() throws IOException {

@Override
public void document(int docID, StoredFieldVisitor visitor) throws IOException {
visitor = new RedactionStoredFieldVisitor(visitor, fieldRedactionMetadataStore);
visitor = new RedactionStoredFieldVisitor(visitor, fieldRedactionsMap);
in.document(docID, visitor);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.slack.astra.logstore.search.fieldRedaction;

import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadataStore;
import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadata;
import java.io.IOException;
import java.util.HashMap;
import org.apache.lucene.codecs.StoredFieldsReader;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.SortedDocValues;
Expand All @@ -14,12 +15,12 @@
* RedactionStoredFieldVisitor to read in the individual fields.
*/
class RedactionLeafReader extends SequentialStoredFieldsLeafReader {
private final FieldRedactionMetadataStore fieldRedactionMetadataStore;
private final HashMap<String, FieldRedactionMetadata> fieldRedactionsMap;

public RedactionLeafReader(
LeafReader in, FieldRedactionMetadataStore fieldRedactionMetadataStore) {
LeafReader in, HashMap<String, FieldRedactionMetadata> fieldRedactionsMap) {
super(in);
this.fieldRedactionMetadataStore = fieldRedactionMetadataStore;
this.fieldRedactionsMap = fieldRedactionsMap;
}

@Override
Expand All @@ -35,13 +36,13 @@ public StoredFields storedFields() throws IOException {
// RedactionStoredFieldVisitor can be called here or in the RedactedFieldReader
@Override
public void document(int docID, StoredFieldVisitor visitor) throws IOException {
visitor = new RedactionStoredFieldVisitor(visitor, fieldRedactionMetadataStore);
visitor = new RedactionStoredFieldVisitor(visitor, fieldRedactionsMap);
in.document(docID, visitor);
}

@Override
protected StoredFieldsReader doGetSequentialStoredFieldsReader(StoredFieldsReader reader) {
return new RedactedFieldReader(reader, fieldRedactionMetadataStore);
return new RedactedFieldReader(reader, fieldRedactionsMap);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.slack.astra.logstore.LogMessage;
import com.slack.astra.metadata.core.AstraMetadataStoreChangeListener;
import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadata;
import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadataStore;
import java.io.IOException;
import java.time.Instant;
import java.util.HashMap;
Expand All @@ -24,32 +22,10 @@ class RedactionStoredFieldVisitor extends StoredFieldVisitor {
private final String redactedValue = "REDACTED";

public RedactionStoredFieldVisitor(
final StoredFieldVisitor delegate, FieldRedactionMetadataStore fieldRedactionMetadataStore) {
final StoredFieldVisitor delegate,
HashMap<String, FieldRedactionMetadata> fieldRedactionsMap) {
super();
this.delegate = delegate;

Map<String, FieldRedactionMetadata> fieldRedactionsMap = new HashMap<>();
fieldRedactionMetadataStore
.listSync()
.forEach(
redaction -> {
fieldRedactionsMap.put(redaction.getName(), redaction);
});

// TODO - do we need the listener at all if we listsync at the field level anyway?
AstraMetadataStoreChangeListener<FieldRedactionMetadata> listener =
new AstraMetadataStoreChangeListener() {
@Override
public void onMetadataStoreChanged(Object model) {
fieldRedactionMetadataStore
.listSync()
.forEach(
redaction -> {
fieldRedactionsMap.put(redaction.getName(), redaction);
});
}
};
fieldRedactionMetadataStore.addListener(listener);
this.fieldRedactionsMap = fieldRedactionsMap;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.slack.astra.logstore.search.fieldRedaction;

import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadata;
import com.slack.astra.metadata.fieldredaction.FieldRedactionMetadataStore;
import java.util.HashMap;
import org.apache.lucene.index.FilterDirectoryReader;
import org.apache.lucene.index.LeafReader;

Expand All @@ -9,14 +11,22 @@
* reader, and creates a RedactionLeafReader.
*/
class RedactionSubReaderWrapper extends FilterDirectoryReader.SubReaderWrapper {
private final FieldRedactionMetadataStore fieldRedactionMetadataStore;
private final HashMap<String, FieldRedactionMetadata> fieldRedactionsMap;

public RedactionSubReaderWrapper(FieldRedactionMetadataStore fieldRedactionMetadataStore) {
this.fieldRedactionMetadataStore = fieldRedactionMetadataStore;
this.fieldRedactionsMap = new HashMap<>();
if (fieldRedactionMetadataStore != null) {
fieldRedactionMetadataStore
.listSync()
.forEach(
redaction -> {
fieldRedactionsMap.put(redaction.getName(), redaction);
});
}
}

@Override
public LeafReader wrap(LeafReader reader) {
return new RedactionLeafReader(reader, this.fieldRedactionMetadataStore);
return new RedactionLeafReader(reader, this.fieldRedactionsMap);
}
}

0 comments on commit efd67fe

Please sign in to comment.