Skip to content

Commit b5bb47b

Browse files
authored
[8.18] Avoid hoarding cluster state references during rollover (elastic#124107) (elastic#124266)
# Backport This will backport the following commits from `main` to `8.18`: - [Avoid hoarding cluster state references during rollover (elastic#124107)](elastic#124107) <!--- Backport version: 9.6.4 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport)
1 parent b95c59b commit b5bb47b

File tree

4 files changed

+19
-24
lines changed

4 files changed

+19
-24
lines changed

docs/changelog/124107.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 124107
2+
summary: Avoid hoarding cluster state references during rollover
3+
area: Indices APIs
4+
type: bug
5+
issues:
6+
- 123893

docs/changelog/124266.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 124266
2+
summary: "[8.18] Avoid hoarding cluster state references during rollover"
3+
area: Indices APIs
4+
type: bug
5+
issues: []

server/src/main/java/org/elasticsearch/action/admin/indices/rollover/LazyRolloverAction.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.elasticsearch.cluster.service.MasterServiceTaskQueue;
3333
import org.elasticsearch.common.Priority;
3434
import org.elasticsearch.common.Strings;
35-
import org.elasticsearch.common.collect.Iterators;
3635
import org.elasticsearch.features.NodeFeature;
3736
import org.elasticsearch.injection.guice.Inject;
3837
import org.elasticsearch.tasks.CancellableTask;
@@ -186,7 +185,7 @@ record LazyRolloverExecutor(
186185
@Override
187186
public ClusterState execute(BatchExecutionContext<LazyRolloverTask> batchExecutionContext) {
188187
final var listener = new AllocationActionMultiListener<RolloverResponse>(threadPool.getThreadContext());
189-
final var results = new ArrayList<MetadataRolloverService.RolloverResult>(batchExecutionContext.taskContexts().size());
188+
final var results = new ArrayList<String>(batchExecutionContext.taskContexts().size());
190189
var state = batchExecutionContext.initialState();
191190
Map<RolloverRequest, List<TaskContext<LazyRolloverTask>>> groupedRequests = new HashMap<>();
192191
for (final var taskContext : batchExecutionContext.taskContexts()) {
@@ -206,14 +205,7 @@ public ClusterState execute(BatchExecutionContext<LazyRolloverTask> batchExecuti
206205

207206
if (state != batchExecutionContext.initialState()) {
208207
var reason = new StringBuilder();
209-
Strings.collectionToDelimitedStringWithLimit(
210-
(Iterable<String>) () -> Iterators.map(results.iterator(), t -> t.sourceIndexName() + "->" + t.rolloverIndexName()),
211-
",",
212-
"lazy bulk rollover [",
213-
"]",
214-
1024,
215-
reason
216-
);
208+
Strings.collectionToDelimitedStringWithLimit(results, ",", "lazy bulk rollover [", "]", 1024, reason);
217209
try (var ignored = batchExecutionContext.dropHeadersContext()) {
218210
state = allocationService.reroute(state, reason.toString(), listener.reroute());
219211
}
@@ -226,7 +218,7 @@ public ClusterState execute(BatchExecutionContext<LazyRolloverTask> batchExecuti
226218
public ClusterState executeTask(
227219
ClusterState currentState,
228220
RolloverRequest rolloverRequest,
229-
List<MetadataRolloverService.RolloverResult> results,
221+
ArrayList<String> results,
230222
List<TaskContext<LazyRolloverTask>> rolloverTaskContexts,
231223
AllocationActionMultiListener<RolloverResponse> allocationActionMultiListener
232224
) throws Exception {
@@ -263,7 +255,7 @@ public ClusterState executeTask(
263255
null,
264256
isFailureStoreRollover
265257
);
266-
results.add(rolloverResult);
258+
results.add(rolloverResult.sourceIndexName() + "->" + rolloverResult.rolloverIndexName());
267259
logger.trace("lazy rollover result [{}]", rolloverResult);
268260

269261
final var rolloverIndexName = rolloverResult.rolloverIndexName();

server/src/main/java/org/elasticsearch/action/admin/indices/rollover/TransportRolloverAction.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.elasticsearch.cluster.service.MasterServiceTaskQueue;
4848
import org.elasticsearch.common.Priority;
4949
import org.elasticsearch.common.Strings;
50-
import org.elasticsearch.common.collect.Iterators;
5150
import org.elasticsearch.common.unit.ByteSizeValue;
5251
import org.elasticsearch.common.util.concurrent.EsExecutors;
5352
import org.elasticsearch.core.Nullable;
@@ -483,7 +482,7 @@ record RolloverExecutor(
483482
@Override
484483
public ClusterState execute(BatchExecutionContext<RolloverTask> batchExecutionContext) {
485484
final var listener = new AllocationActionMultiListener<RolloverResponse>(threadPool.getThreadContext());
486-
final var results = new ArrayList<MetadataRolloverService.RolloverResult>(batchExecutionContext.taskContexts().size());
485+
final var results = new ArrayList<String>(batchExecutionContext.taskContexts().size());
487486
var state = batchExecutionContext.initialState();
488487
for (final var taskContext : batchExecutionContext.taskContexts()) {
489488
try (var ignored = taskContext.captureResponseHeaders()) {
@@ -495,14 +494,7 @@ public ClusterState execute(BatchExecutionContext<RolloverTask> batchExecutionCo
495494

496495
if (state != batchExecutionContext.initialState()) {
497496
var reason = new StringBuilder();
498-
Strings.collectionToDelimitedStringWithLimit(
499-
(Iterable<String>) () -> Iterators.map(results.iterator(), t -> t.sourceIndexName() + "->" + t.rolloverIndexName()),
500-
",",
501-
"bulk rollover [",
502-
"]",
503-
1024,
504-
reason
505-
);
497+
Strings.collectionToDelimitedStringWithLimit(results, ",", "bulk rollover [", "]", 1024, reason);
506498
try (var ignored = batchExecutionContext.dropHeadersContext()) {
507499
state = allocationService.reroute(state, reason.toString(), listener.reroute());
508500
}
@@ -514,7 +506,7 @@ public ClusterState execute(BatchExecutionContext<RolloverTask> batchExecutionCo
514506

515507
public ClusterState executeTask(
516508
ClusterState currentState,
517-
List<MetadataRolloverService.RolloverResult> results,
509+
ArrayList<String> results,
518510
TaskContext<RolloverTask> rolloverTaskContext,
519511
AllocationActionMultiListener<RolloverResponse> allocationActionMultiListener
520512
) throws Exception {
@@ -586,7 +578,7 @@ public ClusterState executeTask(
586578
rolloverTask.autoShardingResult(),
587579
targetFailureStore
588580
);
589-
results.add(rolloverResult);
581+
results.add(rolloverResult.sourceIndexName() + "->" + rolloverResult.rolloverIndexName());
590582
logger.trace("rollover result [{}]", rolloverResult);
591583

592584
final var rolloverIndexName = rolloverResult.rolloverIndexName();

0 commit comments

Comments
 (0)