Skip to content

Commit ed170cc

Browse files
author
Hendrik Muhs
authored
[Transform] Fix stats can return old state information if security is enabled (#51732) (#51738)
do index refresh of the internal transform index with the system user instead of using the calling user which does not have sufficient rights if security is enabled fixes #51728
1 parent 21224ca commit ed170cc

File tree

4 files changed

+23
-10
lines changed

4 files changed

+23
-10
lines changed

x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportStopTransformAction.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.elasticsearch.xpack.core.transform.transforms.TransformState;
4444
import org.elasticsearch.xpack.core.transform.transforms.TransformTaskParams;
4545
import org.elasticsearch.xpack.core.transform.transforms.TransformTaskState;
46-
import org.elasticsearch.xpack.core.transform.transforms.persistence.TransformInternalIndexConstants;
4746
import org.elasticsearch.xpack.transform.TransformServices;
4847
import org.elasticsearch.xpack.transform.persistence.TransformConfigManager;
4948
import org.elasticsearch.xpack.transform.transforms.TransformTask;
@@ -67,7 +66,6 @@ public class TransportStopTransformAction extends TransportTasksAction<Transform
6766
private final ThreadPool threadPool;
6867
private final TransformConfigManager transformConfigManager;
6968
private final PersistentTasksService persistentTasksService;
70-
private final Client client;
7169

7270
@Inject
7371
public TransportStopTransformAction(
@@ -105,7 +103,6 @@ protected TransportStopTransformAction(
105103
this.threadPool = threadPool;
106104
this.transformConfigManager = transformServices.getConfigManager();
107105
this.persistentTasksService = persistentTasksService;
108-
this.client = client;
109106
}
110107

111108
static void validateTaskState(ClusterState state, List<String> transformIds, boolean isForce) {
@@ -274,13 +271,10 @@ protected StopTransformAction.Response newResponse(
274271
private ActionListener<Response> waitForStopListener(Request request, ActionListener<Response> listener) {
275272

276273
ActionListener<Response> onStopListener = ActionListener.wrap(
277-
waitResponse -> client.admin()
278-
.indices()
279-
.prepareRefresh(TransformInternalIndexConstants.LATEST_INDEX_NAME)
280-
.execute(ActionListener.wrap(r -> listener.onResponse(waitResponse), e -> {
281-
logger.info("Failed to refresh internal index after delete", e);
282-
listener.onResponse(waitResponse);
283-
})),
274+
waitResponse -> transformConfigManager.refresh(ActionListener.wrap(r -> listener.onResponse(waitResponse), e -> {
275+
logger.warn("Could not refresh state, state information might be outdated", e);
276+
listener.onResponse(waitResponse);
277+
})),
284278
listener::onFailure
285279
);
286280
return ActionListener.wrap(

x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/persistence/IndexBasedTransformConfigManager.java

+13
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.elasticsearch.ResourceNotFoundException;
1515
import org.elasticsearch.action.ActionListener;
1616
import org.elasticsearch.action.DocWriteRequest;
17+
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
18+
import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
1719
import org.elasticsearch.action.bulk.BulkItemResponse;
1820
import org.elasticsearch.action.index.IndexAction;
1921
import org.elasticsearch.action.index.IndexRequest;
@@ -634,6 +636,17 @@ public void getTransformStoredDocs(Collection<String> transformIds, ActionListen
634636
);
635637
}
636638

639+
@Override
640+
public void refresh(ActionListener<Boolean> listener) {
641+
executeAsyncWithOrigin(
642+
client.threadPool().getThreadContext(),
643+
TRANSFORM_ORIGIN,
644+
new RefreshRequest(TransformInternalIndexConstants.LATEST_INDEX_NAME),
645+
ActionListener.<RefreshResponse>wrap(r -> listener.onResponse(true), listener::onFailure),
646+
client.admin().indices()::refresh
647+
);
648+
}
649+
637650
private void parseTransformLenientlyFromSource(
638651
BytesReference source,
639652
String transformId,

x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/persistence/TransformConfigManager.java

+1
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,5 @@ void putOrUpdateTransformStoredDoc(
149149

150150
void getTransformStoredDocs(Collection<String> transformIds, ActionListener<List<TransformStoredDoc>> listener);
151151

152+
void refresh(ActionListener<Boolean> listener);
152153
}

x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/persistence/InMemoryTransformConfigManager.java

+5
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,9 @@ public void getTransformStoredDocs(Collection<String> transformIds, ActionListen
214214
listener.onResponse(docs);
215215
}
216216

217+
@Override
218+
public void refresh(ActionListener<Boolean> listener) {
219+
listener.onResponse(true);
220+
}
221+
217222
}

0 commit comments

Comments
 (0)