Skip to content
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 @@ -92,7 +92,8 @@ public void setup() {
System.nanoTime(),
false,
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.get(Settings.EMPTY)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.get(Settings.EMPTY),
null
);

var fields = 10_000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,8 @@ private static Configuration configuration() {
0,
false,
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
null
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public class ConfigurationBuilder {
private Map<String, Map<String, Column>> tables;
private long queryStartTimeNanos;

private String projectRouting;

public ConfigurationBuilder(Configuration configuration) {
clusterName = configuration.clusterName();
username = configuration.username();
Expand All @@ -58,6 +60,7 @@ public ConfigurationBuilder(Configuration configuration) {
allowPartialResults = configuration.allowPartialResults();
tables = configuration.tables();
queryStartTimeNanos = configuration.queryStartTimeNanos();
projectRouting = configuration.projectRouting();
}

public ConfigurationBuilder clusterName(String clusterName) {
Expand Down Expand Up @@ -130,6 +133,11 @@ public ConfigurationBuilder queryStartTimeNanos(long queryStartTimeNanos) {
return this;
}

public ConfigurationBuilder projectRouting(String projectRouting) {
this.projectRouting = projectRouting;
return this;
}

public Configuration build() {
return new Configuration(
zoneId,
Expand All @@ -145,7 +153,8 @@ public Configuration build() {
queryStartTimeNanos,
allowPartialResults,
resultTruncationMaxSizeTimeseries,
resultTruncationDefaultSizeTimeseries
resultTruncationDefaultSizeTimeseries,
projectRouting
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public static Configuration randomConfiguration(String query, Map<String, Map<St
System.nanoTime(),
false,
tsTruncation,
defaultTsTruncation
defaultTsTruncation,
null
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,8 @@ public static Configuration configuration(QueryPragmas pragmas, String query, Es
System.nanoTime(),
false,
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
null
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public class EsqlQueryRequest extends org.elasticsearch.xpack.core.esql.action.E
private boolean onSnapshotBuild = Build.current().isSnapshot();
private boolean acceptedPragmaRisks = false;
private Boolean allowPartialResults = null;
private String projectRouting;

/**
* "Tables" provided in the request for use with things like {@code LOOKUP}.
Expand Down Expand Up @@ -317,4 +318,12 @@ void onSnapshotBuild(boolean onSnapshotBuild) {
void acceptedPragmaRisks(boolean accepted) {
this.acceptedPragmaRisks = accepted;
}

public void projectRouting(String projectRouting) {
this.projectRouting = projectRouting;
}

public String projectRouting() {
return projectRouting;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ String fields() {
static final ParseField WAIT_FOR_COMPLETION_TIMEOUT = new ParseField("wait_for_completion_timeout");
static final ParseField KEEP_ALIVE = new ParseField("keep_alive");
static final ParseField KEEP_ON_COMPLETION = new ParseField("keep_on_completion");
static final ParseField PROJECT_ROUTING = new ParseField("project_routing");

private static final ObjectParser<EsqlQueryRequest, Void> SYNC_PARSER = objectParserSync(() -> syncEsqlQueryRequest(null));
private static final ObjectParser<EsqlQueryRequest, Void> ASYNC_PARSER = objectParserAsync(() -> asyncEsqlQueryRequest(null));
Expand Down Expand Up @@ -121,6 +122,7 @@ private static void objectParserCommon(ObjectParser<EsqlQueryRequest, ?> parser)
parser.declareString((request, localeTag) -> request.locale(Locale.forLanguageTag(localeTag)), LOCALE_FIELD);
parser.declareBoolean(EsqlQueryRequest::profile, PROFILE_FIELD);
parser.declareField((p, r, c) -> new ParseTables(r, p).parseTables(), TABLES_FIELD, ObjectParser.ValueType.OBJECT);
parser.declareString(EsqlQueryRequest::projectRouting, PROJECT_ROUTING);
}

private static ObjectParser<EsqlQueryRequest, Void> objectParserSync(Supplier<EsqlQueryRequest> supplier) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ public interface ConfigurationAware {
0,
false,
0,
0
0,
null
);

Configuration configuration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public class Configuration implements Writeable {

private final Map<String, Map<String, Column>> tables;
private final long queryStartTimeNanos;
private final String projectRouting;

public Configuration(
ZoneId zi,
Expand All @@ -75,7 +76,8 @@ public Configuration(
long queryStartTimeNanos,
boolean allowPartialResults,
int resultTruncationMaxSizeTimeseries,
int resultTruncationDefaultSizeTimeseries
int resultTruncationDefaultSizeTimeseries,
String projectRouting
) {
this.zoneId = zi.normalized();
this.now = ZonedDateTime.now(Clock.tick(Clock.system(zoneId), Duration.ofNanos(1)));
Expand All @@ -93,6 +95,7 @@ public Configuration(
assert tables != null;
this.queryStartTimeNanos = queryStartTimeNanos;
this.allowPartialResults = allowPartialResults;
this.projectRouting = projectRouting;
}

public Configuration(BlockStreamInput in) throws IOException {
Expand Down Expand Up @@ -120,6 +123,9 @@ public Configuration(BlockStreamInput in) throws IOException {
this.resultTruncationMaxSizeTimeseries = this.resultTruncationMaxSizeRegular;
this.resultTruncationDefaultSizeTimeseries = this.resultTruncationDefaultSizeRegular;
}

// not needed on the data nodes for now
this.projectRouting = null;
}

@Override
Expand Down Expand Up @@ -233,7 +239,8 @@ public Configuration withoutTables() {
queryStartTimeNanos,
allowPartialResults,
resultTruncationMaxSizeTimeseries,
resultTruncationDefaultSizeTimeseries
resultTruncationDefaultSizeTimeseries,
projectRouting
);
}

Expand All @@ -252,6 +259,10 @@ public boolean allowPartialResults() {
return allowPartialResults;
}

public String projectRouting() {
return projectRouting;
}

private static void writeQuery(StreamOutput out, String query) throws IOException {
if (query.length() > QUERY_COMPRESS_THRESHOLD_CHARS) { // compare on chars to avoid UTF-8 encoding unless actually required
out.writeBoolean(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ public void execute(EsqlQueryRequest request, EsqlExecutionInfo executionInfo, P
System.nanoTime(),
request.allowPartialResults(),
clusterSettings.timeseriesResultTruncationMaxSize(),
clusterSettings.timeseriesResultTruncationDefaultSize()
clusterSettings.timeseriesResultTruncationDefaultSize(),
projectRouting(request, statement)
);
FoldContext foldContext = configuration.newFoldContext();

Expand Down Expand Up @@ -258,6 +259,18 @@ public void onResponse(Versioned<LogicalPlan> analyzedPlan) {
);
}

private String projectRouting(EsqlQueryRequest request, EsqlStatement statement) {
String projectRouting = statement.setting(QuerySettings.PROJECT_ROUTING);
if (projectRouting == null) {
projectRouting = request.projectRouting();
}

if (projectRouting != null && crossProjectModeDecider.crossProjectEnabled() == false) {
throw new VerificationException("[project_routing] is only allowed when cross-project search is enabled");
}
return projectRouting;
}

/**
* Execute an analyzed plan. Most code should prefer calling {@link #execute} but
* this is public for testing.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;

public class EsqlQueryRequestTests extends ESTestCase {

Expand Down Expand Up @@ -877,6 +878,16 @@ public void testTask() throws IOException {
assertThat(json, equalTo(expected));
}

public void testProjectRouting() throws IOException {
String json = """
{
"query": "FROM test",
"project_routing": "_alias:_origin"
}""";
EsqlQueryRequest request = parseEsqlQueryRequest(json, randomBoolean());
assertThat(request.projectRouting(), is("_alias:_origin"));
}

private List<QueryParam> randomParameters() {
if (randomBoolean()) {
return Collections.emptyList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ private Configuration configWithZoneAndLocale(ZoneId zone, Locale locale) {
System.nanoTime(),
randomBoolean(),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
null
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ private Configuration configWithZoneAndLocale(ZoneId zone, Locale locale) {
System.nanoTime(),
randomBoolean(),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
null
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ public class EvalMapperTests extends ESTestCase {
System.nanoTime(),
false,
10000000,
100000
100000,
null
);

@ParametersFactory(argumentFormatting = "%1$s")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,8 @@ private Configuration config() {
System.nanoTime(),
randomBoolean(),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(null),
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(null)
AnalyzerSettings.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(null),
null
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ protected Configuration mutateInstance(Configuration in) {
System.nanoTime(),
randomBoolean(),
in.resultTruncationMaxSize(true),
in.resultTruncationDefaultSize(true)
in.resultTruncationDefaultSize(true),
null
);
}
}