diff --git a/docs/changelog/90626.yaml b/docs/changelog/90626.yaml new file mode 100644 index 0000000000000..b62bdbf4c3b9d --- /dev/null +++ b/docs/changelog/90626.yaml @@ -0,0 +1,6 @@ +pr: 90626 +summary: Avoid capturing per-task `RolloverResult` +area: Indices APIs +type: bug +issues: + - 90620 diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/TransportRolloverAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/TransportRolloverAction.java index c5d6ce67f24d1..42641f5c57422 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/TransportRolloverAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/TransportRolloverAction.java @@ -296,12 +296,11 @@ public ClusterState executeTask( rolloverRequest.getNewIndexName(), rolloverRequest.getCreateIndexRequest() ); - final String sourceIndexName = rolloverNames.sourceName(); // Re-evaluate the conditions, now with our final source index name final Map postConditionResults = evaluateConditions( rolloverRequest.getConditions().values(), - buildStats(currentState.metadata().index(sourceIndexName), rolloverTask.statsResponse()) + buildStats(currentState.metadata().index(rolloverNames.sourceName()), rolloverTask.statsResponse()) ); if (rolloverRequest.areConditionsMet(postConditionResults)) { @@ -325,11 +324,14 @@ public ClusterState executeTask( results.add(rolloverResult); logger.trace("rollover result [{}]", rolloverResult); + final var rolloverIndexName = rolloverResult.rolloverIndexName(); + final var sourceIndexName = rolloverResult.sourceIndexName(); + rolloverTaskContext.success(() -> { // Now assuming we have a new state and the name of the rolled over index, we need to wait for the configured number of // active shards, as well as return the names of the indices that were rolled/created activeShardsObserver.waitForActiveShards( - new String[] { rolloverResult.rolloverIndexName() }, + new String[] { rolloverIndexName }, rolloverRequest.getCreateIndexRequest().waitForActiveShards(), rolloverRequest.masterNodeTimeout(), isShardsAcknowledged -> rolloverTask.listener() @@ -338,8 +340,8 @@ public ClusterState executeTask( // Note that we use the actual rollover result for these, because even though we're single threaded, // it's possible for the rollover names generated before the actual rollover to be different due to // things like date resolution - rolloverResult.sourceIndexName(), - rolloverResult.rolloverIndexName(), + sourceIndexName, + rolloverIndexName, postConditionResults, false, true,