Fix bug in point in time response (#131391)

Correct response which had swapped "skipped" and "failed" shard counts.
This commit is contained in:
Ben Chaplin 2025-07-17 10:48:19 -04:00 committed by GitHub
parent df2fc49a1a
commit f739673b48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 1 deletions

View File

@ -0,0 +1,6 @@
pr: 131391
summary: Fix bug in point in time response
area: Search
type: bug
issues:
- 131026

View File

@ -59,7 +59,7 @@ public final class OpenPointInTimeResponse extends ActionResponse implements ToX
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.field("id", Base64.getUrlEncoder().encodeToString(BytesReference.toBytes(pointInTimeId)));
buildBroadcastShardsHeader(builder, params, totalShards, successfulShards, failedShards, skippedShards, null);
buildBroadcastShardsHeader(builder, params, totalShards, successfulShards, skippedShards, failedShards, null);
builder.endObject();
return builder;
}

View File

@ -0,0 +1,57 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/
package org.elasticsearch.action.search;
import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xcontent.ToXContent;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentType;
import java.io.IOException;
import java.util.Base64;
import java.util.Locale;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertToXContentEquivalent;
public class OpenPointInTimeResponseTests extends ESTestCase {
public void testIdCantBeNull() {
BytesReference pointInTimeId = null;
expectThrows(NullPointerException.class, () -> { new OpenPointInTimeResponse(pointInTimeId, 11, 8, 2, 1); });
}
public void testToXContent() throws IOException {
String id = "test-id";
BytesReference pointInTimeId = new BytesArray(id);
BytesReference actual;
try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) {
OpenPointInTimeResponse response = new OpenPointInTimeResponse(pointInTimeId, 11, 8, 2, 1);
response.toXContent(builder, ToXContent.EMPTY_PARAMS);
actual = BytesReference.bytes(builder);
}
String encodedId = Base64.getUrlEncoder().encodeToString(BytesReference.toBytes(pointInTimeId));
BytesReference expected = new BytesArray(String.format(Locale.ROOT, """
{
"id": "%s",
"_shards": {
"total": 11,
"successful": 8,
"failed": 2,
"skipped": 1
}
}
""", encodedId));
assertToXContentEquivalent(expected, actual, XContentType.JSON);
}
}