Skip to content

Commit f11e08a

Browse files
Remove SEARCH_PIPELINE feature flag (#8738)
Signed-off-by: Louis Chu <clingzhi@amazon.com> (cherry picked from commit 1164221) Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 9762871 commit f11e08a

File tree

17 files changed

+22
-105
lines changed

17 files changed

+22
-105
lines changed

client/rest-high-level/build.gradle

-2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,4 @@ testClusters.all {
106106
extraConfigFile nodeTrustStore.name, nodeTrustStore
107107
extraConfigFile pkiTrustCert.name, pkiTrustCert
108108

109-
// Enable APIs behind feature flags
110-
setting 'opensearch.experimental.feature.search_pipeline.enabled', 'true'
111109
}

distribution/src/config/opensearch.yml

-6
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,6 @@ ${path.logs}
128128
#opensearch.experimental.feature.extensions.enabled: false
129129
#
130130
#
131-
# Gates the search pipeline feature. This feature enables configurable processors
132-
# for search requests and search responses, similar to ingest pipelines.
133-
#
134-
#opensearch.experimental.feature.search_pipeline.enabled: false
135-
#
136-
#
137131
# Gates the concurrent segment search feature. This feature enables concurrent segment search in a separate
138132
# index searcher threadpool.
139133
#

modules/search-pipeline-common/build.gradle

-3
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ restResources {
2828
}
2929
}
3030

31-
testClusters.all {
32-
setting 'opensearch.experimental.feature.search_pipeline.enabled', 'true'
33-
}
3431

3532
thirdPartyAudit.ignoreMissingClasses(
3633
// from log4j

modules/search-pipeline-common/src/internalClusterTest/java/org/opensearch/search/pipeline/common/SearchPipelineCommonIT.java

-7
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import org.opensearch.action.search.SearchResponse;
2020
import org.opensearch.action.support.master.AcknowledgedResponse;
2121
import org.opensearch.common.bytes.BytesArray;
22-
import org.opensearch.common.settings.Settings;
23-
import org.opensearch.common.util.FeatureFlags;
2422
import org.opensearch.common.xcontent.XContentType;
2523
import org.opensearch.index.query.MatchAllQueryBuilder;
2624
import org.opensearch.plugins.Plugin;
@@ -35,11 +33,6 @@
3533
@OpenSearchIntegTestCase.SuiteScopeTestCase
3634
public class SearchPipelineCommonIT extends OpenSearchIntegTestCase {
3735

38-
@Override
39-
protected Settings featureFlagSettings() {
40-
return Settings.builder().put(FeatureFlags.SEARCH_PIPELINE, "true").build();
41-
}
42-
4336
@Override
4437
protected Collection<Class<? extends Plugin>> nodePlugins() {
4538
return List.of(SearchPipelineCommonModulePlugin.class);

qa/smoke-test-multinode/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ File repo = file("$buildDir/testclusters/repo")
4343
testClusters.integTest {
4444
numberOfNodes = 2
4545
setting 'path.repo', repo.absolutePath
46-
setting 'opensearch.experimental.feature.search_pipeline.enabled', 'true'
4746
}
4847

4948
integTest {

rest-api-spec/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ artifacts {
2828

2929
testClusters.all {
3030
module ':modules:mapper-extras'
31-
setting 'opensearch.experimental.feature.search_pipeline.enabled', 'true'
3231
}
3332

3433
test.enabled = false

server/src/main/java/org/opensearch/action/ActionModule.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -946,11 +946,9 @@ public void initRestHandlers(Supplier<DiscoveryNodes> nodesInCluster) {
946946
registerHandler.accept(new RestDeleteDecommissionStateAction());
947947

948948
// Search pipelines API
949-
if (FeatureFlags.isEnabled(FeatureFlags.SEARCH_PIPELINE)) {
950-
registerHandler.accept(new RestPutSearchPipelineAction());
951-
registerHandler.accept(new RestGetSearchPipelineAction());
952-
registerHandler.accept(new RestDeleteSearchPipelineAction());
953-
}
949+
registerHandler.accept(new RestPutSearchPipelineAction());
950+
registerHandler.accept(new RestGetSearchPipelineAction());
951+
registerHandler.accept(new RestDeleteSearchPipelineAction());
954952

955953
// Extensions API
956954
if (FeatureFlags.isEnabled(FeatureFlags.EXTENSIONS)) {

server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ protected FeatureFlagSettings(
3838
FeatureFlags.REMOTE_STORE_SETTING,
3939
FeatureFlags.EXTENSIONS_SETTING,
4040
FeatureFlags.IDENTITY_SETTING,
41-
FeatureFlags.SEARCH_PIPELINE_SETTING,
4241
FeatureFlags.CONCURRENT_SEGMENT_SEARCH_SETTING,
4342
FeatureFlags.TELEMETRY_SETTING
4443
)

server/src/main/java/org/opensearch/common/util/FeatureFlags.java

-8
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,6 @@ public class FeatureFlags {
4646
*/
4747
public static final String EXTENSIONS = "opensearch.experimental.feature.extensions.enabled";
4848

49-
/**
50-
* Gates the search pipeline features during initial development.
51-
* Once the feature is complete and ready for release, this feature flag can be removed.
52-
*/
53-
public static final String SEARCH_PIPELINE = "opensearch.experimental.feature.search_pipeline.enabled";
54-
5549
/**
5650
* Gates the functionality of identity.
5751
*/
@@ -106,8 +100,6 @@ public static boolean isEnabled(String featureFlagName) {
106100

107101
public static final Setting<Boolean> EXTENSIONS_SETTING = Setting.boolSetting(EXTENSIONS, false, Property.NodeScope);
108102

109-
public static final Setting<Boolean> SEARCH_PIPELINE_SETTING = Setting.boolSetting(SEARCH_PIPELINE, true, Property.NodeScope);
110-
111103
public static final Setting<Boolean> IDENTITY_SETTING = Setting.boolSetting(IDENTITY, false, Property.NodeScope);
112104

113105
public static final Setting<Boolean> TELEMETRY_SETTING = Setting.boolSetting(TELEMETRY, false, Property.NodeScope);

server/src/main/java/org/opensearch/index/IndexSettings.java

+1-13
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.opensearch.common.settings.Setting;
4343
import org.opensearch.common.settings.Setting.Property;
4444
import org.opensearch.common.settings.Settings;
45-
import org.opensearch.common.settings.SettingsException;
4645
import org.opensearch.common.unit.ByteSizeUnit;
4746
import org.opensearch.common.unit.ByteSizeValue;
4847
import org.opensearch.common.unit.TimeValue;
@@ -64,7 +63,6 @@
6463
import java.util.function.UnaryOperator;
6564

6665
import static org.opensearch.common.util.FeatureFlags.SEARCHABLE_SNAPSHOT_EXTENDED_COMPATIBILITY;
67-
import static org.opensearch.common.util.FeatureFlags.SEARCH_PIPELINE;
6866
import static org.opensearch.index.mapper.MapperService.INDEX_MAPPING_DEPTH_LIMIT_SETTING;
6967
import static org.opensearch.index.mapper.MapperService.INDEX_MAPPING_FIELD_NAME_LENGTH_LIMIT_SETTING;
7068
import static org.opensearch.index.mapper.MapperService.INDEX_MAPPING_NESTED_DOCS_LIMIT_SETTING;
@@ -1624,16 +1622,6 @@ public String getDefaultSearchPipeline() {
16241622
}
16251623

16261624
public void setDefaultSearchPipeline(String defaultSearchPipeline) {
1627-
if (FeatureFlags.isEnabled(SEARCH_PIPELINE)) {
1628-
this.defaultSearchPipeline = defaultSearchPipeline;
1629-
} else {
1630-
throw new SettingsException(
1631-
"Unable to update setting: "
1632-
+ DEFAULT_SEARCH_PIPELINE.getKey()
1633-
+ ". This is an experimental feature that is currently disabled, please enable the "
1634-
+ SEARCH_PIPELINE
1635-
+ " feature flag first."
1636-
);
1637-
}
1625+
this.defaultSearchPipeline = defaultSearchPipeline;
16381626
}
16391627
}

server/src/main/java/org/opensearch/node/Node.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,6 @@
260260
import java.util.stream.Stream;
261261

262262
import static java.util.stream.Collectors.toList;
263-
import static org.opensearch.common.util.FeatureFlags.SEARCH_PIPELINE;
264263
import static org.opensearch.common.util.FeatureFlags.TELEMETRY;
265264
import static org.opensearch.env.NodeEnvironment.collectFileCacheDataPath;
266265
import static org.opensearch.index.ShardIndexingPressureSettings.SHARD_INDEXING_PRESSURE_ENABLED_ATTRIBUTE_KEY;
@@ -982,8 +981,7 @@ protected Node(
982981
xContentRegistry,
983982
namedWriteableRegistry,
984983
pluginsService.filterPlugins(SearchPipelinePlugin.class),
985-
client,
986-
FeatureFlags.isEnabled(SEARCH_PIPELINE)
984+
client
987985
);
988986
final TaskCancellationMonitoringSettings taskCancellationMonitoringSettings = new TaskCancellationMonitoringSettings(
989987
settings,

server/src/main/java/org/opensearch/search/builder/SearchSourceBuilder.java

+9-11
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.opensearch.Version;
3838
import org.opensearch.common.Booleans;
3939
import org.opensearch.common.Nullable;
40-
import org.opensearch.common.util.FeatureFlags;
4140
import org.opensearch.common.ParsingException;
4241
import org.opensearch.common.io.stream.StreamInput;
4342
import org.opensearch.common.io.stream.StreamOutput;
@@ -1267,16 +1266,15 @@ public void parseXContent(XContentParser parser, boolean checkTrailingTokens) th
12671266
collapse = CollapseBuilder.fromXContent(parser);
12681267
} else if (POINT_IN_TIME.match(currentFieldName, parser.getDeprecationHandler())) {
12691268
pointInTimeBuilder = PointInTimeBuilder.fromXContent(parser);
1270-
} else if (FeatureFlags.isEnabled(FeatureFlags.SEARCH_PIPELINE)
1271-
&& SEARCH_PIPELINE.match(currentFieldName, parser.getDeprecationHandler())) {
1272-
searchPipelineSource = parser.mapOrdered();
1273-
} else {
1274-
throw new ParsingException(
1275-
parser.getTokenLocation(),
1276-
"Unknown key for a " + token + " in [" + currentFieldName + "].",
1277-
parser.getTokenLocation()
1278-
);
1279-
}
1269+
} else if (SEARCH_PIPELINE.match(currentFieldName, parser.getDeprecationHandler())) {
1270+
searchPipelineSource = parser.mapOrdered();
1271+
} else {
1272+
throw new ParsingException(
1273+
parser.getTokenLocation(),
1274+
"Unknown key for a " + token + " in [" + currentFieldName + "].",
1275+
parser.getTokenLocation()
1276+
);
1277+
}
12801278
} else if (token == XContentParser.Token.START_ARRAY) {
12811279
if (STORED_FIELDS_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
12821280
storedFieldsContext = StoredFieldsContext.fromXContent(STORED_FIELDS_FIELD.getPreferredName(), parser);

server/src/main/java/org/opensearch/search/pipeline/SearchPipelineService.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ public class SearchPipelineService implements ClusterStateApplier, ReportingServ
8585
private final OperationMetrics totalRequestProcessingMetrics = new OperationMetrics();
8686
private final OperationMetrics totalResponseProcessingMetrics = new OperationMetrics();
8787

88-
private final boolean isEnabled;
89-
9088
public SearchPipelineService(
9189
ClusterService clusterService,
9290
ThreadPool threadPool,
@@ -96,8 +94,7 @@ public SearchPipelineService(
9694
NamedXContentRegistry namedXContentRegistry,
9795
NamedWriteableRegistry namedWriteableRegistry,
9896
List<SearchPipelinePlugin> searchPipelinePlugins,
99-
Client client,
100-
boolean isEnabled
97+
Client client
10198
) {
10299
this.clusterService = clusterService;
103100
this.scriptService = scriptService;
@@ -123,7 +120,6 @@ public SearchPipelineService(
123120
);
124121
putPipelineTaskKey = clusterService.registerClusterManagerTask(ClusterManagerTaskKeys.PUT_SEARCH_PIPELINE_KEY, true);
125122
deletePipelineTaskKey = clusterService.registerClusterManagerTask(ClusterManagerTaskKeys.DELETE_SEARCH_PIPELINE_KEY, true);
126-
this.isEnabled = isEnabled;
127123
}
128124

129125
private static <T extends Processor> Map<String, Processor.Factory<T>> processorFactories(
@@ -233,10 +229,6 @@ public void putPipeline(
233229
PutSearchPipelineRequest request,
234230
ActionListener<AcknowledgedResponse> listener
235231
) throws Exception {
236-
if (isEnabled == false) {
237-
throw new IllegalArgumentException("Experimental search pipeline feature is not enabled");
238-
}
239-
240232
validatePipeline(searchPipelineInfos, request);
241233
clusterService.submitStateUpdateTask(
242234
"put-search-pipeline-" + request.getId(),
@@ -371,9 +363,6 @@ static ClusterState innerDelete(DeleteSearchPipelineRequest request, ClusterStat
371363
public PipelinedRequest resolvePipeline(SearchRequest searchRequest) {
372364
Pipeline pipeline = Pipeline.NO_OP_PIPELINE;
373365

374-
if (isEnabled == false) {
375-
return new PipelinedRequest(pipeline, searchRequest);
376-
}
377366
if (searchRequest.source() != null && searchRequest.source().searchPipelineSource() != null) {
378367
// Pipeline defined in search request (ad hoc pipeline).
379368
if (searchRequest.pipeline() != null) {
@@ -401,7 +390,7 @@ public PipelinedRequest resolvePipeline(SearchRequest searchRequest) {
401390
if (searchRequest.pipeline() != null) {
402391
// Named pipeline specified for the request
403392
pipelineId = searchRequest.pipeline();
404-
} else if (searchRequest.indices() != null && searchRequest.indices().length == 1) {
393+
} else if (state != null && searchRequest.indices() != null && searchRequest.indices().length == 1) {
405394
// Check for index default pipeline
406395
IndexMetadata indexMetadata = state.metadata().index(searchRequest.indices()[0]);
407396
if (indexMetadata != null) {

server/src/test/java/org/opensearch/index/IndexSettingsTests.java

-19
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.opensearch.common.settings.Setting;
4141
import org.opensearch.common.settings.Setting.Property;
4242
import org.opensearch.common.settings.Settings;
43-
import org.opensearch.common.settings.SettingsException;
4443
import org.opensearch.common.unit.ByteSizeValue;
4544
import org.opensearch.common.unit.TimeValue;
4645
import org.opensearch.common.util.FeatureFlags;
@@ -1110,7 +1109,6 @@ public void testExtendedCompatibilityVersionWithoutFeatureFlag() {
11101109

11111110
@SuppressForbidden(reason = "sets the SEARCH_PIPELINE feature flag")
11121111
public void testDefaultSearchPipeline() throws Exception {
1113-
FeatureFlagSetter.set(FeatureFlags.SEARCH_PIPELINE);
11141112
IndexMetadata metadata = newIndexMeta(
11151113
"index",
11161114
Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT).build()
@@ -1127,21 +1125,4 @@ public void testDefaultSearchPipeline() throws Exception {
11271125
settings.updateIndexMetadata(metadata);
11281126
assertEquals("foo", settings.getDefaultSearchPipeline());
11291127
}
1130-
1131-
public void testDefaultSearchPipelineWithoutFeatureFlag() {
1132-
IndexMetadata metadata = newIndexMeta(
1133-
"index",
1134-
Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT).build()
1135-
);
1136-
IndexSettings settings = new IndexSettings(metadata, Settings.EMPTY);
1137-
assertEquals(SearchPipelineService.NOOP_PIPELINE_ID, settings.getDefaultSearchPipeline());
1138-
IndexMetadata updatedMetadata = newIndexMeta(
1139-
"index",
1140-
Settings.builder()
1141-
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
1142-
.put(IndexSettings.DEFAULT_SEARCH_PIPELINE.getKey(), "foo")
1143-
.build()
1144-
);
1145-
assertThrows(SettingsException.class, () -> settings.updateIndexMetadata(updatedMetadata));
1146-
}
11471128
}

server/src/test/java/org/opensearch/search/pipeline/SearchPipelineServiceTests.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ public void testSearchPipelinePlugin() {
112112
this.xContentRegistry(),
113113
this.writableRegistry(),
114114
List.of(DUMMY_PLUGIN),
115-
client,
116-
false
115+
client
117116
);
118117
Map<String, Processor.Factory<SearchRequestProcessor>> requestProcessorFactories = searchPipelineService
119118
.getRequestProcessorFactories();
@@ -138,8 +137,7 @@ public void testSearchPipelinePluginDuplicate() {
138137
this.xContentRegistry(),
139138
this.writableRegistry(),
140139
List.of(DUMMY_PLUGIN, DUMMY_PLUGIN),
141-
client,
142-
false
140+
client
143141
)
144142
);
145143
assertTrue(e.getMessage(), e.getMessage().contains(" already registered"));
@@ -156,8 +154,7 @@ public void testResolveSearchPipelineDoesNotExist() {
156154
this.xContentRegistry(),
157155
this.writableRegistry(),
158156
List.of(DUMMY_PLUGIN),
159-
client,
160-
true
157+
client
161158
);
162159
final SearchRequest searchRequest = new SearchRequest("_index").pipeline("bar");
163160
IllegalArgumentException e = expectThrows(
@@ -386,8 +383,7 @@ public Map<String, Processor.Factory<SearchPhaseResultsProcessor>> getSearchPhas
386383
}
387384

388385
}),
389-
client,
390-
true
386+
client
391387
);
392388
}
393389

server/src/test/java/org/opensearch/snapshots/SnapshotResiliencyTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -2063,8 +2063,7 @@ public void onFailure(final Exception e) {
20632063
namedXContentRegistry,
20642064
namedWriteableRegistry,
20652065
List.of(),
2066-
client,
2067-
false
2066+
client
20682067
)
20692068
)
20702069
);

test/framework/src/main/java/org/opensearch/search/RandomSearchRequestGenerator.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.opensearch.common.bytes.BytesReference;
3939
import org.opensearch.common.text.Text;
4040
import org.opensearch.common.unit.TimeValue;
41-
import org.opensearch.common.util.FeatureFlags;
4241
import org.opensearch.core.xcontent.DeprecationHandler;
4342
import org.opensearch.core.xcontent.NamedXContentRegistry;
4443
import org.opensearch.core.xcontent.XContentBuilder;
@@ -406,7 +405,7 @@ public static SearchSourceBuilder randomSearchSourceBuilder(
406405
}
407406
builder.pointInTimeBuilder(pit);
408407
}
409-
if (FeatureFlags.isEnabled(FeatureFlags.SEARCH_PIPELINE) && randomBoolean()) {
408+
if (randomBoolean()) {
410409
builder.searchPipelineSource(new HashMap<>());
411410
}
412411
return builder;

0 commit comments

Comments
 (0)