Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.elasticsearch.action.ingest.IngestActionForwarder;
import org.elasticsearch.action.support.ActionFilters;
import org.elasticsearch.action.support.HandledTransportAction;
import org.elasticsearch.action.support.WriteRequest;
import org.elasticsearch.action.support.WriteResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.action.update.UpdateRequest;
Expand All @@ -44,6 +45,7 @@
import org.elasticsearch.cluster.metadata.IndexMetadata;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.metadata.Metadata;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.routing.IndexRouting;
import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.inject.Inject;
Expand Down Expand Up @@ -189,7 +191,17 @@ public static <Response extends ReplicationResponse & WriteResponse> ActionListe
}

@Override
protected void doExecute(Task task, BulkRequest bulkRequest, ActionListener<BulkResponse> listener) {
protected void doExecute(Task task, BulkRequest bulkRequest, ActionListener<BulkResponse> bulkResponseListener) {
final ActionListener<BulkResponse> listener = bulkResponseListener.delegateFailure((l, r) -> {
if (DiscoveryNode.isStateless(clusterService.getSettings())
&& bulkRequest.getRefreshPolicy() != WriteRequest.RefreshPolicy.NONE) {
// As a work-around to support `?refresh`, explicitly make a call to the Refresh API.
// TODO: Replace with a less hacky approach.
client.admin().indices().prepareRefresh().execute(l.map(ignored -> r));
} else {
l.onResponse(r);
}
});
/*
* This is called on the Transport tread so we can check the indexing
* memory pressure *quickly* but we don't want to keep the transport
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ public void setupAction() {
DiscoveryNode localNode = mock(DiscoveryNode.class);
when(localNode.isIngestNode()).thenAnswer(stub -> localIngest);
when(clusterService.localNode()).thenReturn(localNode);
when(clusterService.getSettings()).thenReturn(Settings.EMPTY);
remoteNode1 = mock(DiscoveryNode.class);
remoteNode2 = mock(DiscoveryNode.class);
nodes = mock(DiscoveryNodes.class);
Expand Down