Skip to content

Commit d161640

Browse files
committed
Remove singleton pattern breakage and mark as experimental
Signed-off-by: Atri Sharma <atri.jiit@gmail.com>
1 parent ef766f7 commit d161640

File tree

4 files changed

+25
-32
lines changed

4 files changed

+25
-32
lines changed

server/src/main/java/org/opensearch/search/SearchService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ public SearchService(
532532

533533
// Initialize QueryRewriterRegistry with cluster settings so TermsMergingRewriter
534534
// can register its settings update consumer
535-
QueryRewriterRegistry.initialize(settings, clusterService.getClusterSettings());
535+
QueryRewriterRegistry.INSTANCE.initialize(settings, clusterService.getClusterSettings());
536536
}
537537

538538
private void validateKeepAlives(TimeValue defaultKeepAlive, TimeValue maxKeepAlive) {
@@ -1517,7 +1517,7 @@ private void parseSource(DefaultSearchContext context, SearchSourceBuilder sourc
15171517
QueryBuilder query = source.query();
15181518

15191519
// Apply query rewriting optimizations
1520-
query = QueryRewriterRegistry.rewrite(query, queryShardContext);
1520+
query = QueryRewriterRegistry.INSTANCE.rewrite(query, queryShardContext);
15211521

15221522
InnerHitContextBuilder.extractInnerHits(query, innerHitBuilders);
15231523
context.parsedQuery(queryShardContext.toQuery(query));

server/src/main/java/org/opensearch/search/query/QueryRewriter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88

99
package org.opensearch.search.query;
1010

11+
import org.opensearch.common.annotation.ExperimentalApi;
1112
import org.opensearch.index.query.QueryBuilder;
1213
import org.opensearch.index.query.QueryShardContext;
1314

1415
/**
1516
* Interface for query rewriting implementations that optimize query structure
1617
* before conversion to Lucene queries.
1718
*
18-
* @opensearch.internal
19+
* @opensearch.experimental
1920
*/
21+
@ExperimentalApi
2022
public interface QueryRewriter {
2123

2224
/**

server/src/main/java/org/opensearch/search/query/QueryRewriterRegistry.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public final class QueryRewriterRegistry {
3535

3636
private static final Logger logger = LogManager.getLogger(QueryRewriterRegistry.class);
3737

38-
private static final QueryRewriterRegistry INSTANCE = new QueryRewriterRegistry();
38+
public static final QueryRewriterRegistry INSTANCE = new QueryRewriterRegistry();
3939

4040
/**
4141
* Default rewriters.
@@ -59,13 +59,6 @@ private QueryRewriterRegistry() {
5959
registerRewriter(TermsMergingRewriter.INSTANCE);
6060
}
6161

62-
/**
63-
* Get the singleton instance of the registry.
64-
*/
65-
public static QueryRewriterRegistry getInstance() {
66-
return INSTANCE;
67-
}
68-
6962
/**
7063
* Register a custom query rewriter.
7164
*
@@ -86,23 +79,21 @@ public void registerRewriter(QueryRewriter rewriter) {
8679
* @param settings Initial cluster settings
8780
* @param clusterSettings Cluster settings for registering update consumers
8881
*/
89-
public static void initialize(Settings settings, ClusterSettings clusterSettings) {
90-
QueryRewriterRegistry instance = getInstance();
82+
public void initialize(Settings settings, ClusterSettings clusterSettings) {
9183
TermsMergingRewriter.INSTANCE.initialize(settings, clusterSettings);
92-
instance.enabled = SearchService.QUERY_REWRITING_ENABLED_SETTING.get(settings);
84+
this.enabled = SearchService.QUERY_REWRITING_ENABLED_SETTING.get(settings);
9385
clusterSettings.addSettingsUpdateConsumer(
9486
SearchService.QUERY_REWRITING_ENABLED_SETTING,
95-
(Boolean enabled) -> instance.enabled = enabled
87+
(Boolean enabled) -> this.enabled = enabled
9688
);
9789
}
9890

99-
public static QueryBuilder rewrite(QueryBuilder query, QueryShardContext context) {
100-
QueryRewriterRegistry registry = getInstance();
101-
if (!registry.enabled || query == null) {
91+
public QueryBuilder rewrite(QueryBuilder query, QueryShardContext context) {
92+
if (!enabled || query == null) {
10293
return query;
10394
}
10495

105-
List<QueryRewriter> sortedRewriters = new ArrayList<>(registry.rewriters);
96+
List<QueryRewriter> sortedRewriters = new ArrayList<>(rewriters);
10697
sortedRewriters.sort(Comparator.comparingInt(QueryRewriter::priority));
10798

10899
QueryBuilder current = query;

server/src/test/java/org/opensearch/search/query/QueryRewriterRegistryTests.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void setUp() throws Exception {
3737
.put(SearchService.QUERY_REWRITING_TERMS_THRESHOLD_SETTING.getKey(), 16)
3838
.build();
3939
ClusterSettings clusterSettings = new ClusterSettings(settings, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS);
40-
QueryRewriterRegistry.initialize(settings, clusterSettings);
40+
QueryRewriterRegistry.INSTANCE.initialize(settings, clusterSettings);
4141
}
4242

4343
public void testCompleteRewritingPipeline() {
@@ -53,7 +53,7 @@ public void testCompleteRewritingPipeline() {
5353
.filter(QueryBuilders.termQuery("type", "product"))
5454
.filter(QueryBuilders.termQuery("type", "service"));
5555

56-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
56+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
5757
assertThat(rewritten, instanceOf(BoolQueryBuilder.class));
5858
BoolQueryBuilder rewrittenBool = (BoolQueryBuilder) rewritten;
5959

@@ -76,26 +76,26 @@ public void testDisabledRewriting() {
7676
ClusterSettings clusterSettings = new ClusterSettings(settings, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS);
7777

7878
// Initialize with disabled setting
79-
QueryRewriterRegistry.initialize(settings, clusterSettings);
79+
QueryRewriterRegistry.INSTANCE.initialize(settings, clusterSettings);
8080

8181
QueryBuilder query = QueryBuilders.boolQuery()
8282
.must(QueryBuilders.matchAllQuery())
8383
.filter(QueryBuilders.termQuery("field", "value"));
8484

85-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
85+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
8686
assertSame(query, rewritten);
8787

8888
// Enable via settings update
8989
clusterSettings.applySettings(Settings.builder().put(SearchService.QUERY_REWRITING_ENABLED_SETTING.getKey(), true).build());
9090

9191
// Now it should rewrite
92-
QueryBuilder rewritten2 = QueryRewriterRegistry.rewrite(query, context);
92+
QueryBuilder rewritten2 = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
9393
assertNotSame(query, rewritten2);
9494
}
9595

9696
public void testNullQuery() {
9797
// Null query should return null
98-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(null, context);
98+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(null, context);
9999
assertNull(rewritten);
100100
}
101101

@@ -110,7 +110,7 @@ public void testRewriterPriorityOrder() {
110110
.must(QueryBuilders.termQuery("field", "value2"))
111111
);
112112

113-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(deeplyNested, context);
113+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(deeplyNested, context);
114114
assertThat(rewritten, instanceOf(BoolQueryBuilder.class));
115115
BoolQueryBuilder rewrittenBool = (BoolQueryBuilder) rewritten;
116116

@@ -141,7 +141,7 @@ public void testComplexRealWorldQuery() {
141141
.must(QueryBuilders.rangeQuery("price").gte(500).lte(2000))
142142
.mustNot(QueryBuilders.termQuery("status", "discontinued"));
143143

144-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
144+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
145145
assertThat(rewritten, instanceOf(BoolQueryBuilder.class));
146146
BoolQueryBuilder rewrittenBool = (BoolQueryBuilder) rewritten;
147147

@@ -183,7 +183,7 @@ public void testPerformanceMetrics() {
183183
.filter(QueryBuilders.matchAllQuery());
184184

185185
// Should not throw any exceptions
186-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
186+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
187187
assertNotNull(rewritten);
188188
}
189189

@@ -195,7 +195,7 @@ public void testRewriterErrorHandling() {
195195
.filter(QueryBuilders.matchAllQuery());
196196

197197
// Even if one rewriter fails, others should still be applied
198-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
198+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
199199
assertNotNull(rewritten);
200200
}
201201

@@ -230,7 +230,7 @@ public void testVeryComplexMixedQuery() {
230230
.mustNot(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("archived", "true")))
231231
.minimumShouldMatch(1);
232232

233-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
233+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
234234
assertThat(rewritten, instanceOf(BoolQueryBuilder.class));
235235
BoolQueryBuilder result = (BoolQueryBuilder) rewritten;
236236

@@ -307,14 +307,14 @@ public String name() {
307307
};
308308

309309
// Register the custom rewriter
310-
QueryRewriterRegistry.getInstance().registerRewriter(customRewriter);
310+
QueryRewriterRegistry.INSTANCE.registerRewriter(customRewriter);
311311

312312
// Test that it's applied
313313
QueryBuilder query = QueryBuilders.boolQuery()
314314
.must(QueryBuilders.termQuery("test_field", "test_value"))
315315
.filter(QueryBuilders.termQuery("other_field", "other_value"));
316316

317-
QueryBuilder rewritten = QueryRewriterRegistry.rewrite(query, context);
317+
QueryBuilder rewritten = QueryRewriterRegistry.INSTANCE.rewrite(query, context);
318318
assertThat(rewritten, instanceOf(BoolQueryBuilder.class));
319319
BoolQueryBuilder rewrittenBool = (BoolQueryBuilder) rewritten;
320320

0 commit comments

Comments
 (0)