Skip to content

Commit d93350f

Browse files
authored
Improving random sampling performance very slightly (#137066)
1 parent 7ac4676 commit d93350f

File tree

8 files changed

+12
-31
lines changed

8 files changed

+12
-31
lines changed

server/src/main/java/org/elasticsearch/action/bulk/TransportAbstractBulkAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ private boolean applyPipelines(
312312
}
313313
});
314314
return true;
315-
} else if (haveRunIngestService == false && samplingService != null && samplingService.atLeastOneSampleConfigured()) {
315+
} else if (haveRunIngestService == false && samplingService != null && samplingService.atLeastOneSampleConfigured(project)) {
316316
/*
317317
* Else ample only if this request has not passed through IngestService::executeBulkRequest. Otherwise, some request within the
318318
* bulk had pipelines and we sampled in IngestService already.

server/src/main/java/org/elasticsearch/ingest/IngestService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1385,7 +1385,7 @@ private void attemptToSampleData(
13851385
IngestDocument ingestDocument,
13861386
Metadata originalDocumentMetadata
13871387
) {
1388-
if (samplingService != null && samplingService.atLeastOneSampleConfigured()) {
1388+
if (samplingService != null && samplingService.atLeastOneSampleConfigured(projectMetadata)) {
13891389
/*
13901390
* We need both the original document and the fully updated document for sampling, so we make a copy of the original
13911391
* before overwriting it here. We can discard it after sampling.

server/src/main/java/org/elasticsearch/ingest/SamplingService.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.elasticsearch.cluster.metadata.Metadata;
2929
import org.elasticsearch.cluster.metadata.ProjectId;
3030
import org.elasticsearch.cluster.metadata.ProjectMetadata;
31-
import org.elasticsearch.cluster.project.ProjectResolver;
3231
import org.elasticsearch.cluster.service.ClusterService;
3332
import org.elasticsearch.cluster.service.MasterServiceTaskQueue;
3433
import org.elasticsearch.common.Priority;
@@ -95,7 +94,6 @@ public class SamplingService extends AbstractLifecycleComponent implements Clust
9594
private static final String TTL_JOB_ID = "sampling_ttl";
9695
private final ScriptService scriptService;
9796
private final ClusterService clusterService;
98-
private final ProjectResolver projectResolver;
9997
private final LongSupplier statsTimeSupplier = System::nanoTime;
10098
private final MasterServiceTaskQueue<UpdateSamplingConfigurationTask> updateSamplingConfigurationTaskQueue;
10199
private final MasterServiceTaskQueue<DeleteSampleConfigurationTask> deleteSamplingConfigurationTaskQueue;
@@ -122,26 +120,15 @@ public class SamplingService extends AbstractLifecycleComponent implements Clust
122120
/*
123121
* This creates a new SamplingService, and configures various listeners on it.
124122
*/
125-
public static SamplingService create(
126-
ScriptService scriptService,
127-
ClusterService clusterService,
128-
ProjectResolver projectResolver,
129-
Settings settings
130-
) {
131-
SamplingService samplingService = new SamplingService(scriptService, clusterService, projectResolver, settings);
123+
public static SamplingService create(ScriptService scriptService, ClusterService clusterService, Settings settings) {
124+
SamplingService samplingService = new SamplingService(scriptService, clusterService, settings);
132125
samplingService.configureListeners();
133126
return samplingService;
134127
}
135128

136-
private SamplingService(
137-
ScriptService scriptService,
138-
ClusterService clusterService,
139-
ProjectResolver projectResolver,
140-
Settings settings
141-
) {
129+
private SamplingService(ScriptService scriptService, ClusterService clusterService, Settings settings) {
142130
this.scriptService = scriptService;
143131
this.clusterService = clusterService;
144-
this.projectResolver = projectResolver;
145132
this.updateSamplingConfigurationTaskQueue = clusterService.createTaskQueue(
146133
"update-sampling-configuration",
147134
Priority.NORMAL,
@@ -340,12 +327,9 @@ public SampleStats getLocalSampleStats(ProjectId projectId, String index) {
340327
return sampleInfo == null ? new SampleStats() : sampleInfo.stats;
341328
}
342329

343-
public boolean atLeastOneSampleConfigured() {
330+
public boolean atLeastOneSampleConfigured(ProjectMetadata projectMetadata) {
344331
if (RANDOM_SAMPLING_FEATURE_FLAG) {
345-
SamplingMetadata samplingMetadata = clusterService.state()
346-
.projectState(projectResolver.getProjectId())
347-
.metadata()
348-
.custom(SamplingMetadata.TYPE);
332+
SamplingMetadata samplingMetadata = projectMetadata.custom(SamplingMetadata.TYPE);
349333
return samplingMetadata != null && samplingMetadata.getIndexToSamplingConfigMap().isEmpty() == false;
350334
} else {
351335
return false;

server/src/main/java/org/elasticsearch/node/NodeConstruction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ private void construct(
728728

729729
FeatureService featureService = new FeatureService(pluginsService.loadServiceProviders(FeatureSpecification.class));
730730

731-
SamplingService samplingService = SamplingService.create(scriptService, clusterService, projectResolver, settings);
731+
SamplingService samplingService = SamplingService.create(scriptService, clusterService, settings);
732732
modules.bindToInstance(SamplingService.class, samplingService);
733733
clusterService.addListener(samplingService);
734734

server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionIngestTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public boolean clusterHasFeature(ClusterState state, NodeFeature feature) {
180180

181181
private static SamplingService initializeSamplingService() {
182182
SamplingService samplingService = mock(SamplingService.class);
183-
when(samplingService.atLeastOneSampleConfigured()).thenReturn(true);
183+
when(samplingService.atLeastOneSampleConfigured(any())).thenReturn(true);
184184
return samplingService;
185185
}
186186

server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public boolean clusterHasFeature(ClusterState state, NodeFeature feature) {
163163

164164
private static SamplingService initializeSamplingService() {
165165
SamplingService samplingService = mock(SamplingService.class);
166-
when(samplingService.atLeastOneSampleConfigured()).thenReturn(true);
166+
when(samplingService.atLeastOneSampleConfigured(any())).thenReturn(true);
167167
return samplingService;
168168
}
169169

server/src/test/java/org/elasticsearch/ingest/IngestServiceTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3357,7 +3357,7 @@ public void testSampling() {
33573357
Predicates.never(),
33583358
samplingService
33593359
);
3360-
when(samplingService.atLeastOneSampleConfigured()).thenReturn(true);
3360+
when(samplingService.atLeastOneSampleConfigured(any())).thenReturn(true);
33613361
PutPipelineRequest putRequest = putJsonPipelineRequest("_id", "{\"processors\": [{\"mock\" : {}}]}");
33623362
var projectId = randomProjectIdOrDefault();
33633363
ClusterState clusterState = ClusterState.builder(ClusterName.DEFAULT)

server/src/test/java/org/elasticsearch/ingest/SamplingServiceTests.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.elasticsearch.cluster.ClusterState;
1717
import org.elasticsearch.cluster.metadata.ProjectId;
1818
import org.elasticsearch.cluster.metadata.ProjectMetadata;
19-
import org.elasticsearch.cluster.project.ProjectResolver;
2019
import org.elasticsearch.cluster.project.TestProjectResolvers;
2120
import org.elasticsearch.cluster.service.ClusterService;
2221
import org.elasticsearch.common.settings.Settings;
@@ -352,8 +351,6 @@ private SamplingService getTestSamplingService() {
352351
TestProjectResolvers.singleProject(randomProjectIdOrDefault())
353352
);
354353
ClusterService clusterService = ClusterServiceUtils.createClusterService(new DeterministicTaskQueue().getThreadPool());
355-
final ProjectId projectId = ProjectId.DEFAULT;
356-
final ProjectResolver projectResolver = TestProjectResolvers.singleProject(projectId);
357-
return SamplingService.create(scriptService, clusterService, projectResolver, Settings.EMPTY);
354+
return SamplingService.create(scriptService, clusterService, Settings.EMPTY);
358355
}
359356
}

0 commit comments

Comments
 (0)