Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caching index settings #100

Merged
merged 3 commits into from
Mar 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
import org.opensearch.cluster.node.DiscoveryNodes;
import org.opensearch.cluster.service.ClusterService;
import org.opensearch.common.settings.*;
import org.opensearch.common.settings.ClusterSettings;
import org.opensearch.common.settings.IndexScopedSettings;
import org.opensearch.common.settings.Setting;
import org.opensearch.common.settings.Settings;
import org.opensearch.common.settings.SettingsFilter;
import org.opensearch.core.common.io.stream.NamedWriteableRegistry;
import org.opensearch.core.xcontent.NamedXContentRegistry;
import org.opensearch.env.Environment;
Expand All @@ -38,7 +42,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

Expand All @@ -53,6 +59,8 @@ public class UserBehaviorInsightsPlugin extends Plugin implements ActionPlugin {

private ActionFilter userBehaviorLoggingFilter;

public static final Map<String, String> storeSettings = new HashMap<>();

@Override
public Collection<RestHeaderDefinition> getRestHeaders() {
return List.of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,19 @@
import org.opensearch.search.SearchHit;
import org.opensearch.tasks.Task;
import org.opensearch.threadpool.ThreadPool;
import org.opensearch.ubi.UserBehaviorInsightsPlugin;
import org.opensearch.ubi.model.HeaderConstants;
import org.opensearch.ubi.model.QueryRequest;
import org.opensearch.ubi.model.QueryResponse;
import org.opensearch.ubi.model.SettingsConstants;
import org.opensearch.ubi.utils.UbiUtils;

import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
* An implementation of {@link ActionFilter} that passively listens for OpenSearch
Expand Down Expand Up @@ -91,13 +97,8 @@ public void onResponse(Response response) {
// If there is no event store header, ignore this search.
if(!"".equals(eventStore)) {

// Get the id_field to use for each result's unique identifier.
final String queriesIndexName = UbiUtils.getQueriesIndexName(eventStore);
final GetSettingsRequest getSettingsRequest = new GetSettingsRequest().indices(queriesIndexName);

final GetSettingsResponse getSettingsResponse = client.admin().indices().getSettings(getSettingsRequest).actionGet();
final String idField = getSettingsResponse.getSetting(queriesIndexName, SettingsConstants.ID_FIELD);
final String index = getSettingsResponse.getSetting(queriesIndexName, SettingsConstants.INDEX);
final String index = getStoreSettings(eventStore, SettingsConstants.INDEX);
final String idField = getStoreSettings(eventStore, SettingsConstants.ID_FIELD);

LOGGER.info("Using id_field [{}] of index [{}] for UBI query.", idField, index);

Expand Down Expand Up @@ -178,6 +179,36 @@ public void onFailure(Exception ex) {

}

private String getStoreSettings(final String storeName, final String setting) {

final String key = storeName + "." + setting;
final String value;

if(UserBehaviorInsightsPlugin.storeSettings.containsKey(key)) {

LOGGER.debug("Getting setting " + setting + " for store " + storeName + " from the cache.");
value = UserBehaviorInsightsPlugin.storeSettings.get(key);

} else{

LOGGER.debug("Getting setting " + setting + " for store " + storeName + " from the index.");

// Get the id_field to use for each result's unique identifier.
final String queriesIndexName = UbiUtils.getQueriesIndexName(storeName);
final GetSettingsRequest getSettingsRequest = new GetSettingsRequest().indices(queriesIndexName);

final GetSettingsResponse getSettingsResponse = client.admin().indices().getSettings(getSettingsRequest).actionGet();
final String settingResponse = getSettingsResponse.getSetting(queriesIndexName, setting);

UserBehaviorInsightsPlugin.storeSettings.put(key, settingResponse);
value = settingResponse;

}

return value;

}

private String getHeaderValue(final HeaderConstants header, final String defaultValue, final Task task) {

final String value = task.getHeader(header.getHeader());
Expand All @@ -196,7 +227,7 @@ private String getHeaderValue(final HeaderConstants header, final String default
* @param queryRequest The {@link QueryRequest} that initiated the query.
* @param queryResponse The {@link QueryResponse} that resulted from the query.
*/
public void persistQuery(final String storeName, final QueryRequest queryRequest, QueryResponse queryResponse) {
private void persistQuery(final String storeName, final QueryRequest queryRequest, QueryResponse queryResponse) {

LOGGER.info("Writing query ID {} with response ID {}",
queryRequest.getQueryId(), queryResponse.getQueryResponseId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,26 @@
import org.opensearch.rest.BaseRestHandler;
import org.opensearch.rest.BytesRestResponse;
import org.opensearch.rest.RestRequest;
import org.opensearch.ubi.UserBehaviorInsightsPlugin;
import org.opensearch.ubi.events.Event;
import org.opensearch.ubi.events.OpenSearchEventManager;
import org.opensearch.ubi.model.HeaderConstants;
import org.opensearch.ubi.model.SettingsConstants;
import org.opensearch.ubi.utils.UbiUtils;

import java.io.IOException;
import java.util.*;

import static org.opensearch.rest.RestRequest.Method.*;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;

import static org.opensearch.rest.RestRequest.Method.DELETE;
import static org.opensearch.rest.RestRequest.Method.GET;
import static org.opensearch.rest.RestRequest.Method.POST;
import static org.opensearch.rest.RestRequest.Method.PUT;
import static org.opensearch.rest.RestRequest.Method.TRACE;

/**
* The REST handler for User Behavior Insights. The handler provides the
Expand Down Expand Up @@ -220,6 +230,9 @@ private RestChannelConsumer delete(final NodeClient nodeClient, final String sto
builder.startObject().field("status", "deleted");
builder.endObject();

// Remove this store's settings from the settings map.
UserBehaviorInsightsPlugin.storeSettings.entrySet().removeIf(entry -> entry.getKey().startsWith(storeName + "."));

return (channel) -> channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder));

}
Expand Down
Loading