Skip to content

Commit 28d62cd

Browse files
committed
Add x-opaque-id to search slow logs (#31539)
Add x-opaque-id to search slow logs only. Indexing slow log and audit logs will be handled as separate PRs. Relates #31521
1 parent 3814b85 commit 28d62cd

File tree

7 files changed

+26
-6
lines changed

7 files changed

+26
-6
lines changed

modules/transport-netty4/src/test/java/org/elasticsearch/http/netty4/Netty4HttpClient.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.elasticsearch.common.collect.Tuple;
4545
import org.elasticsearch.common.unit.ByteSizeUnit;
4646
import org.elasticsearch.common.unit.ByteSizeValue;
47+
import org.elasticsearch.tasks.Task;
4748

4849
import java.io.Closeable;
4950
import java.net.SocketAddress;
@@ -74,7 +75,7 @@ static Collection<String> returnHttpResponseBodies(Collection<FullHttpResponse>
7475
static Collection<String> returnOpaqueIds(Collection<FullHttpResponse> responses) {
7576
List<String> list = new ArrayList<>(responses.size());
7677
for (HttpResponse response : responses) {
77-
list.add(response.headers().get("X-Opaque-Id"));
78+
list.add(response.headers().get(Task.X_OPAQUE_ID));
7879
}
7980
return list;
8081
}

server/src/main/java/org/elasticsearch/action/ActionModule.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316
import org.elasticsearch.rest.action.search.RestMultiSearchAction;
317317
import org.elasticsearch.rest.action.search.RestSearchAction;
318318
import org.elasticsearch.rest.action.search.RestSearchScrollAction;
319+
import org.elasticsearch.tasks.Task;
319320
import org.elasticsearch.threadpool.ThreadPool;
320321
import org.elasticsearch.usage.UsageService;
321322

@@ -369,7 +370,7 @@ public ActionModule(boolean transportClient, Settings settings, IndexNameExpress
369370
destructiveOperations = new DestructiveOperations(settings, clusterSettings);
370371
Set<String> headers = Stream.concat(
371372
actionPlugins.stream().flatMap(p -> p.getRestHeaders().stream()),
372-
Stream.of("X-Opaque-Id")
373+
Stream.of(Task.X_OPAQUE_ID)
373374
).collect(Collectors.toSet());
374375
UnaryOperator<RestHandler> restWrapper = null;
375376
for (ActionPlugin plugin : actionPlugins) {

server/src/main/java/org/elasticsearch/index/SearchSlowLog.java

+6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.elasticsearch.common.xcontent.ToXContent;
2929
import org.elasticsearch.index.shard.SearchOperationListener;
3030
import org.elasticsearch.search.internal.SearchContext;
31+
import org.elasticsearch.tasks.Task;
3132

3233
import java.util.Collections;
3334
import java.util.concurrent.TimeUnit;
@@ -174,6 +175,11 @@ public String toString() {
174175
} else {
175176
sb.append("source[], ");
176177
}
178+
if (context.getTask().getHeader(Task.X_OPAQUE_ID) != null) {
179+
sb.append("id[").append(context.getTask().getHeader(Task.X_OPAQUE_ID)).append("], ");
180+
} else {
181+
sb.append("id[], ");
182+
}
177183
return sb.toString();
178184
}
179185
}

server/src/main/java/org/elasticsearch/node/Node.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
import org.elasticsearch.search.fetch.FetchPhase;
139139
import org.elasticsearch.snapshots.SnapshotShardsService;
140140
import org.elasticsearch.snapshots.SnapshotsService;
141+
import org.elasticsearch.tasks.Task;
141142
import org.elasticsearch.tasks.TaskResultsService;
142143
import org.elasticsearch.threadpool.ExecutorBuilder;
143144
import org.elasticsearch.threadpool.ThreadPool;
@@ -449,7 +450,7 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
449450
final Transport transport = networkModule.getTransportSupplier().get();
450451
Set<String> taskHeaders = Stream.concat(
451452
pluginsService.filterPlugins(ActionPlugin.class).stream().flatMap(p -> p.getTaskHeaders().stream()),
452-
Stream.of("X-Opaque-Id")
453+
Stream.of(Task.X_OPAQUE_ID)
453454
).collect(Collectors.toSet());
454455
final TransportService transportService = newTransportService(settings, transport, threadPool,
455456
networkModule.getTransportInterceptor(), localNodeFactory, settingsModule.getClusterSettings(), taskHeaders);

server/src/main/java/org/elasticsearch/tasks/Task.java

+5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
*/
3535
public class Task {
3636

37+
/**
38+
* The request header to mark tasks with specific ids
39+
*/
40+
public static final String X_OPAQUE_ID = "X-Opaque-Id";
41+
3742
private final long id;
3843

3944
private final String type;

server/src/test/java/org/elasticsearch/action/admin/cluster/node/tasks/TasksIT.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ public void testSearchTaskDescriptions() {
357357
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
358358

359359
Map<String, String> headers = new HashMap<>();
360-
headers.put("X-Opaque-Id", "my_id");
360+
headers.put(Task.X_OPAQUE_ID, "my_id");
361361
headers.put("Foo-Header", "bar");
362362
headers.put("Custom-Task-Header", "my_value");
363363
assertSearchResponse(
@@ -404,7 +404,7 @@ public void testSearchTaskHeaderLimit() {
404404
int maxSize = Math.toIntExact(SETTING_HTTP_MAX_HEADER_SIZE.getDefault(Settings.EMPTY).getBytes() / 2 + 1);
405405

406406
Map<String, String> headers = new HashMap<>();
407-
headers.put("X-Opaque-Id", "my_id");
407+
headers.put(Task.X_OPAQUE_ID, "my_id");
408408
headers.put("Custom-Task-Header", randomAlphaOfLengthBetween(maxSize, maxSize + 100));
409409
IllegalArgumentException ex = expectThrows(
410410
IllegalArgumentException.class,
@@ -415,7 +415,7 @@ public void testSearchTaskHeaderLimit() {
415415

416416
private void assertTaskHeaders(TaskInfo taskInfo) {
417417
assertThat(taskInfo.getHeaders().keySet(), hasSize(2));
418-
assertEquals("my_id", taskInfo.getHeaders().get("X-Opaque-Id"));
418+
assertEquals("my_id", taskInfo.getHeaders().get(Task.X_OPAQUE_ID));
419419
assertEquals("my_value", taskInfo.getHeaders().get("Custom-Task-Header"));
420420
}
421421

server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.elasticsearch.index;
2121

2222
import org.elasticsearch.Version;
23+
import org.elasticsearch.action.search.SearchTask;
2324
import org.elasticsearch.action.search.SearchType;
2425
import org.elasticsearch.cluster.metadata.IndexMetaData;
2526
import org.elasticsearch.common.bytes.BytesReference;
@@ -34,12 +35,15 @@
3435
import org.elasticsearch.search.internal.AliasFilter;
3536
import org.elasticsearch.search.internal.SearchContext;
3637
import org.elasticsearch.search.internal.ShardSearchRequest;
38+
import org.elasticsearch.tasks.Task;
3739
import org.elasticsearch.test.ESSingleNodeTestCase;
3840
import org.elasticsearch.test.TestSearchContext;
3941
import org.elasticsearch.threadpool.ThreadPool;
4042

4143
import java.io.IOException;
44+
import java.util.Collections;
4245

46+
import static org.hamcrest.Matchers.endsWith;
4347
import static org.hamcrest.Matchers.hasToString;
4448
import static org.hamcrest.Matchers.instanceOf;
4549
import static org.hamcrest.Matchers.not;
@@ -166,10 +170,12 @@ public void testSlowLogSearchContextPrinterToLog() throws IOException {
166170
SearchContext searchContext = createSearchContext(index);
167171
SearchSourceBuilder source = SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery());
168172
searchContext.request().source(source);
173+
searchContext.setTask(new SearchTask(0, "n/a", "n/a", "test", null, Collections.singletonMap(Task.X_OPAQUE_ID, "my_id")));
169174
SearchSlowLog.SlowLogSearchContextPrinter p = new SearchSlowLog.SlowLogSearchContextPrinter(searchContext, 10);
170175
assertThat(p.toString(), startsWith("[foo][0]"));
171176
// Makes sure that output doesn't contain any new lines
172177
assertThat(p.toString(), not(containsString("\n")));
178+
assertThat(p.toString(), endsWith("id[my_id], "));
173179
}
174180

175181
public void testLevelSetting() {

0 commit comments

Comments
 (0)